+14

Hướng dẫn deploy API service trên Google Compute Engine

Trong bài viết này mình sẽ hướng dẫn các bạn deploy một api service cơ bản trên GCP thông qua Google Compute Engine:

  • Hosting API service chạy bằng Docker trên máy chủ GCP
  • Setup domain, SSL cho API service

I. Prerequisites

  • Có sẵn api service trên github/gitlab...
  • Full quyền trên GCP để enable các service cần thiết
  • Domain, DNS service (ở đây mình dùng Cloudflare)
  • Kiến thức cơ bản về command line

II. Hướng dẫn

0. Tạo compute engine

Vì có sẵn một anh đã hướng dẫn step này nên các bạn follow theo cho tiện nhé: link

1. Install Git

  • Chạy command
sudo apt update
sudo apt install git
  • Kiểm tra Git đã được install thành công
git --version

2. Thêm SSH Key và Clone project

  • Thêm SSH key theo hướng dẫn

  • Tiếp đến chúng ta chọn thư mục và tiến hành clone project từ Github/Gitlab đã có sẵn trước đó

  • Thêm quyền read/write/execute cho folder chứa source code bằng lệnh:

sudo chmod -R 777 .

3. Install Docker Compose

Vì project của mình chạy bằng docker-compose, nên mình sẽ install chúng.

  • Cài đặt docker-compose phiên bản mới nhất:
sudo curl -L https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  • Thêm quyền thực thi cho docker-compose:
sudo chmod +x /usr/local/bin/docker-compose
  • Kiểm tra docker-compose đã được cài đặt thành công:
docker-compose version

4. Build & Run docker-compose

  • Run project:
docker-compose up --build
  • Nếu ta gặp lỗi:
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/json: dial unix /var/run/docker.sock: connect: permission denied

thì bạn hãy cấp quyền read & write cho user/non-root-process trên docker.sock như sau nhé:

sudo chmod 666 /var/run/docker.sock

5. Mở port ứng dụng trên VMware

Lưu ý khi tạo instance các bạn hãy chọn 2 option này nhé, mục đích để cho traffic HTTP/HTTPS từ bên ngoài internet có thể truy cập qua firewall: image.png Vì application port của mình đã chạy ở bước 4 chạy trên port 9000, nên mình cần bổ sung những bước sau để cho phép traffic chỉ định có thể truy cập port mà mình cung cấp

  • Mở VPC Network chọn Firewall
  • Sau đó chọn CREATE FIREWALL RULE

image.png

  • Điền rule name, ở mục target chọn All instances in the network
  • Source IPv4 ranges nhập: 0.0.0.0/0 (hình dưới)

image.png

  • Ở mục Protocols and ports chọn TCP, sau đó nhập port của ứng dụng, ở đây mình nhập range 7000-9000 chứ không chỉ định 1 port duy nhất:

image.png

  • Bấm Create để hoàn tất tạo Firewall Rule
  • Sau đó vào lại VMware, dựa vào External IPs và mở port tương ứng để kiểm tra

image.png

  • Vậy là chúng ta đã truy cập thành công vào ứng dụng thông qua external IP và port được open (lưu ý là http không phải https vì chúng ta chưa config ssl cho domain này nhé)

6. Create instance group

  • Trước khi config load balancing cho instance, chúng ta cần tạo instance group trước. Ở Compute Engine, chọn Instance groups sau đó nhấn CREATE INSTANCE GROUP:

image.png

  • Điền các thông tin để khởi tạo instance group như bên dưới, lưu ý phần Port mapping, chúng ta cần điền đúng port mà ứng dụng đang chạy để LB có thể access được:

image.png

  • Cuối cùng nhấn Create để hoàn tất.

7. Config Load balancing cho vm

  • Vào Network services chọn Load balancing
  • Chọn Start Configuration ở mục HTTP(S) Load Balancing:

image.png

  • Chọn các cấu hình như sau và tiếp tục:

image.png

  • Nhập tên cho Load balancer config, ở phần Frontend Configuration cấu hình như sau:

image.png

  • Phần Backend Configuration chọn:

image.png

  • Điền các thông tin cơ bản như sau:

image.png

  • Ở phần health check, chọn CREATE A HEALTH CHECK, nhằm mục đích kiểm tra liệu ứng dụng của bạn còn hoạt động hay không:

image.png

  • Điền request path, là đường dẫn health check của ứng dụng, phải nhập port tương ứng với port mà ứng dụng đang chạy. Lưu ý HTTP response code của đường dẫn này phải là 200 nhé. Sau đó nhấn save để lưu cấu hình health check.

image.png

  • Nhập tên cho Load balancing Config và bấm tạo để hoàn tất. Khi hoàn tất, ở màn hình danh sách load balancing config sẽ xuất hiện instance vừa tạo. Click chọn instance để xem detail:

image.png

  • Ở cột IP:Port chính là IP load balancing của chúng ta, các bạn hãy mở browser và kiểm tra nhé !!

8. Config domain and ssl

Last but not least, mình đang có 1 domain trên Cloudflare và muốn assign cho API service vừa tạo. Các bạn hãy làm như sau

  • Ở Cloudflare, tab SSL/TLS, chọn create Client Certificates sau đó nhấn Create Certificate

image.png

  • Nhấn Create để tiếp tục:

image.png

  • Cloudflare sẽ tạo client cerificate cho chúng ta, lưu ý hãy lưu 2 mã CertificatePrivate Key lại nhé:

image.png

  • Tiếp theo các bạn mở tab overview, chọn option Full cho SSL/TLS encryption mode:

image.png

  • Quay về load balancing config, các bạn chọn và edit config, thông tin sau sẽ show lên, sau đó các bạn nhấn ADD FRONTEND IP AND PORT để thêm config cho protocol https:

image.png

  • Ở field Certificate, chọn CREATE A NEW CERTIFICATE, thông tin cho certificate ở đây là CertificatePrivate Key mà các bạn đã tạo từ Cloudflare

  • Nhấn Create để tiếp tục

  • Click Done sau đó nhấn Update để hoàn tất chỉnh sửa config:

image.png

  • Bây giờ vào lại detail của load balancing config và lấy địa chỉ IP của protocol HTTPS vừa tạo, các bạn chỉ copy ip, không copy port 443:

image.png

  • Về lại Cloudflare, ở tab DNS/records, chọn Add record và thêm theo hướng dẫn sau:
    • Type: A
    • Name: @, www hoặc subdomain của bạn. Ví dụ domain của bạn là abc.com thì có thể tạo subdomain như api.abc.com
  • Bấm Save để hoàn tất

III. Kết

  • Các bạn vào lại domain/sub domain bằng browser để kiểm tra nhé
  • Cảm ơn các bạn đã xem bài viết ^^

All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí