Certbot: Free HTTPS Certs
Module:
Categories:
Pigsty comes with the Certbot tool pre-installed and enabled by default on the Infra node.
This means you can directly use the certbot
command-line tool to request a genuine Let’s Encrypt free HTTPS certificate for your Nginx server and public domain, instead of using the self-signed HTTPS certificates provided by Pigsty.
To achieve this, you need to:
- Determine which domains require certificates
- Point these domains to your server
- Use Certbot to apply for certificates
- Configure a scheduled task to renew the certificates
- Be aware of some important considerations when applying for certificates
Here are the detailed steps:
Determine Which Domains Need Certificates
First, decide which “upstream services” need genuine public certificates.
infra_portal:
home : { domain: h.pigsty.cc }
grafana : { domain: g.pigsty.cc ,endpoint: "${admin_ip}:3000" ,websocket: true }
prometheus : { domain: p.pigsty.cc ,endpoint: "${admin_ip}:9090" }
alertmanager : { domain: a.pigsty.cc ,endpoint: "${admin_ip}:9093" }
blackbox : { endpoint: "${admin_ip}:9115" }
loki : { endpoint: "${admin_ip}:3100" }
minio : { domain: m.pigsty.cc ,endpoint: "${admin_ip}:9001" ,scheme: https ,websocket: true }
web : { domain: pigsty.cc ,path: "/www/web.cc" }
repo : { domain: repo.pigsty.cc ,path: "/www/repo" }
For example, in infra_portal
, suppose we need to expose the following five services:
- Grafana monitoring dashboard at
g.pigsty.cc
- Prometheus time-series database at
p.pigsty.cc
- AlertManager alert dashboard at
a.pigsty.cc
- Pigsty documentation site at
pigsty.cc
, pointing to the local documentation directory - Pigsty software repository at
repo.pigsty.cc
, pointing to the software repository
In this example, we intentionally did not choose to apply for a genuine Let’s Encrypt certificate for the home
page. The reason will be explained in the last section.
Point These Domains to Your Server
Next, you need to point the selected domains to your server’s public IP address.
For example, if the Pigsty CC site’s IP address is 47.83.172.23
, you can set the following A records for domain resolution in your domain registrar’s DNS control panel (e.g., Alibaba Cloud DNS Console):
47.83.172.23 pigsty.cc
47.83.172.23 g.pigsty.cc
47.83.172.23 p.pigsty.cc
47.83.172.23 a.pigsty.cc
47.83.172.23 repo.pigsty.cc
After making the changes, you can verify using
Use Certbot to Apply for Certificates
The first time you apply, certbot
will prompt you to enter your email and agree to the terms of service. Just follow the instructions.
$ certbot --nginx -d pigsty.cc -d repo.pigsty.cc -d g.pigsty.cc -d p.pigsty.cc -d a.pigsty.cc
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel): [email protected]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.4-April-3-2024.pdf. You must agree in
order to register with the ACME server. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let's Encrypt project and the non-profit organization that
develops Certbot? We'd like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: N
Account registered.
Requesting a certificate for pigsty.cc and 4 more domains
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/pigsty.cc/fullchain.pem
Key is saved at: /etc/letsencrypt/live/pigsty.cc/privkey.pem
This certificate expires on 2025-05-18.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
Deploying certificate
Successfully deployed certificate for pigsty.cc to /etc/nginx/conf.d/web.conf
Successfully deployed certificate for repo.pigsty.cc to /etc/nginx/conf.d/repo.conf
Successfully deployed certificate for g.pigsty.cc to /etc/nginx/conf.d/grafana.conf
Successfully deployed certificate for p.pigsty.cc to /etc/nginx/conf.d/prometheus.conf
Successfully deployed certificate for a.pigsty.cc to /etc/nginx/conf.d/alertmanager.conf
Congratulations! You have successfully enabled HTTPS on https://pigsty.cc, https://repo.pigsty.cc, https://g.pigsty.cc, https://p.pigsty.cc, and https://a.pigsty.cc
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
After the first application, you can skip these steps and use the command directly for future applications.
Configure a Scheduled Task to Renew the Certificate
By default, certificates are valid for three months, so you should renew them before they expire by using certbot renew
.
To renew the certificate, run the following command:
certbot renew
Before executing for real, you can use the DryRun mode to test if the renewal works correctly:
certbot renew --dry-run
If you’ve modified the Nginx configuration file, make sure that Certbot’s changes do not interfere with your configuration.
You can set this command as a crontab job to run on the first day of each month at midnight to renew the certificate and print the log.
Caveats
Special attention should be paid to the SSL certificate for home
. When you apply for a certificate for it, Certbot will modify the Nginx configuration file to redirect HTTP on port 80 to HTTPS on port 443. However, this will affect the default repo_upstream
local software repository unless you make corresponding adjustments.
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.