feature/dockerization #201

Closed
David wants to merge 8 commits from feature/dockerization into main
Contributor

Adds Docker support for running Cobot in a container via docker-compose, including a Dockerfile fix for file ownership, a new docker-compose.yml, .env.example and quickstart documentation for the Docker workflow. Also extends the wizard init CLI to support OpenRouter as an LLM provider option alongside PPQ and Ollama.

Adds Docker support for running Cobot in a container via docker-compose, including a Dockerfile fix for file ownership, a new docker-compose.yml, .env.example and quickstart documentation for the Docker workflow. Also extends the wizard init CLI to support OpenRouter as an LLM provider option alongside PPQ and Ollama.
- Introduced a new docker-compose.yml file to define the cobot service with volume mappings for data and workspace.
- Updated .gitignore to include Docker-related directories: data/ and workspace/.
- Modified the Dockerfile to create a non-root user 'cobot' and assign ownership of the /app directory to this user, enhancing security and ensuring proper permissions.
- Introduced a new .env.example file for environment variable configuration, including placeholders for API keys.
- Expanded the quickstart documentation to include steps for running Cobot in a Docker container, detailing environment setup and commands for interactive use.
feat: enhance LLM provider options in CLI
All checks were successful
CI / lint (pull_request) Successful in 10s
CI / test (3.11) (pull_request) Successful in 22s
CI / test (3.12) (pull_request) Successful in 23s
CI / test (3.13) (pull_request) Successful in 22s
E2E Tests / e2e (pull_request) Successful in 15s
CI / build (pull_request) Successful in 7s
d76c2357c0
- Updated the CLI to include "openrouter" as a new LLM provider alongside "ppq".
- Adjusted the configuration prompts to reflect the new provider options and their respective API settings.
- Improved default model and API base URL handling based on the selected provider.
doxios requested changes 2026-03-05 16:14:16 +00:00
Dismissed
doxios left a comment
Collaborator

Hi @David! Thank you for this excellent Docker contribution. This is a solid foundation that will make Cobot much more accessible to users. I appreciate the attention to non-root container security and the clean compose setup.

What Works Well

  • Architecture: The OpenRouter-as-PPQ-provider approach is smart! Since PPQ already supports arbitrary api_base, this wizard UX convenience is the right level of abstraction rather than creating a separate plugin.
  • Security: The .env.example approach is good practice — having example placeholders helps users understand required configuration without exposing real secrets.
  • Docker Setup: The chown -R cobot:cobot /app fix addresses the non-root user permissions correctly, and the compose file structure looks clean with proper volume mounts and restart policy.
  • Documentation: The Docker quickstart section will help users get up and running quickly.

🔧 Issues to Address

1. Missing Trailing Newline in .gitignore

Issue: The .gitignore file is missing a trailing newline.
Fix: Please add a newline at the end of .gitignore to follow POSIX standards.

2. Questions on Implementation Details

Could you clarify a few things about the wizard implementation in cobot/cli.py?

  • What specific api_base URL does "openrouter" map to?
  • What default model is being set for OpenRouter?
  • Does the mapping preserve all PPQ configuration options?

📋 Minor Suggestions

  1. Environment Variables: Consider adding comments in .env.example explaining what each key is for, especially for new users.
  2. Docker Compose: You might want to add health checks or logging configuration for production use.

🎯 Overall Assessment

This PR significantly improves Cobot's accessibility and follows good containerization practices. The architectural choices are sound and align well with Cobot's minimal, self-sovereign philosophy.

Please fix the .gitignore newline issue, and I'd appreciate clarification on the OpenRouter configuration details. Once those are addressed, this will be ready to merge!

Great work on making Cobot more user-friendly! 🚀

Hi @David! Thank you for this excellent Docker contribution. This is a solid foundation that will make Cobot much more accessible to users. I appreciate the attention to non-root container security and the clean compose setup. ## ✅ What Works Well - **Architecture**: The OpenRouter-as-PPQ-provider approach is smart! Since PPQ already supports arbitrary `api_base`, this wizard UX convenience is the right level of abstraction rather than creating a separate plugin. - **Security**: The `.env.example` approach is good practice — having example placeholders helps users understand required configuration without exposing real secrets. - **Docker Setup**: The `chown -R cobot:cobot /app` fix addresses the non-root user permissions correctly, and the compose file structure looks clean with proper volume mounts and restart policy. - **Documentation**: The Docker quickstart section will help users get up and running quickly. ## 🔧 Issues to Address ### 1. Missing Trailing Newline in .gitignore **Issue**: The `.gitignore` file is missing a trailing newline. **Fix**: Please add a newline at the end of `.gitignore` to follow POSIX standards. ### 2. Questions on Implementation Details Could you clarify a few things about the wizard implementation in `cobot/cli.py`? - What specific `api_base` URL does "openrouter" map to? - What default model is being set for OpenRouter? - Does the mapping preserve all PPQ configuration options? ## 📋 Minor Suggestions 1. **Environment Variables**: Consider adding comments in `.env.example` explaining what each key is for, especially for new users. 2. **Docker Compose**: You might want to add health checks or logging configuration for production use. ## 🎯 Overall Assessment This PR significantly improves Cobot's accessibility and follows good containerization practices. The architectural choices are sound and align well with Cobot's minimal, self-sovereign philosophy. Please fix the `.gitignore` newline issue, and I'd appreciate clarification on the OpenRouter configuration details. Once those are addressed, this will be ready to merge! Great work on making Cobot more user-friendly! 🚀
Author
Contributor

@doxios

"""
Could you clarify a few things about the wizard implementation in cobot/cli.py?

What specific api_base URL does "openrouter" map to?
What default model is being set for OpenRouter?
Does the mapping preserve all PPQ configuration options?
"""

Why are you asking this, this is clear when reading the code. These are the defaults:
"""
if provider == "openrouter":
click.echo("\n OpenRouter Configuration (openrouter.ai)")
default_base = "https://openrouter.ai/api/v1"
default_model = "anthropic/claude-sonnet-4"
"""

Fix the other issues, like the .gitignore, you can add a health check to the docker compose, however don't overengineer this. The logging isn't necessary for now.

@doxios """ Could you clarify a few things about the wizard implementation in cobot/cli.py? What specific api_base URL does "openrouter" map to? What default model is being set for OpenRouter? Does the mapping preserve all PPQ configuration options? """ Why are you asking this, this is clear when reading the code. These are the defaults: """ if provider == "openrouter": click.echo("\n OpenRouter Configuration (openrouter.ai)") default_base = "https://openrouter.ai/api/v1" default_model = "anthropic/claude-sonnet-4" """ Fix the other issues, like the .gitignore, you can add a health check to the docker compose, however don't overengineer this. The logging isn't necessary for now.
Merge remote-tracking branch 'origin/main' into feature/dockerization
All checks were successful
CI / lint (pull_request) Successful in 9s
CI / test (3.11) (pull_request) Successful in 21s
CI / test (3.12) (pull_request) Successful in 23s
CI / test (3.13) (pull_request) Successful in 22s
E2E Tests / e2e (pull_request) Successful in 14s
CI / build (pull_request) Successful in 7s
20ed5936a0
Collaborator

You're right David, apologies — those questions were redundant, the answers are clearly in the code. Bad review on my part.

To summarize what's left:

  1. Fix missing trailing newline in .gitignore
  2. Add a simple health check to docker-compose.yml
  3. Skip the logging — not needed now

Small changes, happy to approve once those are in. Thanks for the contribution!

You're right David, apologies — those questions were redundant, the answers are clearly in the code. Bad review on my part. To summarize what's left: 1. ✅ Fix missing trailing newline in `.gitignore` 2. ✅ Add a simple health check to `docker-compose.yml` 3. Skip the logging — not needed now Small changes, happy to approve once those are in. Thanks for the contribution!
fix: trailing newline in .gitignore + docker health check
All checks were successful
CI / lint (pull_request) Successful in 9s
CI / test (3.11) (pull_request) Successful in 20s
CI / test (3.12) (pull_request) Successful in 22s
CI / test (3.13) (pull_request) Successful in 22s
E2E Tests / e2e (pull_request) Successful in 13s
CI / build (pull_request) Successful in 7s
8e43a89c1d
- .gitignore: add missing trailing newline (POSIX compliance)
- docker-compose.yml: add simple health check (import cobot)
doxios approved these changes 2026-03-06 07:01:32 +00:00
doxios left a comment
Collaborator

Pushed the fixes directly — trailing newline + health check. LGTM, ready to merge. Nice contribution David!

✅ Pushed the fixes directly — trailing newline + health check. LGTM, ready to merge. Nice contribution David!
- Added entries for BMad-related directories: _bmad/** and .claude/commands/**.
- Retained existing entries for Docker-related directories.
Merge remote-tracking branch 'refs/remotes/origin/feature/dockerization' into feature/dockerization
All checks were successful
CI / lint (pull_request) Successful in 10s
CI / test (3.11) (pull_request) Successful in 20s
CI / test (3.12) (pull_request) Successful in 23s
CI / test (3.13) (pull_request) Successful in 22s
E2E Tests / e2e (pull_request) Successful in 14s
CI / build (pull_request) Successful in 6s
d4182a97f4
Author
Contributor

closed, because of duplicate #209 which correctly opened PR from forked repo

closed, because of duplicate #209 which correctly opened PR from forked repo
David closed this pull request 2026-03-06 11:19:46 +00:00
All checks were successful
CI / lint (pull_request) Successful in 10s
CI / test (3.11) (pull_request) Successful in 20s
CI / test (3.12) (pull_request) Successful in 23s
CI / test (3.13) (pull_request) Successful in 22s
E2E Tests / e2e (pull_request) Successful in 14s
CI / build (pull_request) Successful in 6s

Pull request closed

Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ultanio/cobot!201
No description provided.