Đang tải...

Cài đặt VPS Ubuntu 22.04 và triển khai Laravel với Nginx

code
ảnh thumbnail bài viết

Giới thiệu

Trong bài viết này, chúng ta sẽ tìm hiểu cách cài đặt và cấu hình một VPS Ubuntu 22.04 với web server Nginx và PHP 8.3, sau đó triển khai một dự án Laravel cơ bản. Nginx được biết đến với hiệu suất cao và khả năng xử lý đồng thời tốt, rất phù hợp cho các ứng dụng Laravel.

Yêu cầu hệ thống

  • VPS Ubuntu 22.04 LTS
  • Quyền truy cập root hoặc sudo
  • Kết nối internet ổn định
  • Kiến thức cơ bản về Linux command line

Bước 1: Cập nhật hệ thống

Đầu tiên, chúng ta cần cập nhật hệ thống để đảm bảo có phiên bản mới nhất của các gói phần mềm:

sudo apt update && sudo apt upgrade -y

Bước 2: Cài đặt Nginx Web Server

Cài đặt Nginx:

sudo apt install nginx -y

Khởi động và cho phép Nginx tự động chạy khi khởi động:

sudo systemctl start nginx
sudo systemctl enable nginx

Kiểm tra trạng thái Nginx:

sudo systemctl status nginx

Bước 3: Cài đặt MySQL Database

Cài đặt MySQL server:

sudo apt install mysql-server -y

Chạy script bảo mật MySQL:

sudo mysql_secure_installation

Tạo database và user cho Laravel:

sudo mysql -u root -p

Trong MySQL console, chạy các lệnh sau:

CREATE DATABASE laravel_db;
CREATE USER 'laravel_user'@'localhost' IDENTIFIED BY 'password_manh';
GRANT ALL PRIVILEGES ON laravel_db.* TO 'laravel_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Bước 4: Cài đặt PHP 8.3 và các extension cần thiết

Thêm repository PHP 8.3:

sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update

Cài đặt PHP 8.3 và các extension cần thiết cho Laravel:

sudo apt install php8.3 php8.3-fpm php8.3-cli php8.3-common php8.3-mysql php8.3-zip php8.3-gd php8.3-mbstring php8.3-curl php8.3-xml php8.3-bcmath php8.3-json php8.3-tokenizer php8.3-intl php8.3-redis -y

Khởi động và kích hoạt PHP-FPM:

sudo systemctl start php8.3-fpm
sudo systemctl enable php8.3-fpm

Kiểm tra trạng thái PHP-FPM:

sudo systemctl status php8.3-fpm

Bước 5: Cài đặt Composer

Composer là dependency manager cho PHP, cần thiết để quản lý các thư viện Laravel:

curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
sudo chmod +x /usr/local/bin/composer

Kiểm tra cài đặt Composer:

composer --version

Bước 6: Cài đặt Node.js và npm (tùy chọn)

Nếu dự án có sử dụng asset compilation:

curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install nodejs -y

Bước 7: Tạo dự án Laravel

Di chuyển đến thư mục web root và tạo dự án Laravel:

cd /var/www
sudo composer create-project laravel/laravel laravel-app

Bước 8: Cấu hình quyền truy cập

Thiết lập quyền sở hữu và permission cho thư mục Laravel:

sudo chown -R www-data:www-data /var/www/laravel-app
sudo chmod -R 755 /var/www/laravel-app
sudo chmod -R 775 /var/www/laravel-app/storage
sudo chmod -R 775 /var/www/laravel-app/bootstrap/cache

Bước 9: Cấu hình Laravel

Sao chép file environment và cấu hình:

cd /var/www/laravel-app
sudo cp .env.example .env

Chỉnh sửa file .env:

sudo nano .env

Cập nhật thông tin database:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_db
DB_USERNAME=laravel_user
DB_PASSWORD=password_manh

Tạo application key:

sudo php artisan key:generate

Bước 10: Cấu hình Nginx Server Block

Tạo file cấu hình Nginx cho Laravel:

sudo nano /etc/nginx/sites-available/laravel

Thêm nội dung sau vào file:

server {
    listen 80;
    listen [::]:80;
server_name your-domain.com www.your-domain.com;
root /var/www/laravel-app/public;
index index.php index.html index.htm;

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
    include fastcgi_params;
}

location ~ /\.ht {
    deny all;
}

location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
    expires 1y;
    add_header Cache-Control "public, immutable";
}

# Gzip compression
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_proxied expired no-cache no-store private must-revalidate auth;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

# Security headers
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;

access_log /var/log/nginx/laravel_access.log;
error_log /var/log/nginx/laravel_error.log;

}

Kích hoạt site và restart Nginx:

sudo ln -s /etc/nginx/sites-available/laravel /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Bước 11: Chạy migration

Chạy migration để tạo các bảng cơ bản:

sudo php artisan migrate

Bước 12: Cấu hình PHP-FPM tối ưu

Chỉnh sửa file cấu hình PHP-FPM:

sudo nano /etc/php/8.3/fpm/pool.d/www.conf

Tìm và chỉnh sửa các dòng sau:

; Tăng số worker processes
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35

Chỉnh sửa file php.ini:

sudo nano /etc/php/8.3/fpm/php.ini

Tìm và chỉnh sửa các dòng sau:

memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
max_input_vars = 3000

Restart PHP-FPM:

sudo systemctl restart php8.3-fpm

Bước 13: Cấu hình Firewall

Cấu hình UFW firewall để bảo mật server:

sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable

Bước 14: Kiểm tra kết quả

Truy cập vào địa chỉ IP server hoặc domain name của bạn để kiểm tra Laravel đã hoạt động:

http://your-server-ip

Bạn sẽ thấy trang chào mừng mặc định của Laravel.

Tối ưu hóa và bảo mật

Cấu hình SSL với Let's Encrypt

Cài đặt Certbot:

sudo apt install certbot python3-certbot-nginx -y

Lấy SSL certificate:

sudo certbot --nginx -d your-domain.com -d www.your-domain.com

Cấu hình cache Laravel

sudo php artisan config:cache
sudo php artisan route:cache
sudo php artisan view:cache

Cài đặt Redis cho cache và session

sudo apt install redis-server -y
sudo systemctl start redis-server
sudo systemctl enable redis-server

Cấu hình Laravel sử dụng Redis trong file .env:

CACHE_DRIVER=redis
SESSION_DRIVER=redis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

Script backup tự động

Tạo script backup database:

sudo nano /home/backup-db.sh
#!/bin/bash
DATE=$(date +"%Y%m%d_%H%M%S")
mysqldump -u laravel_user -p'password_manh' laravel_db > /home/backups/laravel_db_$DATE.sql

Tạo cronjob cho backup hàng ngày:

sudo crontab -e

Thêm dòng:

0 2 * * * /home/backup-db.sh

Monitoring và Log

Cấu hình log rotation

sudo nano /etc/logrotate.d/laravel
/var/www/laravel-app/storage/logs/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data www-data
    sharedscripts
}

Kiểm tra performance

Kiểm tra trạng thái các service:

sudo systemctl status nginx php8.3-fpm mysql redis-server

Kiểm tra memory usage:

free -h

Troubleshooting

Lỗi 502 Bad Gateway

Kiểm tra PHP-FPM đang chạy:

sudo systemctl status php8.3-fpm
sudo systemctl restart php8.3-fpm

Lỗi permission denied

sudo chown -R www-data:www-data /var/www/laravel-app
sudo chmod -R 755 /var/www/laravel-app
sudo chmod -R 775 /var/www/laravel-app/storage
sudo chmod -R 775 /var/www/laravel-app/bootstrap/cache

Lỗi database connection

Kiểm tra thông tin database trong file .env và đảm bảo MySQL đang chạy:

sudo systemctl status mysql

Kiểm tra Nginx error log

sudo tail -f /var/log/nginx/laravel_error.log

Kiểm tra PHP error log

sudo tail -f /var/log/php8.3-fpm.log

Kết luận

Bài viết đã hướng dẫn chi tiết cách cài đặt VPS Ubuntu 22.04 với môi trường LEMP (Linux, Nginx, MySQL, PHP 8.3) và triển khai dự án Laravel cơ bản. Nginx cung cấp hiệu suất cao và khả năng mở rộng tốt, kết hợp với PHP 8.3 mang lại performance tuyệt vời cho ứng dụng Laravel.

Với những bước trên, bạn đã có một server web hiệu suất cao để phát triển và triển khai ứng dụng Laravel. Hãy nhớ thường xuyên cập nhật hệ thống, monitoring performance và backup dữ liệu để đảm bảo tính ổn định và bảo mật cho server của bạn.

Chúc bạn triển khai thành công!