{"id":50389569,"url":"https://github.com/wpmoo-org/odoo-docker-compose","last_synced_at":"2026-05-30T17:30:55.628Z","repository":{"id":357704651,"uuid":"1237875371","full_name":"wpmoo-org/odoo-docker-compose","owner":"wpmoo-org","description":"Standalone Docker Compose files for local Odoo 17, 18, and 19 development.","archived":false,"fork":false,"pushed_at":"2026-05-14T00:20:15.000Z","size":1639,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-14T01:07:28.180Z","etag":null,"topics":["docker-compose","odoo","odoo-development","wpmoo"],"latest_commit_sha":null,"homepage":"https://github.com/wpmoo-org/odoo-docker-compose","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/wpmoo-org.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-13T15:36:50.000Z","updated_at":"2026-05-14T00:36:03.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/wpmoo-org/odoo-docker-compose","commit_stats":null,"previous_names":["wpmoo-org/odoo-docker-compose"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/wpmoo-org/odoo-docker-compose","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wpmoo-org%2Fodoo-docker-compose","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wpmoo-org%2Fodoo-docker-compose/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wpmoo-org%2Fodoo-docker-compose/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wpmoo-org%2Fodoo-docker-compose/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wpmoo-org","download_url":"https://codeload.github.com/wpmoo-org/odoo-docker-compose/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wpmoo-org%2Fodoo-docker-compose/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33703064,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"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":["docker-compose","odoo","odoo-development","wpmoo"],"created_at":"2026-05-30T17:30:55.049Z","updated_at":"2026-05-30T17:30:55.618Z","avatar_url":"https://github.com/wpmoo-org.png","language":"Shell","funding_links":["https://www.buymeacoffee.com/cangir"],"categories":[],"sub_categories":[],"readme":"![WPMoo Compose for Odoo environment overview](docs/assets/odoo-compose-hero.png)\n\n[![GitHub](https://img.shields.io/badge/GitHub-181717?logo=github\u0026style=flat-square)](https://github.com/wpmoo-org/odoo-docker-compose) [![CI](https://img.shields.io/github/actions/workflow/status/wpmoo-org/odoo-docker-compose/ci.yml?branch=main\u0026label=CI\u0026style=flat-square)](https://github.com/wpmoo-org/odoo-docker-compose/actions/workflows/ci.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-blue?style=flat-square)](LICENSE) [![Buy Me a Coffee](https://img.shields.io/badge/Buy%20me%20a%20coffee-FFDD00?logo=buymeacoffee\u0026logoColor=000000\u0026style=flat-square)](https://www.buymeacoffee.com/cangir)\n\n\n# WPMoo Compose for Odoo\n\nLightweight Docker Compose resources for Odoo development, staging, and\nproduction-oriented environments. This repository can be used standalone, or\ncopied into an Odoo environment managed with `@wpmoo/toolkit`.\n\nWPMoo Compose for Odoo is an independent project and is not affiliated with,\nendorsed by, or sponsored by Odoo S.A. Odoo is a trademark of Odoo S.A.\n\n## Compose layouts\n\nCompact generated-environment payload is the canonical layout (preferred by `@wpmoo/toolkit`):\n\n```text\nresources/generated-env/compose.yaml\nresources/generated-env/compose/dev.yaml\nresources/generated-env/compose/stage.yaml\nresources/generated-env/compose/prod.yaml\nresources/generated-env/config/odoo/odoo.conf\nresources/generated-env/resources/odoo/entrypoint.sh\n```\n\nLegacy standalone compatibility files (repository root):\n\n```text\ndocker-compose_17.0.yml\ndocker-compose_18.0.yml\ndocker-compose_19.0.yml\n```\n\n`@wpmoo/toolkit` resolves generated environments from `resources/generated-env/` first.\nThe root-level files are retained for standalone compatibility with older scripts and\nrepositories that still refer to these filenames.\n\nDefault local settings use Odoo 19 on port `10019`. Image tags can be\noverridden in `.env` with `ODOO_IMAGE` and `POSTGRES_IMAGE`.\n\n## Source addons\n\nStandalone custom addons can be placed directly under:\n\n```text\naddons/\n```\n\nWPMoo source repos are expected under:\n\n```text\nodoo/custom/src/private/\n```\n\nAt container startup, `entrypoint.sh` scans WPMoo source repositories for addon\nfolders containing `__manifest__.py` and creates symlinks in `/mnt/wpmoo-addons`.\nThe static Odoo config uses:\n\n```text\n/usr/lib/python3/dist-packages/odoo/addons,/mnt/extra-addons,/mnt/wpmoo-addons\n```\n\n## Standalone usage (canonical, generated layout)\n\n```bash\nmkdir -p ../my_product_dev\ncp -R resources/generated-env/. ../my_product_dev/\ncp .env.example ../my_product_dev/.env\ncd ../my_product_dev\n./scripts/up.sh\n```\n\nSet `WPMOO_ENV=stage` or `WPMOO_ENV=prod` only after providing production-grade\nsecrets, storage volumes, and reverse proxy/TLS controls.\n\n## Usage with scripts\n\n```bash\ncp .env.example .env\n./scripts/up.sh\n./scripts/logs.sh\n```\n\nOpen:\n\n```text\nhttp://localhost:10019\n```\n\nRun an Odoo shell/container command:\n\n```bash\n./scripts/shell.sh\n./scripts/odoo-bin.sh --help\n./scripts/psql.sh devel\n```\n\nRun a module lifecycle or test cycle:\n\n```bash\n./scripts/resetdb.sh devel base\n./scripts/install.sh my_module devel\n./scripts/update.sh my_module devel\n./scripts/test.sh my_module\n./scripts/test.sh my_module --db devel --mode update --tags /my_module\n./scripts/uninstall.sh my_module devel\n```\n\nRun local quality checks for addons:\n\n```bash\n./scripts/check-addons.sh\n./scripts/lint.sh\n```\n\n`check-addons.sh` validates discovered `__manifest__.py` files under `addons/`\nand `odoo/custom/src/private/` against the configured `ODOO_VERSION`. It also\nrejects public addons under `addons/` that depend on private addons under\n`odoo/custom/src/private/`.\n`lint.sh` takes no arguments. When a `.pre-commit-config.yaml` file is present,\nit first runs `pre-commit run -a`, then runs the addon manifest checks. If\n`pre-commit` is not installed, install it or remove the config file before\nrunning `lint.sh`.\n\nCreate and restore a local development snapshot:\n\n```bash\n./scripts/snapshot.sh devel before-large-change\n./scripts/restore-snapshot.sh --dry-run before-large-change devel\n./scripts/restore-snapshot.sh before-large-change devel\n```\n\n`snapshot.sh [db] [snapshot-name]` defaults to database `devel` and a timestamped\nname. Each snapshot writes `backups/snapshots/\u003cname\u003e.dump`,\n`\u003cname\u003e.filestore.tar.gz`, and `\u003cname\u003e.json`. The filestore archive contains the\nmatching Odoo filestore from `data/filestore/\u003cdb\u003e` when it exists.\nSet `WPMOO_SNAPSHOT_RETENTION_COUNT` to a positive integer to keep only the\nnewest snapshot manifests and their matching dump/filestore files.\n`restore-snapshot.sh [--dry-run] \u003csnapshot-name\u003e [db]` validates and previews\nthe selected snapshot with `--dry-run`, or restores the dump and filestore into\nthe target database without it, replacing the current local database and\nfilestore for that database. Snapshot names may contain only letters, numbers,\ndots, underscores, and dashes, and may not start with a dash.\n\nDestructive database actions are guarded in `WPMOO_ENV=stage` and\n`WPMOO_ENV=prod`. To intentionally run `resetdb.sh` or a real\n`restore-snapshot.sh` in those environments, set:\n\n```bash\nWPMOO_ALLOW_DESTRUCTIVE=1\n```\n\nExport a translation template with stock Odoo:\n\n```bash\n./scripts/pot.sh my_module devel i18n/my_module.pot\n```\n\n`pot.sh \u003cmodule[,module]\u003e [db] [output]` defaults to database `devel` and\n`i18n/\u003cfirst-module\u003e.pot`. The module list can also come from `ODOO_TEST_MODULE`\nin `.env`. The command uses stock `odoo i18n export` inside the Odoo container.\n\nStop:\n\n```bash\n./scripts/down.sh\n```\n\nRestart only Odoo:\n\n```bash\n./scripts/restart.sh\n```\n\n## Standalone legacy compatibility usage\n\nRoot legacy compose files are supported for older standalone workflows:\n\n```bash\ncp .env.example .env\ndocker compose -f docker-compose_19.0.yml up -d\ndocker compose -f docker-compose_18.0.yml up -d\ndocker compose -f docker-compose_17.0.yml up -d\n```\n\n## Future reverse proxy\n\nTraefik/reverse-proxy support is intentionally left out of the base template for\nnow. It can be added later as an optional compose overlay/profile without making\nthe local development path harder to understand.\n\n## Notes\n\n- Keep local `.env`, `data/`, `postgresql/`, and backups out of Git.\n- For production, set real secrets, non-default credentials, persistent\n  volumes, and a reverse proxy with TLS before exposing services.\n- For multi-version development, create a separate environment/worktree per Odoo branch.\n\n\n## Support\n\nIf this project helps you, you can support the work here:\n\n[![Buy Me a Coffee](https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png)](https://www.buymeacoffee.com/cangir)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwpmoo-org%2Fodoo-docker-compose","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwpmoo-org%2Fodoo-docker-compose","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwpmoo-org%2Fodoo-docker-compose/lists"}