{"id":41044550,"url":"https://github.com/beevelop/beecompose","last_synced_at":"2026-01-24T22:23:18.767Z","repository":{"id":138472925,"uuid":"254000716","full_name":"beevelop/BeeCompose","owner":"beevelop","description":"A curated collection of Docker Compose configurations for self-hosted services.","archived":false,"fork":false,"pushed_at":"2026-01-21T22:26:01.000Z","size":183,"stargazers_count":9,"open_issues_count":4,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-21T22:55:58.441Z","etag":null,"topics":["compose","docker","docker-compose","self-hosted","self-hosting"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/beevelop.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-04-08T06:09:59.000Z","updated_at":"2026-01-21T22:25:14.000Z","dependencies_parsed_at":null,"dependency_job_id":"74e0471c-8984-458e-b70b-b854c5773185","html_url":"https://github.com/beevelop/BeeCompose","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/beevelop/BeeCompose","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/beevelop%2FBeeCompose","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/beevelop%2FBeeCompose/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/beevelop%2FBeeCompose/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/beevelop%2FBeeCompose/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/beevelop","download_url":"https://codeload.github.com/beevelop/BeeCompose/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/beevelop%2FBeeCompose/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28661882,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T01:17:37.254Z","status":"online","status_checked_at":"2026-01-22T02:00:07.137Z","response_time":144,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["compose","docker","docker-compose","self-hosted","self-hosting"],"created_at":"2026-01-22T11:00:52.248Z","updated_at":"2026-01-22T11:01:50.763Z","avatar_url":"https://github.com/beevelop.png","language":"Shell","readme":"# BeeCompose\n\n**Production-ready Docker Compose stacks, published as OCI artifacts.**\n\nA curated collection of Docker Compose configurations for self-hosted services. Started in April 2020, BeeCompose provides production-ready setups for 30 popular self-hosted applications with Traefik integration, native healthchecks, and one-command deployment from GitHub Container Registry.\n\n## Quick Start\n\n### Deploy from GHCR (Recommended)\n\nDeploy any service directly from GitHub Container Registry without cloning the repository:\n\n```bash\n# 1. Create your environment file\ncat \u003e .env.production \u003c\u003c 'EOF'\nCOMPOSE_PROJECT_NAME=gitlab\nSERVICE_DOMAIN=gitlab.example.com\nDB_USER=gitlab\nDB_PASS=your-secure-password\nGITLAB_ROOT_PASSWORD=your-root-password\nEOF\n\n# 2. Deploy from OCI artifact\ndocker compose \\\n  -f oci://ghcr.io/beevelop/gitlab:latest \\\n  --env-file .env.production \\\n  up -d\n\n# 3. Check status\ndocker compose \\\n  -f oci://ghcr.io/beevelop/gitlab:latest \\\n  --env-file .env.production \\\n  ps\n```\n\n### Clone and Customize\n\nFor customization or development:\n\n```bash\n# Clone the repository\ngit clone https://github.com/beevelop/beecompose.git\ncd beecompose/services/gitlab\n\n# Configure environment\ncp .env.example .env.production\n# Edit .env.production with your settings\n\n# Deploy\ndocker compose --env-file .env.production up -d\n```\n\n## Prerequisites\n\n| Requirement | Minimum Version | Notes |\n|-------------|-----------------|-------|\n| Docker | 25.0+ | Required for OCI artifact support |\n| Docker Compose | v2.24+ | Bundled with Docker Desktop |\n\n**Optional:** CloudFlare account for DNS-01 Let's Encrypt challenge (used by Traefik).\n\n\u003e **Note:** OCI artifact deployment (`docker compose -f oci://...`) requires Docker 25.0 or later.\n\u003e For older Docker versions, use the \"Clone and Customize\" method.\n\n## Available Services\n\nAll services are published to `ghcr.io/beevelop/\u003cservice\u003e:\u003cversion\u003e`.\n\n| Service | Description | OCI Artifact |\n|---------|-------------|--------------|\n| **bitwarden** | Password manager (Vaultwarden) | `ghcr.io/beevelop/bitwarden` |\n| **cabot** | Monitoring and alerts | `ghcr.io/beevelop/cabot` |\n| **confluence** | Atlassian documentation | `ghcr.io/beevelop/confluence` |\n| **crowd** | Atlassian SSO | `ghcr.io/beevelop/crowd` |\n| **dependency-track** | Dependency security analysis | `ghcr.io/beevelop/dependency-track` |\n| **directus** | Headless CMS and REST API | `ghcr.io/beevelop/directus` |\n| **duckling** | NLP text parser | `ghcr.io/beevelop/duckling` |\n| **gitlab** | Git hosting with CI/CD | `ghcr.io/beevelop/gitlab` |\n| **graylog** | Log aggregation | `ghcr.io/beevelop/graylog` |\n| **huginn** | Self-hosted IFTTT/Zapier | `ghcr.io/beevelop/huginn` |\n| **jira** | Atlassian project management | `ghcr.io/beevelop/jira` |\n| **keycloak** | Identity and access management | `ghcr.io/beevelop/keycloak` |\n| **metabase** | Database analytics | `ghcr.io/beevelop/metabase` |\n| **minio** | S3-compatible object storage | `ghcr.io/beevelop/minio` |\n| **monica** | Personal CRM | `ghcr.io/beevelop/monica` |\n| **mysql** | MySQL database server | `ghcr.io/beevelop/mysql` |\n| **nexus** | Binary repository manager | `ghcr.io/beevelop/nexus` |\n| **openvpn** | OpenVPN server | `ghcr.io/beevelop/openvpn` |\n| **phpmyadmin** | MySQL web administration | `ghcr.io/beevelop/phpmyadmin` |\n| **redash** | Data visualization | `ghcr.io/beevelop/redash` |\n| **registry** | Private Docker registry | `ghcr.io/beevelop/registry` |\n| **rundeck** | Infrastructure automation | `ghcr.io/beevelop/rundeck` |\n| **sentry** | Error tracking | `ghcr.io/beevelop/sentry` |\n| **shields** | Badge generation | `ghcr.io/beevelop/shields` |\n| **sonarqube** | Code quality analysis | `ghcr.io/beevelop/sonarqube` |\n| **statping** | Status page and monitoring | `ghcr.io/beevelop/statping` |\n| **traefik** | Reverse proxy with Let's Encrypt | `ghcr.io/beevelop/traefik` |\n| **tus** | Resumable file uploads | `ghcr.io/beevelop/tus` |\n| **weblate** | Translation management | `ghcr.io/beevelop/weblate` |\n| **zabbix** | Enterprise monitoring | `ghcr.io/beevelop/zabbix` |\n\n## Common Operations\n\n| Task | Command |\n|------|---------|\n| Start service | `docker compose --env-file .env.production up -d` |\n| Stop service | `docker compose --env-file .env.production down` |\n| View logs | `docker compose --env-file .env.production logs -f` |\n| Check status | `docker compose --env-file .env.production ps` |\n| Update images | `docker compose --env-file .env.production pull \u0026\u0026 docker compose --env-file .env.production up -d` |\n| Destroy (with data) | `docker compose --env-file .env.production down -v --rmi all` |\n\n### Using OCI Artifacts\n\nWhen deploying from GHCR, include the OCI URL in each command:\n\n```bash\n# Define convenience alias\nalias dc=\"docker compose -f oci://ghcr.io/beevelop/gitlab:latest --env-file .env.production\"\n\n# Now use it for all operations\ndc up -d\ndc logs -f\ndc ps\ndc down\n```\n\n## Project Structure\n\n```\nbeecompose/\n├── .dclintrc.yaml            # Docker Compose linter configuration\n├── .github/\n│   ├── workflows/\n│   │   ├── ci-cd.yml         # CI/CD pipeline\n│   │   └── publish-oci.yml   # OCI artifact publishing\n│   └── CI-CD.md              # Pipeline documentation\n├── docs/\n│   ├── AUDIT.md              # Service inventory\n│   ├── BACKUP.md             # Backup and restore procedures\n│   ├── DEPLOYMENT.md         # Deployment guide\n│   ├── DEPENDENCIES.md       # Service dependency graph\n│   ├── MIGRATION.md          # Migration from legacy setup\n│   ├── OCI_NAMING.md         # OCI naming conventions\n│   └── TESTING.md            # Testing procedures\n└── services/\n    └── \u003cservice\u003e/\n        ├── docker-compose.yml    # Compose configuration\n        ├── .env                  # Version tags (committed)\n        ├── .env.example          # Example configuration (committed)\n        └── .env.\u003cenviron\u003e        # Your secrets (gitignored)\n```\n\n## Configuration\n\n### Environment Files\n\nEach service uses environment files for configuration:\n\n**.env** (committed) - Version tags:\n```bash\nGITLAB_VERSION=16.0.0\nPOSTGRES_VERSION=15-alpine\n```\n\n**.env.example** (committed) - Template with placeholders:\n```bash\nCOMPOSE_PROJECT_NAME=gitlab\nSERVICE_DOMAIN=gitlab.example.com\nDB_USER=bee\nDB_PASS=Swordfish\n```\n\n**.env.production** (gitignored) - Your actual configuration:\n```bash\nCOMPOSE_PROJECT_NAME=gitlab\nSERVICE_DOMAIN=gitlab.yourdomain.com\nDB_USER=gitlab\nDB_PASS=your-secure-password\n```\n\n### Traefik Integration\n\nAll services are pre-configured for Traefik v3 reverse proxy with Let's Encrypt SSL.\n\n**First, deploy Traefik:**\n\n```bash\n# Create environment\ncat \u003e .env.production \u003c\u003c 'EOF'\nCOMPOSE_PROJECT_NAME=traefik\nTRAEFIK_DOMAIN=traefik.example.com\nCLOUDFLARE_EMAIL=your@email.com\nCLOUDFLARE_API_KEY=your-api-key\nEOF\n\n# Deploy Traefik\ndocker compose \\\n  -f oci://ghcr.io/beevelop/traefik:latest \\\n  --env-file .env.production \\\n  up -d\n```\n\n**Then deploy other services.** They automatically connect via the `traefik_default` network.\n\n### Named Volumes\n\nAll services use Docker named volumes for data persistence. Volume names follow the pattern:\n\n```\n${COMPOSE_PROJECT_NAME}_\u003cpurpose\u003e\n\nExamples:\n- gitlab_app_data\n- gitlab_postgres_data\n- gitlab_redis_data\n```\n\nList volumes for a service:\n\n```bash\ndocker volume ls --filter \"name=gitlab\"\n```\n\n## Health Checks\n\nAll services include native Docker healthcheck directives. Check health status with:\n\n```bash\ndocker compose --env-file .env.production ps\n```\n\nHealthy containers show `(healthy)` in the STATUS column.\n\n## Backups\n\nSee [docs/BACKUP.md](docs/BACKUP.md) for comprehensive backup and restore procedures including:\n\n- Tar archive backups\n- Database-specific dumps (PostgreSQL, MySQL, MongoDB, Redis)\n- Restic for production environments\n- Automated backup scripts\n\nQuick backup example:\n\n```bash\n# Backup a volume\ndocker run --rm \\\n  -v gitlab_postgres_data:/data:ro \\\n  -v $(pwd)/backups:/backup \\\n  alpine tar czf /backup/gitlab_postgres_$(date +%Y%m%d).tar.gz -C /data .\n```\n\n## Documentation\n\n| Document | Description |\n|----------|-------------|\n| [Deployment Guide](docs/DEPLOYMENT.md) | Complete deployment walkthrough |\n| [Backup Guide](docs/BACKUP.md) | Backup and restore procedures |\n| [Migration Guide](docs/MIGRATION.md) | Migrate from legacy bee scripts |\n| [Testing Guide](docs/TESTING.md) | Testing procedures and validation |\n| [CI/CD Pipeline](.github/CI-CD.md) | Pipeline architecture and usage |\n| [Service Audit](docs/AUDIT.md) | Complete service inventory |\n| [OCI Naming](docs/OCI_NAMING.md) | OCI artifact naming conventions |\n\n## CI/CD\n\nThe repository includes GitHub Actions pipelines that:\n\n1. **Lint** - Validates all docker-compose.yml files with DCLint\n2. **Validate OCI** - Ensures all services are OCI-compatible (no bind mounts)\n3. **CVE Scan** - Scans images for vulnerabilities using Trivy\n4. **Test** - Validates each service starts correctly\n5. **Publish** - Publishes OCI artifacts to GHCR on main branch\n\nSee [.github/CI-CD.md](.github/CI-CD.md) for detailed documentation.\n\n## Notes\n\n- **Placeholder Values:** Examples use `example.com`, `bee` (username), and `Swordfish` (password)\n- **Traefik Version:** Uses Traefik v3 with Let's Encrypt DNS-01 challenge\n- **Restart Policy:** All containers use `restart: unless-stopped`\n- **Logging:** JSON logging with `max-size: 500k` and `max-file: 50`\n- **Docker Compose:** Files use `version: \"3\"` (optional but kept for compatibility)\n\n## Contributing\n\nPull requests are welcome! Please:\n\n1. Follow existing docker-compose patterns\n2. Include `.env.example` with placeholder values\n3. Use named volumes (no `./data/` bind mounts)\n4. Include native Docker healthcheck directives\n5. Run DCLint before submitting: `docker run --rm -v \"$(pwd):/app\" zavoloklom/dclint:latest /app/services/\u003cservice\u003e -c /app/.dclintrc.yaml`\n6. Test locally with `docker compose --env-file .env.test up -d`\n\n## License\n\n[Apache License 2.0](LICENSE)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbeevelop%2Fbeecompose","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbeevelop%2Fbeecompose","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbeevelop%2Fbeecompose/lists"}