0
0
Lập trình
Flame Kris
Flame Krisbacodekiller

Triển Khai Portfolio Laravel lên AWS EC2: Hướng Dẫn Chi Tiết

Đăng vào 8 tháng trước

• 5 phút đọc

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 Copy
    sudo apt update && sudo apt upgrade -y
  • Cài đặt PHP 8.3 và các tiện ích mở rộng:
    bash Copy
    sudo apt install php8.3-fpm php8.3-mysql php8.3-xml php8.3-curl php8.3-zip
  • Cài đặt Nginx:
    bash Copy
    sudo apt install nginx
  • Cài đặt Composer:
    bash Copy
    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 Copy
    git clone https://github.com/yourusername/portfolio.git /var/www/portfolio
  • Cài đặt các phụ thuộc:
    bash Copy
    cd /var/www/portfolio
    composer install --optimize-autoloader --no-dev
  • Thiết lập quyền:
    bash Copy
    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 Copy
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 Copy
    sudo apt install certbot python3-certbot-nginx
  • Lấy chứng chỉ SSL:
    bash Copy
    sudo certbot --nginx -d yourdomain.com
  • Tự động gia hạn (đã được cấu hình):
    bash Copy
    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 Copy
<?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 Copy
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 Copy
    sudo nano /etc/php/8.3/fpm/php.ini
    # opcache.enable=1
  • Tối ưu hóa autoloader của Composer:
    bash Copy
    composer install --optimize-autoloader --no-dev
  • Tối ưu hóa Laravel:
    bash Copy
    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 Copy
    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.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào