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!