atl.sh uses TLS for HTTPS (nginx), Gemini (molly-brown), and FTP (vsftpd). Production and staging use Let’s Encrypt certificates. The dev VM uses self-signed certs.Documentation Index
Fetch the complete documentation index at: https://docs.allthingslinux.org/llms.txt
Use this file to discover all available pages before exploring further.
Certificate overview
| Service | Port | Cert source | Path |
|---|---|---|---|
| nginx (HTTPS) | 443 | Let’s Encrypt | /etc/letsencrypt/live/atl.sh/ |
| molly-brown (Gemini) | 1965 | Let’s Encrypt (prod) / self-signed (dev) | See below |
| vsftpd (FTPS) | 21 | Shared with nginx (prod) / self-signed (dev) | See below |
Production / staging paths
Dev paths
The Vagrant VM has no public domain, so Let’s Encrypt can’t issue certs. Instead:| File | Path |
|---|---|
| Certificate | /etc/ssl/certs/molly-brown.crt |
| Private key | /etc/ssl/private/molly-brown.key |
root:ssl-cert with mode 0640. The FTP role’s dev override points to these same files.
Let’s Encrypt (certbot)
Initial issuance
Certbot runs during the first deploy via the nginx role:/etc/letsencrypt/live/atl.sh/fullchain.pem doesn’t exist. It’s skipped entirely on the dev VM.
Auto-renewal
Thecertbot.timer systemd timer is enabled by the nginx role. It runs twice daily and renews certificates that are within 30 days of expiry.
Renewal for non-nginx services
Molly-brown and vsftpd read the same Let’s Encrypt cert files. After certbot renews:- nginx reloads automatically (certbot deploy hook)
- molly-brown and vsftpd need a restart to pick up new certs — add a post-renewal hook if needed:
TLS hardening
nginx
Security headers are set globally:vsftpd
Troubleshooting
“Certificate has expired”- Dev uses self-signed certs — clients must be configured to accept them
- For curl:
curl -k https://localhost/ - For Gemini clients: accept the TOFU (Trust On First Use) prompt
- Verify DNS resolves:
dig atl.sh - Certbot uses HTTP-01 challenge — port 80 must be open and reachable