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

Nginx và script tạo ssl với docker swarm

0 0 56

Người đăng: Nham Van Hung

Theo Viblo Asia

1. Giới thiệu.

Như bài trước mình đã dựng 1 cụm docker swarm và build BE + FE. Bây giờ chúng ta chỉ còn thiếu cấu hình nginx và ssl certificate. Bài này mình sẽ viết scripts để tạo file cấu hình nginx và tạo ssl cho domain.

2. Bắt đầu thôi nào.

2.1 Tạo script để tạo file cấu hình nginx và ssl certificate.

Mình có 3 file script như sau: create_domain.sh: Tạo file cấu hình nginx và ssl cho 1 domain mới.

create_ssl.sh: Tạo ssl cho 1 domain mới.

renew_domain_certificate.sh: Gia hạn ssl cho 1 domain sắp hết hạn.

Các bạn tạo 3 file script này băng lệnh vi. Sau đó cấp quyền thực thi cho 3 script này.

chmod +x tên script. image.png

#!/bin/bash
DOMAIN=$1
PORT=$2
if [[ "$DOMAIN" == "" || "$PORT" == "" ]]; then
echo "Not enough params. Usage: $0 <domain> <backend_port>"
exit 1
fi echo "Getting domain's SSL certificate..."
sudo docker run -it --rm --name certbot \ -v "/mnt/data/ceph/letsencrypt/etc/:/etc/letsencrypt/" \ -v "/mnt/data/ceph/letsencrypt/lib/:/var/lib/letsencrypt" \ -v "/mnt/data/ceph/letsencrypt/data/:/data/letsencrypt/" \ certbot/certbot \ certonly \ --agree-tos -m _@.com \ --webroot -w /data/letsencrypt/ -d $DOMAIN echo "Creating nginx config file..."
FILE="/mnt/data/ceph/nginx/etc/conf.d/$DOMAIN.conf"
cat > $FILE <<- EOM
server { listen 443 ssl http2; server_name $DOMAIN; ssl_certificate /etc/letsencrypt/live/$DOMAIN/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/$DOMAIN/privkey.pem; ssl_session_timeout 5m; ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES"; ssl_prefer_server_ciphers on; client_max_body_size 0; location / { proxy_pass http://localhost:$PORT; include proxy_params; } }
EOM
echo "Restarting nginx service..."
docker service update --force nginx_proxy_nginx

image.png

#!/bin/bash
DOMAIN=$1
if [[ "$DOMAIN" == "" ]]; then
echo "Not enough params. Usage: $0 <domain>"
exit 1
fi echo "Getting domain's SSL certificate..."
sudo docker run -it --rm --name certbot \ -v "/mnt/data/ceph/letsencrypt/etc/:/etc/letsencrypt/" \ -v "/mnt/data/ceph/letsencrypt/lib/:/var/lib/letsencrypt" \ -v "/mnt/data/ceph/letsencrypt/data/:/data/letsencrypt/" \ certbot/certbot \ certonly \ --agree-tos -m _@.com \ --webroot -w /data/letsencrypt/ -d $DOMAIN echo "Done..."

image.png

#!/bin/bash
echo "Renewing certificates..."
sudo docker run -it --rm --name certbot \ -v "/mnt/data/ceph/letsencrypt/etc/:/etc/letsencrypt/" \ -v "/mnt/data/ceph/letsencrypt/lib/:/var/lib/letsencrypt" \ -v "/mnt/data/ceph/letsencrypt/data/:/data/letsencrypt/" \ certbot/certbot \ renew
echo "Restarting nginx service..."
docker service update --force nginx_proxy_nginx

Tùy vào nhu cầu sử dụng mà các bạn chạy script nào cho hợp lý. File cấu hình có tất cả trên các server trong cụm swarm do thư mục /mnt/data mình đã đồng bộ dữ liệu bằng glusterfs từ bài trước.

Cấu hình nginx sẽ được tạo ở thư mục: /mnt/data/ceph/nginx/etc/conf.d.

Cấu hình ssl sẽ được tạo ở: /mnt/data/ceph/letsencrypt.

2.2 Sửa lại file cấu hình nginx cho phù hợp.

Do ở đây mình build cả Front end và backend trên cùng cụm swarm nên cần sửa lại file cấu hình nginx cho phù hợp. Cấu hình nginx của Backend thì mình sửa như sau.

server { listen 443 ssl http2; server_name domainBackend; ssl_certificate /etc/letsencrypt/live/domainBackend/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/domainBackend/privkey.pem; ssl_session_timeout 5m; ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES"; ssl_prefer_server_ciphers on; client_max_body_size 0; location / { proxy_pass http://localhost:backendPort; include proxy_params; } } 

Trong đó domainBackend là domain đã mua dùng cho backend, backendPort là port container chạy backend.

Cấu hình nginx của Frontend thì mình sửa như sau.

server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name daotaoyte.edu.vn www.daotaoyte.edu.vn; ssl_certificate /etc/letsencrypt/live/daotaoyte.edu.vn/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/daotaoyte.edu.vn/privkey.pem; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES"; ssl_prefer_server_ciphers on; charset utf-8; root /www/daotaoyte.edu.vn; location / { try_files $uri $uri/home.html home.html; }
}

Đây chính là domain daotaoyte.edu.vn mà mình đã tạo từ bài trước. Thư mục daotaoyte.edu.vn là thư mục được build từ Frontend và đưa vào thư mục /mnt/data/www.

3. Tổng kết.

Qua đây thì mình đã tạo xong file cấu hình nginx và ssl cho cụm docker swarm. Các bạn có thể chạy cả backend và frontend trên cùng 1 cụm docker để tiết kiệm chi phí. Cảm ơn các bạn.

Bình luận

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

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

NGINX là gì? NGINX server hoạt động như thế nào?

Lời nói đầu. Mình thường thấy NGINX dùng trong các dự án, và dự án hiện tại của mình cũng đang dùng.

0 0 37

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

Các cấu hình sai Nginx phổ biến khiến web server của bạn gặp nguy hiểm (Part 1)

Intro. Nginx được sử dụng làm web server, reverse proxy mạnh mẽ, nginx được cài đặt cho khoảng 1/3 số web site trên thế giới này.

0 0 58

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

Giới thiệu về NGINX và core concept

1. NGINX là gì. 2. Tiểu sử.

0 0 21

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

Cấu hình Nginx Server như thế nào?

Nginx là một Web Server phổ biến, quen thuộc đối với những Web Developer. Nginx hoạt động mạnh mẽ với hiệu suất cao, khả năng xử lí nhiều request đồng thời một lúc mà lại tốn ít tài nguyên.

0 0 129

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

Dynamic Routing trong NGINX

Tiếp nối bài viết trước, Cấu hình Nginx Server như thế nào?. Trong bài viết này, mình sẽ giới thiệu về Dynamic Routing trong NGINX.

0 0 30

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

Cách cấu hình NGINX thành Reverse Proxy

Tiếp nối bài viết trước Dynamic Routing trong NGINX, trong bài viết này mình sẽ hướng dẫn các bạn cách cấu hình NGINX thành Reverse Proxy. Một số ưu điểm của Reverse Proxy là:.

0 0 122