Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| deploy_laravel_application_on_a_linux_vds [2025/05/13 07:05] – [Safer & More Standard Approach] kkaragoz | deploy_laravel_application_on_a_linux_vds [2025/05/13 07:48] (current) – kkaragoz | ||
|---|---|---|---|
| Line 95: | Line 95: | ||
| </ | </ | ||
| ===== 3- Bind a Domain ===== | ===== 3- Bind a Domain ===== | ||
| - | Connect a domain to a server can be done by simply changing the DNS records of the domain. Lets assume the VDS server' | + | Connect a domain to a server can be done by simply changing the DNS records of the domain. You will typically manage these records through your **domain registrar' |
| + | |||
| + | Here is an example DNS record table you might configure: | ||
| ^ Type ^ Name ^ Content | ^ Type ^ Name ^ Content | ||
| Line 103: | Line 105: | ||
| | AAAA | @ | Public IPv6 | Auto | | | AAAA | @ | Public IPv6 | Auto | | ||
| - | | + | |
| - | | + | |
| - | | + | * '' |
| - | | + | |
| - | | + | |
| + | * '' | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | You don't have to add explicit records for every single subdomain if you use the '' | ||
| - | {{ :screenshot_20250512_121756.png?400 |}} | + | **DNS Propagation:** After saving your DNS changes, it can take some time for these updates to propagate across the internet' |
| - | You don't have to add record of the subdomain like sub1, sub2, sub3, etc. When you add '*' symbol and create a record, it represent all subdomains that you will create. | + | Once these DNS records are pointing |
| ===== 4- Nginx Installation & Configuration ===== | ===== 4- Nginx Installation & Configuration ===== | ||
| [[https:// | [[https:// | ||
| Line 238: | Line 245: | ||
| ===== 5- SSL Certification: | ===== 5- SSL Certification: | ||
| - | It is time to apply SSL certificates | + | It is essential |
| + | |||
| + | You mentioned using " | ||
| + | |||
| + | To install | ||
| <code bash> | <code bash> | ||
| sudo apt update && sudo apt upgrade | sudo apt update && sudo apt upgrade | ||
| </ | </ | ||
| - | We are ready to install | + | Now we are ready to install Certbot: |
| <code bash> | <code bash> | ||
| sudo apt install certbot python3-certbot-nginx | sudo apt install certbot python3-certbot-nginx | ||
| </ | </ | ||
| - | After installation is completed, | + | After installation is completed, |
| <code bash> | <code bash> | ||
| - | cd / | + | sudo certbot |
| </ | </ | ||
| + | When you run this command, Certbot will: | ||
| + | * Prompt you for an email address for urgent renewal or security notices. | ||
| + | * Ask you to agree to the terms of service. | ||
| + | * Scan your Nginx configuration files for '' | ||
| + | * Present a list of identified domains and ask you to select which ones you want certificates for. | ||
| + | * Communicate with the Let's Encrypt servers to verify domain ownership (usually by serving a temporary file through your web server). | ||
| + | * If successful, it will obtain the SSL certificates. | ||
| + | * **Automatically modify** your Nginx configuration file(s) in '' | ||
| + | * Add the '' | ||
| + | * Point to the correct '' | ||
| + | * (Optionally) Ask if you want to redirect HTTP traffic (port 80) to HTTPS (port 443). It is highly recommended to choose the redirect option for better security and SEO. | ||
| + | * **Automatically set up a renewal mechanism** (usually a systemd timer or cron job) that will attempt to renew your certificates before they expire (Let's Encrypt certificates are valid for 90 days). | ||
| - | Then run the following command for automatic SSL certificate | + | After Certbot completes its process |
| <code bash> | <code bash> | ||
| - | sudo certbot | + | sudo nginx -t # Test Nginx configuration for syntax errors |
| - | </ | + | sudo systemctl reload nginx # Reload Nginx to apply changes |
| - | Enter the related fields like email, confirm terms, select domains, etc. Then Certbot will notify about the certification status. If it's done, you can reload the nginx again. | + | |
| - | <code bash> | + | |
| - | sudo systemctl reload nginx | + | |
| </ | </ | ||
| + | You can verify that SSL is working by visiting your domain(s) in a web browser and checking for the padlock icon in the address bar and ensuring the URL starts with '' | ||
| + | |||
| + | **Important: | ||
| ===== 6- PHP Installation ===== | ===== 6- PHP Installation ===== | ||
| Let's proceed to uninstall the currently installed PHP packages and then install a specific version (like PHP 8.2) cleanly using the Ondřej Surý PPA, which is the recommended way for up-to-date PHP versions on Ubuntu/ | Let's proceed to uninstall the currently installed PHP packages and then install a specific version (like PHP 8.2) cleanly using the Ondřej Surý PPA, which is the recommended way for up-to-date PHP versions on Ubuntu/ | ||
| Line 513: | Line 537: | ||
| </ | </ | ||
| - | Using chmod -R 0777 is indeed a significant security risk because it grants full read, write, and execute permissions to all users on the system for those directories and everything within them. This means if any other user account on your server were compromised, | + | Using '' |
| - | ==== Safer & More Standard Approach ==== | + | ==== Laravel - Safer & More Standard Approach ==== |
| The goal is to grant write permissions only to the specific user or group that the web server (Nginx/ | The goal is to grant write permissions only to the specific user or group that the web server (Nginx/ | ||
| Line 573: | Line 597: | ||
| sudo chmod g+s / | sudo chmod g+s / | ||
| </ | </ | ||
| + | |||
| + | ==== Static App - Appropriate Permissions ==== | ||
| + | Generally do not need to set the same 775 group write permissions or change the group ownership to www-data for your static application' | ||
| + | |||
| + | The goal for static assets is to allow the web server (www-data user) to read and execute/ | ||
| + | |||
| + | A standard and safe permission set for static web content folders is: | ||
| + | |||
| + | **Ownership**: | ||
| + | |||
| + | <code bash> | ||
| + | sudo chown -R vicky:vicky / | ||
| + | </ | ||
| + | |||
| + | **Permissions**: | ||
| + | * Directories: | ||
| + | * Files: 644 (Owner: Read, Write; Group: Read; Others: Read). This allows the owner (vicky) to read and modify the files and allows the web server user (www-data) to read the files. | ||
| + | |||
| + | You can set these permissions recursively: | ||
| + | |||
| + | <code bash> | ||
| + | # Ensure ownership is correct | ||
| + | sudo chown -R vicky:vicky / | ||
| + | |||
| + | # Set directory permissions to 755 | ||
| + | sudo find / | ||
| + | |||
| + | # Set file permissions to 644 | ||
| + | sudo find / | ||
| + | </ | ||
| + | |||
| + | A slightly simpler, though less precise, common alternative for static sites is just: | ||
| + | |||
| + | <code bash> | ||
| + | # Ensure ownership is correct | ||
| + | sudo chown -R vicky:vicky / | ||
| + | |||
| + | # Set recursive permissions to 755 (grants execute to files, which is harmless for static assets) | ||
| + | sudo chmod -R 755 / | ||
| + | </ | ||
| + | |||
| ===== 11- Setup the Application ===== | ===== 11- Setup the Application ===== | ||
| Line 587: | Line 652: | ||
| php artisan migrate | php artisan migrate | ||
| </ | </ | ||
| - | |||
