=====Digital Ocean DNS-01 challange=====
Brief notes on how to setup a lets encrypt cert bot using digital oscean as dns provider.
==== Configure DNS at domain registrar ====
* At the domain name registrar, configure the domain to use Digital Ocean's nameservers.
* Example: at GoDaddy this setting is called **use custom name servers**.
==== Create an API Token ====
* Login to https://cloud.digitalocean.com/
* Register an account unless you already have one.
* Keep any credentials in a safe place.
* Click on **API** in the navigation menu.
* Select **Token → Generate new token**.
* Give the token a descriptive name, so you can identify and revoke it if necessary.
* Select the desired expiration.
* Suggestion: use **No expiration** to avoid maintenance overhead.
* Select **Custom scopes** to narrow down what the token can do with the API.
* Select the **Domain** resource type, so the token can only modify domain records.
* Click **Generate Token**.
* Copy the token string and keep it in a very safe place.
* You will not be able to view it again.
* If this token becomes public, someone could modify your DNS records.
==== Setup the certbot ====
=== Install certbot ===
* Make sure your server has internet access (required for DNS-01 challenge).
* Ensure the snap version of certbot is installed and configured:
sudo snap install --classic certbot
sudo snap set certbot trust-plugin-with-root=ok
=== Install Digital Ocean Plugin ===
* Install the Digital Ocean plugin:
sudo snap install certbot-dns-digitalocean
====Create credentials file ===
* Create the file:
sudo nano /etc/letsencrypt/digitalocean.ini
* Paste this line (replace with your security token):
dns_digitalocean_token = PASTE_TOKEN_HERE
* In nano: use **Ctrl+O** to write, then **Ctrl+X** to exit.
=== Secure credentials file ===
* Change ownership of the file:
sudo chown root:root /etc/letsencrypt/digitalocean.ini
* Restrict permissions:
sudo chmod 600 /etc/letsencrypt/digitalocean.ini
==== Activate certbot ====
=== Request certificate ===
* Replace //example.com// and //int.example.com// (add/remove domains as needed).
* Wildcards are supported, e.g. `*.example.com`.
* Use the domain owner's email.
sudo certbot certonly --dns-digitalocean \
--dns-digitalocean-credentials /etc/letsencrypt/digitalocean.ini \
-d example.com -d int.example.com \
--agree-tos --email you@example.com --non-interactive
=== Test renewal ===
* Test renewal with a dry run:
sudo certbot renew --dry-run
Avoid renewing certificates without the dry run flag as Let's encrypt has a cap of renewals/day.
=== Reload nginx ===
* If successful, check nginx config and reload:
sudo nginx -t && sudo systemctl reload nginx