Hướng Dẫn Chi Tiết Dockerize và Triển Khai Ứng Dụng Astro Đơn Giản
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. Bạn sẽ tìm hiểu chi tiết về cách thức hoạt động của Dockerfile và các bước cần thiết để 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ã, dưới đây là Dockerfile hoàn chỉnh sẽ tạo ra một image cho ứng dụng Astro của bạn:
dockerfile
FROM node:20-alpine AS base
WORKDIR /app
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 --from=build /app/dist ./dist
ENV HOST=0.0.0.0
ENV PORT=4321
EXPOSE 4321
CMD node ./dist/server/entry.mjs
Và đây là tệp .dockerignore mà bạn nên tạo:
.dockerignore
.DS_Store
node_modules
dist
Để xây dựng và chạy image, hãy sử dụng các lệnh sau:
bash
docker build -t astro .
docker run -p 4321:4321 astro
Thiết lập Dự Án Astro Cơ Bản
Trong hướng dẫn này, tôi giả định rằng bạn đã thiết lập một dự án Astro cơ bản. Nếu bạn có cấu hình khác, hãy điều chỉnh Dockerfile cho phù hợp với nhu cầu của bạn.
Thông thường, bạn sẽ chạy npm install
và sau đó là npm run dev
để phát triển cục bộ. Tuy nhiên, để triển khai, chúng ta cần xây dựng ứng dụng và phục vụ các tệp từ máy chủ. Do đó, chúng ta sẽ sử dụng npm run build
để tạo các tệp và phục vụ chúng.
Phân Tích Chi Tiết Dockerfile
dockerfile
FROM node:20-alpine AS base
WORKDIR /app
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 --from=build /app/dist ./dist
ENV HOST=0.0.0.0
ENV PORT=4321
EXPOSE 4321
CMD node ./dist/server/entry.mjs
1. Khoảng Thời Gian Cơ Bản (Base Stage)
- Chúng ta sử dụng Node.js 20 trên Alpine, tạo ra 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 các package phụ thuộc.
2. Giai Đoạn Cài Đặt Thư Viện Sản Xuất (Production Dependencies Stage)
- Chúng ta chỉ cài đặt những dependencies cần thiết cho môi trường sản xuất mà bỏ qua các dependencies cho môi trường phát triển.
3. Giai Đoạn Cài Đặt Thư Viện Build (Build Dependencies Stage)
- Chúng ta cài đặt tất cả các dependencies, bao gồm cả dependencies cho môi trường phát triển cần thiết để build ứng dụng.
4. Giai Đoạn Build (Build Stage)
- Sao chép toàn bộ dự án và thực thi lệnh build.
5. Giai Đoạn Thời Gian Chạy (Runtime Stage)
- Chúng ta bắt đầu lại từ image cơ sở.
- Sao chép các dependencies sản xuất 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 giúp tối ưu 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 giữa môi trường build và runtime.
Đừng quên thêm tệp .dockerignore để loại bỏ các thư mục node_modules và dist, điều này sẽ cải thiện tốc độ build và giảm kích thước ứng dụng.
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. Tuy nhiên, ở đây, tôi sẽ chỉ cho bạn cách triển khai trên Sliplane.
Sau khi đăng ký, bạn hãy tạo một dịch vụ mới bằng cách chọn kho lưu trữ Github của bạn. Tiếp theo, giữ lại các cài đặt mặc định và nhấn vào nút triển khai.
Khi triển khai hoàn tất, ứng dụng Astro của bạn sẽ có sẵn với tên miền phụ của sliplane.app, thường thì sẽ 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, theo dõi các chỉ số như mức sử dụng CPU, bộ nhớ, và thêm tài nguyên nếu cần thiết. Mỗi khi bạn đẩy mã lên kho lưu trữ, Sliplane sẽ tự động triển khai ứng dụng của bạn.
Cảm ơn bạn đã theo dõi bài viết này!
source: viblo