Skip to main content

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

Để 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.

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

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

Docker-compose

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

Cài đặt Nginx reverse proxy container

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

Tạ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

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

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 và 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

Mời cà phê

Nếu cảm thấy blog mang đến những thông tin hữu ích cho công việc, cuộc sống, đam mê của bạn, đừng ngại ủng hộ một ly cà phê để mình có thêm động lực chia sẻ thêm nhiều kinh nghiệm, kiến thức nhé.

Bạn có thể ủng hộ mình qua:

Mời cà phê

Nếu cảm thấy blog mang đến những thông tin hữu ích cho công việc, cuộc sống, đam mê của bạn, đừng ngại ủng hộ một ly cà phê để mình có thêm động lực chia sẻ thêm nhiều kinh nghiệm, kiến thức nhé.

Bạn có thể ủng hộ mình qua:

Ví MoMo

image.png

Ví MoMo

Paypal

Hỗ trợ qua Paypal

Cám ơn mọi người!