Docker Compose deployment for OpenCode web interface with Ollama Cloud, exposed via Cloudflare Tunnel.
-
Copy environment templates:
cp env/opencode.env.example env/opencode.env cp env/cloudflared.env.example env/cloudflared.env
-
Configure OpenCode:
- Get your Ollama Cloud API key from https://ollama.com/settings/keys
- Edit
env/opencode.envand setOLLAMA_CLOUD_API_KEY
-
Configure Cloudflare Tunnel:
Option A: Automatic setup (recommended)
cp env/cloudflare-setup.env.example env/cloudflare-setup.env # Edit env/cloudflare-setup.env with your Cloudflare credentials ./scripts/setup-cloudflare-tunnel.shOption B: Manual setup
- Create a tunnel in Cloudflare Zero Trust
- Copy the tunnel token to
env/cloudflared.env
-
Start services:
docker compose up -d
-
Access OpenCode:
- Visit
https://opencode.yourdomain.com
- Visit
- opencode: Runs OpenCode web on port 4000 with Ollama server
- cloudflared: Cloudflare Tunnel for secure external access
opencode_config: Persists OpenCode configuration (including API keys)ollama_models: Persists Ollama model cache
| Variable | Description |
|---|---|
OLLAMA_CLOUD_API_KEY |
Your Ollama Cloud API key |
OPENCODE_MODEL |
Default model (default: glm-5:cloud) |
| Variable | Description |
|---|---|
TUNNEL_TOKEN |
Cloudflare Tunnel token |
This setup includes optional Cloudflare Access authentication using One-time PIN. Configure allowed emails in env/cloudflare-setup.env during tunnel setup.
View logs:
docker compose logs -f opencode
docker compose logs -f cloudflared- Never commit
env/*.envfiles (they're in.gitignore) - Use scoped API tokens, not global keys
- Limit Cloudflare Access to specific email addresses