Skip to content

Latest commit

 

History

History
907 lines (651 loc) · 38.9 KB

File metadata and controls

907 lines (651 loc) · 38.9 KB

🌍 English | Español | Français | Italiano | Português | Deutsch | Русский | हिन्दी | 中文 | 日本語 | 한국어

HolyCode HolyCode

HolyCode Banner

License: MIT Docker Pulls Full Image GitHub Stars Twitter Follow PayPal Buy Me A Coffee Website GitHub Release Issues Contributors

ひとつのコンテナ。すべてのツール。あらゆるプロバイダー。

OpenCode がコンテナ内で動作し、すべてが事前にインストール済み。50以上の開発ツール、10以上のAIプロバイダー、ヘッドレスブラウザ、永続状態。どのマシンにでも展開して、止めたところから正確に再開できます。

Claude サブスクリプションで動作します。 Claude Auth プラグインを有効にして、既存の Claude Max/Pro プランを使用してください。別の API キーは不要です。

マルチエージェントオーケストレーション内蔵。 oh-my-openagent を有効にして、OpenCode を並列実行による協調エージェントシステムに変えましょう。

環境の復元に1時間かけるつもりだったはずです。それとも docker compose up を実行するだけにしますか。

セルフホストしたくない場合は? HolyCode Cloud が登場します。同じツール、ゼロセットアップ。アーリーアクセスは無料です。


これは何ですか?

おなじみの流れです。開発環境を完璧に整えます。そして別のマシンに移ります。あるいはコンテナを再構築します。あるいはシステムが今日で終わりと判断します。

突然、ツールを再インストールしています。設定ファイルを探しています。APIキーを再入力しています。なぜ ripgrep が PATH にないのか首をかしげています。Docker がコンテナに 64MB の共有メモリしか与えないから Chromium が起動しない理由を調べています。次に Xvfb が設定されていません。次にコンテナ内の UID がホストと一致せず、あちこちで permission denied になります。

HolyCode は、これらすべての問題を解決した上で構築したコンテナです。

OpenCode をラップしています。OpenCode は組み込み Web UI を持つ AI コーディングエージェントです。設定、セッション、MCP 設定、プラグイン、ツール履歴はすべてコンテナ外のバインドマウントに保存されます。再構築、更新、新しいマシンへの移行。状態はすぐに戻ります。

HolyClaude と同じコンセプトですが、Claude Code の代わりに OpenCode をラップしています。そして重要な点として、OpenCode は特定のプロバイダーに縛られていません。Anthropic、OpenAI、Google Gemini、Groq、AWS Bedrock、Azure OpenAI に向けることができます。同じコンテナで、モデルはあなたが選びます。

30以上の開発ツール、2つの言語ランタイム、ヘッドレスブラウザスタック、プロセス監視。すべて配線済み、初回起動から使用可能。私は自分のサーバーで動かし続けています。すべてのバグはすでに踏んで、診断して、修正済みです。

プルします。実行します。ブラウザを開きます。構築します。


目次

セクション
1 クイックスタート
2 HolyCode Cloud
3 プラットフォームサポート
4 なぜ HolyCode か
5 プロバイダーサポート
6 Docker Compose - クイック
7 Docker Compose - フル
8 環境変数
9 中身は何か
10 バンドルサービス
11 アーキテクチャ
12 CLI の使い方
13 データと永続化
14 パーミッション
15 アップグレード
16 トラブルシューティング
17 ローカルビルド
18 コントリビュート
19 サポート
20 ライセンス

🚀 クイックスタート

ステップ 1. イメージをプルします。

docker pull coderluii/holycode:latest

ステップ 2. docker-compose.yaml を作成します。

services:
  holycode:
    image: coderluii/holycode:latest
    container_name: holycode
    restart: unless-stopped
    shm_size: 2g
    ports:
      - "4096:4096"
    volumes:
      - ./data/opencode:/home/opencode
      - ./local-cache/opencode:/home/opencode/.cache/opencode
      - ./workspace:/workspace
    environment:
      - PUID=1000
      - PGID=1000
      - ANTHROPIC_API_KEY=your-key-here

ステップ 3. 起動します。

docker compose up -d

http://localhost:4096 を開きます。準備完了です。

同梱の docker-compose.yaml${ANTHROPIC_API_KEY} 構文を使用しており、シェル環境または .env ファイルから読み込みます。.env.example.env にコピーして API キーを入力してください。

トップへ戻る


☁ HolyCode Cloud(近日公開)

セルフホストしたくない場合は?HolyCode のマネージドバージョンを構築中です。

同じ 30以上のツール。同じ 10以上のプロバイダー。同じ永続状態。Docker 不要。ターミナル不要。ブラウザを開くだけでコーディングできます。

Cloud で得られるもの:

  • ゼロセットアップ。Docker も設定ファイルもターミナルコマンドも不要。
  • あらゆるデバイスで動作。ラップトップ、タブレット、スマートフォン。ブラウザを開くだけ。
  • 常に最新。最新の OpenCode、最新のツール。私たちが管理します。
  • 状態がついてきます。セッション、設定、MCP 設定が使用間で保存されます。

アーリーアクセスは無料。 クレジットカード不要。

スポットを確保する

トップへ戻る


💻 プラットフォームサポート

プラットフォーム アーキテクチャ ステータス
Linux amd64 サポート済み
Linux arm64 サポート済み
macOS (Docker Desktop) amd64 / arm64 サポート済み
Windows (WSL2) amd64 サポート済み

トップへ戻る


⚡ なぜ HolyCode か

毎回同じセットアップを繰り返すことに疲れたので作りました。OpenCode のインストール、ヘッドレスブラウザの配線、パーミッション問題の修正、プロセス監視のデバッグ。毎。回。

だからすべてをこなすコンテナを作りました。そして可能なすべてのバグを踏んだので、あなたが踏まなくて済むようになっています。

HolyCode 自分でやる場合
最初の作業セッションまでの時間 2分以内 30〜60分
Chromium + Xvfb ヘッドレスブラウザ 事前設定済み 自分で調査、インストール、デバッグ
開発ツール一式(ripgrep、fzf、lazygit など) 事前インストール済み 一つずつ探してインストール
再構築をまたいだ状態の永続化 バインドマウントで自動 手動のバインドマウント、設定ミスしやすい
UID/GID ファイルパーミッションのリマッピング 組み込み PUID/PGID Dockerfile での chmod ハック
マルチアーキテクチャサポート amd64 + arm64 をそのまま 自分でビルドしてプッシュ
アップデート docker pull + compose up スクラッチから再構築、何も壊れないことを祈る

トップへ戻る


🤖 プロバイダーサポート

OpenCode はプロバイダーに依存しません。使用する API キーを設定するだけです。

プロバイダー 環境変数 備考
Anthropic ANTHROPIC_API_KEY Claude モデル
OpenAI OPENAI_API_KEY GPT モデル
Google Gemini GEMINI_API_KEY Gemini モデル
Groq GROQ_API_KEY 高速推論
AWS Bedrock AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION 3つすべて設定
Azure OpenAI AZURE_OPENAI_ENDPOINT, AZURE_OPENAI_API_KEY, AZURE_OPENAI_API_VERSION 3つすべて設定
GitHub GITHUB_TOKEN OpenAI 互換エンドポイント経由の GitHub Copilot
Vertex AI (OpenCode 経由で設定) Google Vertex AI モデル
GitHub Models (OpenCode 経由で設定) GitHub ホスティングのモデル
Ollama (OpenCode 経由で設定) Ollama 経由のローカルモデル

実際に使用するプロバイダーのキーだけ設定すればOKです。それ以外はオプションで無視されます。

Vertex AI、GitHub Models、Ollama は OpenCode のプロバイダーシステムで設定します。コンテナ内で opencode providers login を実行してください。

トップへ戻る


📋 Docker Compose - クイック

最小限の設定。コピーして、キーを入れて、実行するだけ。

services:
  holycode:
    image: coderluii/holycode:latest
    container_name: holycode
    restart: unless-stopped
    shm_size: 2g              # Required for Chromium stability
    ports:
      - "4096:4096"           # OpenCode web UI
    volumes:
      - ./data/opencode:/home/opencode
      - ./local-cache/opencode:/home/opencode/.cache/opencode
      - ./workspace:/workspace  # Your project files
    environment:
      - PUID=1000
      - PGID=1000
      - ANTHROPIC_API_KEY=your-key-here  # Or swap for any provider key

トップへ戻る


📄 Docker Compose - フル

すべてのオプションが文書化されています。docker-compose.yaml にコピーして必要なものをコメント解除してください。

# HolyCode - Full Configuration Reference
# Copy this file to docker-compose.yaml and customize.
# All options documented. Uncomment what you need.

services:
  holycode:
    image: coderluii/holycode:latest
    container_name: holycode
    restart: unless-stopped
    shm_size: 2g

    ports:
      - "4096:4096"   # OpenCode web UI

    volumes:
      # --- Persistent state (all OpenCode data under home dir) ---
      - ./data/opencode:/home/opencode   # Config, sessions, plugins, all XDG paths

      # --- Cache isolation (keeps plugin cache on local disk, avoids CIFS/SMB symlink issues) ---
      - ./local-cache/opencode:/home/opencode/.cache/opencode

      # --- Workspace ---
      - ./workspace:/workspace   # Your project files

    environment:
      # --- Container user ---
      - PUID=1000                # Match your host UID for file permissions
      - PGID=1000                # Match your host GID for file permissions

      # --- Git identity (used on first boot) ---
      # - GIT_USER_NAME=Your Name
      # - GIT_USER_EMAIL=you@example.com

      # --- AI provider API keys (add the ones you use) ---
      - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-}
      # - OPENAI_API_KEY=${OPENAI_API_KEY:-}
      # - GEMINI_API_KEY=${GEMINI_API_KEY:-}
      # - GROQ_API_KEY=${GROQ_API_KEY:-}
      # - GITHUB_TOKEN=${GITHUB_TOKEN:-}

      # --- AWS Bedrock (uncomment all 3 for Bedrock) ---
      # - AWS_ACCESS_KEY_ID=
      # - AWS_SECRET_ACCESS_KEY=
      # - AWS_REGION=us-east-1

      # --- Azure OpenAI (uncomment all 3 for Azure) ---
      # - AZURE_OPENAI_ENDPOINT=
      # - AZURE_OPENAI_API_KEY=
      # - AZURE_OPENAI_API_VERSION=

      # --- OpenCode behavior (set by default in image, override if needed) ---
      # - OPENCODE_DISABLE_AUTOUPDATE=true
      # - OPENCODE_DISABLE_TERMINAL_TITLE=true
      # - OPENCODE_MODEL=claude-sonnet-4-6
      # - OPENCODE_PERMISSION=auto
      # - OPENCODE_DISABLE_LSP_DOWNLOAD=true
      # - OPENCODE_DISABLE_AUTOCOMPACT=true
      # - OPENCODE_ENABLE_EXA=true

      # --- Web UI Security (basic auth for opencode web) ---
      # - OPENCODE_SERVER_PASSWORD=your-password
      # - OPENCODE_SERVER_USERNAME=opencode

      # --- Claude Auth (use Claude subscription instead of API key) ---
      # Reads credentials from ./data/opencode/.claude/.credentials.json
      # NOTE: May violate Anthropic TOS. Use at your own risk.
      # Toggle on/off with docker compose down && up -d
      # - ENABLE_CLAUDE_AUTH=true

      # --- oh-my-openagent (multi-agent orchestration for OpenCode) ---
      # Installs automatically on first boot when enabled
      # Toggle on/off with docker compose down && up -d
      # - ENABLE_OH_MY_OPENAGENT=true

トップへ戻る


🔧 環境変数

変数 デフォルト 目的
PUID 1000 コンテナユーザーUID、正しいファイル所有権のためホストと一致させる
PGID 1000 コンテナユーザーGID、正しいファイル所有権のためホストと一致させる
GIT_USER_NAME HolyCode User 初回起動時に設定される Git ID
GIT_USER_EMAIL noreply@holycode.local 初回起動時に設定される Git ID
ANTHROPIC_API_KEY (なし) Anthropic Claude
OPENAI_API_KEY (なし) OpenAI GPT モデル
GEMINI_API_KEY (なし) Google Gemini
GROQ_API_KEY (なし) Groq 高速推論
GITHUB_TOKEN (なし) GitHub CLI 認証と Copilot
AWS_ACCESS_KEY_ID (なし) AWS Bedrock - 3つの AWS 変数をすべて設定
AWS_SECRET_ACCESS_KEY (なし) AWS Bedrock
AWS_REGION (なし) AWS Bedrock リージョン(例:us-east-1
AZURE_OPENAI_ENDPOINT (なし) Azure OpenAI - 3つの Azure 変数をすべて設定
AZURE_OPENAI_API_KEY (なし) Azure OpenAI
AZURE_OPENAI_API_VERSION (なし) Azure OpenAI API バージョン
OPENCODE_DISABLE_AUTOUPDATE true OpenCode がコンテナ内で自己更新するのを防止
OPENCODE_DISABLE_TERMINAL_TITLE true OpenCode がターミナルタイトルを変更するのを防止
OPENCODE_MODEL (なし) デフォルトモデルを上書き
OPENCODE_PERMISSION (なし) パーミッションプロンプトをスキップするには auto に設定
OPENCODE_DISABLE_LSP_DOWNLOAD (なし) LSP サーバーの自動ダウンロードを無効化
OPENCODE_DISABLE_AUTOCOMPACT (なし) コンテキストの自動圧縮を無効化
OPENCODE_ENABLE_EXA (なし) Exa Web 検索統合を有効化
OPENCODE_SERVER_PASSWORD (なし) Basic 認証で Web UI を保護
OPENCODE_SERVER_USERNAME opencode Web UI の Basic 認証ユーザー名
ENABLE_CLAUDE_AUTH (なし) APIキーの代わりに Claude サブスクリプションを使用するには true に設定
ENABLE_OH_MY_OPENAGENT (なし) マルチエージェントオーケストレーションプラグインを有効化するには true に設定
ENABLE_PAPERCLIP (なし) Paperclip ダッシュボードとエージェントボードを起動するには true に設定
PAPERCLIP_PORT 3100 Paperclip が使用するコンテナポートを上書き
PAPERCLIP_INSTANCE_ID default 分離された状態のためのローカル Paperclip インスタンス名
ENABLE_HERMES (なし) Hermes をバンドルされたメタエージェント API として起動するには true に設定
HERMES_PORT 8642 Hermes が使用するコンテナポートを上書き
HOLYCODE_PLUGIN_UPDATE manual プラグイン更新モード:manual(不足時にインストール)または auto(起動時にインストールと更新)

プラグインのトグル(ENABLE_CLAUDE_AUTHENABLE_OH_MY_OPENAGENT)はコンテナの再起動時に有効になります。env var を設定して docker compose down && up -d を実行してください。

HOLYCODE_PLUGIN_UPDATE はプラグインパッケージの更新を制御します。manual(デフォルト)は有効なプラグインが不足している場合のみインストールします。auto は不足しているプラグインをインストールし、起動のたびに有効なプラグインを更新します。これは OpenCode 自体にのみ影響する OPENCODE_DISABLE_AUTOUPDATE とは別です。

ENABLE_OH_MY_OPENAGENT=true はプラグインを有効にし、組み込みの /oh-my-openagent-setup スキルを公開します。スキルはプラグインが有効な場合のみ表示されます。~/.config/opencode/oh-my-openagent.jsonc のプラグイン専用設定ファイルを作成または更新するために使用してください。

HolyCode のデフォルトピッカーポリシー:表示:sisyphushephaestusprometheusatlas;非表示サブエージェント:oraclelibrarianexploremetismomusmultimodal-lookersisyphus-junior。新しいプロバイダーを追加してデフォルトの表示モデルが古く見える場合は、/oh-my-openagent-setup を再実行してから:docker exec -it holycode bash -c "bunx oh-my-opencode doctor"docker exec -it holycode bash -c "bunx oh-my-opencode refresh-model-capabilities" を実行してください。

ENABLE_PAPERCLIP=true はコンテナ内のポート 3100 で Paperclip を起動します。ダッシュボードを開き、会社を作成し、そこから OpenCode バックのエージェントを雇用してください。Paperclip は自動的に ~/.paperclip に永続化されます。

ENABLE_HERMES=true はコンテナ内のポート 8642 で Hermes を起動します。Hermes は ~/.hermes に永続化し、すでにインストールされている opencode バイナリを使用し、コード作業を HolyCode に委任しながら OpenAI 互換 API を公開できます。

GIT_USER_NAMEGIT_USER_EMAIL は初回起動時のみ適用されます。再適用するにはセンチネルファイルを削除して再起動してください:docker exec holycode rm /home/opencode/.config/opencode/.holycode-bootstrapped の後 docker compose restart

トップへ戻る


📦 中身は何か

コアツール
ツール 目的
git バージョン管理
ripgrep 高速ファイル内容検索
fd 高速ファイル検索
fzf ファジーファインダー
bat シンタックスハイライト付き Cat
eza モダンな ls の代替
lazygit ターミナル git UI
delta より良い git diff
gh GitHub CLI
htop プロセスモニター
tar アーカイブの作成と展開
tree ディレクトリツリーの可視化
less ページ付きファイルビューアー
vim ターミナルテキストエディター
tmux ターミナルマルチプレクサー
言語ランタイム
ランタイム バージョン
Node.js 22 (LTS)
npm Node.js 22 にバンドル
Python 3(システム)
pip Python 3 にバンドル
開発ツール
ツール 目的
curl HTTP リクエスト
wget ファイルダウンロード
jq JSON 処理
unzip / zip アーカイブツール
ssh リモートアクセス
build-essential + pkg-config ネイティブ npm アドオンのコンパイル
python3-venv Python 仮想環境
procps プロセスツール:ps、top
iproute2 ネットワークツール:ip、ss
lsof 開いているファイルの診断
OpenSSL 暗号化と証明書ツール(ベースイメージ経由)
ブラウザスタック
コンポーネント 目的
Chromium ヘッドレスブラウザエンジン
Xvfb 仮想フレームバッファディスプレイサーバー
Playwright ブラウザ自動化フレームワーク

ブラウザスタックはそのままヘッドレスモードで動作します。ディスプレイサーバー不要、GPU 不要、追加設定不要。Playwright と Puppeteer のスクリプトは期待通りに動作します。

正しいページレンダリングとスクリーンショットのために Liberation、DejaVu、Noto、Noto Color Emoji フォントを含みます。

バンドルサービス
サービス 目的
Hermes Agent MCP、メッセージングアダプター、OpenCode 委任を備えた自己改善型メタエージェント
Paperclip OpenCode ワーカーを雇用してハートビートで起動するローカルエージェントボード
Claude Code CLI ENABLE_CLAUDE_AUTH による Claude サブスクリプション認証フロー用にインストール済み
プロセス管理
コンポーネント 目的
s6-overlay v3 プロセススーパーバイザーと init システム
カスタムエントリーポイント UID/GID リマッピング、git 設定、ブートストラップ

s6-overlay が OpenCode と Xvfb を監視します。プロセスがクラッシュすると自動的に再起動します。スーパーバイザーが内部で処理するため、コンテナの再起動ポリシーは クリーンに保たれます。

トップへ戻る


🧩 バンドルサービス

HolyCode は OpenCode の上に2つのオプションレイヤーを同梱するようになりました。コンテナを使用するためにこれらは必要ありません。環境変数を切り替え、コンテナを再起動すると、通常の Web UI と並んでサービスが起動します。

Hermes Agent

Hermes は「よりスマートな頭脳」オプションです。バンドルされたメタエージェントとして動作し、ポート 8642 で OpenAI 互換 API を公開し、HolyCode がすでに同梱しているローカルの opencode バイナリを呼び出してコーディング作業を委任します。

有効にするには:

environment:
  - ENABLE_HERMES=true
  - HERMES_PORT=8642

Hermes の状態は /home/opencode/.hermes に保存され、HolyCode の他の部分と同じ永続化の仕組みに従います。

Paperclip

Paperclip は「エージェントボード」オプションです。ポート 3100 のローカルダッシュボードで会社を作成し、エージェントを雇用し、スケジュールに従ってエージェントを起動させることができます。内部では opencode run プロセスを起動するため、ワーカーは引き続き HolyCode です。

有効にするには:

environment:
  - ENABLE_PAPERCLIP=true
  - PAPERCLIP_PORT=3100

Paperclip の状態は /home/opencode/.paperclip に保存されます。ダッシュボードを開き、会社を設定し、そこから OpenCode バックの従業員を雇用してください。

トップへ戻る


🏗 アーキテクチャ

graph TD
    A[docker compose up -d] --> B[entrypoint.sh]
    B --> C[UID/GID Remap]
    C --> D[Plugin Toggles]
    D --> E{First Boot?}
    E -->|Yes| F[bootstrap.sh]
    E -->|No| G[s6-overlay /init]
    F --> G
    G --> H[Xvfb :99]
    G --> I[opencode web :4096]
    I --> J[Web UI]
    J --> K[Your Browser]
    I --> L[CLI Access]
    L --> M[docker exec -it holycode bash]
    M --> N[opencode TUI]
    M --> O[opencode run 'message']
    M --> P[opencode attach localhost:4096]
Loading

エントリーポイントはユーザーリマッピング、プラグイントグル、オプションのバンドルサービストグル、初回起動セットアップを処理します。s6-overlay が Xvfb、OpenCode Web サーバー、および有効にしたオプションのバンドルサービスを監視します。監視対象のプロセスがクラッシュすると、s6 が自動的に再起動します。ポート 4096 で Web UI にアクセスするか、コンテナに exec してフル CLI 体験を得てください。

トップへ戻る


💻 CLI の使い方

ポート 4096 の Web UI がメインインターフェースです。ただし、コンテナ内のコマンドラインから直接 OpenCode を使用することもできます。

インタラクティブ TUI

docker exec -it holycode bash
opencode

Web バージョンと同じ機能を持つ OpenCode のフルターミナル UI が開きます。

ワンショットコマンド

TUI に入らずに単一プロンプトを実行:

docker exec -it holycode bash -c "opencode run 'explain this codebase'"

実行中のサーバーへのアタッチ

すでに実行中の OpenCode Web サーバーにローカル TUI セッションを接続:

docker exec -it holycode bash -c "opencode attach http://localhost:4096"

Web UI と同じセッションを共有します。一方での変更は他方にも反映されます。

プロバイダー管理

コンテナ内から AI プロバイダーを一覧表示・設定:

docker exec -it holycode bash -c "opencode providers list"
docker exec -it holycode bash -c "opencode providers login"

oh-my-openagent のセットアップと再設定

ENABLE_OH_MY_OPENAGENT=true を有効にすると、/oh-my-openagent-setup スキルが利用可能になります。プラグイン専用設定を作成または更新するために使用してください:

/oh-my-openagent-setup

新しいプロバイダーを追加してデフォルトの表示モデルが古く見える場合は、/oh-my-openagent-setup を再実行してから:

docker exec -it holycode bash -c "bunx oh-my-opencode doctor"
docker exec -it holycode bash -c "bunx oh-my-opencode refresh-model-capabilities"

便利なコマンド

コマンド 機能
opencode TUI を起動
opencode run 'message' ワンショットプロンプト
opencode attach <url> 実行中のサーバーに TUI をアタッチ
opencode web --port 4096 Web サーバーを起動(s6 経由で既に実行中)
opencode serve ヘッドレス API サーバー
opencode providers list 設定済みプロバイダーを表示
opencode providers login プロバイダーを追加または切り替え
bunx oh-my-opencode doctor oh-my-openagent 設定とモデル解決を診断
bunx oh-my-opencode refresh-model-capabilities プロバイダー/モデル能力キャッシュを更新
opencode models 利用可能なモデルを一覧表示
opencode models <provider> 特定プロバイダーのモデルを一覧表示
opencode stats トークン使用量とコストを表示
opencode session list 過去のセッションを一覧表示
opencode export <sessionID> セッションを JSON でエクスポート
opencode plugin <module> プラグインをインストール
opencode upgrade OpenCode をアップグレード(コンテナでデフォルト無効)

トップへ戻る


💾 データと永続化

すべての OpenCode の状態は ./data/opencode の単一バインドマウントに保存されます。コンテナはステートレスです。バインドマウントに重要なものがすべて入っています。

ホストパス コンテナパス 内容
./data/opencode/.config/opencode /home/opencode/.config/opencode 設定、エージェント、MCP 設定、テーマ、プラグイン
./data/opencode/.local/share/opencode /home/opencode/.local/share/opencode SQLite セッションデータベース、MCP OAuth トークン
./data/opencode/.local/state/opencode /home/opencode/.local/state/opencode Frecency データ、モデルキャッシュ、キーバリューストア
./local-cache/opencode /home/opencode/.cache/opencode プラグインの node_modules、自動インストール済み依存関係

いつでもコンテナを再構築できます。docker compose pull && docker compose up -d を実行すれば、セッション、設定、設定ファイルが自動的に戻ります。

SQLite WAL に関する注意。 セッションデータベースは Write-Ahead Logging を使用しています。コンテナが実行中に .db ファイルをコピーしないでください。データベースファイルのバックアップや移行が必要な場合は、先にコンテナを停止してください。

ネットワークストレージに関する注意。 ./data/opencode が CIFS/SMB ネットワークマウント(NAS、Synology、TrueNAS)上にある場合、SMB がデフォルトでバイトレンジロックをサポートしていないため、SQLite WAL モードが失敗する可能性があります。HolyCode は起動時にこれを検出し、修正方法を警告として表示します。以下のトラブルシューティングセクションを参照してください。

トップへ戻る


🔐 パーミッション

HolyCode は PUIDPGID を使用して、コンテナ内部のユーザーをホストユーザーに合わせてリマッピングします。これにより、./workspace に書き込まれたファイルは root ではなくあなたが所有します。

Linux と macOS で ID を確認:

id -u   # PUID
id -g   # PGID

ほとんどのシステムでは 1000:1000 です。macOS では 501:20 が多いです。compose ファイルで設定:

environment:
  - PUID=501
  - PGID=20

これをスキップすると、ワークスペースのファイルが root 所有になり、ホストから編集するには sudo が必要になる場合があります。

トップへ戻る


⬆️ アップグレード

最新イメージをプルしてコンテナを再作成します。データはそのまま残ります。

docker compose pull
docker compose up -d

以上です。ワンコマンド。セッション、設定、設定ファイルはバインドマウントにあるので何も失われません。

トップへ戻る


🛠 トラブルシューティング

Chromium がクラッシュするかブラウザ自動化が失敗する

最も一般的な原因は共有メモリの不足です。Chromium が安定して動作するには少なくとも 1-2 GB の /dev/shm が必要です。

compose ファイルに shm_size: 2g があることを確認してください:

services:
  holycode:
    shm_size: 2g

これがないと、Chromium はサイレントにクラッシュするか、壊れたスクリーンショットを生成します。

ワークスペースファイルで Permission denied

PUIDPGID がホストユーザーと一致していません。ID を確認:

id -u && id -g

一致するように compose の environment セクションを更新:

environment:
  - PUID=1001   # replace with your actual UID
  - PGID=1001   # replace with your actual GID

コンテナを再作成:docker compose up -d --force-recreate

ポート 4096 がすでに使用中

マシン上の別のプロセスがポート 4096 を使用しています。別のホストポートにリマップ:

ports:
  - "4097:4096"   # access via http://localhost:4097

または競合するプロセスを見つけて停止:

# Linux / macOS
lsof -i :4096

# Windows
netstat -ano | findstr :4096
コンテナが起動するが Web UI がロードされない

コンテナのログを確認:

docker compose logs -f holycode

OpenCode は初期化に数秒かかります。docker compose up -d 後、ブラウザを開く前に 10-15 秒待ってください。それでもダメな場合、ログが理由を教えてくれます。

HolyCode に SYS_ADMIN や seccomp=unconfined が不要な理由

Chromium はコンテナ内で --no-sandbox で実行されますが、これはコンテナ化されたブラウザセットアップの標準です。これにより、他の Docker ブラウザセットアップが必要とする SYS_ADMIN 機能や seccomp=unconfined が不要になります。コンテナ自体が隔離の境界を提供します。

Chromium の組み込みサンドボックスを使用したい場合は、compose ファイルに以下を追加し、CHROMIUM_FLAGS 環境変数から --no-sandbox を削除してください:

cap_add:
  - SYS_ADMIN
security_opt:
  - seccomp=unconfined
SQLite WAL が CIFS/SMB ネットワークマウントで失敗する(NAS)

./data/opencode ディレクトリが CIFS/SMB ネットワーク共有にある場合、OpenCode が 次のエラーで失敗する可能性があります:

Failed to run the query 'PRAGMA journal_mode = WAL'

OpenCode はセッションデータベースに SQLite の Write-Ahead Logging(WAL)を使用します。 WAL にはバイトレンジロックが必要ですが、CIFS/SMB はデフォルトでこれをサポートしていません。HolyCode は起動時にこれを検出します。

修正: /etc/fstab の CIFS マウントオプションに nobrl,mfsymlinks を追加してください:

# 修正前
//192.168.1.100/share /mnt/share cifs credentials=/etc/smbcreds,uid=1000,gid=1000 0 0

# 修正後(nobrl,mfsymlinks を追加)
//192.168.1.100/share /mnt/share cifs credentials=/etc/smbcreds,uid=1000,gid=1000,nobrl,mfsymlinks 0 0

その後、再マウント:

sudo umount /mnt/share
sudo mount /mnt/share

HolyCode を再起動: docker compose up -d --force-recreate

トップへ戻る


🔨 ローカルビルド

リポジトリをクローンし、イメージをビルドし、compose ファイルで差し替えます。

git clone https://github.com/coderluii/holycode.git
cd holycode
docker build -t holycode:local .

docker-compose.yaml でイメージを差し替え:

image: holycode:local

トップへ戻る


🤝 コントリビュート

  1. リポジトリをフォーク
  2. ブランチを作成:git checkout -b feature/your-feature
  3. 変更をコミット:git commit -m "feat: your feature"
  4. プッシュ:git push origin feature/your-feature
  5. プルリクエストを開く

完全なガイドラインは CONTRIBUTING.md を参照。

トップへ戻る


⭐ サポート

HolyCode が環境設定のもう1時間を節約してくれたなら、ここに恩返しの方法があります。

トップへ戻る


📄 ライセンス

MIT ライセンス - LICENSE を参照。

トップへ戻る