0

Hướng dẫn Dockerize và Triển khai Ứng dụng Astro

Bài viết này sẽ hướng dẫn bạn cách Dockerize một ứng dụng Astro và triển khai ứng dụng đó lên nền tảng đám mây. Hãy cùng tìm hiểu chi tiết về cách thức hoạt động của Dockerfile và các bước để triển khai ứng dụng Astro của bạn một cách dễ dàng.

Nếu bạn chỉ muốn sao chép và dán mã, đây là Dockerfile cuối cùng sẽ tạo ra một image cho ứng dụng Astro của bạn:

FROM node:20-alpine AS base
WORKDIR /app

# By copying only the package.json and package-lock.json here, we ensure that the following `-deps` steps are independent of the source code.
# Therefore, the `-deps` steps will be skipped if only the source code changes.
COPY package.json package-lock.json ./

FROM base AS prod-deps
RUN npm install --omit=dev

FROM base AS build-deps
RUN npm install

FROM build-deps AS build
COPY . .
RUN npm run build

FROM base AS runtime
COPY --from=prod-deps /app/node_modules ./node_modules # Copy dependencies
COPY --from=build /app/dist ./dist # Copy the built output

# Bind to all interfaces
ENV HOST=0.0.0.0
# Port to listen on
ENV PORT=4321
# Just convention, not required
EXPOSE 4321

CMD node ./dist/server/entry.mjs # Start the app

Và đây là tệp .dockerignore:

.DS_Store
node_modules
dist

Để build và chạy image, hãy sử dụng các lệnh sau:

docker build -t astro .
docker run -p 4321:4321 astro

Bạn không chỉ muốn sao chép và dán? Hãy cùng tìm hiểu chi tiết Dockerfile!

Cấu hình dự án Astro cơ bản

Đối với hướng dẫn này, tôi giả sử bạn đã thiết lập một dự án Astro cơ bản. Nếu bạn có thiết lập khác, bạn có thể cần điều chỉnh Dockerfile cho phù hợp.

Thông thường, bạn sẽ chạy npm install và sau đó là npm run dev để làm việc cục bộ. Tuy nhiên, để triển khai, chúng tôi muốn build ứng dụng và phục vụ các tệp từ máy chủ. Vì vậy, thay vào đó, chúng tôi sẽ sử dụng npm run build để tạo các tệp và sau đó phục vụ chúng.

Hãy cùng đi sâu vào chi tiết của Dockerfile.

Phân tích chi tiết Dockerfile

FROM node:20-alpine AS base
WORKDIR /app

# By copying only the package.json and package-lock.json here, we ensure that the following `-deps` steps are independent of the source code.
# Therefore, the `-deps` steps will be skipped if only the source code changes.
COPY package.json package-lock.json ./

FROM base AS prod-deps
RUN npm install --omit=dev

FROM base AS build-deps
RUN npm install

FROM build-deps AS build
COPY . .
RUN npm run build

FROM base AS runtime
COPY --from=prod-deps /app/node_modules ./node_modules # Copy dependencies
COPY --from=build /app/dist ./dist # Copy the built output

# Bind to all interfaces
ENV HOST=0.0.0.0
# Port to listen on
ENV PORT=4321
# Just convention, not required
EXPOSE 4321

CMD node ./dist/server/entry.mjs # Start the app

Vậy điều gì đang xảy ra ở đây?

1. Giai đoạn cơ sở (Base stage):

  • Sử dụng Node.js 20 trên Alpine, cung cấp một image cơ sở gọn nhẹ.
  • Thiết lập thư mục làm việc và sao chép các tệp package để cài đặt dependency.

2. Giai đoạn dependencies production (Production dependencies stage):

  • Chỉ cài đặt các dependencies production, bỏ qua các dependencies dev.

3. Giai đoạn dependencies build (Build dependencies stage):

  • Cài đặt tất cả các dependencies, bao gồm cả các dependencies dev cần thiết để build.

4. Giai đoạn build (Build stage):

  • Sao chép toàn bộ dự án và chạy lệnh build.

5. Giai đoạn runtime (Runtime stage):

  • Bắt đầu lại từ image cơ sở.
  • Sao chép các dependencies production và các tệp đã build từ các giai đoạn trước đó.
  • Đặt các biến môi trường cho host và cổng.
  • Mở cổng 4321 (cổng mặc định của Astro).
  • Khởi động ứng dụng Astro bằng cách sử dụng điểm vào máy chủ đã build.

Cách tiếp cận nhiều giai đoạn này tối ưu hóa quy trình build và giữ cho kích thước image cuối cùng nhỏ hơn bằng cách tách biệt môi trường build và runtime.

Hãy đảm bảo thêm tệp .dockerignore để bỏ qua các thư mục node_modules và dist. Điều này sẽ tăng tốc độ quy trình build và giảm kích thước image.

Triển khai ứng dụng Astro lên Sliplane

Bạn có thể triển khai container Docker này lên bất kỳ nhà cung cấp đám mây nào hỗ trợ Docker. Ví dụ: bạn có thể sử dụng các nền tảng như Heroku, DigitalOcean hoặc AWS ECS. Bởi vì tôi là người đồng sáng lập Sliplane, tôi sẽ chỉ cho bạn cách triển khai nó ở đó.

Sau khi đăng ký, bạn có thể tạo dịch vụ mới bằng cách chọn Kho lưu trữ Github của mình. Sau đó, chỉ cần giữ các cài đặt mặc định và nhấp vào triển khai.

Sau khi triển khai, ứng dụng Astro của bạn sẽ khả dụng theo tên miền phụ của sliplane.app, thường là tên dịch vụ của bạn.

Bạn cũng có thể xem nhật ký của ứng dụng, xem các chỉ số như mức sử dụng CPU và bộ nhớ, thêm bộ nhớ liên tục và nhiều hơn thế nữa. Bất cứ khi nào bạn đẩy đến kho lưu trữ của mình, Sliplane sẽ tự động triển khai ứng dụng của bạn.

Cảm ơn các bạn đã theo dõi.


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.