English version here

Gần đây do cá nhân cần quản lý nhiều tên miền trên nhiều máy chủ nên dần cảm thấy việc cài đặt từng máy chủ một khá là mất công. Nhất là khi khởi động lại, chuyển nhà, nâng cấp, hoặc cập nhật lại giấy chứng nhận SSL.

Vì thế mình đã tạo một thư viện trên github để tự động hóa thao tác này. Thư viện này có những điểm lợi như sau:

  • Không gói phụ thuộc: tất cả bạn cần là docker được cài sẵn trên máy. Thậm chí bạn còn không cần thiết cài đặt các gói máy chủ reserved proxy như nginx, apache (httpd).
  • Cách sử dụng siêu đơn giản (khổng lồ?): tất cả thao tác được thực hiện qua MỘT câu lệnh và KHÔNG cần tham số. Mọi thứ sẽ được thao tác tự động bên trong.
  • Bảo mật cao + tốc độ cao: cấu hình mặc định được mông má dựa trên cấu hình được cung cấp bởi h5bp.
  • Tính tùy biến cao: bạn có thể dễ dàng tùy biến cấu hình nginx mà không cần phải chỉnh sửa mã nguồn của script.
  • Đa năng: hỗ trợ nhiều tên miền trên cùng một máy chủ, tự động kiểm tra và cập nhật giấy chứng nhận SSL, khởi động lại máy chủ nếu giấy chứng nhận được làm mới.
  • Mã nguồn mở cấu trúc đơn giản
  • Gửi thông báo qua slack nếu có lỗi lúc cập nhật giấy chứng nhận.

Cách sử dụng

  • Đảm bảo không có tiến trình nào đang chờ (listen) ở cổng 80 hoặc 443 qua lệnh sudo netstat -tulnp hoặc cụ thể hơn
sudo netstat -tulnp | grep :80
sudo netstat -tulnp | grep :443
  • Cấu hình DNS trên trang điều khiển của nhà cung cấp tên miền bạn đang đăng ký để trỏ tên miền cần cài đặt đến máy chủ. Bước này nhằm để xác minh tính chính chủ cho tên miền của bạn, nếu không bạn không thể yêu cầu cấp phát giấy chứng nhận SSL.
  • Tải về mã nguồn từ trang github repository
git clone https://github.com/tranvansang/ssl
  • Chuyển đến thư mục ssl cd ssl
  • Thiết lập cấu hình
cp .env.example .env
#edit .env
cat .env

Giả sử với cấu hình mẫu như bên dưới. Bạn cần thiết lập các giá trị mydomain1.com myadmin.mydomain2.com tương ứng với tên miền, và 8082 8081 tương ứng với cổng thiết lập cho các tiến trình hoạt động cho tên miền đó.
SLACK_WEBHOOOK_URL là webhook url để gửi thông báo lỗi nếu có lỗi khi cập nhật chứng chỉ SSL. Trường này có thể thiết lập rỗng, khi đó lỗi chỉ hiển thị ở máy chủ địa phương (local server).

DOMAINS=mydomain1.com,myadmin.mydomain2.com
PORTS=8082,8081
#slack webhook can be empty
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/TB1MYMSUX/some/hook-id
EMAIL=info@transang.me

CERTBOT_VER=v0.33.1
NGINX_VER=1.17.1
NGINX_DOCKER_FLAG=
  • Từ giờ, chỉ cần thực hiện ./run.sh bạn đã có thể khởi động/tái khởi động máy chủ nginx.
  • Để kiểm tra giấy phép SSL thường xuyên, bạn cần thêm nhiệm vụ sau vào trong danh sách crontab crontab -e
0 15 * * * $HOME/ssl/watch.sh

Tùy biến

Ngoài ra, nếu cần thiết lập cấu hình nginx riêng. Bạn vẫn thực hiện đầy đủ các bước như trên. Khi đó sẽ có tập tin tên nginx.conf ở tại thư mục build/. Bạn sao chép tập tin này ra thư mục gốc của thư viện cp build/nginx.conf ..

Chỉnh sửa lại cấu hình tùy thích trong tập tin được sao chép và khởi chạy ./run.sh, tập tin ở thư mục gốc sẽ được sử dụng thay vì cấu hình mặc định.

Làm thế nào để tạm dừng máy chủ

Bạn có thể sử dụng ./run.sh stop để dừng máy chủ đang chạy hiện tại.

Code vui!