🌍 English | Español | Français | Italiano | Português | Deutsch | Русский | हिन्दी | 中文 | 日本語 | 한국어
OpenCode работает в контейнере — всё уже установлено. 50+ инструментов разработки, 10+ AI-провайдеров, безголовый браузер, постоянное состояние. Разверните на любой машине и продолжайте с того места, где остановились.
Работает с вашей подпиской Claude. Включите плагин Claude Auth и используйте существующий план Claude Max/Pro. Отдельный API-ключ не нужен.
Мультиагентная оркестрация встроена. Включите oh-my-openagent и превратите OpenCode в координированную систему агентов с параллельным выполнением.
Вы собирались потратить час на восстановление окружения. Или просто запустить docker compose up.
Не хотите самостоятельно размещать? HolyCode Cloud скоро появится. Те же инструменты, ноль настройки. Ранний доступ бесплатный.
Всё как обычно. Вы идеально настраиваете своё рабочее окружение. Потом меняете машину. Или пересобираете контейнер. Или система решает, что сегодня её последний день.
Внезапно вы переустанавливаете инструменты. Ищете конфигурационные файлы. Заново вводите API-ключи. Гадаете, почему ripgrep больше нет в PATH. Разбираетесь, почему Chromium не запускается — Docker выделяет контейнерам 64 МБ общей памяти. Потом Xvfb не настроен. Потом UID внутри контейнера не совпадает с хостом, и везде «permission denied».
HolyCode — это контейнер, который я собрал, решив каждую из этих проблем.
Он оборачивает OpenCode — AI-агент для программирования со встроенным веб-интерфейсом. Все настройки, сессии, MCP-конфиги, плагины и история инструментов хранятся в bind-монтировании за пределами контейнера. Пересобирайте, обновляйте или переходите на новую машину. Состояние возвращается автоматически.
Та же идея, что и в HolyClaude, но обёртывает OpenCode вместо Claude Code. И вот в чём дело: OpenCode не привязан к одному провайдеру. Направьте его на Anthropic, OpenAI, Google Gemini, Groq, AWS Bedrock или Azure OpenAI. Один контейнер — ваш выбор модели.
50+ инструментов разработки, две среды выполнения языков, стек безголового браузера и управление процессами. Всё подключено, всё готово с первого запуска. Я запускаю это на своём сервере. Каждый баг был воспроизведён, диагностирован и исправлен.
Вы скачиваете. Запускаете. Открываете браузер. Создаёте.
Шаг 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.
Те же 50+ инструментов. Те же 10+ провайдеров. То же постоянное состояние. Без Docker. Без терминала. Просто откройте браузер и пишите код.
Что вы получаете с Cloud:
- Нулевая настройка. Без Docker, без конфигурационных файлов, без команд в терминале.
- Работает на любом устройстве. Ноутбук, планшет, телефон. Откройте браузер и вперёд.
- Всегда обновлено. Последняя версия OpenCode, последние инструменты. Мы всё берём на себя.
- Ваше состояние следует за вами. Сессии, настройки, MCP-конфиги сохраняются между использованиями.
Ранний доступ бесплатный. Кредитная карта не требуется.
| Платформа | Архитектура | Статус |
|---|---|---|
| Linux | amd64 | Поддерживается |
| Linux | arm64 | Поддерживается |
| macOS (Docker Desktop) | amd64 / arm64 | Поддерживается |
| Windows (WSL2) | amd64 | Поддерживается |
Я создал это, потому что устал каждый раз повторять одну и ту же настройку. Устанавливать OpenCode, настраивать безголовый браузер, исправлять проблемы с разрешениями, отлаживать управление процессами. Каждый. Раз.
Поэтому я сделал контейнер, который делает всё это. И потом столкнулся со всеми возможными ошибками, чтобы вам не пришлось.
| HolyCode | Своими руками | |
|---|---|---|
| Время до первой рабочей сессии | Менее 2 минут | 30-60 минут |
| Chromium + Xvfb безголовый браузер | Предварительно настроен | Исследуйте, устанавливайте, отлаживайте сами |
| Набор инструментов разработки (ripgrep, fzf, lazygit и др.) | Предустановлен | Ищите и устанавливайте по одному |
| Сохранение состояния между пересборками | Автоматически через bind-монтирование | Ручные bind-монтирования, легко ошибиться |
| Переназначение прав доступа UID/GID | Встроенный PUID/PGID | Хаки с chmod в Dockerfile |
| Поддержка нескольких архитектур | 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 |
Установите все три |
| Azure OpenAI | AZURE_OPENAI_ENDPOINT, AZURE_OPENAI_API_KEY, AZURE_OPENAI_API_VERSION |
Установите все три |
| GitHub | GITHUB_TOKEN |
GitHub Copilot через OpenAI-совместимый endpoint |
| Vertex AI | (настраивается через OpenCode) | Модели Google Vertex AI |
| GitHub Models | (настраивается через OpenCode) | Модели, размещённые на GitHub |
| Ollama | (настраивается через OpenCode) | Локальные модели через Ollama |
Устанавливайте ключи только для провайдеров, которые реально используете. Всё остальное опционально и игнорируется.
Vertex AI, GitHub Models и Ollama настраиваются через систему провайдеров OpenCode. Запустите opencode providers login внутри контейнера.
Минимальная настройка. Скопируйте, вставьте ключ, запустите.
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.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-идентификация, применяется при первом запуске |
GIT_USER_EMAIL |
noreply@holycode.local |
Git-идентификация, применяется при первом запуске |
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 — установите все три переменные AWS |
AWS_SECRET_ACCESS_KEY |
(нет) | AWS Bedrock |
AWS_REGION |
(нет) | Регион AWS Bedrock (например, us-east-1) |
AZURE_OPENAI_ENDPOINT |
(нет) | Azure OpenAI — установите все три переменные 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 |
OPENCODE_SERVER_PASSWORD |
(нет) | Защитить веб-интерфейс базовой аутентификацией |
OPENCODE_SERVER_USERNAME |
opencode |
Имя пользователя для базовой аутентификации веб-интерфейса |
ENABLE_CLAUDE_AUTH |
(нет) | Установите true для использования подписки Claude вместо API-ключа |
ENABLE_OH_MY_OPENAGENT |
(нет) | Установите true для включения плагина мультиагентной оркестрации |
ENABLE_PAPERCLIP |
(нет) | Установите true для запуска панели управления и доски агентов Paperclip |
PAPERCLIP_PORT |
3100 |
Переопределяет порт контейнера для Paperclip |
PAPERCLIP_INSTANCE_ID |
default |
Имя локального экземпляра Paperclip для изолированного состояния |
ENABLE_HERMES |
(нет) | Установите true для запуска Hermes как встроенного мета-агентного API |
HERMES_PORT |
8642 |
Переопределяет порт контейнера для Hermes |
HOLYCODE_PLUGIN_UPDATE |
manual |
Режим обновления плагинов: manual (устанавливает если отсутствует) или auto (устанавливает и обновляет при каждом запуске) |
Переключатели плагинов (
ENABLE_CLAUDE_AUTH,ENABLE_OH_MY_OPENAGENT) вступают в силу при перезапуске контейнера. Установите переменную и выполнитеdocker compose down && up -d.
HOLYCODE_PLUGIN_UPDATEуправляет обновлениями пакетов плагинов.manual(по умолчанию) устанавливает включённые плагины только если они отсутствуют.autoустанавливает отсутствующие плагины и обновляет включённые при каждом запуске. Это отдельно отOPENCODE_DISABLE_AUTOUPDATE, который влияет только на OpenCode.
ENABLE_OH_MY_OPENAGENT=trueвключает плагин и открывает встроенный навык/oh-my-openagent-setup. Навык появляется только когда плагин включён. Используйте его для создания или обновления файла конфигурации плагина в~/.config/opencode/oh-my-openagent.jsonc.
Политика выбора по умолчанию в HolyCode: видимые:
sisyphus,hephaestus,prometheus,atlas; скрытые подагенты:oracle,librarian,explore,metis,momus,multimodal-looker,sisyphus-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запускает Paperclip на порту3100внутри контейнера. Откройте панель управления, создайте компанию и наймите агентов OpenCode оттуда. Paperclip автоматически сохраняет состояние в~/.paperclip.
ENABLE_HERMES=trueзапускает Hermes на порту8642внутри контейнера. Hermes сохраняет состояние в~/.hermes, использует уже установленный бинарный файлopencodeи может предоставлять OpenAI-совместимый API, делегируя работу с кодом обратно в HolyCode.
GIT_USER_NAMEиGIT_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 |
delta |
Улучшенные git-диффы |
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 и пробуждающая их по heartbeat |
| Claude Code CLI | Установлен для потоков аутентификации подписки Claude через ENABLE_CLAUDE_AUTH |
Управление процессами
| Компонент | Назначение |
|---|---|
| s6-overlay v3 | Супервизор процессов и система инициализации |
| Кастомная точка входа | Переназначение UID/GID, настройка git, начальная инициализация |
s6-overlay следит за OpenCode и Xvfb. Если процесс падает, он автоматически перезапускается. Политики перезапуска контейнера остаются чистыми, потому что супервизор обрабатывает это внутренне.
HolyCode теперь поставляется с двумя опциональными слоями поверх OpenCode. Они не нужны для использования контейнера. Включите переменную окружения, перезапустите контейнер — и сервис запустится рядом с обычным веб-интерфейсом.
Hermes — это опция «умного мозга». Он работает как встроенный мета-агент, предоставляет OpenAI-совместимый API на порту 8642 и делегирует работу с кодом, вызывая локальный бинарный файл opencode, который HolyCode уже включает.
Включите с помощью:
environment:
- ENABLE_HERMES=true
- HERMES_PORT=8642Состояние Hermes хранится в /home/opencode/.hermes и следует той же истории постоянства, что и остальная часть HolyCode.
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]
Точка входа обрабатывает переназначение пользователя, переключение плагинов, переключение опциональных встроенных сервисов и начальную настройку. s6-overlay следит за Xvfb, веб-сервером OpenCode и любыми включёнными опциональными встроенными сервисами. Если контролируемый процесс падает, s6 автоматически перезапускает его. Обращайтесь к веб-интерфейсу на порту 4096 или заходите в контейнер для полного CLI-опыта.
Веб-интерфейс на порту 4096 является основным интерфейсом. Но вы также можете использовать OpenCode напрямую из командной строки внутри контейнера.
docker exec -it holycode bash
opencodeОткрывает полный терминальный интерфейс OpenCode со всеми теми же функциями, что и в веб-версии.
Выполните одиночный запрос без входа в TUI:
docker exec -it holycode bash -c "opencode run 'explain this codebase'"Подключите локальную TUI-сессию к уже запущенному веб-серверу OpenCode:
docker exec -it holycode bash -c "opencode attach http://localhost:4096"Это разделяет ту же сессию, что и веб-интерфейс. Изменения в одном отображаются в другом.
Просмотр и настройка AI-провайдеров изнутри контейнера:
docker exec -it holycode bash -c "opencode providers list"
docker exec -it holycode bash -c "opencode providers login"Если вы включили 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 |
Запустить веб-сервер (уже запущен через 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 хранится в одном bind-монтировании по пути ./data/opencode. Контейнер не имеет состояния. Bind-монтирование содержит всё важное.
| Путь на хосте | Путь в контейнере | Содержимое |
|---|---|---|
./data/opencode/.config/opencode |
/home/opencode/.config/opencode |
Настройки, агенты, MCP-конфиги, темы, плагины |
./data/opencode/.local/share/opencode |
/home/opencode/.local/share/opencode |
SQLite-база сессий, OAuth-токены MCP |
./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), режим WAL SQLite может не работать, так как SMB по умолчанию не поддерживает блокировку диапазона байтов. HolyCode обнаруживает это при запуске и выводит предупреждение с решением. См. раздел Устранение неполадок ниже.
HolyCode использует PUID и PGID для переназначения внутреннего пользователя контейнера на вашего хостового. Это означает, что файлы, записанные в ./workspace, принадлежат вам, а не root.
Найдите свои ID в Linux и macOS:
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Вот и всё. Одна команда. Ваши сессии, настройки и конфиги хранятся в bind-монтировании — ничего не потеряется.
Chromium падает или автоматизация браузера не работает
Наиболее распространённая причина — недостаточно общей памяти. Chromium требует не менее 1-2 ГБ /dev/shm для стабильной работы.
Убедитесь, что в вашем compose-файле есть shm_size: 2g:
services:
holycode:
shm_size: 2gБез этого Chromium будет падать без предупреждения или создавать повреждённые скриншоты.
Permission denied для файлов рабочего пространства
Ваши PUID и PGID не совпадают с хостовым пользователем. Найдите свои ID:
id -u && id -gОбновите секцию environment в compose-файле:
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Контейнер запускается, но веб-интерфейс не загружается
Проверьте логи контейнера:
docker compose logs -f holycodeOpenCode требует несколько секунд для инициализации. После docker compose up -d подождите 10-15 секунд перед открытием браузера. Если не работает, логи объяснят причину.
Почему HolyCode не требует SYS_ADMIN или seccomp=unconfined?
Chromium запускается с --no-sandbox внутри контейнера, что является стандартом для контейнеризированных браузерных установок. Это исключает необходимость в возможностях SYS_ADMIN или seccomp=unconfined, которые требуют некоторые другие Docker-установки с браузером. Сам контейнер обеспечивает границу изоляции.
Если вы предпочитаете использовать встроенный песочница Chromium, добавьте следующее в compose-файл и уберите --no-sandbox из переменной окружения CHROMIUM_FLAGS:
cap_add:
- SYS_ADMIN
security_opt:
- seccomp=unconfinedSQLite 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 обнаруживает это при запуске.
Решение: Добавьте nobrl,mfsymlinks к параметрам монтирования CIFS в /etc/fstab:
# До
//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- Форкните репозиторий
- Создайте ветку:
git checkout -b feature/your-feature - Зафиксируйте изменения:
git commit -m "feat: your feature" - Запушьте:
git push origin feature/your-feature - Откройте pull request
Полные правила см. в CONTRIBUTING.md.
Если HolyCode сэкономил вам ещё один час настройки окружения, вот как отблагодарить.
- Поставьте звезду репозиторию на GitHub
- Поделитесь с тем, кому это будет полезно
- Buy Me A Coffee
- PayPal
- GitHub Sponsors
Лицензия MIT — см. LICENSE.
Создано CoderLuii · coderluii.dev
