Configuration Reference

All settings are in .env. Buckets:

  • Mandatory — must be set on every install
  • Nice-to-have — recommended to review; sensible defaults exist
  • Use-case-dependent — only relevant for specific scenarios

ACME Identity & Server

VariableDefaultBucketNotes
ACME_EMAILadmin@example.comMandatoryReal email. Let's Encrypt sends expiry warnings 20, 10, and 1 day before a missed renewal.
ACME_SERVERletsencryptNice-to-haveletsencrypt (default), zerossl, buypass. ZeroSSL needs separate email registration; Buypass is a European alternative.
CERT_KEYLENGTHec-256Nice-to-haveECDSA P-256 is fast and broadly supported. Use ec-384 for defense-in-depth, or 2048/3072/4096 (RSA) for legacy devices that reject ECDSA.
letsencrypt_testUse-caseUse ACME_SERVER=letsencrypt_test when debugging rate-limit issues — much higher limits but issues certs browsers don't trust. Switch back to letsencrypt for production.

Certificate Defaults

Pre-fill values for the wizard. You can override these per invocation.

VariableDefaultBucketNotes
CERT_DOMAINexample.comNice-to-haveSet to your most-used domain so wizard reruns are one Enter press.
CERT_SAN*.example.comNice-to-haveDefault wildcard SAN. Leave empty for single-domain-only workflows.

Container / Runtime

VariableDefaultBucketNotes
APP_TAG0.2.1MandatoryPin explicitly. Check releases before bumping.
COMPOSE_PROJECT_NAMEcert-ops-toolNice-to-haveChange only when running multiple instances on the same host.
CONTAINER_NAME_APP${COMPOSE_PROJECT_NAME}Nice-to-haveDerived from project name — rarely needs changing.
TZUTCNice-to-haveAffects log timestamps and crond schedule interpretation. Set to your local timezone for easier log reading.

Secrets

FileBucketNotes
.secrets/cf_token.txtMandatoryCloudflare API token. Scope: Zone > DNS > Edit on the target zone only. Do not use the Global API Key.

DNS Provider

By default cert-ops-tool uses Cloudflare (--dns dns_cf). To switch to another provider:

  1. Look up your provider's credentials in the acme.sh DNS API wiki
  2. Add the required env vars to .env
  3. Edit scripts/issue.sh — replace --dns dns_cf with your provider's flag

acme.sh supports 100+ DNS providers. The Cloudflare-specific CF_TOKEN secret can be removed if unused.

Minimum required changes

A fresh clone needs exactly three things before it works:

  1. ACME_EMAIL in .env — set to your real email
  2. .secrets/cf_token.txt — your Cloudflare API token
  3. (optional) CERT_DOMAIN — pre-fill for the wizard

Everything else has sensible defaults.