{"id":34534168,"url":"https://github.com/bybatkhuu/sidecar-certbot","last_synced_at":"2026-05-03T18:35:41.239Z","repository":{"id":161321929,"uuid":"617007400","full_name":"bybatkhuu/sidecar-certbot","owner":"bybatkhuu","description":"Certbot Docker image for automatic TLS/SSL certificate obtain \u0026 renewal from Let's Encrypt. Supports sidecar/standalone mode, DNS \u0026 HTTP challenges, multiple domains, subdomains, and wildcards.","archived":false,"fork":false,"pushed_at":"2026-04-20T14:15:32.000Z","size":776,"stargazers_count":0,"open_issues_count":9,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-20T15:44:15.385Z","etag":null,"topics":["certbot","dns-challenge","docker","docker-compose","domain","http-challenge","letsencrypt","scripts","sidecar","ssl-cert","ssl-tls","standalone","tls-termination"],"latest_commit_sha":null,"homepage":"http://certbot-docs.bybatkhuu.dev","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bybatkhuu.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-03-21T14:17:43.000Z","updated_at":"2026-04-20T14:16:25.000Z","dependencies_parsed_at":"2023-10-15T02:06:27.164Z","dependency_job_id":"e628b602-6ee0-4c6e-aa0a-5c8b1dc928be","html_url":"https://github.com/bybatkhuu/sidecar-certbot","commit_stats":null,"previous_names":["bybatkhuu/sidecar-certbot"],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/bybatkhuu/sidecar-certbot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bybatkhuu%2Fsidecar-certbot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bybatkhuu%2Fsidecar-certbot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bybatkhuu%2Fsidecar-certbot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bybatkhuu%2Fsidecar-certbot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bybatkhuu","download_url":"https://codeload.github.com/bybatkhuu/sidecar-certbot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bybatkhuu%2Fsidecar-certbot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32580123,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T06:36:36.687Z","status":"ssl_error","status_checked_at":"2026-05-03T06:36:09.306Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["certbot","dns-challenge","docker","docker-compose","domain","http-challenge","letsencrypt","scripts","sidecar","ssl-cert","ssl-tls","standalone","tls-termination"],"created_at":"2025-12-24T05:56:57.841Z","updated_at":"2026-05-03T18:35:41.227Z","avatar_url":"https://github.com/bybatkhuu.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sidecar Certbot\n\n[![MIT License](https://img.shields.io/badge/License-MIT-green.svg)](https://choosealicense.com/licenses/mit/)\n[![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/bybatkhuu/sidecar-certbot/2.build-publish.yml?logo=GitHub)](https://github.com/bybatkhuu/sidecar-certbot/actions/workflows/2.build-publish.yml)\n[![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/bybatkhuu/sidecar-certbot?logo=GitHub)](https://github.com/bybatkhuu/sidecar-certbot/releases)\n[![Docker Image Version](https://img.shields.io/docker/v/bybatkhuu/certbot?sort=semver\u0026logo=docker)](https://hub.docker.com/r/bybatkhuu/certbot/tags)\n[![Docker Image Size](https://img.shields.io/docker/image-size/bybatkhuu/certbot?sort=semver\u0026logo=docker)](https://hub.docker.com/r/bybatkhuu/certbot/tags)\n\nThis is a certbot docker image that can be used as a sidecar or standalone container to automatically obtain and renew TLS/SSL certificates from Let's Encrypt.\n\n## ✨ Features\n\n- Let's Encrypt - \u003chttps://letsencrypt.org\u003e\n- Certbot - \u003chttps://certbot.eff.org\u003e\n- TLS/SSL certificates\n- Automatic certificate obtain\n- Automatic certificate renewal (checks every week)\n- DNS challenges **[recommended]**:\n    - Cloudflare DNS\n    - DigitalOcean DNS\n    - GoDaddy DNS\n    - AWS Route53\n    - Google Cloud DNS\n- HTTP challenges:\n    - Standalone\n    - Webroot\n- Sidecar or standalone mode\n- Multiple domains per certificate\n- Subdomains:\n    - Multiple subdomains per domain/certificate\n    - Wildcard subdomains (only DNS challenges)\n- Docker and docker-compose\n\n---\n\n## 🐤 Getting Started\n\n### 1. 🚧 Prerequisites\n\n- Prepare **server/PC** with **public IP address**\n- Buy or register **domain name**\n- **[RECOMMENDED]** DNS provider **API token/credentials** (required for **DNS challenges** and **wildcard subdomains**):\n    - Cloudflare:\n        - API tokens - \u003chttps://dash.cloudflare.com/profile/api-tokens\u003e\n        - certbot-dns-cloudflare - \u003chttps://certbot-dns-cloudflare.readthedocs.io/en/stable\u003e\n    - DigitalOcean:\n        - API tokens - \u003chttps://cloud.digitalocean.com/account/api/tokens\u003e\n        - certbot-dns-digitalocean - \u003chttps://certbot-dns-digitalocean.readthedocs.io/en/stable\u003e\n    - GoDaddy:\n        - API keys - \u003chttps://developer.godaddy.com/keys\u003e\n        - certbot-dns-godaddy - \u003chttps://github.com/miigotu/certbot-dns-godaddy\u003e\n    - AWS Route53:\n        - AWS access keys - \u003chttps://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html\u003e\n        - certbot-dns-route53 - \u003chttps://certbot-dns-route53.readthedocs.io/en/stable\u003e\n    - Google Cloud DNS:\n        - GCP credentials/service accounts - \u003chttps://cloud.google.com/iam/docs/service-accounts-create\u003e\n        - certbot-dns-google - \u003chttps://certbot-dns-google.readthedocs.io/en/stable\u003e\n- Install [**docker** and **docker compose**](https://docs.docker.com/engine/install) in **server**\n    - Docker image: [**bybatkhuu/certbot**](https://hub.docker.com/r/bybatkhuu/certbot)\n\nFor **DEVELOPMENT**:\n\n- Install [**git**](https://git-scm.com/downloads)\n- Setup an [**SSH key**](https://docs.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh)\n\n### 2. 📥 Download or clone the repository\n\n**2.1.** Prepare projects directory (if not exists) in your **server** with **public IP address**:\n\n```sh\n# Create projects directory:\nmkdir -pv ~/workspaces/projects\n\n# Enter into projects directory:\ncd ~/workspaces/projects\n```\n\n**2.2.** Follow one of the below options **[A]**, **[B]** or **[C]**:\n\n**A.** Clone the repository:\n\n```sh\ngit clone https://github.com/bybatkhuu/sidecar-certbot.git \u0026\u0026 \\\n    cd sidecar-certbot\n```\n\n**OPTION B.** Clone the repository (for **DEVELOPMENT**: git + ssh key):\n\n```sh\ngit clone git@github.com:bybatkhuu/sidecar-certbot.git \u0026\u0026 \\\n    cd sidecar-certbot\n```\n\n**OPTION C.** Download source code from **[releases](https://github.com/bybatkhuu/sidecar-certbot/releases)** page.\n\n### 3. 🛠 Configure the environment\n\n[TIP] Skip this step, if you've already configured environment!\n\n#### 3.1. 🌎 Configure **`.env`** (environment variables) file\n\n**[IMPORTANT]** Please, check **[environment variables](#-environment-variables)** section for more details.\n\n```sh\n# Copy .env.example file into .env file:\ncp -v .env.example .env\n\n# Edit environment variables to fit in your environment:\nnano .env\n```\n\n#### 3.2. 🎺 Configure **`compose.override.yml`** file\n\n[TIP] Skip this step, if you want run with default configuration!\n\nYou can use below template **`compose.override.yml`** files for different environments:\n\n- **DEVELOPMENT**: [**`compose.override.dev.yml`**](./templates/compose/compose.override.dev.yml)\n- **PRODUCTION/STAGING**: [**`compose.override.prod.yml`**](./templates/compose/compose.override.prod.yml)\n\n```sh\n# Copy 'compose.override.[ENV].yml' file to 'compose.override.yml' file:\ncp -v ./templates/compose/compose.override.[ENV].yml ./compose.override.yml\n# For example, DEVELOPMENT environment:\ncp -v ./templates/compose/compose.override.dev.yml ./compose.override.yml\n# For example, STAGING or PRODUCTION environment:\ncp -v ./templates/compose/compose.override.prod.yml ./compose.override.yml\n\n# Edit 'compose.override.yml' file to fit in your environment:\nnano ./compose.override.yml\n```\n\n#### 3.3. ✅ Check docker compose configuration is valid\n\n**[WARNING]** If you get an error or warning, check your configuration files (**`.env`** or **`compose.override.yml`**).\n\n```sh\n./compose.sh validate\n# Or:\ndocker compose config\n```\n\n### 4. 🚀 Start docker compose\n\n**[CAUTION]**:\n\n- If ports are conflicting, you should change ports from [**3. step**](#3--configure-the-environment).\n- If container names are conflicting, you should change project directory name (from **`sidecar-certbot`** to something else, e.g: `prod.sidecar-certbot`) from [**2.2. step**](#2--download-or-clone-the-repository).\n\n```sh\n./compose.sh start -l\n# Or:\ndocker compose up -d --remove-orphans --force-recreate \u0026\u0026 \\\n    docker compose logs -f --tail 100\n```\n\n### 5. 🔐 Check certificates\n\n```sh\n./compose.sh certs\n# Or check certificates in container:\ndocker compose exec certbot certbot certificates\n# Or check certificates in host:\nls -alhF ./volumes/storage/certbot/ssl\n# Or check certificates in host with tree:\ntree ./volumes/storage/certbot/ssl\n```\n\n### 7. 🪂 Stop docker compose\n\n```sh\n./compose.sh stop\n# Or:\ndocker compose down --remove-orphans\n```\n\n👍\n\n---\n\n## ⚙️ Configuration\n\n### 🌎 Environment Variables\n\nYou can use the following environment variables to configure:\n\n[**`.env.example`**](./.env.example):\n\n```sh\n## --- CERTBOT configs --- ##\n## Email address for Let's Encrypt domain registration:\nCERTBOT_EMAIL=user@email.com\n\n## Domain names to obtain certificates:\nCERTBOT_DOMAINS=\"example.com,www.example.com\"\n\n## DNS propagation timeout (in seconds):\nCERTBOT_DNS_TIMEOUT=30\n\n\n## -- Docker configs -- ##\n# CERTBOT_PORT=80 # port for bridge network and standalone mode\n```\n\n### 🐳 Docker container command arguments\n\nYou can use the following arguments to configure:\n\n```txt\n-s=, --server=[staging | production]\n    Let's Encrypt server. Default: staging.\n-n=, --new=[standalone | webroot]\n    Obtain option for new certificates. Default: standalone.\n-r=, --renew=[webroot | standalone]\n    Renew option for existing certificates. Default: webroot.\n-d=, --dns=[cloudflare | route53 | google | godaddy | digitalocean]\n    Use DNS challenge instead of HTTP challenge.\n-D, --disable-renew\n    Disable automatic renewal of certificates.\n-b, --bash, bash, /bin/bash\n    Run only bash shell.\n```\n\nFor example as in [**`compose.override.yml`**](./templates/compose/compose.override.dev.yml) file:\n\n```yml\n    command: [\"--server=production\"]\n    command: [\"--server=production\", \"--renew=standalone\"]\n    command: [\"--new=webroot\", \"--disable-renew\"]\n    command: [\"--server=production\", \"--dns=cloudflare\"]\n    command: [\"--dns=digitalocean\"]\n    command: [\"--dns=route53\"]\n    command: [\"--dns=google\"]\n    command: [\"--dns=godaddy\"]\n    command: [\"/bin/bash\"]\n```\n\n---\n\n## 📚 Documentation\n\n- [Build docker image](./docs/docker-build.md)\n- [Certbot examples](./docs/certbot-examples.md)\n\n### 🛤 Roadmap\n\n- Add more DNS providers.\n- Add more documentation.\n\n---\n\n## 📑 References\n\n- Certbot - \u003chttps://certbot.eff.org\u003e\n- Certbot documentation - \u003chttps://eff-certbot.readthedocs.io/en/stable\u003e\n- Let's Encrypt - \u003chttps://letsencrypt.org\u003e\n- Let's Encrypt documentation - \u003chttps://letsencrypt.org/docs\u003e\n- Docker - \u003chttps://docs.docker.com\u003e\n- Docker Compose - \u003chttps://docs.docker.com/compose\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbybatkhuu%2Fsidecar-certbot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbybatkhuu%2Fsidecar-certbot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbybatkhuu%2Fsidecar-certbot/lists"}