Cấu hình
Yêu cầu:
- Sử dụng HDH linux, ở đây mình dùng Ubuntu.
- Cài đặt docker
- Cài đặt node.js và npm
Docker & nginx cơ bản
Để thuận tiện, ở đây mình xây dựng nginx trên docker. Bạn nào chưa biết dùng docker thì có thể xem bài viết cũ của mình ở đây.
Cấu trúc file:
1 | ├── docker-compose.yml |
Nội dung file docker-compose.yml
:
- Nginx là một máy chủ web được cấu hình bằng tập tin
nginx.conf
, file cấu hình nginx thường được đặt trong/etc/nginx/nginx.conf
. Cho nên chúng ta cần copy filenginx.conf
vào/etc/nginx/nginx.conf
ở volumes trongdocker-compose.yml
file.
1 | version: '3' |
Nội dung file nginx.conf
:
1 | user nginx; |
Khởi chạy: docker compose up -d
hoặc nếu bạn đã cài gói docker-compose thì dùng docker-compose up -d
.
Dùng docker ps
để xem container đang chạy. Nó đã chạy trên port 80, bây giờ truy cập localhost:80
để xem kết quả.
Uke, server đã chạy nhưng chỉ đơn giản là trả về file có nội dung Hello World
. Ta cùng học tiếp nhé~
Chạy docker compose down
để gỡ container đi, nếu bạn có cài những container khác mà không muốn mất thì nhớ chỉ định đúng container để gỡ, ở đây là docker compose down reverse_proxy_demo
Render html file
Tạo thêm file html/index.html:
1 |
|
Cây thư mục:
1 | ├── docker-compose.yml |
Đưa thư mục html vào container:
1 | version: '3' |
Nắm một xíu về chỉ thị root
trong nginx:
- Chỉ thị root được sử dụng để chỉ định đường dẫn tới thư mục gốc (root directory) chứa các tập tin tĩnh (ví dụ: các tập tin HTML, CSS, JavaScript, hình ảnh, v.v.) được phục vụ bởi Nginx.
- Nếu bạn đặt
root /html
; trong cấu hình Nginx, thì khi có yêu cầu truy cập đến server, Nginx sẽ tìm kiếm các tập tin tĩnh trong thư mục /html để phục vụ cho yêu cầu đó.
Chỉnh sửa file nginx.conf
:
1 | server { |
Hoặc chúng ta có thể đặt đường dẫn root cho toàn bộ server:
1 | server { |
Khởi chạy docker compose up -d
. Truy cập localhost
, file index.html
đã được khởi chạy trên browser.
Đặt chỉ thị error_page để xử lý 404 not Found
Thường thì này cũng không cần thiết lắm, nhưng mình có thể tự xử lý status 404
riêng.
Thêm file 404.html
vào thư mục html
.
1 |
|
Thêm chỉ thị error_page
:
1 | server { |
Khởi chạy: docker compose up -d
(nhớ docker compose down
trước nhé).
Truy cập localhost/abjdkje
, trang lỗi đã được đổi thành trang 404.html
của mình.
Chỉ thị proxy_pass
Công dụng của nginx là điều hướng người dùng,… nên proxy_pass
là một điều mà không thể không nhắc đến.
Mình sẽ tạo một node.js
web app cơ bản để demo cho rõ nhé.
Thêm thư mục app
:
- Đi đến thư mục
app
gõnpm init -y
- Tiếp theo chạy lệnh
npm install express
- Tạo file
app.js
:1
2
3
4
5
6
7
8
9
10
11
12
13const express = require('express');
const app = express();
const PORT = 8080;
app.get('/', (req, res) => {
res.send('Hello world!');
});
app.listen(PORT, () => {
console.log(`Server is running on http://localhost:${PORT}`);
}); - Tạo file
Dockerfile
:1
2
3
4
5
6
7
8
9
10
11
12
13FROM node:14
WORKDIR /app
COPY package*.json /app
RUN npm install
COPY . /app
EXPOSE 8080
CMD [ "node", "app.js" ]
Sau khi chạy xong ta sẽ có cây thư mục như sau:
1 | . |
Chỉnh sửa docker-compose.yml
:
1 | version: '3' |
Notes:
- Trong một môi trường Docker Compose, các dịch vụ (services) được định nghĩa trong docker-compose.yml được xem như các tên miền. Khi bạn đặt tên cho dịch vụ trong docker-compose.yml (ví dụ: node-app), Docker Compose sẽ tạo một mạng mặc định giữa các dịch vụ và sử dụng tên của dịch vụ đó làm tên miền để chúng có thể giao tiếp với nhau.
- Để nginx chuyển hướng đến
node-app
thì chúng ta phải set tên miền làhttp://node-app:8080
tuy nhiên do ở đây mình đặt tên lại cho container lànode_app_demo
nên chúng ta sẽ set làhttp://node_app_demo:8080
. - Nếu chúng ta đặt là
http://localhost:8080
thì nginx sẽ chuyển hướng đến localhost của container nginx chứ không phải lànode_app_demo
.
Cấu hình lại nginx.conf
:
1 | server { |
Với cấu hình trên, khi người dùng truy cập đến http://localhost/
thì nginx sẽ điều hướng đến container node_app_demo
.
Khởi chạy: docker compose up -d
Thư mục của mình để ở đây