Cài đặt Nginx Reverse Proxy để triển khai nhiều ứng dụng sử dụng Docker

Nội dung
Nội dung

Để triển khai nhiều ứng dụng trên Docker ngoài việc mapping hoặc expose ra bên ngoài thì chúng ta còn cách khác để triển khai đó là tạo một Reverse Proxy Nginx. Bài viết này mình chia sẻ các bạn làm thế nào để cài đặt một Nginx Reverse Proxy để triển khai nhiều ứng dụng sử dụng Docker.

1. Chuẩn bị

  • Máy ảo/VPS hệ điều hành Ubuntu/Debian/Centos. Bạn nào mới bắt đầu thì có thể đăng kí một tài khoản trên Digital Ocean để vọc. Hiện tai đang khuyến mãi tặng $200 dùng trong 60 ngày.
  • Cài Docker, docker-compose.
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
apt-cache policy docker-ce
sudo apt install docker-ce
sudo systemctl status docker
sudo usermod -aG docker ${USER}
su - ${USER}
sudo usermod -aG docker username

sudo curl -L https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

2. Cài đặt Nginx reverse proxy container

mkdir reverse-proxy && cd reverse-proxy
docker network create net

2.1Tạo file cấu hình nginx

nano docker-compose.yml

version: "3.7"

services:

reverse-proxy:
image: "jwilder/nginx-proxy:latest"
container_name: "reverse-proxy"
volumes:
- "html:/usr/share/nginx/html"
- "dhparam:/etc/nginx/dhparam"
- "vhost:/etc/nginx/vhost.d"
- "certs:/etc/nginx/certs"
- "/run/docker.sock:/tmp/docker.sock:ro"
restart: "always"
networks: 
- "net"
ports:
- "80:80"
- "443:443"
letsencrypt:
image: "jrcs/letsencrypt-nginx-proxy-companion:latest"
container_name: "letsencrypt-helper"
volumes:
- "html:/usr/share/nginx/html"
- "dhparam:/etc/nginx/dhparam"
- "vhost:/etc/nginx/vhost.d"
- "certs:/etc/nginx/certs"
- "/run/docker.sock:/var/run/docker.sock:ro"
environment:
NGINX_PROXY_CONTAINER: "reverse-proxy"
DEFAULT_EMAIL: "[email protected]"
restart: "always"
depends_on:
- "reverse-proxy"
networks: 
- "net"
volumes:
certs:
html:
vhost:
dhparam:

networks:
net:
external: true

2.2 Test Nginx reverse proxy

docker run --rm --name nginx-dummy -e VIRTUAL_HOST=nginx-dummy.kienletv.com -e LETSENCRYPT_HOST=nginx-dummy.kienletv.com -e VIRTUAL_PORT=80 --network net -d nginx:latest
  • VIRTUAL_HOST: tên host reverse proxy
  • LETSENCRYPT_HOST: tên host để cấp certificates
docker stop nginx-dummy
docker-compose down

2.3 Chạy ứng dụng khác với reverse proxy

Triển khai ứng dụng nextcloud

Ở đây mình triển khai lần lượt 2 container với 2 domain: nextcloud0.kienletv.com nextcloud1.kienletv.com

Chạy ứng dụng 1

docker run --name nextcloud1 --network net -e VIRTUAL_HOST="nextcloud0.kienletv.com" -e LETSENCRYPT_HOST="nextcloud0.kienletv.com" -d nextcloud:19.0.2

Chạy ứng dụng 2

docker run --name nextcloud2 --network net -e VIRTUAL_HOST="nextcloud1.kienletv.com" -e LETSENCRYPT_HOST="nextcloud1.kienletv.com" -d nextcloud:19.0.2

Kiểm tra bằng cách vào 2 ứng dụng với 2 domain khác nhau. Các bạn triển khai nhiều ứng dụng bằng cách thay thế các biến VIRTUAL_HOST, LETSENCRYPT_HOST ở câu lệnh trên

3. Tổng kết

Đến đây chắc các bạn cũng đã hiểu được mô hình mà mình muốn trình bày rồi phải không? Không hiểu vọc lại chi hiểu nha.

Với mô hình dùng Nginx reverse proxy giúp chúng ta triển khai nhiều ứng dụng trên server mà không cần expose port và dễ dàng quản lí chúng qua các container.

Chúc các bạn thành công!

 

Bài viết mới nhất