0
0
Lập trình
Flame Kris
Flame Krisbacodekiller

Hướng dẫn chi tiết Docker hóa và triển khai API Fastify lên nền tảng đám mây

Đăng vào 3 tuần trước

• 3 phút đọc

Chủ đề:

Docker

Hướng dẫn Chi tiết Docker Hóa và Triển Khai API Fastify

Triển khai ứng dụng Fastify giờ đây trở nên dễ dàng hơn bao giờ hết với Docker. Bài viết này sẽ dẫn dắt bạn từng bước trong quá trình Docker hóa và triển khai API Fastify lên các nền tảng đám mây một cách nhanh chóng và hiệu quả.

Tổng Quan về Docker

Docker là một công nghệ ảo hóa cho phép bạn đóng gói ứng dụng và tất cả các phụ thuộc của nó vào trong một container. Việc này giúp cho việc triển khai ứng dụng trở nên nhất quán giữa các môi trường, từ phát triển, kiểm thử cho đến sản xuất. Nếu bạn quan tâm đến những khái niệm cơ bản về Docker, hãy đọc thêm một số tài liệu hữu ích.

Dockerfile Cơ Bản cho Ứng Dụng Fastify

Nếu bạn không muốn mất thời gian, đây là mẫu Dockerfile cuối cùng sẽ giúp bạn tạo ra hình ảnh cho ứng dụng Fastify:

Copy
FROM node:20-alpine
WORKDIR /app
COPY package* ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "index.js"]

Tập Tin .dockerignore

Để giảm kích thước hình ảnh, hãy sử dụng tệp .dockerignore sau:

Copy
node_modules
npm-debug.log

Lệnh Xây Dựng và Chạy Hình Ảnh

Sử dụng các lệnh sau để xây dựng và chạy hình ảnh Docker:

Copy
docker build -t fastify-app .
docker run -p 3000:3000 fastify-app

Thiết Lập Dự Án Fastify

Để bắt đầu, trước tiên, bạn cần có một dự án Fastify. Fastify là một web framework nổi bật, được thiết kế để mang lại trải nghiệm tốt nhất cho nhà phát triển với kiến trúc plugin mạnh mẽ và hiệu suất cao. Nếu bạn đã có sẵn dự án Fastify, thông thường bạn sẽ chạy npm install và sau đó là node index.js để phát triển cục bộ. Đối với việc triển khai, chúng ta sẽ làm tương tự nhưng trong một Docker container.

Mô Tả Chi Tiết về Dockerfile

Mã Dockerfile bao gồm các lệnh sau:

  1. FROM node:20-alpine: Sử dụng image Node.js 20 trên Alpine Linux, giúp tối ưu hóa kích thước hình ảnh.
  2. WORKDIR /app: Thiết lập thư mục làm việc là /app.
  3. COPY package ./*: Sao chép tệp package.jsonpackage-lock.json vào container.
  4. RUN npm install: Cài đặt tất cả các phụ thuộc cần thiết cho ứng dụng.
  5. COPY . .: Sao chép toàn bộ mã nguồn ứng dụng vào container.
  6. EXPOSE 3000: Mở cổng 3000 cho kết nối từ bên ngoài.
  7. CMD ["node", "index.js"]: Lệnh để chạy ứng dụng Fastify.

Quá trình này rất đơn giản và hiệu quả cho các ứng dụng Fastify, trong trường hợp ứng dụng yêu cầu xây dựng, bạn chỉ cần thêm bước RUN npm build nếu cần thiết. Đừng quên tạo tệp .dockerignore để loại bỏ thư mục node_modules và nhật ký gỡ lỗi npm, giúp giảm kích thước hình ảnh và gia tăng tốc độ xây dựng.

Mẫu Tệp JavaScript Fastify Tối Thiểu

Để chạy Fastify, bạn cần một tệp index.js giống như sau:

Copy
const fastify = require("fastify")({ logger: true });

fastify.get("/", async (request, reply) => {
  return { hello: "world" };
});

const start = async () => {
  try {
    await fastify.listen({ port: 3000, host: "0.0.0.0" });
  } catch (err) {
    fastify.log.error(err);
    process.exit(1);
  }
};

start();

Hãy chú ý việc thiết lập host là 0.0.0.0 trong Docker, điều này cho phép bạn chấp nhận kết nối từ bất kỳ địa chỉ IPv4 nào.

Triển Khai Ứng Dụng Docker

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, chẳng hạn như Heroku, DigitalOcean hoặc AWS ECS.

Triển Khai Trên Sliplane

Nếu lựa chọn nền tảng Sliplane, quy trình triển khai vô cùng đơn giản: tạo một service mới bằng cách chọn repository Github của bạn, giữ các cài đặt mặc định và nhấn deploy. Ứng dụng của bạn sẽ có sẵn trên một subdomain của sliplane.app. Sliplane cung cấp các tính năng như xem log, theo dõi metric (CPU, bộ nhớ), thêm persistent storage và tự động deploy khi bạn push code lên repository.

Kết Luận

Qua bài viết này, hy vọng các bạn sẽ có thêm kiến thức về cách Docker quá ứng dụng Fastify một cách đơn giản và nhanh chóng, từ đó dễ dàng triển khai lên các nền tảng đám mây. Hãy bắt tay vào thực hiện và tận hưởng trải nghiệm lập trình hiện đại!
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào