Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2153aa5659 | |||
| 0e4525ca53 | |||
| 43cecab0f7 |
@@ -0,0 +1,27 @@
|
|||||||
|
# ── Shared machine setup ─────────────────────────────────────────────
|
||||||
|
# Your corporate signum / username (REQUIRED)
|
||||||
|
# This isolates your container, config, and data from other users.
|
||||||
|
SIGNUM=your-signum-here
|
||||||
|
|
||||||
|
# ── Provider ─────────────────────────────────────────────────────────
|
||||||
|
OPENCODE_PROVIDER=amazon-bedrock
|
||||||
|
OPENCODE_MODEL=amazon-bedrock/eu.anthropic.claude-opus-4-6-v1
|
||||||
|
AWS_REGION=eu-west-1
|
||||||
|
AWS_PROFILE=default
|
||||||
|
|
||||||
|
# ── Git ──────────────────────────────────────────────────────────────
|
||||||
|
GIT_USER_NAME=Your Name
|
||||||
|
GIT_USER_EMAIL=your.name@example.com
|
||||||
|
|
||||||
|
# ── Paths (adjust to your layout) ───────────────────────────────────
|
||||||
|
# Default: ~/src mounted as /workspace
|
||||||
|
# WORKSPACE_PATH=~/src
|
||||||
|
|
||||||
|
# SSH keys — defaults to shared ~/.ssh
|
||||||
|
# If you have per-user keys: SSH_KEY_PATH=~/<signum>/.ssh
|
||||||
|
# SSH_KEY_PATH=~/.ssh
|
||||||
|
|
||||||
|
# ── Locale (defaults to en_US.UTF-8) ────────────────────────────────
|
||||||
|
# LANG=sv_SE.UTF-8
|
||||||
|
# LANGUAGE=sv_SE:sv
|
||||||
|
# LC_ALL=sv_SE.UTF-8
|
||||||
+1
-1
@@ -454,7 +454,7 @@ docker compose run --rm devbox bash # interactive shell
|
|||||||
- **opencode** — AI coding assistant
|
- **opencode** — AI coding assistant
|
||||||
- **Node.js 22** — for npx-based MCP servers
|
- **Node.js 22** — for npx-based MCP servers
|
||||||
- **AWS CLI v2** — SSO and Bedrock authentication
|
- **AWS CLI v2** — SSO and Bedrock authentication
|
||||||
- **Dev tools** — git, git-lfs, ssh, ripgrep, fd, fzf, bat, eza, zoxide, uv, rustup, jq, make, curl, wget, neovim 0.12, tmux, htop, tree
|
- **Dev tools** — git, git-lfs, git-crypt, age, ssh, ripgrep, fd, fzf, bat, eza, zoxide, uv, rustup, jq, make, curl, wget, neovim 0.12, tmux, htop, tree
|
||||||
- **Non-root user** — runs as `developer` with UID auto-matched to workspace owner (sudo available)
|
- **Non-root user** — runs as `developer` with UID auto-matched to workspace owner (sudo available)
|
||||||
|
|
||||||
### OMOS image (`latest-omos`)
|
### OMOS image (`latest-omos`)
|
||||||
|
|||||||
+3
-1
@@ -5,7 +5,7 @@ ARG DEBIAN_VERSION=trixie-slim
|
|||||||
FROM debian:${DEBIAN_VERSION} AS base
|
FROM debian:${DEBIAN_VERSION} AS base
|
||||||
|
|
||||||
ARG TARGETARCH
|
ARG TARGETARCH
|
||||||
ARG OPENCODE_VERSION=1.4.7
|
ARG OPENCODE_VERSION=1.4.11
|
||||||
|
|
||||||
LABEL maintainer="joakimp"
|
LABEL maintainer="joakimp"
|
||||||
LABEL description="Portable opencode developer container"
|
LABEL description="Portable opencode developer container"
|
||||||
@@ -32,6 +32,8 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
|||||||
make \
|
make \
|
||||||
patch \
|
patch \
|
||||||
diffutils \
|
diffutils \
|
||||||
|
git-crypt \
|
||||||
|
age \
|
||||||
sudo \
|
sudo \
|
||||||
locales \
|
locales \
|
||||||
procps \
|
procps \
|
||||||
|
|||||||
@@ -271,6 +271,39 @@ volumes:
|
|||||||
- devbox-vscode:/home/developer/.vscode-server
|
- devbox-vscode:/home/developer/.vscode-server
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Shared machine setup (multiple users, single OS account)
|
||||||
|
|
||||||
|
For machines where multiple users share one OS account (e.g. a common `garage` user), a separate compose file isolates each user's config and data using a `SIGNUM` variable.
|
||||||
|
|
||||||
|
Each user creates their own directory and setup:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Replace <signum> with your username/identifier
|
||||||
|
mkdir -p ~/<signum>/opencode-devbox
|
||||||
|
cd ~/<signum>/opencode-devbox
|
||||||
|
|
||||||
|
# Copy the shared-machine compose and env files
|
||||||
|
cp /path/to/opencode-devbox/docker-compose.shared.yml docker-compose.yml
|
||||||
|
cp /path/to/opencode-devbox/.env.shared.example .env
|
||||||
|
|
||||||
|
# Create per-user config directory
|
||||||
|
mkdir -p ~/<signum>/.config/opencode
|
||||||
|
|
||||||
|
# Edit .env with your signum, provider, keys, etc.
|
||||||
|
vim .env
|
||||||
|
|
||||||
|
# Start
|
||||||
|
docker compose up -d
|
||||||
|
docker compose exec -u developer devbox-<signum> opencode
|
||||||
|
```
|
||||||
|
|
||||||
|
Each user's container, config, and named volumes are fully isolated:
|
||||||
|
- Container name: `devbox-<signum>` (no collisions)
|
||||||
|
- Named volumes: prefixed with the project directory name (automatic per-user isolation)
|
||||||
|
- Opencode config: `~/<signum>/.config/opencode/` (per-user settings, OMOS config, etc.)
|
||||||
|
|
||||||
|
See `docker-compose.shared.yml` and `.env.shared.example` for the full configuration.
|
||||||
|
|
||||||
### Rebuilding the Image
|
### Rebuilding the Image
|
||||||
|
|
||||||
`docker compose run` and `docker compose up` use the existing image — they **do not rebuild** when you change the Dockerfile or build args (e.g. updating `OPENCODE_VERSION`). Rebuild explicitly:
|
`docker compose run` and `docker compose up` use the existing image — they **do not rebuild** when you change the Dockerfile or build args (e.g. updating `OPENCODE_VERSION`). Rebuild explicitly:
|
||||||
@@ -445,7 +478,7 @@ Container (Debian trixie)
|
|||||||
├── oh-my-opencode-slim (optional — multi-agent orchestration plugin, includes Bun)
|
├── oh-my-opencode-slim (optional — multi-agent orchestration plugin, includes Bun)
|
||||||
├── AWS CLI v2 (SSO + Bedrock auth)
|
├── AWS CLI v2 (SSO + Bedrock auth)
|
||||||
├── neovim 0.12, tmux, htop, bat, eza, zoxide, uv, rustup, make
|
├── neovim 0.12, tmux, htop, bat, eza, zoxide, uv, rustup, make
|
||||||
├── git, ssh, ripgrep, fd, fzf, jq, curl, tree
|
├── git, git-crypt, age, ssh, ripgrep, fd, fzf, jq, curl, tree
|
||||||
├── Node.js (for MCP servers)
|
├── Node.js (for MCP servers)
|
||||||
├── Bun (optional — included with oh-my-opencode-slim)
|
├── Bun (optional — included with oh-my-opencode-slim)
|
||||||
├── entrypoint.sh (UID adjustment, git config, provider setup)
|
├── entrypoint.sh (UID adjustment, git config, provider setup)
|
||||||
|
|||||||
@@ -0,0 +1,50 @@
|
|||||||
|
# opencode-devbox docker-compose for shared machines
|
||||||
|
#
|
||||||
|
# For machines where multiple users share one OS account (e.g. 'garage').
|
||||||
|
# Each user gets isolated config, data, and named volumes by setting
|
||||||
|
# SIGNUM in their .env file.
|
||||||
|
#
|
||||||
|
# Setup per user:
|
||||||
|
# 1. mkdir -p ~/<signum>/opencode-devbox && cd ~/<signum>/opencode-devbox
|
||||||
|
# 2. cp docker-compose.shared.yml docker-compose.yml
|
||||||
|
# 3. cp .env.shared.example .env
|
||||||
|
# 4. Edit .env with your signum, provider, keys, etc.
|
||||||
|
# 5. mkdir -p ~/<signum>/.config/opencode
|
||||||
|
# 6. docker compose up -d
|
||||||
|
#
|
||||||
|
# Named volumes are automatically isolated per user because Docker Compose
|
||||||
|
# prefixes them with the project directory name (e.g. opencode-devbox_devbox-data).
|
||||||
|
# Since each user runs from ~/<signum>/opencode-devbox/, volumes don't collide.
|
||||||
|
|
||||||
|
services:
|
||||||
|
devbox:
|
||||||
|
image: joakimp/opencode-devbox:latest
|
||||||
|
container_name: devbox-${SIGNUM:?Set SIGNUM in .env}
|
||||||
|
stdin_open: true
|
||||||
|
tty: true
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
environment:
|
||||||
|
- TERM=xterm-256color
|
||||||
|
volumes:
|
||||||
|
# Host workspace — user's project directory
|
||||||
|
- ${WORKSPACE_PATH:-~/src}:/workspace
|
||||||
|
|
||||||
|
# SSH keys — user-specific if available, else shared
|
||||||
|
- ${SSH_KEY_PATH:-~/.ssh}:/home/developer/.ssh:ro
|
||||||
|
|
||||||
|
# Opencode config — per-user (persists settings across restarts)
|
||||||
|
- ${HOME}/${SIGNUM}/.config/opencode:/home/developer/.config/opencode
|
||||||
|
|
||||||
|
# Persist opencode data (auth, memory, session history)
|
||||||
|
- devbox-data:/home/developer/.local/share/opencode
|
||||||
|
|
||||||
|
# Persist uv data (Python installs)
|
||||||
|
- devbox-uv:/home/developer/.local/share/uv
|
||||||
|
|
||||||
|
# Optional: AWS credentials (per-user if available)
|
||||||
|
# - ${HOME}/${SIGNUM}/.aws:/home/developer/.aws
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
devbox-data:
|
||||||
|
devbox-uv:
|
||||||
Reference in New Issue
Block a user