Trong bài viết này mình sẽ hướng dẫn các bạn cách sử dụng Docker để deploy một website có SSL (tức là https) rất đơn giản.
Certbot là một ứng dụng Let’s Encrypt phổ biến nhất và có trong hầu hết các bản phân phối Linux chính, bao gồm khả năng cấu hình tự động thuận tiện cho Apache và Nginx.
Let’s Encrypt là một cơ quan cung cấp chứng chỉ TLS / SSL miễn phí thông qua giao thức ACME (Môi trường quản lý chứng chỉ tự động) và được phát triển bởi ISRG (Nhóm nghiên cứu bảo mật Internet).
Let’s Encrypt cung cấp cho người dùng một chứng nhận số phù hợp để kích hoạt HTTPS (có thể là TLS hoặc SSL) cho trang web của mình một cách thân thiện và hoàn toàn miễn phí.
Tất cả điều này nhằm đảm bảo một môi trường sử dụng website riêng tư, an toàn và tôn trọng giữa người dùng với nhau.
Để bắt đầu thì đầu tiên các bạn tạo thư mục chứa ssl và phân quyền thực thi cho nó.
mkdir -p /home/letsencrypt/etc/
chmod +x /home/letsencrypt/*
Certbot sử dụng port mặc định là 80 nên hãy chắc chắn máy chủ của bạn chưa listen port này.
$ netstat -tlnp | grep 80
tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 1582/docker-proxy
tcp 0 0 0.0.0.0:8022 0.0.0.0:* LISTEN 944/sshd
tcp6 0 0 :::8000 :::* LISTEN 1589/docker-proxy
tcp6 0 0 :::8022 :::* LISTEN 944/sshd
Sử dụng lệnh dưới để bắt đầu chạy container.
docker run -it -rm --name=certbot \
-p 80:80 \
-v "/home/letsencrypt/etc/:/etc/letsencrypt/" \
certbot/certbot certonly
Sau khi chạy xong lệnh trên bạn sẽ nhận được thông báo sau, hãy bấm 1 hoặc 2 tuỳ vào sự lựa chọn của bạn. Trường hợp của mình sẽ lựa chọn 1 và sau đó gõ tên domain bạn muốn lấy ssl và bấm enter để tiếp tục.
Saving debug log to /var/log/letsencrypt/letsencrypt.log
How would you like to authenticate with the ACME CA?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Spin up a temporary webserver (standalone)
2: Place files in webroot directory (webroot)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1
Please enter the domain name(s) you would like on your certificate (comma and/or
space separated) (Enter 'c' to cancel): wiki.hoanghd.com
Nếu lấy ssl thành công bạn nhận được ssl tại thư mục /etc/letsencrypt/live/ ở trong container, tương đương với thư mục mount của máy host là /home/letsencrypt/etc/
Requesting a certificate for wiki.hoanghd.com
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/wiki.hoanghd.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/wiki.hoanghd.com/privkey.pem
This certificate expires on 2023-04-13.
These files will be updated when the certificate renews.
NEXT STEPS:
- The certificate will need to be renewed before it expires. Certbot can automatically renew the certificate in the background, but you may need to take steps to enable that functionality. See https://certbot.org/renewal-setup for instructions.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
* Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
* Donating to EFF: https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Khi vào thư mục /home/letsencrypt/etc/ trên máy host, bạn sẽ thấy file ssl của mình.
/home/letsencrypt/etc/
├── accounts
│ └── acme-v02.api.letsencrypt.org
│ └── directory
│ └── 88630440bdf077c0116274f213d8a17c
│ ├── meta.json
│ ├── private_key.json
│ └── regr.json
├── archive
│ └── wiki.hoanghd.com
│ ├── cert1.pem
│ ├── chain1.pem
│ ├── fullchain1.pem
│ └── privkey1.pem
├── csr
│ ├── 0000_csr-certbot.pem
│ └── 0001_csr-certbot.pem
├── keys
│ ├── 0000_key-certbot.pem
│ └── 0001_key-certbot.pem
├── live
│ ├── hoanghd.fun
│ │ ├── cert.pem -> ../../archive/hoanghd.fun/cert1.pem
│ │ ├── chain.pem -> ../../archive/hoanghd.fun/chain1.pem
│ │ ├── fullchain.pem -> ../../archive/hoanghd.fun/fullchain1.pem
│ │ ├── privkey.pem -> ../../archive/hoanghd.fun/privkey1.pem
│ │ └── README
│ ├── README
├── renewal
│ └── wiki.hoanghd.com.conf
└── renewal-hooks
├── deploy
├── post
└── pre
Bước tiếp theo là các bạn cấu hình cho webserver thôi, chúc các bạn thành công.