strapi-cover_1fabc982ce.png

Deploy Strapi to Cloud Run

Giới thiệu về Strapi (Headless CMS)

  • Strapi là mã nguồn mở Headless CMS. Sử dụng 100% JavaScript, hoàn toàn có thể tùy chỉnh và phát triển.
  • Mục đích ban đầu của dự án là trợ Bootstrap API của bạn: đó là cách mà Strapi được tạo ra. Giờ đây, Strapi là một mã nguồn mở Headless CMS cho phép các nhà phát triển tự do lựa chọn các công cụ và khuôn khổ yêu thích của họ, đồng thời cho phép các biên tập viên quản lý và phân phối nội dung của họ bằng bảng điều khiển quản trị ứng dụng của họ. Dựa trên hệ thống plugin, Strapi là một CMS linh hoạt có bảng quản trị và API có thể mở rộng – và mọi phần đều có thể tùy chỉnh để phù hợp với mọi trường hợp sử dụng. Strapi cũng có một hệ thống người dùng tích hợp để quản lý chi tiết những gì quản trị viên và người dùng cuối có quyền truy cập.
  • Khởi tạo project đơn giản tại link, bên dưới là hình ảnh giao diện Strapi Admin.

Project & Dockerfile

Project
  • Quickstart đơn giản Strapi Project
  • Cấu trúc project
    .
    ├── README.md
    ├── cloudbuild.yaml
    ├── compose
    │   ├── gitlab                 # image for CI/CD on gitlab
    │   ├── local
    │   └── production         # images for Strapi deployment
    └── my-project              # Strapi Project
        ├── api                      # API definition: route, services, …
        ├── build                   # Admin UI
        ├── config                 # Server Configs and other configs
        ├── extensions          # Other extensions for your app
        ├── favicon.ico
        ├── node_modules
        ├── package-lock.json
        ├── package.json
        ├── public               # robots.txt, …
        └── server.js           # Scripts run server
Base Image
FROM strapi/base:14-alpine

# Create project folder
RUN mkdir /srv/app

# Add required dependencies
COPY ./my-project/package-lock.json /srv/app/package-lock.json 
COPY ./my-project/package.json /srv/app/package.json

# Change ơwner
RUN chown 1000:1000 -R /srv/app

# Set work directory
WORKDIR /srv/app

# Set NODE_ENV to install packages
ENV NODE_ENV production

# Install dependencies
RUN npm install --no-optional && npm cache clean --force
Dockerfile for Base Image

Được dùng để cài đặt các dependencies cần thiết

Hỗ trợ cho Image chạy Strapi cài đặt nhanh và tiện lợi cho thiết lập CI/CD
Image for deployment
FROM asia.gcr.io/int-ml-ai/base/my-project:0.1.0-strapi-3.6.8

# Copy project sources
COPY ./my-project /srv/app

# Set NODE_ENV to run app mode in production
ENV NODE_ENV production

# expose app port
EXPOSE 1337

CMD  [ "node", "server.js" ]
Dockerfile for Image Running Strapi

Được sử dụng để chạy Strapi và tiến hành deploy trên chính Image này

Sử dụng dependencies đã cài đặt base image để tiến hành chạy 
Example build and push Docker image

Deployment

---
steps:
  # Build the container image
  - name: "gcr.io/cloud-builders/docker"
    args: [
      'build',
      '--tag=asia.gcr.io/${PROJECT_ID}/my-project:0.1.0-strapi-3.6.8',
      '-f', 'compose/production/my-project/Dockerfile.cloudrun', '.'
    ]
    env:
      - PROJECT_ID=int-ml-ai

  # Push the container image to Container Registry
  - name: 'gcr.io/cloud-builders/docker'
    args: ['push', 'asia.gcr.io/${PROJECT_ID}/my-project:0.1.0-strapi-3.6.8']

  # Deploy container image to Cloud Run
  - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
    entrypoint: gcloud
    args:
      - 'run'
      - 'deploy'
      - 'my-project'
      - '--image'
      - 'asia.gcr.io/${PROJECT_ID}/my-project:0.1.0-strapi-3.6.8'
      - '--region'
      - 'asia-southeast1'
      - '--platform'
      - 'managed'
      - '--memory'
      - '512Mi'
      - '--cpu'
      - '1000m'
      - '--concurrency'
      - '80'
      - '--timeout=300'
      - '--max-instances'
      - '1'
      - '--min-instances'
      - '1'
      - '--port'
      - '8080'
      - '--allow-unauthenticated'
    env:
      - PROJECT_ID=int-ml-ai

images:
- "asia.gcr.io/${PROJECT_ID}/my-project:0.1.0-strapi-3.6.8"

# options:
#   logging: CLOUD_LOGGING_ONLY
Example cloudbuild.yaml

Để deploy thì tại thư mục chứa cloudbuild.yaml, chạy lệnh: gcloud build submit

Kết quả

  • Sau khi deploy thành công, có thể sử dụng “Manage custom domains” để thiết lập domain cho ADMIN UI có được từ Strapi Server
  • Giao diện đã deploy:
  • Bây giờ ta có thể gọi API từ đường dẫn ở trên. Để có thể truy cập vào đường dẫn ADMIN ta có thể sử dụng Firebase để hosting giao diện.

Comments are closed.