Triển Khai Portfolio Laravel lên AWS EC2: Hướng Dẫn Chi Tiết
Giới Thiệu
Trong thời đại công nghệ 4.0, việc triển khai ứng dụng web một cách hiệu quả và chuyên nghiệp là vô cùng quan trọng. AWS EC2 không chỉ cung cấp khả năng kiểm soát toàn bộ máy chủ mà còn cho phép bạn mở rộng dự án dễ dàng. Bài viết này sẽ hướng dẫn bạn từng bước để triển khai một portfolio Laravel lên AWS EC2.
Tại Sao Chọn AWS EC2 Thay Vì Hosting Chia Sẻ?
- Kiểm soát toàn bộ máy chủ: Bạn có thể tùy chỉnh cấu hình máy chủ theo nhu cầu.
- Khả năng mở rộng: Dễ dàng nâng cấp khi dự án của bạn phát triển.
- Độ tin cậy chuyên nghiệp: Tạo ấn tượng tốt với khách hàng.
- Học hỏi về hạ tầng đám mây: Cải thiện kỹ năng về quản lý đám mây.
Công Nghệ Sử Dụng
- Backend: Laravel 12
- Frontend: Tailwind CSS
- Máy chủ: Ubuntu 22.04 trên AWS EC2 t2.micro
- Web Server: Nginx
- Cơ sở dữ liệu: SQLite (hoàn hảo cho portfolio)
- SSL: Let's Encrypt (miễn phí)
Bước Triển Khai Từng Bước
1. Thiết Lập EC2
- Khởi động phiên bản t2.micro (miễn phí): Đăng nhập vào AWS Management Console, chọn EC2 và khởi động một phiên bản mới.
- Cấu hình nhóm bảo mật: Mở các cổng HTTP (80), HTTPS (443), SSH (22).
2. Cấu Hình Máy Chủ
- Cập nhật hệ thống:
bash
sudo apt update && sudo apt upgrade -y - Cài đặt PHP 8.3 và các tiện ích mở rộng:
bash
sudo apt install php8.3-fpm php8.3-mysql php8.3-xml php8.3-curl php8.3-zip - Cài đặt Nginx:
bash
sudo apt install nginx - Cài đặt Composer:
bash
curl -sS https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composer
3. Triển Khai Laravel
- Clone kho lưu trữ của bạn:
bash
git clone https://github.com/yourusername/portfolio.git /var/www/portfolio - Cài đặt các phụ thuộc:
bash
cd /var/www/portfolio composer install --optimize-autoloader --no-dev - Thiết lập quyền:
bash
sudo chown -R www-data:www-data /var/www/portfolio sudo chmod -R 755 /var/www/portfolio sudo chmod -R 775 /var/www/portfolio/storage
4. Cấu Hình Nginx
nginx
server {
listen 80;
server_name yourdomain.com;
root /var/www/portfolio/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
}
5. SSL với Let's Encrypt
- Cài đặt Certbot:
bash
sudo apt install certbot python3-certbot-nginx - Lấy chứng chỉ SSL:
bash
sudo certbot --nginx -d yourdomain.com - Tự động gia hạn (đã được cấu hình):
bash
sudo systemctl status certbot.timer
Triển Khai Tự Động với GitHub Webhooks
Tạo một endpoint webhook tự động kéo các thay đổi:
php
<?php
// webhook.php
$payload = json_decode(file_get_contents('php://input'), true);
if (isset($payload['ref']) && $payload['ref'] === 'refs/heads/main') {
shell_exec('cd /var/www/portfolio && git pull origin main');
shell_exec('cd /var/www/portfolio && php artisan config:clear');
shell_exec('cd /var/www/portfolio && php artisan cache:clear');
echo "Triển khai thành công!";
}
?>
Tăng Cường Bảo Mật
- Middleware cho Header Bảo Mật:
php
class SecurityHeaders {
public function handle($request, Closure $next) {
$response = $next($request);
$response->headers->set('X-Content-Type-Options', 'nosniff');
$response->headers->set('X-Frame-Options', 'DENY');
$response->headers->set('X-XSS-Protection', '1; mode=block');
return $response;
}
}
Bảo Mật Môi Trường
- Không bao giờ commit file .env
- Sử dụng mật khẩu cơ sở dữ liệu mạnh
- Cấu hình quyền tệp đúng cách
- Cập nhật bảo mật định kỳ
Tối Ưu Hiệu Suất
- Bật OPcache:
bash
sudo nano /etc/php/8.3/fpm/php.ini # opcache.enable=1 - Tối ưu hóa autoloader của Composer:
bash
composer install --optimize-autoloader --no-dev - Tối ưu hóa Laravel:
bash
php artisan config:cache php artisan route:cache php artisan view:cache
Giám Sát và Bảo Trì
- Giám sát nhật ký:
bash
tail -f /var/www/portfolio/storage/logs/laravel.log tail -f /var/log/nginx/error.log - Chiến lược sao lưu:
- Sao lưu cơ sở dữ liệu qua cron jobs
- Phiên bản mã với Git
- Snapshot máy chủ (AWS AMI)
Phân Tích Chi Phí
- EC2 t2.micro: Miễn phí trong 12 tháng, sau đó ~$9/tháng
- Tên miền: ~$12/năm
- SSL: Miễn phí (Let's Encrypt)
- Tổng: Thực sự miễn phí trong năm đầu tiên
Kết Quả
Portfolio đã triển khai (https://sengaram.com) có:
- ⚡ Thời gian tải dưới 2 giây
- 🔒 Đánh giá SSL A+
- 📱 Thiết kế đáp ứng di động
- 🚀 Triển khai tự động
- 📊 Tích hợp Google Analytics
Những Điều Rút Ra
- Bắt đầu đơn giản - t2.micro hoàn hảo cho portfolio
- Tự động hóa mọi thứ - triển khai, gia hạn SSL, sao lưu
- Bảo mật trước - header, quyền, cập nhật đúng cách
- Giám sát thường xuyên - nhật ký, hiệu suất, thời gian hoạt động
Những Cạm Bẫy Thường Gặp Cần Tránh
- Quên thiết lập quyền tệp đúng cách
- Không cấu hình nhóm bảo mật chính xác
- Bỏ qua thiết lập chứng chỉ SSL
- Không theo dõi nhật ký
Bước Tiếp Theo
- Cân nhắc thêm:
- Tích hợp CDN (CloudFront)
- Di chuyển cơ sở dữ liệu sang RDS để mở rộng
- Cân bằng tải cho lưu lượng cao
- Pipeline CI/CD với AWS CodePipeline
Bạn đã triển khai ứng dụng Laravel lên AWS chưa? Bạn đã gặp phải những thách thức gì?
Hãy kiểm tra kết quả trực tiếp tại (https://sengaram.com) - được xây dựng theo các bước này.