Những bước cơ bản để cài đặt và cấu hình EC2 với Laravel (Amazon Elastic Compute Cloud)

Những bước cơ bản để cài đặt và cấu hình EC2 với Laravel (Amazon Elastic Compute Cloud)

Chắc hẳn những developer chúng ta không còn xa lạ gì với cụm từ Amazon Web Service (AWS). Một nền tảng đám mây toàn diện và được sử dụng rộng rãi nhất, cung cấp trên 200 dịch vụ đầy đủ tính năng từ các trung tâm dữ liệu trên toàn thế giới, với những dịch vụ cực kì hữu ích và tuyệt với. Một trong số đó phải kể đến Amazon Elastic Compute Cloud (Amazon EC2). Hôm nay chúng ta sẽ cùng tìm hiểu và cấu hình một EC2 cho riêng mình nhé.

Ở bài viết này mình sẽ dùng Laravel để làm ví dụ, để dễ dàng cấu hình cũng như chạy 1 dự án với EC2. Các bạn có thể tham khảo qua và có thể dùng ngôn ngữ (framework khác) nếu muốn nhé.

Cài đặt EC2 VÀ LEMP cho server

Ở đây các bản có thể hiểu đơn giản, EC2 sẽ như một chiếc máy tính cá nhân của mình, có thể cài đặt hệ điều hành, package,v...v.. Nên mình sẽ thao tác với EC2 như một chiếc máy tính cơ bản.

Bước 1: Tạo một tài khoản AWS

Chúng ta cần có tài khoản AWS, bạn có thế tạo tài khoản ở đây, nó hoàn toàn miễn phí và sẽ hạn chế những tính năng nâng cao, cụ thể với với bài viết này là: dung lượng của máy chủ ảo, thời gian chạy máy chủ, v..v..

Bước 2: Tạo một instance

Sau khi tạo và đăng nhập vào tài khoản AWS các bạn có thể nhìn thấy màn hình console.

Screen-Shot-2022-08-01-at-21.36.42

Chúng ta click chuột vào EC2, Ở đây chúng ta có thể thấy tổng số instance, số instance đang chạy v..v..

Screen-Shot-2022-08-01-at-21.38.48

Chúng ta chọn vào mục Launch instance.

Screen-Shot-2022-08-01-at-21.42.11

Đây chúng ta sẽ nhập tên của instance, chọn hệ điều hành sẽ được cài trên máy ảo của chúng ta (gợi ý là sử dụng ubuntu vì dễ dàng thao tác trên dòng lệnh cũng như thân thiện với số đông developer).

Screen-Shot-2022-08-01-at-21.43.14

Như đã nói ở trên vì là tài khoản miễn phí nên chúng ta chỉ có thể chọn sử dụng với dung lượng 1GB ram và sẽ mất tiền sau khi dùng hết dung lượng miễn phí (750 giờ).

Screen-Shot-2022-08-01-at-21.46.13

Bước tiếp theo tạo pem key để có thể ssh vào server, như ở đây mình đã có pem key trước đây mình tạo, chúng ta có thể dùng lại nếu như các bạn đã có không thì sẽ chọn nút Create new key pair.

Screen-Shot-2022-08-01-at-21.46.35

Nếu tạo mới key thì sẽ hiện thị màn hình tạo mới, các bạn có thể chọn loại key cũng như tên file pem.

Screen-Shot-2022-08-01-at-21.49.22

Ở network settings chúng ta có thể configs có thể ssh vào server với địa chỉ IP cụ thể (custom), chỉ với địa chỉ IP hiện tại (My IP) hoặc mọi nơi (Anywhere).
Traffic with HTTP và HTTPS, khi tích server sẽ mở cổng 80 (HTTP) và 443 (HTTPS).

Screen-Shot-2022-08-01-at-21.49.58

Sau đó chúng ta chọn bộ nhớ cho máy ảo, ở đây mình chọn 8GB. Chúng ta sẽ được miễn phí 30GB bộ nhớ với tài khoản miễn phí.

Screen-Shot-2022-08-01-at-21.51.47

Cuối cùng chúng ta chọn số lượng máy chủ ảo được tạo và chọn Launch instance và chờ sau khi cài đặt thành công là chúng ta có thể ssh vào máy chủ rồi.

Screen-Shot-2022-08-01-at-21.53.49

Bước 2: Cài đặt LEMP stack lên máy chủ ảo

LEMP là cụm từ viết tắt của Linux + Nginx (Engine-x) + MySQL + PHP. Các bước cài đặt LEMP stack khá là quen thuộc với developer của chúng ta rồi, nếu bạn chưa biết thì có thể tham khảo bài viết này của DigitalOcean

Cài đặt dự án và cấu hình Nginx

Bước 1: Cài đặt dự án

Để cài đặt dự án chúng ta cần có git ở server, các bạn có thể kiểm tra bằng lệnh

git --version

Nếu chưa có chúng ta sẽ cài đặt git với lệnh

sudo apt install git

Tiếp theo là sẽ render key tại máy chủ và clone repo về server (bước này cũng khá quen thuộc nên mình sẽ đi qua nhanh bước này), nếu các bạn chưa biết thì có thể tham khảo thêm bài viết này.

Để setup dự án. Chúng ta cần cd và thư mục chứa dự án, chạy các lệnh setup cơ bản.

composer i
npm i
cp .env.example .env
php artisan key:generate

Bước tiếp theo chúng ta cần cấu hình Nginx, chúng ta cần di chuyển folder dự án (ở đây là example_app) vào thư mục /var/www bằng lệnh sau

sudo mv example_app /var/www/example_app

Chúng ta cần cấp quyền 2 folder đó là storage và cache để laravel có thể đọc và ghi được vào những folder này bằng các câu lệnh sau. Các bạn có thể tham khảo thêm các quyền ở đây.

Di chuyển đến thư mục chứa dự án

cd /var/www/example_app
sudo chown -R myusername:www-data

Sau đó mình sẽ set quyền cho user hiện tại và cả máy chủ vưới quyền.

sudo find . -type f -exec chmod 664 {} \;   
sudo find . -type d -exec chmod 775 {} \;

Sau đó, cấp cho máy chủ web quyền đọc và ghi vào bộ nhớ và bộ nhớ cache.

sudo chgrp -R www-data storage bootstrap/cache
sudo chmod -R ug+rwx storage bootstrap/cache

Bây giờ chúng ta sẽ di chuyển đến folder sites-avaiable của nginx và cấu hình file default.

cd /etc/nginx/sites-avaiable/
sudo nano default

Chúng ta sẽ config file như sau:

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        # SSL configuration
        #
        # listen 443 ssl default_server;
        # listen [::]:443 ssl default_server;
        #
        # Note: You should disable gzip for SSL traffic.
        # See: https://bugs.debian.org/773332
        #
        # Read up on ssl_ciphers to ensure a secure configuration.
        # See: https://bugs.debian.org/765782
        #
        # Self signed certs generated by the ssl-cert package
        # Don't use them in a production server!
        #
        # include snippets/snakeoil.conf;

        root /var/www/example_app/public/;

        # Add index.php to the list if you are using PHP
        index index.html index.php index.htm index.nginx-debian.html;

        server_name 54.201.194.48;

        location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

        # pass PHP scripts to FastCGI server
        #
        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
        #
        #       # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #       deny all;
        #}
}

Ở đây phần listen 80 default_server;listen [::]:80 default_server; sẽ set cổng mặc định mà website bạn chạy là cổng 80.
index index.html index.php index.htm index.nginx-debian.html; chúng ta cần khai báo trang file mặc định mà nginx có thể đọc.
server_name 54.201.194.48; sẽ là IP của instance

location / {
                # First attempt to serve request as file, then
                # as directory, then fall back to displaying a 404.
                try_files $uri $uri/ =404;
        }

Sẽ là trang 404 mặc định nếu như website của bạn không có page đó.

location ~ \.php$ {
                include snippets/fastcgi-php.conf;
        #
        #       # With php-fpm (or other unix sockets):
                fastcgi_pass unix:/run/php/php8.1-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        }

Sẽ là chọn phiên bản php.

Kết quả sau khi cài đặt là đây

Screen-Shot-2022-08-01-at-23.06.57

Cảm ơn các bạn đã đọc đến đây, bài viết này có vẻ dài nhưng mình cũng đã cố gắng cô đọng lại những kiến thức cần thiết để đưa vào bài viết này, hy vọng giúp ích cho bạn. Chúc bạn có một ngày làm việc bùng nổ!!!