Add a user to the server and append the user to the sudo group. You can verify the user is in the sudo  group using id <username> command.
adduser <username>
usrmod -aG sudo <username>Install Ngxin MySql PHP and necessary extensions for Laravel.
sudo apt update
sudo apt install php7.4-common php7.4-bcmath openssl php7.4-json php7.4-mbstring php7.4-fpm php7.4-xml php7.4-mysql nginx curl zip unzip vim mysql-serverInstall composer
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composerStart the Nginx PHP-FPM and MySql services.
systemctl start nginx && systemctl enable nginx
systemctl start mysql && systemctl enable mysql
systemctl start php7.4-fpm && systemctl enable php7.4-fpmConfigure MySql.
su - root
mysql_secure_installationAdd a non-root user and grant all permissions for a specific database.
CREATE USER dbuser@localhost IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON <dbname>. * TO 'dbuser'@'localhost';
FLUSH PRIVILEGES;Deploying the application and set proper permissions.
git clone <git-project-url>
cd <project>
sudo chown -R $USER:www-data .
sudo find . -type f -exec chmod 664 {} \;   
sudo find . -type d -exec chmod 775 {} \;
sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cacheCopy the .env file and update the necessary files like database and mail config. In your production environment, APP_DEBUG value should always be false. If the APP_DEBUG variable is set to true in production, you risk exposing sensitive configuration values to your application's end users.
cp .env.example .env
composer install --optimize-autoloader --no-dev
php artisan key:generateConfigure Nginx for pointing to Laravel app directory. For simplicity we will update the default config file.
sudo vim /etc/nginx/sites-enabled/defaultNginx Config
server {
    listen 80;
    server_name example.com;
    root /path/to/project/public;
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";
    index index.php;
    charset utf-8;
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }
    error_page 404 /index.php;
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }
    location ~ /\.(?!well-known).* {
        deny all;
    }
}
Verify configuration and syntax for nginx.
nginx -tRestart nginx.
systemctl restart nginxOptimizing Configuration Route and View Loading.
php artisan config:cache
php artisan route:cache
php artisan view:cache
Latest laravel application deployment with latest PHP 8.3
Here is the reference https://www.programmingmindset.com/post/deploy-laravel-application-using-nginx-php-mysql-lemp-stack-setup-in-ubuntu