- vừa được xem lúc

Deploy React với Docker, Nginx

0 0 43

Người đăng: Phạm Hồng Thái

Theo Viblo Asia

Mục tiêu

Trong bài viết này chúng ta sẽ tiến hành cấu hình môi trường để deploy ứng dụng React với Nginx trong Docker.

Tiến hành

1. Init project

Trước tiên để có thể deploy ứng dụng thì ta cần 1 project, ở đây mình sẽ bắt đầu với project cơ bản nhất của React.

npx create-react-app my-app

Sau khi init project xong, chúng ta sẽ có 1 cấu trúc dự án như sau

├── package.json
├── public
│ ├── ...
│ └── robots.txt
├── README.md
├── src
│ ├── ...
│ └── App.js
└── yarn.lock

2. Setup Docker

Tiếp đó ta thêm 1 vài file config sau

+ ├── docker-compose.yml
+ ├── Dockerfile
+ ├── .dockerignore
+ ├── .nginx
+ │ └── nginx.conf ├── package.json ├── public │ ├── ... │ └── robots.txt ├── README.md ├── src │ ├── ... │ └── App.js └── yarn.lock

2.1. .dockerignore

Nó sẽ ignore các file chúng ta không muốn copy vào trong image, từ đó giúp cho giảm kích thước của image tối đa.

node_modules
npm-debug.log
build
.dockerignore
**/.git
**/.DS_Store
**/node_modules

2.2. Folder .nginx

Đây sẽ folder để config nginx

File nginx.conf

server { listen 80; location / { root /usr/share/nginx/html; index index.html index.htm; try_files $uri /index.html =404; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
  • listen 80: nginx sẽ listen port 80 trong container để hiển thị app.
  • try_files: Đối với React sẽ là single page, tức là chỉ có 1 route duy nhất để hiển thị toàn bộ app. Với thứ tự try_files như trên nginx sẽ duyệt lần lượt theo thứ tự $uri > /index.html > 404(not found page) để kiểm tra, nếu k hợp lệ thì sẽ chuyển đến route tiếp theo để kiểm tra và hiển thị.
  • error_page: một vào route lỗi hiển thị mặc định.

2.3. File Dockerfile

 # 1. For build React app FROM node:lts AS development # Set working directory WORKDIR /app # COPY package.json /app/package.json COPY package-lock.json /app/package-lock.json # Same as npm install RUN npm ci COPY . /app ENV CI=true ENV PORT=3000 CMD [ "npm", "start" ] FROM development AS build RUN npm run build # 2. For Nginx setup FROM nginx:alpine # Copy config nginx COPY --from=build /app/.nginx/nginx.conf /etc/nginx/conf.d/default.conf WORKDIR /usr/share/nginx/html # Remove default nginx static assets RUN rm -rf ./* # Copy static assets from builder stage COPY --from=build /app/build . # Containers run nginx with global directives and daemon off ENTRYPOINT ["nginx", "-g", "daemon off;"]

2.4. Folder docker-compose.yml

Để đơn giản cho việc run Docker và tích hợp với nhiều service khác, ta sẽ viết thêm docker-compose.yml

version: "3.7" services: frontend: build: context: . container_name: frontend ports: - "3000:80" # map 80 in container => 3000 in local

3. Run Docker

  • Start container
 $ docker-compose up -d Building frontend Sending build context to Docker daemon 1.49MB Step 1/17 : FROM node:lts AS development ---> 9153ee3e2ced Step 2/17 : WORKDIR /app ---> Using cache ---> a7909d92148a Step 3/17 : COPY package.json /app/package.json ---> 2e690dfe99b2 Step 4/17 : COPY package-lock.json /app/package-lock.json ---> dd0132803f43 ..... Step 16/17 : COPY --from=build /app/build . ---> Using cache ---> 447488bdf601 Step 17/17 : ENTRYPOINT ["nginx", "-g", "daemon off;"] ---> Using cache ---> 6372a67cf86f Successfully built 6372a67cf86f Successfully tagged react-nginx_frontend:latest

Sau khi run xong chúng ta xem ứng dụng ở http://localhost:3000

  • Stop container
 $ docker-compose down Stopping frontend ... done Removing frontend ... done Removing network react-nginx_default

3. Tổng kết

Trên đây là hướng dẫn cấu hình để triển khai 1 ứng dụng React, Nginx trong Docker.

Các bạn có thể xem code tại đây github

Bình luận

Bài viết tương tự

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

0 0 396

- vừa được xem lúc

Phần 1: Giới thiệu về Kubernetes

Kubernetes là gì. Trang chủ: https://kubernetes.io/. Ai cần Kubernetes.

0 0 100

- vừa được xem lúc

Docker: Chưa biết gì đến biết dùng (Phần 1- Lịch sử)

1. Vì sao nên sử dụng. . .

0 0 104

- vừa được xem lúc

Docker - những kiến thức cơ bản phần 1

Giới thiệu. Nếu bạn đang làm ở một công ty công nghệ thông tin, chắc rằng bạn đã được nghe nói về Docker.

0 0 78

- vừa được xem lúc

Docker: Chưa biết gì đến biết dùng (Phần 2 - Dockerfile)

1. Mở đầu.

0 0 67

- vừa được xem lúc

Docker: Chưa biết gì đến biết dùng (Phần 3: Docker-compose)

1. Mở đầu. . .

0 0 121