This document tracks the OpenCode WEB and AI provider refactoring for codeserver-ai.
- Make OpenCode WEB deployable as a standalone Dokploy container.
- Prepare OpenCode provider configuration for multiple AI providers.
- Generate runtime
opencode.jsonfor OpenCode WEB. - Keep code-server OpenCode extension working with direct provider connections.
- Use standalone compose files per service for Dokploy.
- Update documentation and deployment guides.
- Audit code, test syntax, and push to GitHub.
- Researched OpenCode CLI config format:
opencode.jsonsupports$schema,server,provider, andmodel.- OpenCode supports
{env:VAR}substitution. opencode webusesOPENCODE_SERVER_USERNAMEandOPENCODE_SERVER_PASSWORDfor auth.
- Fixed
Dockerfile.opencode-websudoers directory creation. - Rewrote
scripts/opencode-web.shto generate runtimeopencode.json. - Rewrote
config/opencode-web/opencode.jsonwith full server/provider/model config. - Updated
config/opencode/config.jsonfor code-server extension provider config. - Updated
scripts/init.shto generate richer OpenCode config with model support. - Updated
scripts/configure-provider.shto generate OpenCode-compatible config. - Updated
scripts/generate-configs.shto generate OpenCode-compatible config. - Updated
deploy/docker-compose.opencode-web.ymlwith provider/model env vars. - Updated
deploy/docker-compose.code-server.ymlwithOPENCODE_MODEL. - Updated
deploy/docker-compose.code-server.ymlwith fixed workspace volume namecodeserver-ai-workspace. - Updated
.env.examplewithOPENCODE_MODEL. - Removed root
docker-compose.ymlorchestrator in favor of standalone service compose files. - Removed unused
scripts/install-opencode-web.sh. - Rewrote
README.md,deploy/README.md,CHANGELOG.md, andSECURITY.md. - Created this development plan.
- Full container build/run test is blocked locally because Docker daemon cannot start in this environment (
/var/run/docker.sockunavailable and/var/runread-only). - Push to GitHub after final review.
| File | Action | Status |
|---|---|---|
Dockerfile.opencode-web |
Fixed sudoers path | ✅ |
Dockerfile.codeserver |
Fixed sudoers directory creation | ✅ |
scripts/opencode-web.sh |
Rewritten runtime config generation | ✅ |
scripts/init.sh |
Rewritten OpenCode config generation | ✅ |
scripts/configure-provider.sh |
Updated provider config format | ✅ |
scripts/generate-configs.sh |
Updated OpenCode config output | ✅ |
config/opencode-web/opencode.json |
Full provider/model config | ✅ |
config/opencode/config.json |
Provider/model config | ✅ |
deploy/docker-compose.opencode-web.yml |
Standalone OpenCode WEB app config | ✅ |
deploy/docker-compose.code-server.yml |
Added model env var and fixed workspace volume name | ✅ |
docker-compose.yml |
Removed root orchestrator | ✅ |
scripts/install-opencode-web.sh |
Removed unused script | ✅ |
.env.example |
Added OPENCODE_MODEL and updated references |
✅ |
README.md |
Rewritten | ✅ |
deploy/README.md |
Rewritten | ✅ |
CHANGELOG.md |
Updated | ✅ |
SECURITY.md |
Updated | ✅ |
development_plan.md |
Created | ✅ |
bash -n scripts/*.sh
python3 -m json.tool config/opencode/config.json
python3 -m json.tool config/opencode-web/opencode.json
for f in deploy/*.yml; do
out="/tmp/$(basename "$f")"
bash scripts/render-compose.sh "$f" "$out"
docker compose --env-file .env -f "$out" config
doneservice docker start
docker infoDocker daemon cannot start in this environment due read-only filesystem restrictions. Container build/run testing should be run on the Dokploy host or a machine with a writable Docker runtime.
- Compose file:
deploy/docker-compose.opencode-web.yml - Domain:
opencodeweb.nokor24.com - Port:
4001 - Path:
/ - Upstream protocol: HTTP
- TLS: Let's Encrypt at Dokploy reverse proxy
- Required env vars:
OPENCODE_SERVER_USERNAMEOPENCODE_SERVER_PASSWORDOPENCODE_WEB_PORTOPENCODE_WEB_HOSTNAMEOPENCODE_MODEL- Provider API keys/base URLs
- Compose file:
deploy/docker-compose.code-server.yml - Domain: your code-server domain
- Port:
8443 - Path:
/ - Upstream protocol: HTTP
- Required env vars:
CS_PASSWORDCS_DEFAULT_WORKSPACEDEFAULT_PROVIDEROPENCODE_MODEL- provider API keys/base URLs
- Push changes to GitHub.
- Force rebuild
opencode-webin Dokploy. - If Bad Gateway persists, verify reverse proxy upstream protocol is
HTTP. - Check logs:
docker logs -f opencode-web
- Confirm OpenCode WEB login page loads.
- Confirm code-server OpenCode extension can call the selected provider.