Để 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 sử dụng Docker.
1. Yêu cầu 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 DigitalOcean. Hiện tại có chương trình khuyến mãi tặng $200 dùng trong 60 ngày cho khách mới lần đầu đăng kí.
1.1 Cài đặt docker
Đầu tiên anh em truy cập SSH vào server và cài đặt docker bằng các câu lệnh sau
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
1.2 Cài đặt docker-compose
Tiếp theo, cài đặt docker compose để hỗ trợ chạy bằng 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
2. Cài đặt nginx reverse proxy
Tạo thư mục chứa file cấu hình cài đặt
mkdir reverse-proxy && cd reverse-proxy
docker network create net
Tạo file docker-compose cấu hình nginx reverse proxy
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
Thử test một ứng dụng nginx-dummy
để xem việc cài đặt đã thành công chưa. Bằng cách tạo một container như sau:
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
Trong đó:
- VIRTUAL_HOST: khai báo tên host hoặc domain
- LETSENCRYPT_HOST: khai báo tên host hoặc domain để cấp certificates
- VIRTUAL_PORT: Cổng ứng dụng nginx
Sau khi test xong để stop dùng lệnh sau:
docker-compose down
3. Triển khai ứng dụng khác
Triển khai ứng dụng khác. Ở đây mình triển khai ứng dụng nextcloud cho lần lượt 2 container với 2 domain: nextcloud0.kienletv.com
và nextcloud1.kienletv.com
Chạy ứng dụng 1 domain nextcloud0.kienletv.com
:
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 domain nextcloud1.kienletv.com
:
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 truy cập vào 2 domain trên. Anh em 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 bên trên là xong. Chúc các bạn thành công!
4. Nguồn tham khảo
Một số nguồn tham khảo khác anh em đọc thêm