Deploy Jupyterhub Server with Let's Encrypt SSL
Requirements:
- Ubuntu server 18.04+.
- Tên miền (domain name).
Certbot + Let's Encrypt
Để cài đặt Certbot, ta cần cài đặt snap package management cho Ubuntu:
sudo snap install core; sudo snap refresh core
Sau đó là sử dụng snap để cài đặt certbot:
sudo apt remove certbot
sudo snap install --classic certbot
Để chạy lệnh certbot, ta phải link cerbot executable file vào system path:
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Lấy SSL certificate từ Let's encrypt, lưu ý thay thế <domain_name> bằng tên miền của bạn:
sudo ufw allow 443
Output
Rule added
Rule added (v6)
sudo certbot certonly --standalone -d <domain_name>
Output
IMPORTANT NOTES:
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/<domain_name>/fullchain.pem
Key is saved at: /etc/letsencrypt/live/<domain_name>/privkey.pem
This certificate expires on 2022-02-10.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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
Tại bước này, chúng ta cần chú ý nơi lưu các file chứa private key và certkey /etc/letsencrypt/live/<domain_name>/
sudo ls /etc/letsencrypt/live/<domain_name>
Output
cert.pem chain.pem fullchain.pem privkey.pem README
Bởi vì Let's Encrypt yêu cầu phải renew SSL certificate mỗi 3 tháng nên ta phải làm lại các công đoạn trên mỗi khi SSL certificate hết hạn. Ngoài ra còn một cách khác đó là sử dụng tính năng gia hạn tự động của certbot. Để làm được điều đó, chỉ cần thêm dòng lệnh sau vào file etc/letsencrypt/renewal/<domain_name>.conf
renew_hook = systemctl reload <your_service>
Trong đó, lệnh systemctl reload <your_service> chỉ là một lệnh ví dụ, phụ thuộc vào ứng dụng của server cần cài đặt những lệnh chạy khác nhau.
Kiểm thử chức năng tự động gia hạn SSL:
sudo certbot renew --dry-run
Jupyterhub
Để cài đặt Jupyterhub trước hết cần cài đặt NodeJS và NPM mới nhất:
sudo apt-get install nodejs npm
Vì Jupyterhub là một ứng dụng của Python nên ta có thể cài đặt thông qua PyPI:
python3 -m pip install jupyterhub jupyterlab
Để khởi chạy Jupyterhub server với SSL certificate chỉ cần chạy lệnh sau:
jupyterhub --ip 0.0.0.0 --port 443 --ssl-key /etc/letsencrypt/live/<domain_name>/privkey.pem --ssl-cert /etc/letsencrypt/live/<domain_name>/cert.pem
Giờ mọi bước đã xong, chỉ cần nhập domain của bạn vào browser là có thể truy cập jupyterhub. Vì mặc định jupyterhub sử dụng PAM authentication nên để đăng nhập chỉ cần sử dụng các tài khoản của local system trên máy server.