diff --git a/.github/workflows/docker-server.yml b/.github/workflows/docker-server.yml new file mode 100644 index 000000000000..2c2574ae1db5 --- /dev/null +++ b/.github/workflows/docker-server.yml @@ -0,0 +1,106 @@ +name: docker-server + +on: + push: + branches: + - dev + paths: + - "packages/containers/server/**" + - ".github/workflows/docker-server.yml" + release: + types: [published] + workflow_dispatch: + inputs: + variant: + type: choice + options: + - all + - debian + - alpine + default: all + description: "Docker image variant to build" + +permissions: + contents: read + packages: write + +env: + REGISTRY: ghcr.io/${{ github.repository }} + BUILDKIT_INLINE_CACHE: 1 + +jobs: + build: + runs-on: blacksmith-4vcpu-ubuntu-2404 + if: >- + (github.event_name == 'workflow_dispatch' && (inputs.variant == 'all' || inputs.variant == matrix.variant)) + || (github.event_name != 'workflow_dispatch') + strategy: + fail-fast: false + matrix: + variant: + - debian + - alpine + include: + - variant: debian + dockerfile: Dockerfile.debian + - variant: alpine + dockerfile: Dockerfile.alpine + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Bun + uses: ./.github/actions/setup-bun + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Cache Docker layers + uses: actions/cache@v4 + with: + path: /tmp/.buildx-cache + key: ${{ runner.os }}-buildx-${{ matrix.variant }}-${{ hashFiles('packages/containers/server/docker/**') }} + restore-keys: | + ${{ runner.os }}-buildx-${{ matrix.variant }}- + + - name: Login to GHCR + if: github.event_name != 'pull_request' + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Determine version tag + id: version + run: | + if [[ "${{ github.event_name }}" == "release" ]]; then + VERSION="${{ github.ref_name }}" + else + VERSION="dev" + fi + echo "version=$VERSION" >> $GITHUB_OUTPUT + echo "Building version: $VERSION" + + - name: Build and push + uses: docker/build-push-action@v5 + with: + context: . + file: packages/containers/server/docker/${{ matrix.dockerfile }} + platforms: linux/amd64,linux/arm64 + push: ${{ github.event_name != 'pull_request' }} + tags: | + ${{ env.REGISTRY }}:${{ steps.version.outputs.version }}-${{ matrix.variant }} + ${{ env.REGISTRY }}:latest-${{ matrix.variant }} + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache-new,mode=max + build-args: | + OPENCODE_VERSION=${{ steps.version.outputs.version }} + + - name: Move cache + run: | + rm -rf /tmp/.buildx-cache + mv /tmp/.buildx-cache-new /tmp/.buildx-cache diff --git a/README.ar.md b/README.ar.md index beb44589e620..5f9d92273ccf 100644 --- a/README.ar.md +++ b/README.ar.md @@ -116,6 +116,33 @@ XDG_BIN_DIR=$HOME/.local/bin curl -fsSL https://opencode.ai/install | bash لمزيد من المعلومات حول كيفية ضبط OpenCode، [**راجع التوثيق**](https://opencode.ai/docs). +### خادم Docker + +قم بتشغيل OpenCode كخدمة حاويات: + +- [English](docs/docker-server.md) +- [简体中文](docs/docker-server.zh.md) +- [繁體中文](docs/docker-server.zht.md) +- [한국어](docs/docker-server.ko.md) +- [Deutsch](docs/docker-server.de.md) +- [Español](docs/docker-server.es.md) +- [Français](docs/docker-server.fr.md) +- [Italiano](docs/docker-server.it.md) +- [Dansk](docs/docker-server.da.md) +- [日本語](docs/docker-server.ja.md) +- [Polski](docs/docker-server.pl.md) +- [Русский](docs/docker-server.ru.md) +- [Bosanski](docs/docker-server.bs.md) +- [العربية](docs/docker-server.ar.md) +- [Norsk](docs/docker-server.no.md) +- [Português (Brasil)](docs/docker-server.br.md) +- [ไทย](docs/docker-server.th.md) +- [Türkçe](docs/docker-server.tr.md) +- [Українська](docs/docker-server.uk.md) +- [বাংলা](docs/docker-server.bn.md) +- [Ελληνικά](docs/docker-server.gr.md) +- [Tiếng Việt](docs/docker-server.vi.md) + ### المساهمة اذا كنت مهتما بالمساهمة في OpenCode، يرجى قراءة [contributing docs](./CONTRIBUTING.md) قبل ارسال pull request. diff --git a/README.bn.md b/README.bn.md index c7abc7346a2f..111fd8ead457 100644 --- a/README.bn.md +++ b/README.bn.md @@ -116,6 +116,33 @@ OpenCode এ দুটি বিল্ট-ইন এজেন্ট রয়ে কিভাবে OpenCode কনফিগার করবেন সে সম্পর্কে আরও তথ্যের জন্য, [**আমাদের ডকস দেখুন**](https://opencode.ai/docs)। +### Docker সার্ভার + +কন্টেইনারাইজড সার্ভিস হিসেবে OpenCode চালান: + +- [English](docs/docker-server.md) +- [简体中文](docs/docker-server.zh.md) +- [繁體中文](docs/docker-server.zht.md) +- [한국어](docs/docker-server.ko.md) +- [Deutsch](docs/docker-server.de.md) +- [Español](docs/docker-server.es.md) +- [Français](docs/docker-server.fr.md) +- [Italiano](docs/docker-server.it.md) +- [Dansk](docs/docker-server.da.md) +- [日本語](docs/docker-server.ja.md) +- [Polski](docs/docker-server.pl.md) +- [Русский](docs/docker-server.ru.md) +- [Bosanski](docs/docker-server.bs.md) +- [العربية](docs/docker-server.ar.md) +- [Norsk](docs/docker-server.no.md) +- [Português (Brasil)](docs/docker-server.br.md) +- [ไทย](docs/docker-server.th.md) +- [Türkçe](docs/docker-server.tr.md) +- [Українська](docs/docker-server.uk.md) +- [বাংলা](docs/docker-server.bn.md) +- [Ελληνικά](docs/docker-server.gr.md) +- [Tiếng Việt](docs/docker-server.vi.md) + ### অবদান (Contributing) আপনি যদি OpenCode এ অবদান রাখতে চান, অনুগ্রহ করে একটি পুল রিকোয়েস্ট সাবমিট করার আগে আমাদের [কন্ট্রিবিউটিং ডকস](./CONTRIBUTING.md) পড়ে নিন। diff --git a/README.br.md b/README.br.md index 6d1de21562c1..08df528d230f 100644 --- a/README.br.md +++ b/README.br.md @@ -116,6 +116,33 @@ Saiba mais sobre [agents](https://opencode.ai/docs/agents). Para mais informações sobre como configurar o OpenCode, [**veja nossa documentação**](https://opencode.ai/docs). +### Servidor Docker + +Execute o OpenCode como serviço containerizado: + +- [English](docs/docker-server.md) +- [简体中文](docs/docker-server.zh.md) +- [繁體中文](docs/docker-server.zht.md) +- [한국어](docs/docker-server.ko.md) +- [Deutsch](docs/docker-server.de.md) +- [Español](docs/docker-server.es.md) +- [Français](docs/docker-server.fr.md) +- [Italiano](docs/docker-server.it.md) +- [Dansk](docs/docker-server.da.md) +- [日本語](docs/docker-server.ja.md) +- [Polski](docs/docker-server.pl.md) +- [Русский](docs/docker-server.ru.md) +- [Bosanski](docs/docker-server.bs.md) +- [العربية](docs/docker-server.ar.md) +- [Norsk](docs/docker-server.no.md) +- [Português (Brasil)](docs/docker-server.br.md) +- [ไทย](docs/docker-server.th.md) +- [Türkçe](docs/docker-server.tr.md) +- [Українська](docs/docker-server.uk.md) +- [বাংলা](docs/docker-server.bn.md) +- [Ελληνικά](docs/docker-server.gr.md) +- [Tiếng Việt](docs/docker-server.vi.md) + ### Contribuir Se você tem interesse em contribuir com o OpenCode, leia os [contributing docs](./CONTRIBUTING.md) antes de enviar um pull request. diff --git a/README.bs.md b/README.bs.md index 2cff8e0279c5..760f7e8c52d0 100644 --- a/README.bs.md +++ b/README.bs.md @@ -116,6 +116,33 @@ Saznaj više o [agentima](https://opencode.ai/docs/agents). Za više informacija o konfiguraciji OpenCode-a, [**pogledaj dokumentaciju**](https://opencode.ai/docs). +### Docker Server + +Pokreni OpenCode kao containeriziranu uslugu: + +- [English](docs/docker-server.md) +- [简体中文](docs/docker-server.zh.md) +- [繁體中文](docs/docker-server.zht.md) +- [한국어](docs/docker-server.ko.md) +- [Deutsch](docs/docker-server.de.md) +- [Español](docs/docker-server.es.md) +- [Français](docs/docker-server.fr.md) +- [Italiano](docs/docker-server.it.md) +- [Dansk](docs/docker-server.da.md) +- [日本語](docs/docker-server.ja.md) +- [Polski](docs/docker-server.pl.md) +- [Русский](docs/docker-server.ru.md) +- [Bosanski](docs/docker-server.bs.md) +- [العربية](docs/docker-server.ar.md) +- [Norsk](docs/docker-server.no.md) +- [Português (Brasil)](docs/docker-server.br.md) +- [ไทย](docs/docker-server.th.md) +- [Türkçe](docs/docker-server.tr.md) +- [Українська](docs/docker-server.uk.md) +- [বাংলা](docs/docker-server.bn.md) +- [Ελληνικά](docs/docker-server.gr.md) +- [Tiếng Việt](docs/docker-server.vi.md) + ### Doprinosi Ako želiš doprinositi OpenCode-u, pročitaj [upute za doprinošenje](./CONTRIBUTING.md) prije slanja pull requesta. diff --git a/README.da.md b/README.da.md index ac522f29c49e..e9b7458eed35 100644 --- a/README.da.md +++ b/README.da.md @@ -116,6 +116,33 @@ Læs mere om [agents](https://opencode.ai/docs/agents). For mere info om konfiguration af OpenCode, [**se vores docs**](https://opencode.ai/docs). +### Docker-server + +Kør OpenCode som containeriseret tjeneste: + +- [English](docs/docker-server.md) +- [简体中文](docs/docker-server.zh.md) +- [繁體中文](docs/docker-server.zht.md) +- [한국어](docs/docker-server.ko.md) +- [Deutsch](docs/docker-server.de.md) +- [Español](docs/docker-server.es.md) +- [Français](docs/docker-server.fr.md) +- [Italiano](docs/docker-server.it.md) +- [Dansk](docs/docker-server.da.md) +- [日本語](docs/docker-server.ja.md) +- [Polski](docs/docker-server.pl.md) +- [Русский](docs/docker-server.ru.md) +- [Bosanski](docs/docker-server.bs.md) +- [العربية](docs/docker-server.ar.md) +- [Norsk](docs/docker-server.no.md) +- [Português (Brasil)](docs/docker-server.br.md) +- [ไทย](docs/docker-server.th.md) +- [Türkçe](docs/docker-server.tr.md) +- [Українська](docs/docker-server.uk.md) +- [বাংলা](docs/docker-server.bn.md) +- [Ελληνικά](docs/docker-server.gr.md) +- [Tiếng Việt](docs/docker-server.vi.md) + ### Bidrag Hvis du vil bidrage til OpenCode, så læs vores [contributing docs](./CONTRIBUTING.md) før du sender en pull request. diff --git a/README.de.md b/README.de.md index 87a670f3fce7..6bfc1a397bbf 100644 --- a/README.de.md +++ b/README.de.md @@ -116,6 +116,33 @@ Mehr dazu unter [Agents](https://opencode.ai/docs/agents). Mehr Infos zur Konfiguration von OpenCode findest du in unseren [**Docs**](https://opencode.ai/docs). +### Docker-Server + +OpenCode als containerisierter Dienst: + +- [English](docs/docker-server.md) +- [简体中文](docs/docker-server.zh.md) +- [繁體中文](docs/docker-server.zht.md) +- [한국어](docs/docker-server.ko.md) +- [Deutsch](docs/docker-server.de.md) +- [Español](docs/docker-server.es.md) +- [Français](docs/docker-server.fr.md) +- [Italiano](docs/docker-server.it.md) +- [Dansk](docs/docker-server.da.md) +- [日本語](docs/docker-server.ja.md) +- [Polski](docs/docker-server.pl.md) +- [Русский](docs/docker-server.ru.md) +- [Bosanski](docs/docker-server.bs.md) +- [العربية](docs/docker-server.ar.md) +- [Norsk](docs/docker-server.no.md) +- [Português (Brasil)](docs/docker-server.br.md) +- [ไทย](docs/docker-server.th.md) +- [Türkçe](docs/docker-server.tr.md) +- [Українська](docs/docker-server.uk.md) +- [বাংলা](docs/docker-server.bn.md) +- [Ελληνικά](docs/docker-server.gr.md) +- [Tiếng Việt](docs/docker-server.vi.md) + ### Beitragen Wenn du zu OpenCode beitragen möchtest, lies bitte unsere [Contributing Docs](./CONTRIBUTING.md), bevor du einen Pull Request einreichst. diff --git a/README.es.md b/README.es.md index 9e456af1c0b9..d1780fefcd2e 100644 --- a/README.es.md +++ b/README.es.md @@ -116,6 +116,33 @@ Más información sobre [agents](https://opencode.ai/docs/agents). Para más información sobre cómo configurar OpenCode, [**ve a nuestra documentación**](https://opencode.ai/docs). +### Servidor Docker + +Ejecuta OpenCode como servicio contenedorizado: + +- [English](docs/docker-server.md) +- [简体中文](docs/docker-server.zh.md) +- [繁體中文](docs/docker-server.zht.md) +- [한국어](docs/docker-server.ko.md) +- [Deutsch](docs/docker-server.de.md) +- [Español](docs/docker-server.es.md) +- [Français](docs/docker-server.fr.md) +- [Italiano](docs/docker-server.it.md) +- [Dansk](docs/docker-server.da.md) +- [日本語](docs/docker-server.ja.md) +- [Polski](docs/docker-server.pl.md) +- [Русский](docs/docker-server.ru.md) +- [Bosanski](docs/docker-server.bs.md) +- [العربية](docs/docker-server.ar.md) +- [Norsk](docs/docker-server.no.md) +- [Português (Brasil)](docs/docker-server.br.md) +- [ไทย](docs/docker-server.th.md) +- [Türkçe](docs/docker-server.tr.md) +- [Українська](docs/docker-server.uk.md) +- [বাংলা](docs/docker-server.bn.md) +- [Ελληνικά](docs/docker-server.gr.md) +- [Tiếng Việt](docs/docker-server.vi.md) + ### Contribuir Si te interesa contribuir a OpenCode, lee nuestras [docs de contribución](./CONTRIBUTING.md) antes de enviar un pull request. diff --git a/README.fr.md b/README.fr.md index c1fca23376d7..c7538b84ae6e 100644 --- a/README.fr.md +++ b/README.fr.md @@ -116,6 +116,33 @@ En savoir plus sur les [agents](https://opencode.ai/docs/agents). Pour plus d'informations sur la configuration d'OpenCode, [**consultez notre documentation**](https://opencode.ai/docs). +### Serveur Docker + +Exécutez OpenCode en tant que service conteneurisé: + +- [English](docs/docker-server.md) +- [简体中文](docs/docker-server.zh.md) +- [繁體中文](docs/docker-server.zht.md) +- [한국어](docs/docker-server.ko.md) +- [Deutsch](docs/docker-server.de.md) +- [Español](docs/docker-server.es.md) +- [Français](docs/docker-server.fr.md) +- [Italiano](docs/docker-server.it.md) +- [Dansk](docs/docker-server.da.md) +- [日本語](docs/docker-server.ja.md) +- [Polski](docs/docker-server.pl.md) +- [Русский](docs/docker-server.ru.md) +- [Bosanski](docs/docker-server.bs.md) +- [العربية](docs/docker-server.ar.md) +- [Norsk](docs/docker-server.no.md) +- [Português (Brasil)](docs/docker-server.br.md) +- [ไทย](docs/docker-server.th.md) +- [Türkçe](docs/docker-server.tr.md) +- [Українська](docs/docker-server.uk.md) +- [বাংলা](docs/docker-server.bn.md) +- [Ελληνικά](docs/docker-server.gr.md) +- [Tiếng Việt](docs/docker-server.vi.md) + ### Contribuer Si vous souhaitez contribuer à OpenCode, lisez nos [docs de contribution](./CONTRIBUTING.md) avant de soumettre une pull request. diff --git a/README.gr.md b/README.gr.md index 2b2c2679d8eb..126066a31803 100644 --- a/README.gr.md +++ b/README.gr.md @@ -116,6 +116,33 @@ XDG_BIN_DIR=$HOME/.local/bin curl -fsSL https://opencode.ai/install | bash Για περισσότερες πληροφορίες σχετικά με τη ρύθμιση του OpenCode, [**πλοηγήσου στον οδηγό χρήσης μας**](https://opencode.ai/docs). +### Docker Server + +Εκτέλεσε το OpenCode ως υπηρεσία container: + +- [English](docs/docker-server.md) +- [简体中文](docs/docker-server.zh.md) +- [繁體中文](docs/docker-server.zht.md) +- [한국어](docs/docker-server.ko.md) +- [Deutsch](docs/docker-server.de.md) +- [Español](docs/docker-server.es.md) +- [Français](docs/docker-server.fr.md) +- [Italiano](docs/docker-server.it.md) +- [Dansk](docs/docker-server.da.md) +- [日本語](docs/docker-server.ja.md) +- [Polski](docs/docker-server.pl.md) +- [Русский](docs/docker-server.ru.md) +- [Bosanski](docs/docker-server.bs.md) +- [العربية](docs/docker-server.ar.md) +- [Norsk](docs/docker-server.no.md) +- [Português (Brasil)](docs/docker-server.br.md) +- [ไทย](docs/docker-server.th.md) +- [Türkçe](docs/docker-server.tr.md) +- [Українська](docs/docker-server.uk.md) +- [বাংলা](docs/docker-server.bn.md) +- [Ελληνικά](docs/docker-server.gr.md) +- [Tiếng Việt](docs/docker-server.vi.md) + ### Συνεισφορά Εάν ενδιαφέρεσαι να συνεισφέρεις στο OpenCode, διαβάστε τα [οδηγό χρήσης συνεισφοράς](./CONTRIBUTING.md) πριν υποβάλεις ένα pull request. diff --git a/README.it.md b/README.it.md index 3e516a90270d..035eddf2e157 100644 --- a/README.it.md +++ b/README.it.md @@ -116,6 +116,33 @@ Scopri di più sugli [agenti](https://opencode.ai/docs/agents). Per maggiori informazioni su come configurare OpenCode, [**consulta la nostra documentazione**](https://opencode.ai/docs). +### Server Docker + +Esegui OpenCode come servizio containerizzato: + +- [English](docs/docker-server.md) +- [简体中文](docs/docker-server.zh.md) +- [繁體中文](docs/docker-server.zht.md) +- [한국어](docs/docker-server.ko.md) +- [Deutsch](docs/docker-server.de.md) +- [Español](docs/docker-server.es.md) +- [Français](docs/docker-server.fr.md) +- [Italiano](docs/docker-server.it.md) +- [Dansk](docs/docker-server.da.md) +- [日本語](docs/docker-server.ja.md) +- [Polski](docs/docker-server.pl.md) +- [Русский](docs/docker-server.ru.md) +- [Bosanski](docs/docker-server.bs.md) +- [العربية](docs/docker-server.ar.md) +- [Norsk](docs/docker-server.no.md) +- [Português (Brasil)](docs/docker-server.br.md) +- [ไทย](docs/docker-server.th.md) +- [Türkçe](docs/docker-server.tr.md) +- [Українська](docs/docker-server.uk.md) +- [বাংলা](docs/docker-server.bn.md) +- [Ελληνικά](docs/docker-server.gr.md) +- [Tiếng Việt](docs/docker-server.vi.md) + ### Contribuire Se sei interessato a contribuire a OpenCode, leggi la nostra [guida alla contribuzione](./CONTRIBUTING.md) prima di inviare una pull request. diff --git a/README.ja.md b/README.ja.md index 144dc7b6f8a6..79c6b9945c19 100644 --- a/README.ja.md +++ b/README.ja.md @@ -116,6 +116,33 @@ OpenCode には組み込みの Agent が2つあり、`Tab` キーで切り替え OpenCode の設定については [**ドキュメント**](https://opencode.ai/docs) を参照してください。 +### Docker サーバー + +OpenCode をコンテナ化されたサービスとして実行: + +- [English](docs/docker-server.md) +- [简体中文](docs/docker-server.zh.md) +- [繁體中文](docs/docker-server.zht.md) +- [한국어](docs/docker-server.ko.md) +- [Deutsch](docs/docker-server.de.md) +- [Español](docs/docker-server.es.md) +- [Français](docs/docker-server.fr.md) +- [Italiano](docs/docker-server.it.md) +- [Dansk](docs/docker-server.da.md) +- [日本語](docs/docker-server.ja.md) +- [Polski](docs/docker-server.pl.md) +- [Русский](docs/docker-server.ru.md) +- [Bosanski](docs/docker-server.bs.md) +- [العربية](docs/docker-server.ar.md) +- [Norsk](docs/docker-server.no.md) +- [Português (Brasil)](docs/docker-server.br.md) +- [ไทย](docs/docker-server.th.md) +- [Türkçe](docs/docker-server.tr.md) +- [Українська](docs/docker-server.uk.md) +- [বাংলা](docs/docker-server.bn.md) +- [Ελληνικά](docs/docker-server.gr.md) +- [Tiếng Việt](docs/docker-server.vi.md) + ### コントリビュート OpenCode に貢献したい場合は、Pull Request を送る前に [contributing docs](./CONTRIBUTING.md) を読んでください。 diff --git a/README.ko.md b/README.ko.md index 32defc0a5e02..d6027ab1f6fd 100644 --- a/README.ko.md +++ b/README.ko.md @@ -116,6 +116,33 @@ OpenCode 에는 내장 에이전트 2개가 있으며 `Tab` 키로 전환할 수 OpenCode 설정에 대한 자세한 내용은 [**문서**](https://opencode.ai/docs) 를 참고하세요. +### Docker 서버 + +컨테이너화된 서비스로 OpenCode 실행: + +- [English](docs/docker-server.md) +- [简体中文](docs/docker-server.zh.md) +- [繁體中文](docs/docker-server.zht.md) +- [한국어](docs/docker-server.ko.md) +- [Deutsch](docs/docker-server.de.md) +- [Español](docs/docker-server.es.md) +- [Français](docs/docker-server.fr.md) +- [Italiano](docs/docker-server.it.md) +- [Dansk](docs/docker-server.da.md) +- [日本語](docs/docker-server.ja.md) +- [Polski](docs/docker-server.pl.md) +- [Русский](docs/docker-server.ru.md) +- [Bosanski](docs/docker-server.bs.md) +- [العربية](docs/docker-server.ar.md) +- [Norsk](docs/docker-server.no.md) +- [Português (Brasil)](docs/docker-server.br.md) +- [ไทย](docs/docker-server.th.md) +- [Türkçe](docs/docker-server.tr.md) +- [Українська](docs/docker-server.uk.md) +- [বাংলা](docs/docker-server.bn.md) +- [Ελληνικά](docs/docker-server.gr.md) +- [Tiếng Việt](docs/docker-server.vi.md) + ### 기여하기 OpenCode 에 기여하고 싶다면, Pull Request 를 제출하기 전에 [contributing docs](./CONTRIBUTING.md) 를 읽어주세요. diff --git a/README.md b/README.md index 79ccf8b34910..bd2345b3c6d1 100644 --- a/README.md +++ b/README.md @@ -116,6 +116,33 @@ Learn more about [agents](https://opencode.ai/docs/agents). For more info on how to configure OpenCode, [**head over to our docs**](https://opencode.ai/docs). +### Docker Server + +Run OpenCode as a containerized service: + +- [English](docs/docker-server.md) +- [简体中文](docs/docker-server.zh.md) +- [繁體中文](docs/docker-server.zht.md) +- [한국어](docs/docker-server.ko.md) +- [Deutsch](docs/docker-server.de.md) +- [Español](docs/docker-server.es.md) +- [Français](docs/docker-server.fr.md) +- [Italiano](docs/docker-server.it.md) +- [Dansk](docs/docker-server.da.md) +- [日本語](docs/docker-server.ja.md) +- [Polski](docs/docker-server.pl.md) +- [Русский](docs/docker-server.ru.md) +- [Bosanski](docs/docker-server.bs.md) +- [العربية](docs/docker-server.ar.md) +- [Norsk](docs/docker-server.no.md) +- [Português (Brasil)](docs/docker-server.br.md) +- [ไทย](docs/docker-server.th.md) +- [Türkçe](docs/docker-server.tr.md) +- [Українська](docs/docker-server.uk.md) +- [বাংলা](docs/docker-server.bn.md) +- [Ελληνικά](docs/docker-server.gr.md) +- [Tiếng Việt](docs/docker-server.vi.md) + ### Contributing If you're interested in contributing to OpenCode, please read our [contributing docs](./CONTRIBUTING.md) before submitting a pull request. diff --git a/README.no.md b/README.no.md index c3348286b29c..1ec0fb56a49d 100644 --- a/README.no.md +++ b/README.no.md @@ -116,6 +116,33 @@ Les mer om [agents](https://opencode.ai/docs/agents). For mer info om hvordan du konfigurerer OpenCode, [**se dokumentasjonen**](https://opencode.ai/docs). +### Docker Server + +Kjør OpenCode som containerisert tjeneste: + +- [English](docs/docker-server.md) +- [简体中文](docs/docker-server.zh.md) +- [繁體中文](docs/docker-server.zht.md) +- [한국어](docs/docker-server.ko.md) +- [Deutsch](docs/docker-server.de.md) +- [Español](docs/docker-server.es.md) +- [Français](docs/docker-server.fr.md) +- [Italiano](docs/docker-server.it.md) +- [Dansk](docs/docker-server.da.md) +- [日本語](docs/docker-server.ja.md) +- [Polski](docs/docker-server.pl.md) +- [Русский](docs/docker-server.ru.md) +- [Bosanski](docs/docker-server.bs.md) +- [العربية](docs/docker-server.ar.md) +- [Norsk](docs/docker-server.no.md) +- [Português (Brasil)](docs/docker-server.br.md) +- [ไทย](docs/docker-server.th.md) +- [Türkçe](docs/docker-server.tr.md) +- [Українська](docs/docker-server.uk.md) +- [বাংলা](docs/docker-server.bn.md) +- [Ελληνικά](docs/docker-server.gr.md) +- [Tiếng Việt](docs/docker-server.vi.md) + ### Bidra Hvis du vil bidra til OpenCode, les [contributing docs](./CONTRIBUTING.md) før du sender en pull request. diff --git a/README.pl.md b/README.pl.md index 4c5a07665619..686869837d51 100644 --- a/README.pl.md +++ b/README.pl.md @@ -116,6 +116,33 @@ Dowiedz się więcej o [agents](https://opencode.ai/docs/agents). Więcej informacji o konfiguracji OpenCode znajdziesz w [**dokumentacji**](https://opencode.ai/docs). +### Serwer Docker + +Uruchom OpenCode jako usługę konteneryzowaną: + +- [English](docs/docker-server.md) +- [简体中文](docs/docker-server.zh.md) +- [繁體中文](docs/docker-server.zht.md) +- [한국어](docs/docker-server.ko.md) +- [Deutsch](docs/docker-server.de.md) +- [Español](docs/docker-server.es.md) +- [Français](docs/docker-server.fr.md) +- [Italiano](docs/docker-server.it.md) +- [Dansk](docs/docker-server.da.md) +- [日本語](docs/docker-server.ja.md) +- [Polski](docs/docker-server.pl.md) +- [Русский](docs/docker-server.ru.md) +- [Bosanski](docs/docker-server.bs.md) +- [العربية](docs/docker-server.ar.md) +- [Norsk](docs/docker-server.no.md) +- [Português (Brasil)](docs/docker-server.br.md) +- [ไทย](docs/docker-server.th.md) +- [Türkçe](docs/docker-server.tr.md) +- [Українська](docs/docker-server.uk.md) +- [বাংলা](docs/docker-server.bn.md) +- [Ελληνικά](docs/docker-server.gr.md) +- [Tiếng Việt](docs/docker-server.vi.md) + ### Współtworzenie Jeśli chcesz współtworzyć OpenCode, przeczytaj [contributing docs](./CONTRIBUTING.md) przed wysłaniem pull requesta. diff --git a/README.ru.md b/README.ru.md index e507be70e658..9573e8f57965 100644 --- a/README.ru.md +++ b/README.ru.md @@ -116,6 +116,33 @@ XDG_BIN_DIR=$HOME/.local/bin curl -fsSL https://opencode.ai/install | bash Больше информации о том, как настроить OpenCode: [**наши docs**](https://opencode.ai/docs). +### Docker-сервер + +Запустите OpenCode как контейнеризованный сервис: + +- [English](docs/docker-server.md) +- [简体中文](docs/docker-server.zh.md) +- [繁體中文](docs/docker-server.zht.md) +- [한국어](docs/docker-server.ko.md) +- [Deutsch](docs/docker-server.de.md) +- [Español](docs/docker-server.es.md) +- [Français](docs/docker-server.fr.md) +- [Italiano](docs/docker-server.it.md) +- [Dansk](docs/docker-server.da.md) +- [日本語](docs/docker-server.ja.md) +- [Polski](docs/docker-server.pl.md) +- [Русский](docs/docker-server.ru.md) +- [Bosanski](docs/docker-server.bs.md) +- [العربية](docs/docker-server.ar.md) +- [Norsk](docs/docker-server.no.md) +- [Português (Brasil)](docs/docker-server.br.md) +- [ไทย](docs/docker-server.th.md) +- [Türkçe](docs/docker-server.tr.md) +- [Українська](docs/docker-server.uk.md) +- [বাংলা](docs/docker-server.bn.md) +- [Ελληνικά](docs/docker-server.gr.md) +- [Tiếng Việt](docs/docker-server.vi.md) + ### Вклад Если вы хотите внести вклад в OpenCode, прочитайте [contributing docs](./CONTRIBUTING.md) перед тем, как отправлять pull request. diff --git a/README.th.md b/README.th.md index 4a4ea62c957c..16115a150b29 100644 --- a/README.th.md +++ b/README.th.md @@ -116,6 +116,33 @@ OpenCode รวมเอเจนต์ในตัวสองตัวที สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีกำหนดค่า OpenCode [**ไปที่เอกสารของเรา**](https://opencode.ai/docs) +### Docker Server + +เรียกใช้ OpenCode เป็นบริการคอนเทนเนอร์: + +- [English](docs/docker-server.md) +- [简体中文](docs/docker-server.zh.md) +- [繁體中文](docs/docker-server.zht.md) +- [한국어](docs/docker-server.ko.md) +- [Deutsch](docs/docker-server.de.md) +- [Español](docs/docker-server.es.md) +- [Français](docs/docker-server.fr.md) +- [Italiano](docs/docker-server.it.md) +- [Dansk](docs/docker-server.da.md) +- [日本語](docs/docker-server.ja.md) +- [Polski](docs/docker-server.pl.md) +- [Русский](docs/docker-server.ru.md) +- [Bosanski](docs/docker-server.bs.md) +- [العربية](docs/docker-server.ar.md) +- [Norsk](docs/docker-server.no.md) +- [Português (Brasil)](docs/docker-server.br.md) +- [ไทย](docs/docker-server.th.md) +- [Türkçe](docs/docker-server.tr.md) +- [Українська](docs/docker-server.uk.md) +- [বাংলা](docs/docker-server.bn.md) +- [Ελληνικά](docs/docker-server.gr.md) +- [Tiếng Việt](docs/docker-server.vi.md) + ### การมีส่วนร่วม หากคุณสนใจที่จะมีส่วนร่วมใน OpenCode โปรดอ่าน [เอกสารการมีส่วนร่วม](./CONTRIBUTING.md) ก่อนส่ง Pull Request diff --git a/README.tr.md b/README.tr.md index e88b40f87512..be2a6cca4823 100644 --- a/README.tr.md +++ b/README.tr.md @@ -116,6 +116,33 @@ Bu dahili olarak kullanılır ve mesajlarda `@general` ile çağrılabilir. OpenCode'u nasıl yapılandıracağınız hakkında daha fazla bilgi için [**dokümantasyonumuza göz atın**](https://opencode.ai/docs). +### Docker Sunucusu + +OpenCode'u containerlarla çalıştırın: + +- [English](docs/docker-server.md) +- [简体中文](docs/docker-server.zh.md) +- [繁體中文](docs/docker-server.zht.md) +- [한국어](docs/docker-server.ko.md) +- [Deutsch](docs/docker-server.de.md) +- [Español](docs/docker-server.es.md) +- [Français](docs/docker-server.fr.md) +- [Italiano](docs/docker-server.it.md) +- [Dansk](docs/docker-server.da.md) +- [日本語](docs/docker-server.ja.md) +- [Polski](docs/docker-server.pl.md) +- [Русский](docs/docker-server.ru.md) +- [Bosanski](docs/docker-server.bs.md) +- [العربية](docs/docker-server.ar.md) +- [Norsk](docs/docker-server.no.md) +- [Português (Brasil)](docs/docker-server.br.md) +- [ไทย](docs/docker-server.th.md) +- [Türkçe](docs/docker-server.tr.md) +- [Українська](docs/docker-server.uk.md) +- [বাংলা](docs/docker-server.bn.md) +- [Ελληνικά](docs/docker-server.gr.md) +- [Tiếng Việt](docs/docker-server.vi.md) + ### Katkıda Bulunma OpenCode'a katkıda bulunmak istiyorsanız, lütfen bir pull request göndermeden önce [katkıda bulunma dokümanlarımızı](./CONTRIBUTING.md) okuyun. diff --git a/README.uk.md b/README.uk.md index a1a0259b6d08..d6c5fa7524e4 100644 --- a/README.uk.md +++ b/README.uk.md @@ -116,6 +116,33 @@ OpenCode містить два вбудовані агенти, між яким Щоб дізнатися більше про налаштування OpenCode, [**перейдіть до нашої документації**](https://opencode.ai/docs). +### Docker-сервер + +Запустіть OpenCode як контейнеризований сервіс: + +- [English](docs/docker-server.md) +- [简体中文](docs/docker-server.zh.md) +- [繁體中文](docs/docker-server.zht.md) +- [한국어](docs/docker-server.ko.md) +- [Deutsch](docs/docker-server.de.md) +- [Español](docs/docker-server.es.md) +- [Français](docs/docker-server.fr.md) +- [Italiano](docs/docker-server.it.md) +- [Dansk](docs/docker-server.da.md) +- [日本語](docs/docker-server.ja.md) +- [Polski](docs/docker-server.pl.md) +- [Русский](docs/docker-server.ru.md) +- [Bosanski](docs/docker-server.bs.md) +- [العربية](docs/docker-server.ar.md) +- [Norsk](docs/docker-server.no.md) +- [Português (Brasil)](docs/docker-server.br.md) +- [ไทย](docs/docker-server.th.md) +- [Türkçe](docs/docker-server.tr.md) +- [Українська](docs/docker-server.uk.md) +- [বাংলা](docs/docker-server.bn.md) +- [Ελληνικά](docs/docker-server.gr.md) +- [Tiếng Việt](docs/docker-server.vi.md) + ### Внесок Якщо ви хочете зробити внесок в OpenCode, будь ласка, прочитайте нашу [документацію для контриб'юторів](./CONTRIBUTING.md) перед надсиланням pull request. diff --git a/README.vi.md b/README.vi.md index 0932c50f78ab..d01fdcba8313 100644 --- a/README.vi.md +++ b/README.vi.md @@ -116,6 +116,33 @@ Tìm hiểu thêm về [agents](https://opencode.ai/docs/agents). Để biết thêm thông tin về cách cấu hình OpenCode, [**hãy truy cập tài liệu của chúng tôi**](https://opencode.ai/docs). +### Docker Server + +Chạy OpenCode như một dịch vụ container: + +- [English](docs/docker-server.md) +- [简体中文](docs/docker-server.zh.md) +- [繁體中文](docs/docker-server.zht.md) +- [한국어](docs/docker-server.ko.md) +- [Deutsch](docs/docker-server.de.md) +- [Español](docs/docker-server.es.md) +- [Français](docs/docker-server.fr.md) +- [Italiano](docs/docker-server.it.md) +- [Dansk](docs/docker-server.da.md) +- [日本語](docs/docker-server.ja.md) +- [Polski](docs/docker-server.pl.md) +- [Русский](docs/docker-server.ru.md) +- [Bosanski](docs/docker-server.bs.md) +- [العربية](docs/docker-server.ar.md) +- [Norsk](docs/docker-server.no.md) +- [Português (Brasil)](docs/docker-server.br.md) +- [ไทย](docs/docker-server.th.md) +- [Türkçe](docs/docker-server.tr.md) +- [Українська](docs/docker-server.uk.md) +- [বাংলা](docs/docker-server.bn.md) +- [Ελληνικά](docs/docker-server.gr.md) +- [Tiếng Việt](docs/docker-server.vi.md) + ### Đóng góp Nếu bạn muốn đóng góp cho OpenCode, vui lòng đọc [tài liệu hướng dẫn đóng góp](./CONTRIBUTING.md) trước khi gửi pull request. diff --git a/README.zh.md b/README.zh.md index 46d9f761cbd0..a48180fa997e 100644 --- a/README.zh.md +++ b/README.zh.md @@ -115,6 +115,33 @@ OpenCode 内置两种 Agent,可用 `Tab` 键快速切换: 更多配置说明请查看我们的 [**官方文档**](https://opencode.ai/docs)。 +### Docker 服务器 + +将 OpenCode 作为容器化服务运行: + +- [English](docs/docker-server.md) +- [简体中文](docs/docker-server.zh.md) +- [繁體中文](docs/docker-server.zht.md) +- [한국어](docs/docker-server.ko.md) +- [Deutsch](docs/docker-server.de.md) +- [Español](docs/docker-server.es.md) +- [Français](docs/docker-server.fr.md) +- [Italiano](docs/docker-server.it.md) +- [Dansk](docs/docker-server.da.md) +- [日本語](docs/docker-server.ja.md) +- [Polski](docs/docker-server.pl.md) +- [Русский](docs/docker-server.ru.md) +- [Bosanski](docs/docker-server.bs.md) +- [العربية](docs/docker-server.ar.md) +- [Norsk](docs/docker-server.no.md) +- [Português (Brasil)](docs/docker-server.br.md) +- [ไทย](docs/docker-server.th.md) +- [Türkçe](docs/docker-server.tr.md) +- [Українська](docs/docker-server.uk.md) +- [বাংলা](docs/docker-server.bn.md) +- [Ελληνικά](docs/docker-server.gr.md) +- [Tiếng Việt](docs/docker-server.vi.md) + ### 参与贡献 如有兴趣贡献代码,请在提交 PR 前阅读 [贡献指南 (Contributing Docs)](./CONTRIBUTING.md)。 diff --git a/README.zht.md b/README.zht.md index 7ef51d8fdda1..942948aadeb7 100644 --- a/README.zht.md +++ b/README.zht.md @@ -115,6 +115,33 @@ OpenCode 內建了兩種 Agent,您可以使用 `Tab` 鍵快速切換。 關於如何設定 OpenCode 的詳細資訊,請參閱我們的 [**官方文件**](https://opencode.ai/docs)。 +### Docker 伺服器 + +將 OpenCode 作為容器化服務執行: + +- [English](docs/docker-server.md) +- [简体中文](docs/docker-server.zh.md) +- [繁體中文](docs/docker-server.zht.md) +- [한국어](docs/docker-server.ko.md) +- [Deutsch](docs/docker-server.de.md) +- [Español](docs/docker-server.es.md) +- [Français](docs/docker-server.fr.md) +- [Italiano](docs/docker-server.it.md) +- [Dansk](docs/docker-server.da.md) +- [日本語](docs/docker-server.ja.md) +- [Polski](docs/docker-server.pl.md) +- [Русский](docs/docker-server.ru.md) +- [Bosanski](docs/docker-server.bs.md) +- [العربية](docs/docker-server.ar.md) +- [Norsk](docs/docker-server.no.md) +- [Português (Brasil)](docs/docker-server.br.md) +- [ไทย](docs/docker-server.th.md) +- [Türkçe](docs/docker-server.tr.md) +- [Українська](docs/docker-server.uk.md) +- [বাংলা](docs/docker-server.bn.md) +- [Ελληνικά](docs/docker-server.gr.md) +- [Tiếng Việt](docs/docker-server.vi.md) + ### 參與貢獻 如果您有興趣參與 OpenCode 的開發,請在提交 Pull Request 前先閱讀我們的 [貢獻指南 (Contributing Docs)](./CONTRIBUTING.md)。 diff --git a/docs/docker-server.ar.md b/docs/docker-server.ar.md new file mode 100644 index 000000000000..06431b66c83b --- /dev/null +++ b/docs/docker-server.ar.md @@ -0,0 +1,359 @@ +# توثيق خادم OpenCode Docker + +يغطي هذا الدليل تشغيل OpenCode في وضع الخادم داخل حاويات Docker. + +## مقدمة + +خادم OpenCode هو نشر بدون رأس لـ OpenCode يعمل كخدمة خلفية، ويمكن الوصول إليه عبر واجهة برمجة التطبيقات HTTP. توفر صورة Docker بيئة تشغيل كاملة مع جميع الأدوات اللازمة مثبتة مسبقًا، مما يجعلها مثالية لـ: + +- بيئات التطوير عن بُعد +- التكامل مع CI/CD +- مثيلات البرمجة المشتركة للفريق +- تشغيل OpenCode على الخوادم بدون واجهة رسومية + +## البدء السريع + +شغّل خادم OpenCode بكلمة مرور آمنة: + +```bash +docker run -d \ + --name opencode-server \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=your_secure_password \ + -v opencode_workspace:/workspace \ + ghcr.io/anomalyco/opencode/server:debian +``` + +الوصول إلى الخادم على `http://localhost:3000`. + +## متغيرات الصورة + +يتوفر متغيران للصورة الأساسية: + +| المتغير | الصورة الأساسية | الحجم | حالة الاستخدام | +| -------- | ------------------ | ------ | ------------------------ | +| `debian` | Debian Trixie Slim | ~500MB | موصى به لمعظم المستخدمين | +| `alpine` | Alpine Edge | ~200MB | بصمة أدنى، سحب أسرع | + +### سحب متغيرات محددة + +```bash +# Debian (موصى به) +docker pull ghcr.io/anomalyco/opencode/server:debian + +# Alpine (الحد الأدنى) +docker pull ghcr.io/anomalyco/opencode/server:alpine +``` + +## متغيرات البيئة + +| المتغير | الافتراضي | الوصف | +| -------------------------- | ----------------------------- | ------------------------------------------ | +| `OPENCODE_SERVER_PASSWORD` | (لا شيء) | **مطلوب.** كلمة مرور لمصادقة HTTP الأساسية | +| `OPENCODE_SERVER_USERNAME` | `opencode` | اسم المستخدم لمصادقة HTTP الأساسية | +| `XDG_CONFIG_HOME` | `/home/opencode/.config` | دليل التكوين | +| `XDG_CACHE_HOME` | `/home/opencode/.cache` | دليل ذاكرة التخزين المؤقت | +| `XDG_DATA_HOME` | `/home/opencode/.local/share` | دليل البيانات | + +### خيارات الخادم (علامات CLI) + +يقبل الخادم هذه الخيارات الإضافية عند تجاوز الأمر الافتراضي: + +```bash +docker run ... ghcr.io/anomalyco/opencode/server:debian \ + opencode serve --hostname=0.0.0.0 --port=3000 --cors=https://example.com +``` + +| العلامة | الافتراضي | الوصف | +| --------------- | ---------------- | -------------------------------- | +| `port--` | `0` (عشوائي) | المنفذ للاستماع | +| `hostname--` | `127.0.0.1` | اسم المضيف للربط | +| `mdns--` | `false` | تمكين اكتشاف خدمة mDNS | +| `mdns-domain--` | `opencode.local` | اسم مجال mDNS المخصص | +| `cors--` | `[]` | نطاقات CORS المسموح بها الإضافية | + +## تحميل الأقراص + +قم بتحميل هذه الأقراص لت保持 البيانات ومشاركة الموارد: + +### مساحة العمل (مطلوب) + +```bash +-v /path/to/workspace:/workspace +``` + +هنا يقوم OpenCode بتشغيل ملفات مشروعك. قم بتحميل مستودع الكود الخاص بك هنا. + +### مفاتيح SSH + +```bash +-v ~/.ssh:/home/opencode/.ssh:ro +``` + +وصول للقراءة فقط إلى مفاتيح SSH لاستنساخ المستودعات الخاصة. + +### تكوين Git + +```bash +-v ~/.gitconfig:/home/opencode/.gitconfig:ro +``` + +وراثة هوية مستخدم Git من المضيف. + +### تكوين OpenCode + +```bash +-v ~/.config/opencode:/home/opencode/.config/opencode +``` + +保持 إعدادات OpenCode بين إعادة تشغيل الحاوية. + +### ذاكرة التخزين المؤقت + +```bash +-v opencode_cache:/home/opencode/.cache +``` + +ذاكرة تخزين مؤقت لحزم npm وخوادم اللغات والأدوات الأخرى التي تم تنزيلها. + +## المنافذ + +| المنفذ | البروتوكول | الوصف | +| ------ | ---------- | ----------------------------------------------- | +| `3000` | HTTP | واجهة برمجة تطبيقات الخادم الرئيسية (الافتراضي) | + +يمكن إعادة تعيين المنفذ عبر علامة `-p` في Docker: + +```bash +-p 8080:3000 # الوصول إلى الخادم على http://localhost:8080 +``` + +## المستخدم والأذونات + +تعمل الحاوية كمستخدم غير أساسي (`opencode`، UID 1000) لأسباب أمنية. هذا المستخدم لديه وصول `sudo` بدون كلمة مرور للمهام الإدارية: + +```bash +# تنفيذ الأوامر كمستخدم opencode +docker exec -it opencode-server sudo -u opencode + +# الحصول على shell كمستخدم opencode +docker exec -it opencode-server sudo -u opencode /bin/bash +``` + +إذا كنت بحاجة إلى وصول أساسي: + +```bash +docker exec -it opencode-server /bin/bash +``` + +## الأدوات المثبتة + +تتضمن الصورة هذه الأدوات بشكل مباشر: + +| الأداة | الوصف | +| ----------------- | -------------------------------- | +| `opencode` | واجهة سطر أوامر OpenCode | +| `bun` | وقت تشغيل JavaScript ومدير الحزم | +| `bunx` | مكافئ Bun لـ npx (تشغيل حزم npm) | +| `uv` | مدير حزم Python | +| `git` | التحكم في الإصدار | +| `git-lfs` | امتداد التخزين الكبير لـ Git | +| `build-essential` | مكتبات GCC وmake والبناء | +| `curl` | عميل HTTP | +| `wget` | أداة تنزيل الملفات | +| `openssh-client` | أدوات عميل ومفاتيح SSH | +| `xz-utils` | أدوات الضغط | + +### استخدام bun + +```bash +# تشغيل حزمة Node.js +docker exec -it opencode-server bunx create-next-app + +# تثبيت التبعيات +docker exec -it opencode-server bun install +``` + +### استخدام uv + +```bash +# تثبيت حزمة Python +docker exec -it opencode-server uv pip install pandas + +# تشغيل برنامج Python +docker exec -it opencode-server uv run script.py +``` + +### استخدام git + +```bash +# استنساخ مستودع في مساحة العمل +docker exec -it opencode-server git clone https://github.com/user/repo.git /workspace/repo +``` + +## فحص الصحة + +تتضمن الحاوية فحص صحة مدمج يتحقق من استجابة الخادم: + +```bash +# فحص صحة الحاوية +docker inspect --format='{{.State.Health.Status}}' opencode-server +``` + +نقطة نهاية الصحة ترد HTTP 200 عندما تكون صحية: + +```bash +# فحص الصحة اليدوي +curl -f http://localhost:3000/health +``` + +تكوين فحص الصحة: + +- الفترة: 30 ثانية +- المهلة: 10 ثوان +- فترة البدء: 10 ثوان +- المحاولات: 3 + +## مثال Docker Compose + +أنشئ ملف `docker-compose.yml`: + +```yaml +services: + opencode: + image: ghcr.io/anomalyco/opencode/server:debian + container_name: opencode-server + restart: unless-stopped + ports: + - "3000:3000" + environment: + - OPENCODE_SERVER_PASSWORD=your_secure_password + - OPENCODE_SERVER_USERNAME=opencode + volumes: + - ./workspace:/workspace + - opencode_config:/home/opencode/.config + - opencode_cache:/home/opencode/.cache + - ~/.ssh:/home/opencode/.ssh:ro + - ~/.gitconfig:/home/opencode/.gitconfig:ro + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000/health"] + interval: 30s + timeout: 10s + retries: 3 + +volumes: + opencode_config: + opencode_cache: +``` + +بدء الحزمة: + +```bash +docker-compose up -d +``` + +## البناء من المصدر + +لبناء صورة الخادم من المصدر: + +### استنساخ المستودع + +```bash +git clone https://github.com/anomalyco/opencode.git +cd opencode +``` + +### بناء متغير Debian + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.debian \ + -t opencode-server:local \ + . +``` + +### بناء متغير Alpine + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.alpine \ + -t opencode-server:alpine-local \ + . +``` + +### تشغيل البناء المحلي الخاص بك + +```bash +docker run -d \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=dev_password \ + -v $(pwd)/workspace:/workspace \ + opencode-server:local +``` + +## حل المشكلات + +### عدم بدء الخادم + +تحقق من السجلات: + +```bash +docker logs opencode-server +``` + +المشاكل الشائعة: + +- عدم وجود `OPENCODE_SERVER_PASSWORD` - يرفض الخادم البدء بدون مصادقة +- المنفذ مستخدم بالفعل - تغيير تعيين منفذ المضيف + +### فشل المصادقة + +تأكد من تطابق كلمة المرور تمامًا. يستخدم الخادم مصادقة HTTP الأساسية: + +```bash +# اختبار المصادقة +curl -u opencode:your_password http://localhost:3000/health +``` + +### أخطاءPermissions مساحة العمل + +تأكد من أن الدليل المركب قابل للكتابة بواسطة UID 1000: + +```bash +# إصلاح الملكية +sudo chown -R 1000:1000 /path/to/workspace +``` + +### بدء بطيء + +أول تشغيل يقوم بتنزيل خوادم اللغات والأدوات. تحقق من التقدم: + +```bash +docker logs -f opencode-server +``` + +### لا يمكن للحاوية الوصول إلى الإنترنت + +تحقق من تكوين DNS: + +```bash +docker exec opencode-server ping -c 3 8.8.8.8 +docker exec opencode-server cat /etc/resolv.conf +``` + +### فشل فحص الصحة + +تحقق من أن الخادم يعمل فعليًا: + +```bash +docker exec opencode-server curl -f http://localhost:3000/health +``` + +### عدم عمل مفتاح SSH + +تأكد من أذونات المفاتيح الصحيحة داخل الحاوية: + +```bash +docker exec opencode-server sudo chmod 600 /home/opencode/.ssh/id_rsa +docker exec opencode-server sudo chmod 644 /home/opencode/.ssh/id_rsa.pub +``` diff --git a/docs/docker-server.bn.md b/docs/docker-server.bn.md new file mode 100644 index 000000000000..a0c6af65d722 --- /dev/null +++ b/docs/docker-server.bn.md @@ -0,0 +1,359 @@ +# OpenCode সার্ভার ডকার ডকুমেন্টেশন + +এই নির্দেশিকাটি ডকার কন্টেইনারের মধ্যে সার্ভার মোডে OpenCode চালানোর বিষয়ে। + +## ভূমিকা + +OpenCode সার্ভার হলো OpenCode-এর একটি হেডলেস ডিপ্লয়মেন্ট যা ব্যাকগ্রাউন্ড সার্ভিস হিসাবে চলে এবং HTTP API-এর মাধ্যমে অ্যাক্সেসযোগ্য। ডকার ইমেজ একটি সম্পূর্ণ রানটাইম এনভায়রনমেন্ট প্রদান করে যেখানে সমস্ত প্রয়োজনীয় টুল প্রি-ইনস্টল করা থাকে, যা এটিকে নিম্নলিখিত কাজের জন্য আদর্শ করে তোলে: + +- রিমোট ডেভেলপমেন্ট এনভায়রনমেন্ট +- CI/CD ইন্টিগ্রেশন +- টিম শেয়ার্ড কোডিং ইনস্ট্যান্স +- GUI ছাড়া সার্ভারে OpenCode চালানো + +## দ্রুত শুরু + +একটি সুরক্ষিত পাসওয়ার্ড দিয়ে OpenCode সার্ভার চালান: + +```bash +docker run -d \ + --name opencode-server \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=your_secure_password \ + -v opencode_workspace:/workspace \ + ghcr.io/anomalyco/opencode/server:debian +``` + +`http://localhost:3000` এ সার্ভারে অ্যাক্সেস করুন। + +## ইমেজ ভেরিয়েন্ট + +দুটি বেস ইমেজ ভেরিয়েন্ট পাওয়া যায়: + +| ভেরিয়েন্ট | বেস ইমেজ | সাইজ | ব্যবহারের ক্ষেত্র | +| ---------- | ------------------ | ------ | ------------------------------------- | +| `debian` | Debian Trixie Slim | ~500MB | বেশিরভাগ ব্যবহারকারীর জন্য সুপারিশকৃত | +| `alpine` | Alpine Edge | ~200MB | সর্বনিম্ন ফুটপ্রিন্ট, দ্রুত পুল | + +### নির্দিষ্ট ভেরিয়েন্ট পুল করা + +```bash +# Debian (সুপারিশকৃত) +docker pull ghcr.io/anomalyco/opencode/server:debian + +# Alpine (সর্বনিম্ন) +docker pull ghcr.io/anomalyco/opencode/server:alpine +``` + +## এনভায়রনমেন্ট ভেরিয়েবল + +| ভেরিয়েবল | ডিফল্ট | বর্ণনা | +| -------------------------- | ----------------------------- | ------------------------------------------------------------- | +| `OPENCODE_SERVER_PASSWORD` | (কোনোটিই নয়) | **প্রয়োজনীয়।** HTTP Basic authentication-এর জন্য পাসওয়ার্ড | +| `OPENCODE_SERVER_USERNAME` | `opencode` | HTTP Basic authentication-এর জন্য ব্যবহারকারী নাম | +| `XDG_CONFIG_HOME` | `/home/opencode/.config` | কনফিগারেশন ডিরেক্টরি | +| `XDG_CACHE_HOME` | `/home/opencode/.cache` | ক্যাশ ডিরেক্টরি | +| `XDG_DATA_HOME` | `/home/opencode/.local/share` | ডেটা ডিরেক্টরি | + +### সার্ভার অপশন (CLI ফ্ল্যাগ) + +ডিফল্ট কমান্ড ওভাররাইড করার সময় সার্ভার এই অতিরিক্ত অপশনগুলি গ্রহণ করে: + +```bash +docker run ... ghcr.io/anomalyco/opencode/server:debian \ + opencode serve --hostname=0.0.0.0 --port=3000 --cors=https://example.com +``` + +| ফ্ল্যাগ | ডিফল্ট | বর্ণনা | +| --------------- | ---------------- | ---------------------------------- | +| `--port` | `0` (র‍্যান্ডম) | শোনার জন্য পোর্ট | +| `--hostname` | `127.0.0.1` | বাইন্ড করার জন্য হোস্টনেম | +| `--mdns` | `false` | mDNS সার্ভিস ডিসকভারি সক্রিয় করুন | +| `--mdns-domain` | `opencode.local` | কাস্টম mDNS ডোমেইন নাম | +| `--cors` | `[]` | অতিরিক্ত CORS-অনুমোদিত ডোমেইন | + +## ভলিউম মাউন্ট + +ডেটা সংরক্ষণ এবং রিসোর্স শেয়ার করতে এই ভলিউমগুলি মাউন্ট করুন: + +### ওয়ার্কস্পেস (প্রয়োজনীয়) + +```bash +-v /path/to/workspace:/workspace +``` + +এখানে OpenCode আপনার প্রজেক্ট ফাইলগুলির সাথে কাজ করে। আপনার কোড রিপোজিটরি এখানে মাউন্ট করুন। + +### SSH কী + +```bash +-v ~/.ssh:/home/opencode/.ssh:ro +``` + +প্রাইভেট রিপোজিটরি ক্লোন করার জন্য SSH কী-এর শুধুমাত্র পড়ার অ্যাক্সেস। + +### গিট কনফিগারেশন + +```bash +-v ~/.gitconfig:/home/opencode/.gitconfig:ro +``` + +হোস্ট থেকে গিট ব্যবহারকারী পরিচয় ইনহেরিট করুন। + +### OpenCode কনফিগারেশন + +```bash +-v ~/.config/opencode:/home/opencode/.config/opencode +``` + +কন্টেইনার রিস্টার্টের মধ্যে OpenCode সেটিংস সংরক্ষণ করুন। + +### ক্যাশ + +```bash +-v opencode_cache:/home/opencode/.cache +``` + +npm প্যাকেজ, ল্যাংগুয়েজ সার্ভার এবং অন্যান্য ডাউনলোড করা টুল ক্যাশ করুন। + +## পোর্ট + +| পোর্ট | প্রোটোকল | বর্ণনা | +| ------ | -------- | ------------------------ | +| `3000` | HTTP | মূল সার্ভার API (ডিফল্ট) | + +Docker-এর `-p` ফ্ল্যাগের মাধ্যমে পোর্ট পুনরায় ম্যাপ করা যায়: + +```bash +-p 8080:3000 # http://localhost:8080 এ সার্ভার অ্যাক্সেস করুন +``` + +## ব্যবহারকারী এবং অনুমতি + +নিরাপত্তার জন্য কন্টেইনারটি একটি নন-রুট ব্যবহারকারী (`opencode`, UID 1000) হিসাবে চলে। এই ব্যবহারকারীর প্রশাসনিক কাজের জন্য পাসওয়ার্ড ছাড়া `sudo` অ্যাক্সেস আছে: + +```bash +# opencode ব্যবহারকারী হিসাবে কমান্ড এক্সিকিউট করুন +docker exec -it opencode-server sudo -u opencode + +# opencode ব্যবহারকারী হিসাবে শেল পান +docker exec -it opencode-server sudo -u opencode /bin/bash +``` + +আপনার রুট অ্যাক্সেস দরকার হলে: + +```bash +docker exec -it opencode-server /bin/bash +``` + +## ইনস্টল করা টুল + +ইমেজে এই টুলগুলি অন্তর্ভুক্ত রয়েছে: + +| টুল | বর্ণনা | +| ----------------- | ----------------------------------------- | +| `opencode` | OpenCode CLI | +| `bun` | JavaScript রানটাইম এবং প্যাকেজ ম্যানেজার | +| `bunx` | bun-এর npx-এর সমতুল্য (npm প্যাকেজ চালান) | +| `uv` | Python প্যাকেজ ম্যানেজার | +| `git` | ভার্সন কন্ট্রোল | +| `git-lfs` | Git-এর জন্য বড় ফাইল স্টোরেজ এক্সটেনশন | +| `build-essential` | GCC, make এবং বিল্ড লাইব্রেরি | +| `curl` | HTTP ক্লায়েন্ট | +| `wget` | ফাইল ডাউনলোড ইউটিলিটি | +| `openssh-client` | SSH ক্লায়েন্ট এবং কী টুল | +| `xz-utils` | কম্প্রেশন ইউটিলিটি | + +### bun ব্যবহার করা + +```bash +# একটি Node.js প্যাকেজ চালান +docker exec -it opencode-server bunx create-next-app + +# ডিপেন্ডেন্সি ইনস্টল করুন +docker exec -it opencode-server bun install +``` + +### uv ব্যবহার করা + +```bash +# একটি Python প্যাকেজ ইনস্টল করুন +docker exec -it opencode-server uv pip install pandas + +# একটি Python স্ক্রিপ্ট চালান +docker exec -it opencode-server uv run script.py +``` + +### git ব্যবহার করা + +```bash +# রিপোজিটরি ওয়ার্কস্পেসে ক্লোন করুন +docker exec -it opencode-server git clone https://github.com/user/repo.git /workspace/repo +``` + +## হেলথ চেক + +কন্টেইনারে একটি বিল্ট-ইন হেলথ চেক অন্তর্ভুক্ত যা সার্ভার প্রতিক্রিয়া দিচ্ছে কিনা তা যাচাই করে: + +```bash +# কন্টেইনারের স্বাস্থ্য পরীক্ষা করুন +docker inspect --format='{{.State.Health.Status}}' opencode-server +``` + +স্বাস্থ্যমান হলে হেলথ এন্ডপয়েন্ট HTTP 200 রিটার্ন করে: + +```bash +# ম্যানুয়াল হেলথ চেক +curl -f http://localhost:3000/health +``` + +হেলথ চেক কনফিগারেশন: + +- ইন্টারভ্যাল: 30 সেকেন্ড +- টাইমআউট: 10 সেকেন্ড +- স্টার্ট পিরিয়ড: 10 সেকেন্ড +- রিট্রাই: 3 + +## Docker Compose উদাহরণ + +একটি `docker-compose.yml` ফাইল তৈরি করুন: + +```yaml +services: + opencode: + image: ghcr.io/anomalyco/opencode/server:debian + container_name: opencode-server + restart: unless-stopped + ports: + - "3000:3000" + environment: + - OPENCODE_SERVER_PASSWORD=your_secure_password + - OPENCODE_SERVER_USERNAME=opencode + volumes: + - ./workspace:/workspace + - opencode_config:/home/opencode/.config + - opencode_cache:/home/opencode/.cache + - ~/.ssh:/home/opencode/.ssh:ro + - ~/.gitconfig:/home/opencode/.gitconfig:ro + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000/health"] + interval: 30s + timeout: 10s + retries: 3 + +volumes: + opencode_config: + opencode_cache: +``` + +স্টার্ট চালান: + +```bash +docker-compose up -d +``` + +## সোর্স থেকে বিল্ড + +সোর্স থেকে সার্ভার ইমেজ বিল্ড করতে: + +### রিপোজিটরি ক্লোন করুন + +```bash +git clone https://github.com/anomalyco/opencode.git +cd opencode +``` + +### Debian ভেরিয়েন্ট বিল্ড + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.debian \ + -t opencode-server:local \ + . +``` + +### Alpine ভেরিয়েন্ট বিল্ড + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.alpine \ + -t opencode-server:alpine-local \ + . +``` + +### আপনার লোকাল বিল্ড চালান + +```bash +docker run -d \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=dev_password \ + -v $(pwd)/workspace:/workspace \ + opencode-server:local +``` + +## সমস্যা সমাধান + +### সার্ভার শুরু হচ্ছে না + +লগ পরীক্ষা করুন: + +```bash +docker logs opencode-server +``` + +সাধারণ সমস্যা: + +- `OPENCODE_SERVER_PASSWORD` অনুপস্থিত - সার্ভার প্রমাণীকরণ ছাড়া শুরু হতে অস্বীকার করে +- পোর্ট ইতিমধ্যে ব্যবহৃত - হোস্ট পোর্ট ম্যাপিং পরিবর্তন করুন + +### প্রমাণীকরণ ব্যর্থ হচ্ছে + +পাসওয়ার্ড সঠিক মিলছে তা নিশ্চিত করুন। সার্ভার HTTP Basic Auth ব্যবহার করে: + +```bash +# প্রমাণীকরণ পরীক্ষা করুন +curl -u opencode:your_password http://localhost:3000/health +``` + +### ওয়ার্কস্পেস পারমিশন ত্রুটি + +মাউন্ট করা ডিরেক্টরি UID 1000 দ্বারা লেখার যোগ্য তা নিশ্চিত করুন: + +```bash +# মালিকানা ঠিক করুন +sudo chown -R 1000:1000 /path/to/workspace +``` + +### ধীর স্টার্টআপ + +প্রথম রানে ল্যাংগুয়েজ সার্ভার এবং টুল ডাউনলোড হয়। অগ্রগতি পরীক্ষা করুন: + +```bash +docker logs -f opencode-server +``` + +### কন্টেইনার ইন্টারনেটে পৌঁছাতে পারছে না + +DNS কনফিগারেশন পরীক্ষা করুন: + +```bash +docker exec opencode-server ping -c 3 8.8.8.8 +docker exec opencode-server cat /etc/resolv.conf +``` + +### হেলথ চেক ব্যর্থ হচ্ছে + +সার্ভার আসলে চলছে তা যাচাই করুন: + +```bash +docker exec opencode-server curl -f http://localhost:3000/health +``` + +### SSH কী কাজ করছে না + +কন্টেইনারের মধ্যে সঠিক কী পারমিশন নিশ্চিত করুন: + +```bash +docker exec opencode-server sudo chmod 600 /home/opencode/.ssh/id_rsa +docker exec opencode-server sudo chmod 644 /home/opencode/.ssh/id_rsa.pub +``` diff --git a/docs/docker-server.br.md b/docs/docker-server.br.md new file mode 100644 index 000000000000..79c6a9889ee5 --- /dev/null +++ b/docs/docker-server.br.md @@ -0,0 +1,359 @@ +# Documentação do Docker do Servidor OpenCode + +Este guia cobre a execução do OpenCode em modo servidor dentro de containers Docker. + +## Introdução + +O Servidor OpenCode é uma implantação headless do OpenCode que executa como um serviço em segundo plano, acessível via API HTTP. A imagem Docker fornece um ambiente de execução completo com todas as ferramentas necessárias pré-instaladas, tornando-o ideal para: + +- Ambientes de desenvolvimento remoto +- Integração com CI/CD +- Instâncias de codificação compartilhadas para equipes +- Executar OpenCode em servidores sem interface gráfica + +## Início Rápido + +Execute o Servidor OpenCode com uma senha segura: + +```bash +docker run -d \ + --name opencode-server \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=your_secure_password \ + -v opencode_workspace:/workspace \ + ghcr.io/anomalyco/opencode/server:debian +``` + +Acesse o servidor em `http://localhost:3000`. + +## Variantes de Imagem + +Duas variantes de imagem base estão disponíveis: + +| Variante | Imagem Base | Tamanho | Caso de Uso | +| -------- | ------------------ | ------- | --------------------------------------- | +| `debian` | Debian Trixie Slim | ~500MB | Recomendado para a maioria dos usuários | +| `alpine` | Alpine Edge | ~200MB | Pegada mínima, download mais rápido | + +### Baixando Variantes Específicas + +```bash +# Debian (recomendado) +docker pull ghcr.io/anomalyco/opencode/server:debian + +# Alpine (mínimo) +docker pull ghcr.io/anomalyco/opencode/server:alpine +``` + +## Variáveis de Ambiente + +| Variável | Padrão | Descrição | +| -------------------------- | ----------------------------- | --------------------------------------------------- | +| `OPENCODE_SERVER_PASSWORD` | (nenhum) | **Obrigatório.** Senha para autenticação HTTP Basic | +| `OPENCODE_SERVER_USERNAME` | `opencode` | Nome de usuário para autenticação HTTP Basic | +| `XDG_CONFIG_HOME` | `/home/opencode/.config` | Diretório de configuração | +| `XDG_CACHE_HOME` | `/home/opencode/.cache` | Diretório de cache | +| `XDG_DATA_HOME` | `/home/opencode/.local/share` | Diretório de dados | + +### Opções do Servidor (Flags de CLI) + +O servidor aceita estas opções adicionais ao sobrescrever o comando padrão: + +```bash +docker run ... ghcr.io/anomalyco/opencode/server:debian \ + opencode serve --hostname=0.0.0.0 --port=3000 --cors=https://example.com +``` + +| Flag | Padrão | Descrição | +| --------------- | ---------------- | ------------------------------------ | +| `--port` | `0` (aleatório) | Porta para escutar | +| `--hostname` | `127.0.0.1` | Hostname para vincular | +| `--mdns` | `false` | Habilitar descoberta de serviço mDNS | +| `--mdns-domain` | `opencode.local` | Nome de domínio mDNS personalizado | +| `--cors` | `[]` | Domínios CORS adicionais permitidos | + +## Montagem de Volumes + +Monte estes volumes para persistir dados e compartilhar recursos: + +### Workspace (Obrigatório) + +```bash +-v /path/to/workspace:/workspace +``` + +É aqui que o OpenCode opera nos arquivos do seu projeto. Monte seu repositório de código aqui. + +### Chaves SSH + +```bash +-v ~/.ssh:/home/opencode/.ssh:ro +``` + +Acesso somente leitura às chaves SSH para clonar repositórios privados. + +### Configuração do Git + +```bash +-v ~/.gitconfig:/home/opencode/.gitconfig:ro +``` + +Herdar identidade de usuário Git do host. + +### Configuração do OpenCode + +```bash +-v ~/.config/opencode:/home/opencode/.config/opencode +``` + +Persistir configurações do OpenCode entre reinicializações do container. + +### Cache + +```bash +-v opencode_cache:/home/opencode/.cache +``` + +Armazenar em cache pacotes npm, language servers e outras ferramentas baixadas. + +## Portas + +| Porta | Protocolo | Descrição | +| ------ | --------- | ---------------------------------- | +| `3000` | HTTP | API principal do servidor (padrão) | + +A porta pode ser remapeada através da flag `-p` do Docker: + +```bash +-p 8080:3000 # Acessar servidor em http://localhost:8080 +``` + +## Usuário e Permissões + +O container executa como um usuário não-root (`opencode`, UID 1000) por segurança. Este usuário tem acesso `sudo` sem senha para tarefas administrativas: + +```bash +# Executar comandos como usuário opencode +docker exec -it opencode-server sudo -u opencode + +# Obter shell como usuário opencode +docker exec -it opencode-server sudo -u opencode /bin/bash +``` + +Se você precisar de acesso root: + +```bash +docker exec -it opencode-server /bin/bash +``` + +## Ferramentas Instaladas + +A imagem inclui estas ferramentas pronto para uso: + +| Ferramenta | Descrição | +| ----------------- | ------------------------------------------------------ | +| `opencode` | CLI do OpenCode | +| `bun` | Runtime JavaScript e gerenciador de pacotes | +| `bunx` | Equivalente do Bun ao npx (executar pacotes npm) | +| `uv` | Gerenciador de pacotes Python | +| `git` | Controle de versão | +| `git-lfs` | Extensão de armazenamento de arquivos grandes para Git | +| `build-essential` | GCC, make e bibliotecas de compilação | +| `curl` | Cliente HTTP | +| `wget` | Utilitário de download de arquivos | +| `openssh-client` | Cliente SSH e ferramentas de chave | +| `xz-utils` | Utilitários de compressão | + +### Usando bun + +```bash +# Executar um pacote Node.js +docker exec -it opencode-server bunx create-next-app + +# Instalar dependências +docker exec -it opencode-server bun install +``` + +### Usando uv + +```bash +# Instalar um pacote Python +docker exec -it opencode-server uv pip install pandas + +# Executar um script Python +docker exec -it opencode-server uv run script.py +``` + +### Usando git + +```bash +# Clonar um repositório para o workspace +docker exec -it opencode-server git clone https://github.com/user/repo.git /workspace/repo +``` + +## Verificação de Saúde + +O container inclui uma verificação de saúde integrada que verifica se o servidor está respondendo: + +```bash +# Verificar saúde do container +docker inspect --format='{{.State.Health.Status}}' opencode-server +``` + +O endpoint de saúde retorna HTTP 200 quando está saudável: + +```bash +# Verificação de saúde manual +curl -f http://localhost:3000/health +``` + +Configuração da verificação de saúde: + +- Intervalo: 30 segundos +- Timeout: 10 segundos +- Período de início: 10 segundos +- Tentativas: 3 + +## Exemplo de Docker Compose + +Crie um arquivo `docker-compose.yml`: + +```yaml +services: + opencode: + image: ghcr.io/anomalyco/opencode/server:debian + container_name: opencode-server + restart: unless-stopped + ports: + - "3000:3000" + environment: + - OPENCODE_SERVER_PASSWORD=your_secure_password + - OPENCODE_SERVER_USERNAME=opencode + volumes: + - ./workspace:/workspace + - opencode_config:/home/opencode/.config + - opencode_cache:/home/opencode/.cache + - ~/.ssh:/home/opencode/.ssh:ro + - ~/.gitconfig:/home/opencode/.gitconfig:ro + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000/health"] + interval: 30s + timeout: 10s + retries: 3 + +volumes: + opencode_config: + opencode_cache: +``` + +Inicie o stack: + +```bash +docker-compose up -d +``` + +## Construindo a Partir do Código-Fonte + +Para construir a imagem do servidor a partir do código-fonte: + +### Clonar o repositório + +```bash +git clone https://github.com/anomalyco/opencode.git +cd opencode +``` + +### Construir variante Debian + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.debian \ + -t opencode-server:local \ + . +``` + +### Construir variante Alpine + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.alpine \ + -t opencode-server:alpine-local \ + . +``` + +### Executar sua construção local + +```bash +docker run -d \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=dev_password \ + -v $(pwd)/workspace:/workspace \ + opencode-server:local +``` + +## Solução de Problemas + +### Servidor não inicia + +Verifique os logs: + +```bash +docker logs opencode-server +``` + +Problemas comuns: + +- Falta `OPENCODE_SERVER_PASSWORD` - o servidor se recusa a iniciar sem autenticação +- Porta já em uso - altere o mapeamento da porta do host + +### Autenticação falhando + +Certifique-se de que a senha corresponde exatamente. O servidor usa HTTP Basic Auth: + +```bash +# Testar autenticação +curl -u opencode:your_password http://localhost:3000/health +``` + +### Erros de permissão do workspace + +Certifique-se de que o diretório montado é gravável pelo UID 1000: + +```bash +# Corrigir propriedade +sudo chown -R 1000:1000 /path/to/workspace +``` + +### Inicialização lenta + +O primeiro download baixa language servers e ferramentas. Verifique o progresso: + +```bash +docker logs -f opencode-server +``` + +### Container não consegue acessar a internet + +Verifique a configuração de DNS: + +```bash +docker exec opencode-server ping -c 3 8.8.8.8 +docker exec opencode-server cat /etc/resolv.conf +``` + +### Verificação de saúde falhando + +Verifique se o servidor está realmente em execução: + +```bash +docker exec opencode-server curl -f http://localhost:3000/health +``` + +### Chave SSH não funcionando + +Certifique-se de que as permissões da chave estão corretas dentro do container: + +```bash +docker exec opencode-server sudo chmod 600 /home/opencode/.ssh/id_rsa +docker exec opencode-server sudo chmod 644 /home/opencode/.ssh/id_rsa.pub +``` diff --git a/docs/docker-server.bs.md b/docs/docker-server.bs.md new file mode 100644 index 000000000000..5df2d59546a7 --- /dev/null +++ b/docs/docker-server.bs.md @@ -0,0 +1,359 @@ +# OpenCode Server Docker Dokumentacija + +Ovaj vodič pokriva pokretanje OpenCode-a u server modu unutar Docker kontejnera. + +## Uvod + +OpenCode Server je bezglavo raspoređivanje OpenCode-a koje radi kao pozadinska usluga, dostupna putem HTTP API-ja. Docker slika pruža kompletno runtime okruženje sa svim potrebnim alatima unaprijed instaliranim, što ga čini idealnim za: + +- Udaljena razvojna okruženja +- CI/CD integraciju +- Dijeljene coding instance za tim +- Pokretanje OpenCode-a na serverima bez GUI-ja + +## Brzi Početak + +Pokrenite OpenCode Server sa sigurnom lozinkom: + +```bash +docker run -d \ + --name opencode-server \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=your_secure_password \ + -v opencode_workspace:/workspace \ + ghcr.io/anomalyco/opencode/server:debian +``` + +Pristupite serveru na `http://localhost:3000`. + +## Varijante Slike + +Dostupne su dvije varijante bazne slike: + +| Varijanta | Bazna Slika | Veličina | Slučaj Korištenja | +| --------- | ------------------ | -------- | ---------------------------------- | +| `debian` | Debian Trixie Slim | ~500MB | Preporučeno za većinu korisnika | +| `alpine` | Alpine Edge | ~200MB | Minimalan otisak, brže preuzimanje | + +### Preuzimanje Specifičnih Varijanti + +```bash +# Debian (preporučeno) +docker pull ghcr.io/anomalyco/opencode/server:debian + +# Alpine (minimalno) +docker pull ghcr.io/anomalyco/opencode/server:alpine +``` + +## Varijable Okruženja + +| Varijabla | Zadana vrijednost | Opis | +| -------------------------- | ----------------------------- | --------------------------------------------------- | +| `OPENCODE_SERVER_PASSWORD` | (nema) | **Obavezno.** Lozinka za HTTP Basic autentifikaciju | +| `OPENCODE_SERVER_USERNAME` | `opencode` | Korisničko ime za HTTP Basic autentifikaciju | +| `XDG_CONFIG_HOME` | `/home/opencode/.config` | Direktorij za konfiguraciju | +| `XDG_CACHE_HOME` | `/home/opencode/.cache` | Direktorij za keš | +| `XDG_DATA_HOME` | `/home/opencode/.local/share` | Direktorij za podatke | + +### Opcije Servera (CLI zastavice) + +Server prihvata ove dodatne opcije prilikom prepisivanja zadane naredbe: + +```bash +docker run ... ghcr.io/anomalyco/opencode/server:debian \ + opencode serve --hostname=0.0.0.0 --port=3000 --cors=https://example.com +``` + +| Zastavica | Zadana vrijednost | Opis | +| --------------- | ----------------- | ------------------------------- | +| `--port` | `0` (nasumično) | Port za slušanje | +| `--hostname` | `127.0.0.1` | Hostname za povezivanje | +| `--mdns` | `false` | Omogući mDNS otkrivanje servisa | +| `--mdns-domain` | `opencode.local` | Prilagođeno mDNS ime domene | +| `--cors` | `[]` | Dodatni CORS-dozvoljeni domeni | + +## Montiranje Volumena + +Montirajte ove volumene za perzistenciju podataka i dijeljenje resursa: + +### Radni Prostor (Obavezno) + +```bash +-v /path/to/workspace:/workspace +``` + +Ovo je mjesto gdje OpenCode radi na vašim projektnim fajlovima. Montirajte vaš repozitorijum koda ovdje. + +### SSH Ključevi + +```bash +-v ~/.ssh:/home/opencode/.ssh:ro +``` + +Pristup samo za čitanje SSH ključevima za kloniranje privatnih repozitorijuma. + +### Git Konfiguracija + +```bash +-v ~/.gitconfig:/home/opencode/.gitconfig:ro +``` + +Naslijedite Git korisnički identitet od hosta. + +### OpenCode Konfiguracija + +```bash +-v ~/.config/opencode:/home/opencode/.config/opencode +``` + +Perzistirajte OpenCode postavke između restarta kontejnera. + +### Keš + +```bash +-v opencode_cache:/home/opencode/.cache +``` + +Keširajte npm pakete, language servere i druge preuzete alate. + +## Portovi + +| Port | Protokol | Opis | +| ------ | -------- | -------------------------- | +| `3000` | HTTP | Glavni server API (zadano) | + +Port se može remapirati putem Docker `-p` zastavice: + +```bash +-p 8080:3000 # Pristup serveru na http://localhost:8080 +``` + +## Korisnik i Dozvole + +Kontejner radi kao korisnik koji nije root (`opencode`, UID 1000) iz sigurnosnih razloga. Ovaj korisnik ima `sudo` pristup bez lozinke za administrativne zadatke: + +```bash +# Izvršavanje naredbi kao opencode korisnik +docker exec -it opencode-server sudo -u opencode + +# Dobijanje shella kao opencode korisnik +docker exec -it opencode-server sudo -u opencode /bin/bash +``` + +Ako vam treba root pristup: + +```bash +docker exec -it opencode-server /bin/bash +``` + +## Instalirani Alati + +Slika uključuje ove alate odmah: + +| Alat | Opis | +| ----------------- | ----------------------------------------------- | +| `opencode` | OpenCode CLI | +| `bun` | JavaScript runtime i package manager | +| `bunx` | Bun-ov ekvivalent npx-u (pokretanje npm paketa) | +| `uv` | Python package manager | +| `git` | Kontrola verzija | +| `git-lfs` | Proširenje za velike fajlove za Git | +| `build-essential` | GCC, make i build biblioteke | +| `curl` | HTTP klijent | +| `wget` | Utilitat za preuzimanje fajlova | +| `openssh-client` | SSH klijent i alati za ključeve | +| `xz-utils` | Kompresijski alati | + +### Korištenje bun-a + +```bash +# Pokretanje Node.js paketa +docker exec -it opencode-server bunx create-next-app + +# Instalacija zavisnosti +docker exec -it opencode-server bun install +``` + +### Korištenje uv-a + +```bash +# Instalacija Python paketa +docker exec -it opencode-server uv pip install pandas + +# Pokretanje Python skripte +docker exec -it opencode-server uv run script.py +``` + +### Korištenje git-a + +```bash +# Kloniranje repozitorijuma u radni prostor +docker exec -it opencode-server git clone https://github.com/user/repo.git /workspace/repo +``` + +## Health Check + +Kontejner uključuje ugrađeni health check koji provjerava da server reagira: + +```bash +# Provjera zdravlja kontejnera +docker inspect --format='{{.State.Health.Status}}' opencode-server +``` + +Health endpoint vraća HTTP 200 kada je zdrav: + +```bash +# Ručna provjera zdravlja +curl -f http://localhost:3000/health +``` + +Konfiguracija health check-a: + +- Interval: 30 sekundi +- Timeout: 10 sekundi +- Period pokretanja: 10 sekundi +- Pokušaji: 3 + +## Primjer Docker Compose-a + +Kreirajte `docker-compose.yml` fajl: + +```yaml +services: + opencode: + image: ghcr.io/anomalyco/opencode/server:debian + container_name: opencode-server + restart: unless-stopped + ports: + - "3000:3000" + environment: + - OPENCODE_SERVER_PASSWORD=your_secure_password + - OPENCODE_SERVER_USERNAME=opencode + volumes: + - ./workspace:/workspace + - opencode_config:/home/opencode/.config + - opencode_cache:/home/opencode/.cache + - ~/.ssh:/home/opencode/.ssh:ro + - ~/.gitconfig:/home/opencode/.gitconfig:ro + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000/health"] + interval: 30s + timeout: 10s + retries: 3 + +volumes: + opencode_config: + opencode_cache: +``` + +Pokrenite stack: + +```bash +docker-compose up -d +``` + +## Buildanje iz Izvora + +Da biste buildali server sliku iz izvora: + +### Klonirajte repozitorijum + +```bash +git clone https://github.com/anomalyco/opencode.git +cd opencode +``` + +### Buildajte Debian varijantu + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.debian \ + -t opencode-server:local \ + . +``` + +### Buildajte Alpine varijantu + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.alpine \ + -t opencode-server:alpine-local \ + . +``` + +### Pokrenite vaš lokalni build + +```bash +docker run -d \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=dev_password \ + -v $(pwd)/workspace:/workspace \ + opencode-server:local +``` + +## Rješavanje Problema + +### Server se ne pokreće + +Provjerite logove: + +```bash +docker logs opencode-server +``` + +Česti problemi: + +- Nedostaje `OPENCODE_SERVER_PASSWORD` - server odbija da se pokrene bez autentifikacije +- Port je već u upotrebi - promijenite mapping host porta + +### Autentifikacija ne uspijeva + +Osigurajte da se lozinka podudara tačno. Server koristi HTTP Basic Auth: + +```bash +# Testiranje autentifikacije +curl -u opencode:your_password http://localhost:3000/health +``` + +### Greške sa dozvolama radnog prostora + +Osigurajte da je montirani direktorij writeable od strane UID 1000: + +```bash +# Ispravljanje vlasništva +sudo chown -R 1000:1000 /path/to/workspace +``` + +### Sporo pokretanje + +Prvo pokretanje preuzima language servere i alate. Provjerite napredak: + +```bash +docker logs -f opencode-server +``` + +### Kontejner ne može pristupiti internetu + +Provjerite DNS konfiguraciju: + +```bash +docker exec opencode-server ping -c 3 8.8.8.8 +docker exec opencode-server cat /etc/resolv.conf +``` + +### Health check ne uspijeva + +Provjerite da server stvarno radi: + +```bash +docker exec opencode-server curl -f http://localhost:3000/health +``` + +### SSH ključ ne radi + +Osigurajte ispravne dozvole za ključeve unutar kontejnera: + +```bash +docker exec opencode-server sudo chmod 600 /home/opencode/.ssh/id_rsa +docker exec opencode-server sudo chmod 644 /home/opencode/.ssh/id_rsa.pub +``` diff --git a/docs/docker-server.da.md b/docs/docker-server.da.md new file mode 100644 index 000000000000..ad7ee33a6657 --- /dev/null +++ b/docs/docker-server.da.md @@ -0,0 +1,359 @@ +# OpenCode Server Docker Dokumentation + +Denne vejledning dækker kørsel af OpenCode i servertilstand inde i Docker-containere. + +## Introduktion + +OpenCode Server er en hovedløs installation af OpenCode, der kører som en baggrundstjeneste, tilgængelig via HTTP API. Docker-image'et giver en komplet kørtid med alle nødvendige værktøjer forudinstalleret, hvilket gør det ideelt til: + +- Fjernudviklingsmiljøer +- CI/CD-integration +- Delt kodningsinstanser til teams +- Kørsel af OpenCode på servere uden grafisk brugergrænseflade + +## Hurtig start + +Kør OpenCode Server med en sikker adgangskode: + +```bash +docker run -d \ + --name opencode-server \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=your_secure_password \ + -v opencode_workspace:/workspace \ + ghcr.io/anomalyco/opencode/server:debian +``` + +Adgang til serveren på `http://localhost:3000`. + +## Image-varianter + +To basisimage-varianter er tilgængelige: + +| Variant | Basisimage | Størrelse | Anvendelse | +| -------- | ------------------ | --------- | -------------------------------------- | +| `debian` | Debian Trixie Slim | ~500MB | Anbefales til de fleste brugere | +| `alpine` | Alpine Edge | ~200MB | Minimalt fodaftryk, hurtigere hentning | + +### Hentning af specifikke varianter + +```bash +# Debian (anbefalet) +docker pull ghcr.io/anomalyco/opencode/server:debian + +# Alpine (minimal) +docker pull ghcr.io/anomalyco/opencode/server:alpine +``` + +## Miljøvariabler + +| Variabel | Standard | Beskrivelse | +| -------------------------- | ----------------------------- | ---------------------------------------------------- | +| `OPENCODE_SERVER_PASSWORD` | (ingen) | **Påkrævet.** Adgangskode til HTTP Basic-godkendelse | +| `OPENCODE_SERVER_USERNAME` | `opencode` | Brugernavn til HTTP Basic-godkendelse | +| `XDG_CONFIG_HOME` | `/home/opencode/.config` | Konfigurationsmappe | +| `XDG_CACHE_HOME` | `/home/opencode/.cache` | Cache-mappe | +| `XDG_DATA_HOME` | `/home/opencode/.local/share` | Datamappe | + +### Serverindstillinger (CLI-flags) + +Serveren accepterer disse ekstra indstillinger, når standardkommandoen overskrives: + +```bash +docker run ... ghcr.io/anomalyco/opencode/server:debian \ + opencode serve --hostname=0.0.0.0 --port=3000 --cors=https://example.com +``` + +| Flag | Standard | Beskrivelse | +| --------------- | ---------------- | -------------------------------- | +| `--port` | `0` (tilfældig) | Port at lytte på | +| `--hostname` | `127.0.0.1` | Værtsnavn at binde til | +| `--mdns` | `false` | Aktiver mDNS-tjenesteopdagelse | +| `--mdns-domain` | `opencode.local` | Brugerdefineret mDNS-domænenavn | +| `--cors` | `[]` | Yderligere CORS-tilladte domæner | + +## Volumenmontering + +Monter disse volumener for at bevare data og dele ressourcer: + +### Arbejdsområde (Påkrævet) + +```bash +-v /path/to/workspace:/workspace +``` + +Her opererer OpenCode på dine projektfiler. Montér dit kode-lager her. + +### SSH-nøgler + +```bash +-v ~/.ssh:/home/opencode/.ssh:ro +``` + +Læseadgang til SSH-nøgler til kloning af private repositories. + +### Git-konfiguration + +```bash +-v ~/.gitconfig:/home/opencode/.gitconfig:ro +``` + +Arv Gitbrugeridentitet fra værten. + +### OpenCode-konfiguration + +```bash +-v ~/.config/opencode:/home/opencode/.config/opencode +``` + +Bevar OpenCode-indstillinger mellem container-genstartere. + +### Cache + +```bash +-v opencode_cache:/home/opencode/.cache +``` + +Cache npm-pakker, sprogservere og andre downloadede værktøjer. + +## Porte + +| Port | Protokol | Beskrivelse | +| ------ | -------- | -------------------------- | +| `3000` | HTTP | Hovedserver-API (standard) | + +Porten kan ændres via Dockers `-p`-flag: + +```bash +-p 8080:3000 # Adgang til server på http://localhost:8080 +``` + +## Bruger og tilladelser + +Containeren kører som en ikke-root bruger (`opencode`, UID 1000) af sikkerhedsmæssige årsager. Denne bruger har `sudo`-adgang uden adgangskode til administrative opgaver: + +```bash +# Udfør kommandoer som opencode-bruger +docker exec -it opencode-server sudo -u opencode + +# Få shell som opencode-bruger +docker exec -it opencode-server sudo -u opencode /bin/bash +``` + +Hvis du har brug for root-adgang: + +```bash +docker exec -it opencode-server /bin/bash +``` + +## Installerede værktøjer + +Image'et inkluderer disse værktøjer ud af boksen: + +| Værktøj | Beskrivelse | +| ----------------- | ---------------------------------------- | +| `opencode` | OpenCode CLI | +| `bun` | JavaScript-kørtid og pakkehåndtering | +| `bunx` | Buns equivalent til npx (kør npm-pakker) | +| `uv` | Python-pakkehåndtering | +| `git` | Versionskontrol | +| `git-lfs` | Stor fil-lagringsudvidelse til Git | +| `build-essential` | GCC, make og build-biblioteker | +| `curl` | HTTP-klient | +| `wget` | Fil-download-værktøj | +| `openssh-client` | SSH-klient og nøgleværktøjer | +| `xz-utils` | Komprimeringsværktøjer | + +### Brug af bun + +```bash +# Kør en Node.js-pakke +docker exec -it opencode-server bunx create-next-app + +# Installer afhængigheder +docker exec -it opencode-server bun install +``` + +### Brug af uv + +```bash +# Installer en Python-pakke +docker exec -it opencode-server uv pip install pandas + +# Kør et Python-script +docker exec -it opencode-server uv run script.py +``` + +### Brug af git + +```bash +# Klon et repository til arbejdsområdet +docker exec -it opencode-server git clone https://github.com/user/repo.git /workspace/repo +``` + +## Sundhedskontrol + +Containeren inkluderer en indbygget sundhedskontrol, der verificerer, at serveren svarer: + +```bash +# Kontroller containerens sundhed +docker inspect --format='{{.State.Health.Status}}' opencode-server +``` + +Sundhedsendepunktet returnerer HTTP 200, når det er sundt: + +```bash +# Manuel sundhedskontrol +curl -f http://localhost:3000/health +``` + +Sundhedskontrolkonfiguration: + +- Interval: 30 sekunder +- Timeout: 10 sekunder +- Startperiode: 10 sekunder +- Forsøg: 3 + +## Docker Compose-eksempel + +Opret en `docker-compose.yml`-fil: + +```yaml +services: + opencode: + image: ghcr.io/anomalyco/opencode/server:debian + container_name: opencode-server + restart: unless-stopped + ports: + - "3000:3000" + environment: + - OPENCODE_SERVER_PASSWORD=your_secure_password + - OPENCODE_SERVER_USERNAME=opencode + volumes: + - ./workspace:/workspace + - opencode_config:/home/opencode/.config + - opencode_cache:/home/opencode/.cache + - ~/.ssh:/home/opencode/.ssh:ro + - ~/.gitconfig:/home/opencode/.gitconfig:ro + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000/health"] + interval: 30s + timeout: 10s + retries: 3 + +volumes: + opencode_config: + opencode_cache: +``` + +Start stacken: + +```bash +docker-compose up -d +``` + +## Build fra kilde + +Sådan bygger du serverimage'et fra kilde: + +### Klon repository'et + +```bash +git clone https://github.com/anomalyco/opencode.git +cd opencode +``` + +### Byg Debian-variant + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.debian \ + -t opencode-server:local \ + . +``` + +### Byg Alpine-variant + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.alpine \ + -t opencode-server:alpine-local \ + . +``` + +### Kør din lokale build + +```bash +docker run -d \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=dev_password \ + -v $(pwd)/workspace:/workspace \ + opencode-server:local +``` + +## Fejlfinding + +### Server starter ikke + +Tjek loggene: + +```bash +docker logs opencode-server +``` + +Almindelige problemer: + +- Mangler `OPENCODE_SERVER_PASSWORD` - serveren nægter at starte uden godkendelse +- Port allerede i brug - ændr værtsport-tilknytningen + +### Godkendelse fejler + +Sørg for, at adgangskoden matcher nøjagtigt. Serveren bruger HTTP Basic Auth: + +```bash +# Test godkendelse +curl -u opencode:your_password http://localhost:3000/health +``` + +### Arbejdsområde-tilladelsesfejl + +Sørg for, at den monterede mappe er skrivbar af UID 1000: + +```bash +# Ret ejerskab +sudo chown -R 1000:1000 /path/to/workspace +``` + +### Langsom start + +Den første kørsel downloader sprogservere og værktøjer. Tjek fremskridt: + +```bash +docker logs -f opencode-server +``` + +### Container kan ikke nå internettet + +Tjek DNS-konfiguration: + +```bash +docker exec opencode-server ping -c 3 8.8.8.8 +docker exec opencode-server cat /etc/resolv.conf +``` + +### Sundhedskontrol fejler + +Verificer, at serveren faktisk kører: + +```bash +docker exec opencode-server curl -f http://localhost:3000/health +``` + +### SSH-nøgle fungerer ikke + +Sørg for korrekte nøgletilladelser inde i containeren: + +```bash +docker exec opencode-server sudo chmod 600 /home/opencode/.ssh/id_rsa +docker exec opencode-server sudo chmod 644 /home/opencode/.ssh/id_rsa.pub +``` diff --git a/docs/docker-server.de.md b/docs/docker-server.de.md new file mode 100644 index 000000000000..0397c98dbce9 --- /dev/null +++ b/docs/docker-server.de.md @@ -0,0 +1,359 @@ +# OpenCode Server Docker Dokumentation + +Dieser Leitfaden behandelt das Ausführen von OpenCode im Servermodus in Docker-Containern. + +## Einführung + +OpenCode Server ist ein headless Deployment von OpenCode, das als Hintergrunddienst läuft und über die HTTP-API zugänglich ist. Das Docker-Image bietet eine vollständige Laufzeitumgebung mit allen erforderlichen vorinstallierten Tools, ideal für: + +- Remote-Entwicklungsumgebungen +- CI/CD-Integration +- Gemeinsam genutzte Coding-Instanzen für Teams +- Ausführen von OpenCode auf Servern ohne GUI + +## Schnellstart + +Führen Sie OpenCode Server mit einem sicheren Passwort aus: + +```bash +docker run -d \ + --name opencode-server \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=your_secure_password \ + -v opencode_workspace:/workspace \ + ghcr.io/anomalyco/opencode/server:debian +``` + +Greifen Sie auf den Server unter `http://localhost:3000` zu. + +## Image-Varianten + +Zwei Basis-Image-Varianten sind verfügbar: + +| Variante | Basis-Image | Größe | Anwendungsfall | +| -------- | ------------------ | ------ | ------------------------------------- | +| `debian` | Debian Trixie Slim | ~500MB | Für die meisten Benutzer empfohlen | +| `alpine` | Alpine Edge | ~200MB | Minimaler Footprint, schnellerer Pull | + +### Bestimmte Varianten herunterladen + +```bash +# Debian (empfohlen) +docker pull ghcr.io/anomalyco/opencode/server:debian + +# Alpine (minimal) +docker pull ghcr.io/anomalyco/opencode/server:alpine +``` + +## Umgebungsvariablen + +| Variable | Standard | Beschreibung | +| -------------------------- | ----------------------------- | ----------------------------------------------------------- | +| `OPENCODE_SERVER_PASSWORD` | (keine) | **Erforderlich.** Passwort für HTTP Basic-Authentifizierung | +| `OPENCODE_SERVER_USERNAME` | `opencode` | Benutzername für HTTP Basic-Authentifizierung | +| `XDG_CONFIG_HOME` | `/home/opencode/.config` | Konfigurationsverzeichnis | +| `XDG_CACHE_HOME` | `/home/opencode/.cache` | Cache-Verzeichnis | +| `XDG_DATA_HOME` | `/home/opencode/.local/share` | Datenverzeichnis | + +### Server-Optionen (CLI-Flags) + +Der Server akzeptiert diese zusätzlichen Optionen beim Überschreiben des Standardbefehls: + +```bash +docker run ... ghcr.io/anomalyco/opencode/server:debian \ + opencode serve --hostname=0.0.0.0 --port=3000 --cors=https://example.com +``` + +| Flag | Standard | Beschreibung | +| --------------- | ---------------- | ----------------------------------- | +| `--port` | `0` (zufällig) | Port zum Lauschen | +| `--hostname` | `127.0.0.1` | Hostname zum Binden | +| `--mdns` | `false` | mDNS-Diensterkennung aktivieren | +| `--mdns-domain` | `opencode.local` | Benutzerdefinierter mDNS-Domainname | +| `--cors` | `[]` | Zusätzliche CORS-erlaubte Domains | + +## Volume-Einbindungen + +Binden Sie diese Volumes ein, um Daten zu persistieren und Ressourcen zu teilen: + +### Arbeitsbereich (Erforderlich) + +```bash +-v /path/to/workspace:/workspace +``` + +Hier arbeitet OpenCode an Ihren Projektdateien. Binden Sie hier Ihr Code-Repository ein. + +### SSH-Schlüssel + +```bash +-v ~/.ssh:/home/opencode/.ssh:ro +``` + +Schreibgeschützter Zugriff auf SSH-Schlüssel zum Klonen privater Repositories. + +### Git-Konfiguration + +```bash +-v ~/.gitconfig:/home/opencode/.gitconfig:ro +``` + +Git-Benutzeridentität vom Host erben. + +### OpenCode-Konfiguration + +```bash +-v ~/.config/opencode:/home/opencode/.config/opencode +``` + +OpenCode-Einstellungen zwischen Container-Neustarts beibehalten. + +### Cache + +```bash +-v opencode_cache:/home/opencode/.cache +``` + +Cache für npm-Pakete, Language-Server und andere heruntergeladene Tools. + +## Ports + +| Port | Protokoll | Beschreibung | +| ------ | --------- | --------------------------- | +| `3000` | HTTP | Haupt-Server-API (Standard) | + +Der Port kann über Dockers `-p`-Flag neu zugeordnet werden: + +```bash +-p 8080:3000 # Auf Server unter http://localhost:8080 zugreifen +``` + +## Benutzer und Berechtigungen + +Der Container läuft aus Sicherheitsgründen als Nicht-Root-Benutzer (`opencode`, UID 1000). Dieser Benutzer hat `sudo`-Zugriff ohne Passwort für administrative Aufgaben: + +```bash +# Befehle als opencode-Benutzer ausführen +docker exec -it opencode-server sudo -u opencode + +# Shell als opencode-Benutzer erhalten +docker exec -it opencode-server sudo -u opencode /bin/bash +``` + +Wenn Sie Root-Zugriff benötigen: + +```bash +docker exec -it opencode-server /bin/bash +``` + +## Installierte Tools + +Das Image enthält diese Tools standardmäßig: + +| Tool | Beschreibung | +| ----------------- | --------------------------------------------- | +| `opencode` | OpenCode CLI | +| `bun` | JavaScript-Laufzeit und Paketmanager | +| `bunx` | Buns Equivalent zu npx (npm-Pakete ausführen) | +| `uv` | Python-Paketmanager | +| `git` | Versionskontrolle | +| `git-lfs` | Large File Storage Erweiterung für Git | +| `build-essential` | GCC, make und Build-Bibliotheken | +| `curl` | HTTP-Client | +| `wget` | Datei-Download-Tool | +| `openssh-client` | SSH-Client und Key-Tools | +| `xz-utils` | Komprimierungs-Tools | + +### Bun verwenden + +```bash +# Ein Node.js-Paket ausführen +docker exec -it opencode-server bunx create-next-app + +# Abhängigkeiten installieren +docker exec -it opencode-server bun install +``` + +### uv verwenden + +```bash +# Ein Python-Paket installieren +docker exec -it opencode-server uv pip install pandas + +# Ein Python-Skript ausführen +docker exec -it opencode-server uv run script.py +``` + +### Git verwenden + +```bash +# Ein Repository in den Arbeitsbereich klonen +docker exec -it opencode-server git clone https://github.com/user/repo.git /workspace/repo +``` + +## Health Check + +Der Container enthält einen integrierten Health-Check, der überprüft, ob der Server antwortet: + +```bash +# Container-Health prüfen +docker inspect --format='{{.State.Health.Status}}' opencode-server +``` + +Der Health-Endpunkt gibt HTTP 200 zurück, wenn der Server gesund ist: + +```bash +# Manueller Health-Check +curl -f http://localhost:3000/health +``` + +Health-Check-Konfiguration: + +- Intervall: 30 Sekunden +- Timeout: 10 Sekunden +- Startperiode: 10 Sekunden +- Wiederholungen: 3 + +## Docker Compose Beispiel + +Erstellen Sie eine `docker-compose.yml`-Datei: + +```yaml +services: + opencode: + image: ghcr.io/anomalyco/opencode/server:debian + container_name: opencode-server + restart: unless-stopped + ports: + - "3000:3000" + environment: + - OPENCODE_SERVER_PASSWORD=your_secure_password + - OPENCODE_SERVER_USERNAME=opencode + volumes: + - ./workspace:/workspace + - opencode_config:/home/opencode/.config + - opencode_cache:/home/opencode/.cache + - ~/.ssh:/home/opencode/.ssh:ro + - ~/.gitconfig:/home/opencode/.gitconfig:ro + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000/health"] + interval: 30s + timeout: 10s + retries: 3 + +volumes: + opencode_config: + opencode_cache: +``` + +Starten Sie den Stack: + +```bash +docker-compose up -d +``` + +## Aus dem Quellcode bauen + +So bauen Sie das Server-Image aus dem Quellcode: + +### Repository klonen + +```bash +git clone https://github.com/anomalyco/opencode.git +cd opencode +``` + +### Debian-Variante bauen + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.debian \ + -t opencode-server:local \ + . +``` + +### Alpine-Variante bauen + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.alpine \ + -t opencode-server:alpine-local \ + . +``` + +### Ihren lokalen Build ausführen + +```bash +docker run -d \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=dev_password \ + -v $(pwd)/workspace:/workspace \ + opencode-server:local +``` + +## Fehlerbehebung + +### Server startet nicht + +Überprüfen Sie die Logs: + +```bash +docker logs opencode-server +``` + +Häufige Probleme: + +- Fehlende `OPENCODE_SERVER_PASSWORD` - der Server verweigert das Starten ohne Authentifizierung +- Port bereits belegt - ändern Sie die Host-Port-Zuordnung + +### Authentifizierung fehlgeschlagen + +Stellen Sie sicher, dass das Passwort genau übereinstimmt. Der Server verwendet HTTP Basic Auth: + +```bash +# Authentifizierung testen +curl -u opencode:your_password http://localhost:3000/health +``` + +### Arbeitsbereich-Berechtigungsfehler + +Stellen Sie sicher, dass das eingebundene Verzeichnis für UID 1000 beschreibbar ist: + +```bash +# Eigentum ändern +sudo chown -R 1000:1000 /path/to/workspace +``` + +### Langsamer Start + +Der erste Download lädt Language-Server und Tools herunter. Überprüfen Sie den Fortschritt: + +```bash +docker logs -f opencode-server +``` + +### Container kann das Internet nicht erreichen + +Überprüfen Sie die DNS-Konfiguration: + +```bash +docker exec opencode-server ping -c 3 8.8.8.8 +docker exec opencode-server cat /etc/resolv.conf +``` + +### Health-Check schlägt fehl + +Überprüfen Sie, ob der Server tatsächlich läuft: + +```bash +docker exec opencode-server curl -f http://localhost:3000/health +``` + +### SSH-Schlüssel funktioniert nicht + +Stellen Sie die richtigen Schlüsselberechtigungen im Container sicher: + +```bash +docker exec opencode-server sudo chmod 600 /home/opencode/.ssh/id_rsa +docker exec opencode-server sudo chmod 644 /home/opencode/.ssh/id_rsa.pub +``` diff --git a/docs/docker-server.es.md b/docs/docker-server.es.md new file mode 100644 index 000000000000..6d4197f6580f --- /dev/null +++ b/docs/docker-server.es.md @@ -0,0 +1,359 @@ +# Documentación de Docker de OpenCode Server + +Esta guía cubre la ejecución de OpenCode en modo servidor dentro de contenedores Docker. + +## Introducción + +OpenCode Server es un despliegue headless de OpenCode que se ejecuta como un servicio en segundo plano, accesible a través de la API HTTP. La imagen de Docker proporciona un entorno de ejecución completo con todas las herramientas necesarias preinstaladas, siendo ideal para: + +- Entornos de desarrollo remoto +- Integración CI/CD +- Instancias compartidas de código para equipos +- Ejecutar OpenCode en servidores sin GUI + +## Inicio Rápido + +Ejecuta OpenCode Server con una contraseña segura: + +```bash +docker run -d \ + --name opencode-server \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=your_secure_password \ + -v opencode_workspace:/workspace \ + ghcr.io/anomalyco/opencode/server:debian +``` + +Accede al servidor en `http://localhost:3000`. + +## Variantes de Imagen + +Están disponibles dos variantes de imagen base: + +| Variante | Imagen Base | Tamaño | Caso de Uso | +| -------- | ------------------ | ------ | ---------------------------------- | +| `debian` | Debian Trixie Slim | ~500MB | Recomendado para la mayoría | +| `alpine` | Alpine Edge | ~200MB | Huella mínima, descarga más rápida | + +### Descargar Variantes Específicas + +```bash +# Debian (recomendado) +docker pull ghcr.io/anomalyco/opencode/server:debian + +# Alpine (minimal) +docker pull ghcr.io/anomalyco/opencode/server:alpine +``` + +## Variables de Entorno + +| Variable | Predeterminada | Descripción | +| -------------------------- | ----------------------------- | ------------------------------------------------------- | +| `OPENCODE_SERVER_PASSWORD` | (ninguna) | **Requerida.** Contraseña para autenticación HTTP Basic | +| `OPENCODE_SERVER_USERNAME` | `opencode` | Usuario para autenticación HTTP Basic | +| `XDG_CONFIG_HOME` | `/home/opencode/.config` | Directorio de configuración | +| `XDG_CACHE_HOME` | `/home/opencode/.cache` | Directorio de caché | +| `XDG_DATA_HOME` | `/home/opencode/.local/share` | Directorio de datos | + +### Opciones del Servidor (Banderas CLI) + +El servidor acepta estas opciones adicionales al sobrescribir el comando predeterminado: + +```bash +docker run ... ghcr.io/anomalyco/opencode/server:debian \ + opencode serve --hostname=0.0.0.0 --port=3000 --cors=https://example.com +``` + +| Banderas | Predeterminada | Descripción | +| --------------- | ---------------- | ----------------------------------------- | +| `--port` | `0` (aleatorio) | Puerto en el que escuchar | +| `--hostname` | `127.0.0.1` | Hostname al que vincular | +| `--mdns` | `false` | Habilitar descubrimiento de servicio mDNS | +| `--mdns-domain` | `opencode.local` | Nombre de dominio mDNS personalizado | +| `--cors` | `[]` | Dominios adicionales permitidos por CORS | + +## Montaje de Volúmenes + +Monta estos volúmenes para persistir datos y compartir recursos: + +### Espacio de Trabajo (Requerido) + +```bash +-v /path/to/workspace:/workspace +``` + +Aquí es donde OpenCode opera en tus archivos de proyecto. Monta tu repositorio de código aquí. + +### Claves SSH + +```bash +-v ~/.ssh:/home/opencode/.ssh:ro +``` + +Acceso de solo lectura a claves SSH para clonar repositorios privados. + +### Configuración de Git + +```bash +-v ~/.gitconfig:/home/opencode/.gitconfig:ro +``` + +Hereda la identidad de usuario de Git del host. + +### Configuración de OpenCode + +```bash +-v ~/.config/opencode:/home/opencode/.config/opencode +``` + +Persiste la configuración de OpenCode entre reinicios del contenedor. + +### Caché + +```bash +-v opencode_cache:/home/opencode/.cache +``` + +Caché de paquetes npm, servidores de lenguaje y otras herramientas descargadas. + +## Puertos + +| Puerto | Protocolo | Descripción | +| ------ | --------- | ------------------------------------------- | +| `3000` | HTTP | API principal del servidor (predeterminado) | + +El puerto puede remapearse mediante la bandera `-p` de Docker: + +```bash +-p 8080:3000 # Acceder al servidor en http://localhost:8080 +``` + +## Usuario y Permisos + +El contenedor se ejecuta como un usuario no root (`opencode`, UID 1000) por seguridad. Este usuario tiene acceso `sudo` sin contraseña para tareas administrativas: + +```bash +# Ejecutar comandos como usuario opencode +docker exec -it opencode-server sudo -u opencode + +# Obtener shell como usuario opencode +docker exec -it opencode-server sudo -u opencode /bin/bash +``` + +Si necesitas acceso root: + +```bash +docker exec -it opencode-server /bin/bash +``` + +## Herramientas Instaladas + +La imagen incluye estas herramientas de serie: + +| Herramienta | Descripción | +| ----------------- | -------------------------------------------------------- | +| `opencode` | CLI de OpenCode | +| `bun` | Runtime de JavaScript y gestor de paquetes | +| `bunx` | Equivalente de Bun a npx (ejecutar paquetes npm) | +| `uv` | Gestor de paquetes de Python | +| `git` | Control de versiones | +| `git-lfs` | Extensión de almacenamiento de archivos grandes para Git | +| `build-essential` | GCC, make y bibliotecas de compilación | +| `curl` | Cliente HTTP | +| `wget` | Utilidad de descarga de archivos | +| `openssh-client` | Cliente SSH y herramientas de clave | +| `xz-utils` | Utilidades de compresión | + +### Usando bun + +```bash +# Ejecutar un paquete Node.js +docker exec -it opencode-server bunx create-next-app + +# Instalar dependencias +docker exec -it opencode-server bun install +``` + +### Usando uv + +```bash +# Instalar un paquete Python +docker exec -it opencode-server uv pip install pandas + +# Ejecutar un script Python +docker exec -it opencode-server uv run script.py +``` + +### Usando git + +```bash +# Clonar un repositorio en el espacio de trabajo +docker exec -it opencode-server git clone https://github.com/user/repo.git /workspace/repo +``` + +## Verificación de Estado + +El contenedor incluye una verificación de estado incorporada que verifica que el servidor esté respondiendo: + +```bash +# Verificar estado del contenedor +docker inspect --format='{{.State.Health.Status}}' opencode-server +``` + +El endpoint de salud devuelve HTTP 200 cuando está sano: + +```bash +# Verificación de estado manual +curl -f http://localhost:3000/health +``` + +Configuración de verificación de estado: + +- Intervalo: 30 segundos +- Tiempo de espera: 10 segundos +- Período de inicio: 10 segundos +- Reintentos: 3 + +## Ejemplo de Docker Compose + +Crea un archivo `docker-compose.yml`: + +```yaml +services: + opencode: + image: ghcr.io/anomalyco/opencode/server:debian + container_name: opencode-server + restart: unless-stopped + ports: + - "3000:3000" + environment: + - OPENCODE_SERVER_PASSWORD=your_secure_password + - OPENCODE_SERVER_USERNAME=opencode + volumes: + - ./workspace:/workspace + - opencode_config:/home/opencode/.config + - opencode_cache:/home/opencode/.cache + - ~/.ssh:/home/opencode/.ssh:ro + - ~/.gitconfig:/home/opencode/.gitconfig:ro + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000/health"] + interval: 30s + timeout: 10s + retries: 3 + +volumes: + opencode_config: + opencode_cache: +``` + +Inicia el stack: + +```bash +docker-compose up -d +``` + +## Compilar desde el Código Fuente + +Para compilar la imagen del servidor desde el código fuente: + +### Clonar el repositorio + +```bash +git clone https://github.com/anomalyco/opencode.git +cd opencode +``` + +### Compilar variante Debian + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.debian \ + -t opencode-server:local \ + . +``` + +### Compilar variante Alpine + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.alpine \ + -t opencode-server:alpine-local \ + . +``` + +### Ejecutar tu compilación local + +```bash +docker run -d \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=dev_password \ + -v $(pwd)/workspace:/workspace \ + opencode-server:local +``` + +## Solución de Problemas + +### El servidor no inicia + +Verifica los logs: + +```bash +docker logs opencode-server +``` + +Problemas comunes: + +- Falta `OPENCODE_SERVER_PASSWORD` - el servidor se niega a iniciar sin autenticación +- Puerto ya en uso - cambia el mapeo de puerto del host + +### Autenticación fallida + +Asegúrate de que la contraseña coincida exactamente. El servidor usa HTTP Basic Auth: + +```bash +# Probar autenticación +curl -u opencode:your_password http://localhost:3000/health +``` + +### Errores de permisos del espacio de trabajo + +Asegúrate de que el directorio montado sea escribible por UID 1000: + +```bash +# Corregir propiedad +sudo chown -R 1000:1000 /path/to/workspace +``` + +### Inicio lento + +La primera ejecución descarga servidores de lenguaje y herramientas. Verifica el progreso: + +```bash +docker logs -f opencode-server +``` + +### El contenedor no puede acceder a internet + +Verifica la configuración de DNS: + +```bash +docker exec opencode-server ping -c 3 8.8.8.8 +docker exec opencode-server cat /etc/resolv.conf +``` + +### La verificación de estado falla + +Verifica que el servidor realmente esté ejecutándose: + +```bash +docker exec opencode-server curl -f http://localhost:3000/health +``` + +### La clave SSH no funciona + +Asegúrate de tener los permisos correctos de la clave dentro del contenedor: + +```bash +docker exec opencode-server sudo chmod 600 /home/opencode/.ssh/id_rsa +docker exec opencode-server sudo chmod 644 /home/opencode/.ssh/id_rsa.pub +``` diff --git a/docs/docker-server.fr.md b/docs/docker-server.fr.md new file mode 100644 index 000000000000..cad2ef366ff2 --- /dev/null +++ b/docs/docker-server.fr.md @@ -0,0 +1,359 @@ +# Documentation Docker OpenCode Server + +Ce guide couvre l'exécution d'OpenCode en mode serveur dans des conteneurs Docker. + +## Introduction + +OpenCode Server est un déploiement headless d'OpenCode qui s'exécute en tant que service d'arrière-plan, accessible via l'API HTTP. L'image Docker fournit un environnement d'exécution complet avec tous les outils nécessaires préinstallés, idéal pour : + +- Environnements de développement distant +- Intégration CI/CD +- Instances de codage partagées pour les équipes +- Exécution d'OpenCode sur des serveurs sans interface graphique + +## Démarrage Rapide + +Exécutez OpenCode Server avec un mot de passe sécurisé : + +```bash +docker run -d \ + --name opencode-server \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=your_secure_password \ + -v opencode_workspace:/workspace \ + ghcr.io/anomalyco/opencode/server:debian +``` + +Accédez au serveur à l'adresse `http://localhost:3000`. + +## Variantes d'Image + +Deux variantes d'image de base sont disponibles : + +| Variante | Image de Base | Taille | Cas d'Usage | +| -------- | ------------------ | ------ | ------------------------------------ | +| `debian` | Debian Trixie Slim | ~500MB | Recommandé pour la plupart | +| `alpine` | Alpine Edge | ~200MB | Empreinte minimale, pull plus rapide | + +### Pull de Variantes Spécifiques + +```bash +# Debian (recommandé) +docker pull ghcr.io/anomalyco/opencode/server:debian + +# Alpine (minimal) +docker pull ghcr.io/anomalyco/opencode/server:alpine +``` + +## Variables d'Environnement + +| Variable | Par Défaut | Description | +| -------------------------- | ----------------------------- | ----------------------------------------------------------- | +| `OPENCODE_SERVER_PASSWORD` | (aucune) | **Requis.** Mot de passe pour l'authentification HTTP Basic | +| `OPENCODE_SERVER_USERNAME` | `opencode` | Nom d'utilisateur pour l'authentification HTTP Basic | +| `XDG_CONFIG_HOME` | `/home/opencode/.config` | Répertoire de configuration | +| `XDG_CACHE_HOME` | `/home/opencode/.cache` | Répertoire de cache | +| `XDG_DATA_HOME` | `/home/opencode/.local/share` | Répertoire de données | + +### Options du Serveur (Flags CLI) + +Le serveur accepte ces options supplémentaires lors du remplacement de la commande par défaut : + +```bash +docker run ... ghcr.io/anomalyco/opencode/server:debian \ + opencode serve --hostname=0.0.0.0 --port=3000 --cors=https://example.com +``` + +| Flag | Par Défaut | Description | +| --------------- | ---------------- | --------------------------------------- | +| `--port` | `0` (aléatoire) | Port d'écoute | +| `--hostname` | `127.0.0.1` | Nom d'hôte de liaison | +| `--mdns` | `false` | Activer la découverte de service mDNS | +| `--mdns-domain` | `opencode.local` | Nom de domaine mDNS personnalisé | +| `--cors` | `[]` | Domaines CORS supplémentaires autorisés | + +## Montages de Volumes + +Montez ces volumes pour persister les données et partager les ressources : + +### Espace de Travail (Requis) + +```bash +-v /path/to/workspace:/workspace +``` + +C'est là qu'OpenCode fonctionne sur vos fichiers de projet. Montez votre dépôt de code ici. + +### Clés SSH + +```bash +-v ~/.ssh:/home/opencode/.ssh:ro +``` + +Accès en lecture seule aux clés SSH pour cloner des dépôts privés. + +### Configuration Git + +```bash +-v ~/.gitconfig:/home/opencode/.gitconfig:ro +``` + +Hériter de l'identité utilisateur Git de l'hôte. + +### Configuration OpenCode + +```bash +-v ~/.config/opencode:/home/opencode/.config/opencode +``` + +Persister les paramètres OpenCode entre les redémarrages du conteneur. + +### Cache + +```bash +-v opencode_cache:/home/opencode/.cache +``` + +Cache des packages npm, serveurs de langage et autres outils téléchargés. + +## Ports + +| Port | Protocole | Description | +| ------ | --------- | ---------------------------------- | +| `3000` | HTTP | API principale du serveur (défaut) | + +Le port peut être redéfini via le flag `-p` de Docker : + +```bash +-p 8080:3000 # Accéder au serveur à http://localhost:8080 +``` + +## Utilisateur et Permissions + +Le conteneur s'exécute en tant qu'utilisateur non-root (`opencode`, UID 1000) pour des raisons de sécurité. Cet utilisateur a un accès `sudo` sans mot de passe pour les tâches administratives : + +```bash +# Exécuter des commandes en tant qu'utilisateur opencode +docker exec -it opencode-server sudo -u opencode + +# Obtenir un shell en tant qu'utilisateur opencode +docker exec -it opencode-server sudo -u opencode /bin/bash +``` + +Si vous avez besoin d'un accès root : + +```bash +docker exec -it opencode-server /bin/bash +``` + +## Outils Installés + +L'image inclut ces outils prêts à l'emploi : + +| Outil | Description | +| ----------------- | ------------------------------------------------------ | +| `opencode` | CLI OpenCode | +| `bun` | Runtime JavaScript et gestionnaire de packages | +| `bunx` | Équivalent de Bun pour npx (exécuter des packages npm) | +| `uv` | Gestionnaire de packages Python | +| `git` | Contrôle de version | +| `git-lfs` | Extension de stockage de fichiers volumineux pour Git | +| `build-essential` | GCC, make et bibliothèques de compilation | +| `curl` | Client HTTP | +| `wget` | Utilitaire de téléchargement de fichiers | +| `openssh-client` | Client SSH et outils de clés | +| `xz-utils` | Utilitaires de compression | + +### Utiliser bun + +```bash +# Exécuter un package Node.js +docker exec -it opencode-server bunx create-next-app + +# Installer les dépendances +docker exec -it opencode-server bun install +``` + +### Utiliser uv + +```bash +# Installer un package Python +docker exec -it opencode-server uv pip install pandas + +# Exécuter un script Python +docker exec -it opencode-server uv run script.py +``` + +### Utiliser git + +```bash +# Cloner un dépôt dans l'espace de travail +docker exec -it opencode-server git clone https://github.com/user/repo.git /workspace/repo +``` + +## Vérification de Santé + +Le conteneur inclut une vérification de santé intégrée qui vérifie que le serveur répond : + +```bash +# Vérifier la santé du conteneur +docker inspect --format='{{.State.Health.Status}}' opencode-server +``` + +Le point de terminaison de santé retourne HTTP 200 lorsqu'il est sain : + +```bash +# Vérification de santé manuelle +curl -f http://localhost:3000/health +``` + +Configuration de la vérification de santé : + +- Intervalle : 30 secondes +- Timeout : 10 secondes +- Période de démarrage : 10 secondes +- Réessais : 3 + +## Exemple Docker Compose + +Créez un fichier `docker-compose.yml` : + +```yaml +services: + opencode: + image: ghcr.io/anomalyco/opencode/server:debian + container_name: opencode-server + restart: unless-stopped + ports: + - "3000:3000" + environment: + - OPENCODE_SERVER_PASSWORD=your_secure_password + - OPENCODE_SERVER_USERNAME=opencode + volumes: + - ./workspace:/workspace + - opencode_config:/home/opencode/.config + - opencode_cache:/home/opencode/.cache + - ~/.ssh:/home/opencode/.ssh:ro + - ~/.gitconfig:/home/opencode/.gitconfig:ro + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000/health"] + interval: 30s + timeout: 10s + retries: 3 + +volumes: + opencode_config: + opencode_cache: +``` + +Démarrez le stack : + +```bash +docker-compose up -d +``` + +## Construction depuis les Sources + +Pour construire l'image du serveur depuis les sources : + +### Cloner le dépôt + +```bash +git clone https://github.com/anomalyco/opencode.git +cd opencode +``` + +### Construire la variante Debian + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.debian \ + -t opencode-server:local \ + . +``` + +### Construire la variante Alpine + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.alpine \ + -t opencode-server:alpine-local \ + . +``` + +### Exécuter votre build local + +```bash +docker run -d \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=dev_password \ + -v $(pwd)/workspace:/workspace \ + opencode-server:local +``` + +## Dépannage + +### Le serveur ne démarre pas + +Vérifiez les logs : + +```bash +docker logs opencode-server +``` + +Problèmes courants : + +- `OPENCODE_SERVER_PASSWORD` manquant - le serveur refuse de démarrer sans authentification +- Port déjà utilisé - changez le mappage de port hôte + +### Échec de l'authentification + +Assurez-vous que le mot de passe correspond exactement. Le serveur utilise HTTP Basic Auth : + +```bash +# Tester l'authentification +curl -u opencode:your_password http://localhost:3000/health +``` + +### Erreurs de permissions de l'espace de travail + +Assurez-vous que le répertoire montée est inscriptible par UID 1000 : + +```bash +# Corriger la propriété +sudo chown -R 1000:1000 /path/to/workspace +``` + +### Démarrage lent + +La première exécution télécharge les serveurs de langage et les outils. Vérifiez la progression : + +```bash +docker logs -f opencode-server +``` + +### Le conteneur ne peut pas accéder à internet + +Vérifiez la configuration DNS : + +```bash +docker exec opencode-server ping -c 3 8.8.8.8 +docker exec opencode-server cat /etc/resolv.conf +``` + +### La vérification de santé échoue + +Vérifiez que le serveur fonctionne réellement : + +```bash +docker exec opencode-server curl -f http://localhost:3000/health +``` + +### La clé SSH ne fonctionne pas + +Assurez-vous des permissions de clé appropriées à l'intérieur du conteneur : + +```bash +docker exec opencode-server sudo chmod 600 /home/opencode/.ssh/id_rsa +docker exec opencode-server sudo chmod 644 /home/opencode/.ssh/id_rsa.pub +``` diff --git a/docs/docker-server.gr.md b/docs/docker-server.gr.md new file mode 100644 index 000000000000..0dd1a883eec9 --- /dev/null +++ b/docs/docker-server.gr.md @@ -0,0 +1,359 @@ +# Τεκμηρίωση OpenCode Server Docker + +Αυτός ο οδηγός καλύπτει την εκτέλεση του OpenCode σε λειτουργία server μέσα σε Docker containers. + +## Εισαγωγή + +Το OpenCode Server είναι μια headless εγκατάσταση του OpenCode που εκτελείται ως υπηρεσία φόντου, προσβάσιμη μέσω HTTP API. Η εικόνα Docker παρέχει ένα πλήρες περιβάλλον εκτέλεσης με όλα τα απαραίτητα εργαλεία προεγκατεστημένα, καθιστώντας το ιδανικό για: + +- Απομακρυσμένα περιβάλλοντα ανάπτυξης +- Ενσωμάτωση CI/CD +- Κοινόχρηστες περιπτώσεις κωδικοποίησης για ομάδες +- Εκτέλεση OpenCode σε servers χωρίς GUI + +## Γρήγορη Εκκίνηση + +Εκτελέστε το OpenCode Server με έναν ασφαλή κωδικό πρόσβασης: + +```bash +docker run -d \ + --name opencode-server \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=your_secure_password \ + -v opencode_workspace:/workspace \ + ghcr.io/anomalyco/opencode/server:debian +``` + +Αποκτήστε πρόσβαση στον server στη διεύθυνση `http://localhost:3000`. + +## Παραλλαγές Εικόνας + +Διατίθενται δύο παραλλαγές βασικής εικόνας: + +| Παραλλαγή | Βασική Εικόνα | Μέγεθος | Περίπτωση Χρήσης | +| --------- | ------------------ | ------- | ----------------------------------------- | +| `debian` | Debian Trixie Slim | ~500MB | Συνιστάται για τους περισσότερους χρήστες | +| `alpine` | Alpine Edge | ~200MB | Ελάχιστο αποτύπωμα, ταχύτερη λήψη | + +### Λήψη Συγκεκριμένων Παραλλαγών + +```bash +# Debian (συνιστάται) +docker pull ghcr.io/anomalyco/opencode/server:debian + +# Alpine (ελάχιστο) +docker pull ghcr.io/anomalyco/opencode/server:alpine +``` + +## Μεταβλητές Περιβάλλοντος + +| Μεταβλητή | Προεπιλογή | Περιγραφή | +| -------------------------- | ----------------------------- | --------------------------------------------------------------- | +| `OPENCODE_SERVER_PASSWORD` | (καμία) | **Απαιτείται.** Κωδικός πρόσβασης για HTTP Basic authentication | +| `OPENCODE_SERVER_USERNAME` | `opencode` | Όνομα χρήστη για HTTP Basic authentication | +| `XDG_CONFIG_HOME` | `/home/opencode/.config` | Κατάλογος διαμόρφωσης | +| `XDG_CACHE_HOME` | `/home/opencode/.cache` | Κατάλογος προσωρινής αποθήκευσης | +| `XDG_DATA_HOME` | `/home/opencode/.local/share` | Κατάλογος δεδομένων | + +### Επιλογές Server (CLI Flags) + +Ο server δέχεται αυτές τις επιπλέον επιλογές κατά την αντικατάσταση της προεπιλεγμένης εντολής: + +```bash +docker run ... ghcr.io/anomalyco/opencode/server:debian \ + opencode serve --hostname=0.0.0.0 --port=3000 --cors=https://example.com +``` + +| Flag | Προεπιλογή | Περιγραφή | +| --------------- | ---------------- | -------------------------------------- | +| `--port` | `0` (τυχαίο) | Θύρα για ακρόαση | +| `--hostname` | `127.0.0.1` | Hostname για σύνδεση | +| `--mdns` | `false` | Ενεργοποίηση ανακάλυψης υπηρεσίας mDNS | +| `--mdns-domain` | `opencode.local` | Προσαρμοσμένο domain name mDNS | +| `--cors` | `[]` | Επιπλέον domains επιτρεπόμενα για CORS | + +## Mount Volumes + +Κάντε mount αυτούς τους τόμους για να διατηρήσετε δεδομένα και να μοιραστείτε πόρους: + +### Workspace (Απαιτείται) + +```bash +-v /path/to/workspace:/workspace +``` + +Εδώ λειτουργεί το OpenCode με τα αρχεία του project σας. Κάντε mount το repository του κώδικά σας εδώ. + +### SSH Keys + +```bash +-v ~/.ssh:/home/opencode/.ssh:ro +``` + +Πρόσβαση μόνο για ανάγνωση στα SSH keys για κλωνοποίηση ιδιωτικών repositories. + +### Διαμόρφωση Git + +```bash +-v ~/.gitconfig:/home/opencode/.gitconfig:ro +``` + +Κληρονομή της ταυτότητας χρήστη Git από τον host. + +### Διαμόρφωση OpenCode + +```bash +-v ~/.config/opencode:/home/opencode/.config/opencode +``` + +Διατήρηση ρυθμίσεων OpenCode μεταξύ επανεκκινήσεων του container. + +### Cache + +```bash +-v opencode_cache:/home/opencode/.cache +``` + +Cache για πακέτα npm, language servers και άλλα εργαλεία που έχουν ληφθεί. + +## Θύρες + +| Θύρα | Πρωτόκολλο | Περιγραφή | +| ------ | ---------- | --------------------------------- | +| `3000` | HTTP | Κύριο API του server (προεπιλογή) | + +Η θύρα μπορεί να αντιστοιχιστεί μέσω της επιλογής `-p` του Docker: + +```bash +-p 8080:3000 # Πρόσβαση στον server στο http://localhost:8080 +``` + +## Χρήστης και Δικαιώματα + +Το container εκτελείται ως μη-root χρήστης (`opencode`, UID 1000) για ασφάλεια. Αυτός ο χρήστης έχει πρόσβαση `sudo` χωρίς κωδικό για διοικητικές εργασίες: + +```bash +# Εκτέλεση εντολών ως χρήστης opencode +docker exec -it opencode-server sudo -u opencode + +# Απόκτηση shell ως χρήστης opencode +docker exec -it opencode-server sudo -u opencode /bin/bash +``` + +Αν χρειάζεστε πρόσβαση root: + +```bash +docker exec -it opencode-server /bin/bash +``` + +## Εγκατεστημένα Εργαλεία + +Η εικόνα περιλαμβάνει αυτά τα εργαλεία έτοιμα προς χρήση: + +| Εργαλείο | Περιγραφή | +| ----------------- | ----------------------------------------------------- | +| `opencode` | OpenCode CLI | +| `bun` | JavaScript runtime και package manager | +| `bunx` | Το αντίστοιχο του npx της Bun (εκτέλεση npm packages) | +| `uv` | Python package manager | +| `git` | Έλεγχος εκδόσεων | +| `git-lfs` | Επέκταση μεγάλης αποθήκευσης αρχείων για Git | +| `build-essential` | GCC, make και βιβλιοθήκες build | +| `curl` | HTTP client | +| `wget` | Εργαλείο λήψης αρχείων | +| `openssh-client` | SSH client και εργαλείο κλειδιών | +| `xz-utils` | Εργαλεία συμπίεσης | + +### Χρήση του bun + +```bash +# Εκτέλεση πακέτου Node.js +docker exec -it opencode-server bunx create-next-app + +# Εγκατάσταση εξαρτήσεων +docker exec -it opencode-server bun install +``` + +### Χρήση του uv + +```bash +# Εγκατάσταση πακέτου Python +docker exec -it opencode-server uv pip install pandas + +# Εκτέληση Python script +docker exec -it opencode-server uv run script.py +``` + +### Χρήση του git + +```bash +# Κλωνοποίηση repository στο workspace +docker exec -it opencode-server git clone https://github.com/user/repo.git /workspace/repo +``` + +## Health Check + +Το container περιλαμβάνει ένα ενσωματωμένο health check που επαληθεύει ότι ο server ανταποκρίνεται: + +```bash +# Έλεγχος υγείας container +docker inspect --format='{{.State.Health.Status}}' opencode-server +``` + +Το health endpoint επιστρέφει HTTP 200 όταν είναι υγιές: + +```bash +# Χειροκίνητος έλεγχος υγείας +curl -f http://localhost:3000/health +``` + +Διαμόρφωση health check: + +- Interval: 30 δευτερόλεπτα +- Timeout: 10 δευτερόλεπτα +- Start period: 10 δευτερόλεπτα +- Retries: 3 + +## Παράδειγμα Docker Compose + +Δημιουργήστε ένα αρχείο `docker-compose.yml`: + +```yaml +services: + opencode: + image: ghcr.io/anomalyco/opencode/server:debian + container_name: opencode-server + restart: unless-stopped + ports: + - "3000:3000" + environment: + - OPENCODE_SERVER_PASSWORD=your_secure_password + - OPENCODE_SERVER_USERNAME=opencode + volumes: + - ./workspace:/workspace + - opencode_config:/home/opencode/.config + - opencode_cache:/home/opencode/.cache + - ~/.ssh:/home/opencode/.ssh:ro + - ~/.gitconfig:/home/opencode/.gitconfig:ro + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000/health"] + interval: 30s + timeout: 10s + retries: 3 + +volumes: + opencode_config: + opencode_cache: +``` + +Εκκινήστε το stack: + +```bash +docker-compose up -d +``` + +## Κατασκευή από Πηγαίο Κώδικα + +Για να κατασκευάσετε την εικόνα server από πηγαίο κώδικα: + +### Κλωνοποίηση του repository + +```bash +git clone https://github.com/anomalyco/opencode.git +cd opencode +``` + +### Κατασκευή παραλλαγής Debian + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.debian \ + -t opencode-server:local \ + . +``` + +### Κατασκευή παραλλαγής Alpine + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.alpine \ + -t opencode-server:alpine-local \ + . +``` + +### Εκτέλεση της τοπικής κατασκευής + +```bash +docker run -d \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=dev_password \ + -v $(pwd)/workspace:/workspace \ + opencode-server:local +``` + +## Αντιμετώπιση Προβλημάτων + +### Ο server δεν ξεκινά + +Ελέγξτε τα logs: + +```bash +docker logs opencode-server +``` + +Συνήθη προβλήματα: + +- Λείπει το `OPENCODE_SERVER_PASSWORD` - ο server αρνείται να ξεκινήσει χωρίς έλεγχο ταυτότητας +- Η θύρα χρησιμοποιείται ήδη - αλλάξτε την αντιστοίχιση θύρας του host + +### Ο έλεγχος ταυτότητας αποτυγχάνει + +Βεβαιωθείτε ότι ο κωδικός ταιριάζει ακριβώς. Ο server χρησιμοποιεί HTTP Basic Auth: + +```bash +# Δοκιμή ελέγχου ταυτότητας +curl -u opencode:your_password http://localhost:3000/health +``` + +### Σφάλματα δικαιωμάτων Workspace + +Βεβαιωθείτε ότι ο mounted κατάλογος είναι εγγράψιμος από UID 1000: + +```bash +# Διόρθωση ιδιοκτησίας +sudo chown -R 1000:1000 /path/to/workspace +``` + +### Αργή εκκίνηση + +Η πρώτη εκτέλυση κατεβάζει language servers και εργαλεία. Ελέγξτε την πρόοδο: + +```bash +docker logs -f opencode-server +``` + +### Το container δεν μπορεί να συνδεθεί στο internet + +Ελέγξτε τη διαμόρφωση DNS: + +```bash +docker exec opencode-server ping -c 3 8.8.8.8 +docker exec opencode-server cat /etc/resolv.conf +``` + +### Το health check αποτυγχάνει + +Επαληθεύστε ότι ο server εκτελείται πραγματικά: + +```bash +docker exec opencode-server curl -f http://localhost:3000/health +``` + +### Το SSH key δεν λειτουργεί + +Βεβαιωθείτε για τα σωστά δικαιώματα κλειδιού μέσα στο container: + +```bash +docker exec opencode-server sudo chmod 600 /home/opencode/.ssh/id_rsa +docker exec opencode-server sudo chmod 644 /home/opencode/.ssh/id_rsa.pub +``` diff --git a/docs/docker-server.it.md b/docs/docker-server.it.md new file mode 100644 index 000000000000..090b49470a1e --- /dev/null +++ b/docs/docker-server.it.md @@ -0,0 +1,359 @@ +# Documentazione Docker di OpenCode Server + +Questa guida illustra l'esecuzione di OpenCode in modalità server all'interno di contenitori Docker. + +## Introduzione + +OpenCode Server è una distribuzione headless di OpenCode che viene eseguita come servizio in background, accessibile tramite API HTTP. L'immagine Docker fornisce un ambiente di runtime completo con tutti gli strumenti necessari preinstallati, ideale per: + +- Ambienti di sviluppo remoto +- Integrazione CI/CD +- Istanze di codifica condivise per team +- Esecuzione di OpenCode su server senza interfaccia grafica + +## Avvio Rapido + +Esegui OpenCode Server con una password sicura: + +```bash +docker run -d \ + --name opencode-server \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=your_secure_password \ + -v opencode_workspace:/workspace \ + ghcr.io/anomalyco/opencode/server:debian +``` + +Accedi al server all'indirizzo `http://localhost:3000`. + +## Varianti dell'Immagine + +Sono disponibili due varianti di immagine base: + +| Variante | Immagine Base | Dimensione | Caso d'Uso | +| -------- | ------------------ | ---------- | -------------------------------- | +| `debian` | Debian Trixie Slim | ~500MB | Consigliato per la maggior parte | +| `alpine` | Alpine Edge | ~200MB | Impronta minima, pull più veloce | + +### Scaricare Varianti Specifiche + +```bash +# Debian (consigliato) +docker pull ghcr.io/anomalyco/opencode/server:debian + +# Alpine (minimale) +docker pull ghcr.io/anomalyco/opencode/server:alpine +``` + +## Variabili di Ambiente + +| Variabile | Predefinita | Descrizione | +| -------------------------- | ----------------------------- | ------------------------------------------------------- | +| `OPENCODE_SERVER_PASSWORD` | (nessuna) | **Richiesta.** Password per l'autenticazione HTTP Basic | +| `OPENCODE_SERVER_USERNAME` | `opencode` | Nome utente per l'autenticazione HTTP Basic | +| `XDG_CONFIG_HOME` | `/home/opencode/.config` | Directory di configurazione | +| `XDG_CACHE_HOME` | `/home/opencode/.cache` | Directory cache | +| `XDG_DATA_HOME` | `/home/opencode/.local/share` | Directory dati | + +### Opzioni del Server (Flag CLI) + +Il server accetta queste opzioni aggiuntive quando si sovrascrive il comando predefinito: + +```bash +docker run ... ghcr.io/anomalyco/opencode/server:debian \ + opencode serve --hostname=0.0.0.0 --port=3000 --cors=https://example.com +``` + +| Flag | Predefinita | Descrizione | +| --------------- | ---------------- | ----------------------------------- | +| `--port` | `0` (casuale) | Porta su cui ascoltare | +| `--hostname` | `127.0.0.1` | Hostname a cui associarsi | +| `--mdns` | `false` | Abilita il rilevamento servizi mDNS | +| `--mdns-domain` | `opencode.local` | Nome dominio mDNS personalizzato | +| `--cors` | `[]` | Domini CORS aggiuntivi consentiti | + +## Montaggio di Volumi + +Monta questi volumi per persistere i dati e condividere le risorse: + +### Workspace (Richiesto) + +```bash +-v /path/to/workspace:/workspace +``` + +È qui che OpenCode opera sui tuoi file di progetto. Monta il tuo repository qui. + +### Chiavi SSH + +```bash +-v ~/.ssh:/home/opencode/.ssh:ro +``` + +Accesso in sola lettura alle chiavi SSH per clonare repository privati. + +### Configurazione Git + +```bash +-v ~/.gitconfig:/home/opencode/.gitconfig:ro +``` + +Eredita l'identità utente Git dall'host. + +### Configurazione OpenCode + +```bash +-v ~/.config/opencode:/home/opencode/.config/opencode +``` + +Mantieni le impostazioni di OpenCode tra i riavvii del contenitore. + +### Cache + +```bash +-v opencode_cache:/home/opencode/.cache +``` + +Cache per pacchetti npm, language server e altri strumenti scaricati. + +## Porte + +| Porta | Protocollo | Descrizione | +| ------ | ---------- | ----------------------------------- | +| `3000` | HTTP | API principale del server (default) | + +La porta può essere rimappata tramite il flag `-p` di Docker: + +```bash +-p 8080:3000 # Accedi al server su http://localhost:8080 +``` + +## Utente e Permessi + +Il contenitore viene eseguito come utente non-root (`opencode`, UID 1000) per sicurezza. Questo utente ha accesso `sudo` senza password per attività amministrative: + +```bash +# Esegui comandi come utente opencode +docker exec -it opencode-server sudo -u opencode + +# Ottieni shell come utente opencode +docker exec -it opencode-server sudo -u opencode /bin/bash +``` + +Se hai bisogno dell'accesso root: + +```bash +docker exec -it opencode-server /bin/bash +``` + +## Strumenti Installati + +L'immagine include questi strumenti out of the box: + +| Strumento | Descrizione | +| ----------------- | ------------------------------------------------- | +| `opencode` | CLI di OpenCode | +| `bun` | Runtime JavaScript e gestore pacchetti | +| `bunx` | Equivalente di Bun per npx (esegue pacchetti npm) | +| `uv` | Gestore pacchetti Python | +| `git` | Controllo versione | +| `git-lfs` | Estensione per archivi di file grandi per Git | +| `build-essential` | GCC, make e librerie di compilazione | +| `curl` | Client HTTP | +| `wget` | Utilità per download file | +| `openssh-client` | Client SSH e strumenti per chiavi | +| `xz-utils` | Utilità di compressione | + +### Usare bun + +```bash +# Esegui un pacchetto Node.js +docker exec -it opencode-server bunx create-next-app + +# Installa dipendenze +docker exec -it opencode-server bun install +``` + +### Usare uv + +```bash +# Installa un pacchetto Python +docker exec -it opencode-server uv pip install pandas + +# Esegui uno script Python +docker exec -it opencode-server uv run script.py +``` + +### Usare git + +```bash +# Clona un repository nel workspace +docker exec -it opencode-server git clone https://github.com/user/repo.git /workspace/repo +``` + +## Health Check + +Il contenitore include un health check integrato che verifica che il server risponda: + +```bash +# Verifica stato di salute del contenitore +docker inspect --format='{{.State.Health.Status}}' opencode-server +``` + +L'endpoint di salute restituisce HTTP 200 quando è sano: + +```bash +# Health check manuale +curl -f http://localhost:3000/health +``` + +Configurazione health check: + +- Intervallo: 30 secondi +- Timeout: 10 secondi +- Periodo di avvio: 10 secondi +- Retry: 3 + +## Esempio Docker Compose + +Crea un file `docker-compose.yml`: + +```yaml +services: + opencode: + image: ghcr.io/anomalyco/opencode/server:debian + container_name: opencode-server + restart: unless-stopped + ports: + - "3000:3000" + environment: + - OPENCODE_SERVER_PASSWORD=your_secure_password + - OPENCODE_SERVER_USERNAME=opencode + volumes: + - ./workspace:/workspace + - opencode_config:/home/opencode/.config + - opencode_cache:/home/opencode/.cache + - ~/.ssh:/home/opencode/.ssh:ro + - ~/.gitconfig:/home/opencode/.gitconfig:ro + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000/health"] + interval: 30s + timeout: 10s + retries: 3 + +volumes: + opencode_config: + opencode_cache: +``` + +Avvia lo stack: + +```bash +docker-compose up -d +``` + +## Build dal Codice Sorgente + +Per buildare l'immagine del server dal codice sorgente: + +### Clona il repository + +```bash +git clone https://github.com/anomalyco/opencode.git +cd opencode +``` + +### Build variante Debian + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.debian \ + -t opencode-server:local \ + . +``` + +### Build variante Alpine + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.alpine \ + -t opencode-server:alpine-local \ + . +``` + +### Esegui la tua build locale + +```bash +docker run -d \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=dev_password \ + -v $(pwd)/workspace:/workspace \ + opencode-server:local +``` + +## Risoluzione Problemi + +### Il server non si avvia + +Controlla i log: + +```bash +docker logs opencode-server +``` + +Problemi comuni: + +- `OPENCODE_SERVER_PASSWORD` mancante - il server rifiuta di avviarsi senza autenticazione +- Porta già in uso - cambia il mapping della porta host + +### Autenticazione fallita + +Assicurati che la password corrisponda esattamente. Il server usa HTTP Basic Auth: + +```bash +# Testa autenticazione +curl -u opencode:your_password http://localhost:3000/health +``` + +### Errori di permessi del workspace + +Assicurati che la directory montata sia scrivibile da UID 1000: + +```bash +# Correggi proprietà +sudo chown -R 1000:1000 /path/to/workspace +``` + +### Avvio lento + +Il primo download include language server e strumenti. Controlla il progresso: + +```bash +docker logs -f opencode-server +``` + +### Il contenitore non può raggiungere internet + +Controlla la configurazione DNS: + +```bash +docker exec opencode-server ping -c 3 8.8.8.8 +docker exec opencode-server cat /etc/resolv.conf +``` + +### Health check fallito + +Verifica che il server sia effettivamente in esecuzione: + +```bash +docker exec opencode-server curl -f http://localhost:3000/health +``` + +### Chiave SSH non funziona + +Assicurati che i permessi della chiave siano corretti dentro il contenitore: + +```bash +docker exec opencode-server sudo chmod 600 /home/opencode/.ssh/id_rsa +docker exec opencode-server sudo chmod 644 /home/opencode/.ssh/id_rsa.pub +``` diff --git a/docs/docker-server.ja.md b/docs/docker-server.ja.md new file mode 100644 index 000000000000..f5172015168d --- /dev/null +++ b/docs/docker-server.ja.md @@ -0,0 +1,359 @@ +# OpenCode Server Docker ドキュメント + +このガイドでは、Dockerコンテナ内でサーバーモードでOpenCodeを実行する方法について説明します。 + +## はじめに + +OpenCode Serverは、バックグラウンドサービスとして実行され、HTTP APIでアクセスできるOpenCodeのヘッドレス展開です。Dockerイメージには必要なツールがすべて事前にインストールされた完全なランタイム環境が含まれており、以下に最適です: + +- リモート開発環境 +- CI/CD統合 +- チームで共有するコーディングインスタンス +- GUIなしのサーバーでのOpenCodeの実行 + +## クイックスタート + +安全なパスワードでOpenCode Serverを実行します: + +```bash +docker run -d \ + --name opencode-server \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=your_secure_password \ + -v opencode_workspace:/workspace \ + ghcr.io/anomalyco/opencode/server:debian +``` + +サーバーにアクセスするには `http://localhost:3000` にアクセスしてください。 + +## イメージバリアント + +2つのベースイメージバリアントが利用可能です: + +| バリアント | ベースイメージ | サイズ | ユースケース | +| ---------- | ------------------ | ------ | ------------------------ | +| `debian` | Debian Trixie Slim | ~500MB | ほとんどのユーザーに推奨 | +| `alpine` | Alpine Edge | ~200MB | 最小構成、より速いプル | + +### 特定のバリアントをプル + +```bash +# Debian(推奨) +docker pull ghcr.io/anomalyco/opencode/server:debian + +# Alpine(最小構成) +docker pull ghcr.io/anomalyco/opencode/server:alpine +``` + +## 環境変数 + +| 変数 | デフォルト | 説明 | +| -------------------------- | ----------------------------- | ------------------------------------- | +| `OPENCODE_SERVER_PASSWORD` | (なし) | **必須。** HTTP Basic認証のパスワード | +| `OPENCODE_SERVER_USERNAME` | `opencode` | HTTP Basic認証のユーザー名 | +| `XDG_CONFIG_HOME` | `/home/opencode/.config` | 設定ディレクトリ | +| `XDG_CACHE_HOME` | `/home/opencode/.cache` | キャッシュディレクトリ | +| `XDG_DATA_HOME` | `/home/opencode/.local/share` | データディレクトリ | + +### サーバーオプション(CLIフラグ) + +デフォルトコマンドをオーバーライドする場合、サーバーはこれらの追加オプションを受け入れます: + +```bash +docker run ... ghcr.io/anomalyco/opencode/server:debian \ + opencode serve --hostname=0.0.0.0 --port=3000 --cors=https://example.com +``` + +| フラグ | デフォルト | 説明 | +| --------------- | ---------------- | ---------------------------- | +| `--port` | `0`(ランダム) | リスンするポート | +| `--hostname` | `127.0.0.1` | バインドするホスト名 | +| `--mdns` | `false` | mDNSサービス検出を有効にする | +| `--mdns-domain` | `opencode.local` | カスタムmDNSドメイン名 | +| `--cors` | `[]` | 追加のCORS許可ドメイン | + +## ボリュームマウント + +データを永続化し、リソースを共有するためにこれらのボリュームをマウントします: + +### ワークスペース(必須) + +```bash +-v /path/to/workspace:/workspace +``` + +ここにOpenCodeがプロジェクトファイルを操作します。コードリポジトリをここにマウントしてください。 + +### SSHキー + +```bash +-v ~/.ssh:/home/opencode/.ssh:ro +``` + +秘密リポジトリをクローンするためのSSHキーへの読み取り専用アクセス。 + +### Git設定 + +```bash +-v ~/.gitconfig:/home/opencode/.gitconfig:ro +``` + +ホストからGitユーザーIDを継承します。 + +### OpenCode設定 + +```bash +-v ~/.config/opencode:/home/opencode/.config/opencode +``` + +コンテナの再起動間でOpenCode設定を保持します。 + +### キャッシュ + +```bash +-v opencode_cache:/home/opencode/.cache +``` + +npmパッケージ、言語サーバー、およびその他のダウンロードしたツールをキャッシュします。 + +## ポート + +| ポート | プロトコル | 説明 | +| ------ | ---------- | ------------------------------- | +| `3000` | HTTP | メインサーバーAPI(デフォルト) | + +ポートはDockerの `-p` フラグで再マッピングできます: + +```bash +-p 8080:3000 # http://localhost:8080でサーバーにアクセス +``` + +## ユーザーと権限 + +セキュリティのため、コンテナは非rootユーザー(`opencode`、UID 1000)で実行されます。このユーザーには管理タスク用のパスワードなしsudoアクセスがあります: + +```bash +# opencodeユーザーとしてコマンドを実行 +docker exec -it opencode-server sudo -u opencode + +# opencodeユーザーとしてシェルを取得 +docker exec -it opencode-server sudo -u opencode /bin/bash +``` + +rootアクセスが必要な場合: + +```bash +docker exec -it opencode-server /bin/bash +``` + +## インストール済みツール + +イメージには以下のツールが標準で含まれています: + +| ツール | 説明 | +| ----------------- | -------------------------------------------- | +| `opencode` | OpenCode CLI | +| `bun` | JavaScriptランタイムとパッケージマネージャー | +| `bunx` | npx相当のBun(npmパッケージを実行) | +| `uv` | Pythonパッケージマネージャー | +| `git` | バージョン管理 | +| `git-lfs` | Git用の大容量ファイルストレージ拡張 | +| `build-essential` | GCC、make、およびビルドライブラリ | +| `curl` | HTTPクライアント | +| `wget` | ファイルダウンロードユーティリティ | +| `openssh-client` | SSHクライアントと鍵ツール | +| `xz-utils` | 圧縮ユーティリティ | + +### bunの使用 + +```bash +# Node.jsパッケージを実行 +docker exec -it opencode-server bunx create-next-app + +# 依存関係をインストール +docker exec -it opencode-server bun install +``` + +### uvの使用 + +```bash +# Pythonパッケージをインストール +docker exec -it opencode-server uv pip install pandas + +# Pythonスクリプトを実行 +docker exec -it opencode-server uv run script.py +``` + +### gitの使用 + +```bash +# リポジトリをワークスペースにクローン +docker exec -it opencode-server git clone https://github.com/user/repo.git /workspace/repo +``` + +## ヘルスチェック + +コンテナには、サーバーが応答していることを確認する組み込みのヘルスチェックが含まれています: + +```bash +# コンテナのヘルス状態を確認 +docker inspect --format='{{.State.Health.Status}}' opencode-server +``` + +ヘルスエンドポイントは正常時にHTTP 200を返します: + +```bash +# 手動ヘルスチェック +curl -f http://localhost:3000/health +``` + +ヘルスチェック設定: + +- 間隔:30秒 +- タイムアウト:10秒 +- 開始期間:10秒 +- リトライ:3回 + +## Docker Composeの例 + +`docker-compose.yml` ファイルを作成します: + +```yaml +services: + opencode: + image: ghcr.io/anomalyco/opencode/server:debian + container_name: opencode-server + restart: unless-stopped + ports: + - "3000:3000" + environment: + - OPENCODE_SERVER_PASSWORD=your_secure_password + - OPENCODE_SERVER_USERNAME=opencode + volumes: + - ./workspace:/workspace + - opencode_config:/home/opencode/.config + - opencode_cache:/home/opencode/.cache + - ~/.ssh:/home/opencode/.ssh:ro + - ~/.gitconfig:/home/opencode/.gitconfig:ro + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000/health"] + interval: 30s + timeout: 10s + retries: 3 + +volumes: + opencode_config: + opencode_cache: +``` + +スタックを起動します: + +```bash +docker-compose up -d +``` + +## ソースからのビルド + +ソースからサーバーイメージをビルドするには: + +### リポジトリをクローン + +```bash +git clone https://github.com/anomalyco/opencode.git +cd opencode +``` + +### Debianバリアントをビルド + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.debian \ + -t opencode-server:local \ + . +``` + +### Alpineバリアントをビルド + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.alpine \ + -t opencode-server:alpine-local \ + . +``` + +### ローカルビルドを実行 + +```bash +docker run -d \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=dev_password \ + -v $(pwd)/workspace:/workspace \ + opencode-server:local +``` + +## トラブルシューティング + +### サーバーが起動しない + +ログを確認します: + +```bash +docker logs opencode-server +``` + +一般的な問題: + +- `OPENCODE_SERVER_PASSWORD` が不足 - 認証がないとサーバーが起動を拒否 +- ポートが既に使用中 - ホストポートのマッピングを変更 + +### 認証が失敗する + +パスワードが正確一致していることを確認してください。サーバーはHTTP Basic Authを使用します: + +```bash +# 認証をテスト +curl -u opencode:your_password http://localhost:3000/health +``` + +### ワークスペースの権限エラー + +マウントされたディレクトリがUID 1000で書き込み可能であることを確認します: + +```bash +# 所有者を修正 +sudo chown -R 1000:1000 /path/to/workspace +``` + +### 起動が遅い + +初回実行では言語サーバーとツールがダウンロードされます。進捗を確認します: + +```bash +docker logs -f opencode-server +``` + +### コンテナがインターネットに接続できない + +DNS設定を確認します: + +```bash +docker exec opencode-server ping -c 3 8.8.8.8 +docker exec opencode-server cat /etc/resolv.conf +``` + +### ヘルスチェックが失敗する + +サーバーが実際に実行されていることを確認します: + +```bash +docker exec opencode-server curl -f http://localhost:3000/health +``` + +### SSHキーが機能しない + +コンテナ内で適切な鍵の権限を確認します: + +```bash +docker exec opencode-server sudo chmod 600 /home/opencode/.ssh/id_rsa +docker exec opencode-server sudo chmod 644 /home/opencode/.ssh/id_rsa.pub +``` diff --git a/docs/docker-server.ko.md b/docs/docker-server.ko.md new file mode 100644 index 000000000000..ca2978621c9b --- /dev/null +++ b/docs/docker-server.ko.md @@ -0,0 +1,359 @@ +# OpenCode 서버 Docker 문서 + +이 가이드에서는 Docker 컨테이너에서 서버 모드로 OpenCode를 실행하는 방법을 설명합니다. + +## 소개 + +OpenCode 서버는 백그라운드 서비스로 실행되며 HTTP API를 통해 액세스할 수 있는 OpenCode의 헤드리스 배포입니다. Docker 이미지는 모든 필수 도구가 사전 설치된 완전한 런타임 환경을 제공하며, 다음에 이상적입니다: + +- 원격 개발 환경 +- CI/CD 통합 +- 팀 공유 코딩 인스턴스 +- GUI가 없는 서버에서 OpenCode 실행 + +## 빠른 시작 + +안전한 비밀번호로 OpenCode 서버를 실행합니다: + +```bash +docker run -d \ + --name opencode-server \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=your_secure_password \ + -v opencode_workspace:/workspace \ + ghcr.io/anomalyco/opencode/server:debian +``` + +`http://localhost:3000`에서 서버에 액세스합니다. + +## 이미지 변형 + +두 가지 기본 이미지 변형을 사용할 수 있습니다: + +| 변형 | 기본 이미지 | 크기 | 사용 사례 | +| -------- | ------------------ | ------ | --------------------------- | +| `debian` | Debian Trixie Slim | ~500MB | 대부분의 사용자에게 권장 | +| `alpine` | Alpine Edge | ~200MB | 최소 공간, 더 빠른 다운로드 | + +### 특정 변형 다운로드 + +```bash +# Debian (권장) +docker pull ghcr.io/anomalyco/opencode/server:debian + +# Alpine (최소) +docker pull ghcr.io/anomalyco/opencode/server:alpine +``` + +## 환경 변수 + +| 변수 | 기본값 | 설명 | +| -------------------------- | ----------------------------- | ---------------------------------- | +| `OPENCODE_SERVER_PASSWORD` | (없음) | **필수.** HTTP Basic 인증 비밀번호 | +| `OPENCODE_SERVER_USERNAME` | `opencode` | HTTP Basic 인증 사용자 이름 | +| `XDG_CONFIG_HOME` | `/home/opencode/.config` | 구성 디렉토리 | +| `XDG_CACHE_HOME` | `/home/opencode/.cache` | 캐시 디렉토리 | +| `XDG_DATA_HOME` | `/home/opencode/.local/share` | 데이터 디렉토리 | + +### 서버 옵션 (CLI 플래그) + +기본 명령을 재정의할 때 서버는 다음 추가 옵션을 허용합니다: + +```bash +docker run ... ghcr.io/anomalyco/opencode/server:debian \ + opencode serve --hostname=0.0.0.0 --port=3000 --cors=https://example.com +``` + +| 플래그 | 기본값 | 설명 | +| --------------- | ---------------- | ---------------------------- | +| `--port` | `0` (무작위) | 수신 대기 포트 | +| `--hostname` | `127.0.0.1` | 바인딩할 호스트명 | +| `--mdns` | `false` | mDNS 서비스 검색 활성화 | +| `--mdns-domain` | `opencode.local` | 사용자 정의 mDNS 도메인 이름 | +| `--cors` | `[]` | 추가 CORS 허용 도메인 | + +## 볼륨 마운트 + +데이터를 지속하고 리소스를 공유하려면 다음 볼륨을 마운트합니다: + +### 작업 영역 (필수) + +```bash +-v /path/to/workspace:/workspace +``` + +여기에서 OpenCode가 프로젝트 파일을 작업합니다. 코드 저장소를 여기에 마운트합니다. + +### SSH 키 + +```bash +-v ~/.ssh:/home/opencode/.ssh:ro +``` + +비공개 저장소를克隆하기 위한 SSH 키에 대한 읽기 전용 액세스입니다. + +### Git 구성 + +```bash +-v ~/.gitconfig:/home/opencode/.gitconfig:ro +``` + +호스트에서 Git 사용자 ID를 상속합니다. + +### OpenCode 구성 + +```bash +-v ~/.config/opencode:/home/opencode/.config/opencode +``` + +컨테이너 재시작 간 OpenCode 설정을 유지합니다. + +### 캐시 + +```bash +-v opencode_cache:/home/opencode/.cache +``` + +npm 패키지, 언어 서버 및 기타 다운로드한 도구를 캐시합니다. + +## 포트 + +| 포트 | 프로토콜 | 설명 | +| ------ | -------- | ------------- | +| `3000` | HTTP | 기본 서버 API | + +Docker의 `-p` 플래그로 포트를 다시 매핑할 수 있습니다: + +```bash +-p 8080:3000 # http://localhost:8080에서 서버에 액세스 +``` + +## 사용자 및 권한 + +보안을 위해 컨테이너는 비루트 사용자(`opencode`, UID 1000)로 실행됩니다. 이 사용자는 관리 작업에 비밀번호 없는 `sudo` 액세스 권한이 있습니다: + +```bash +# opencode 사용자로 명령 실행 +docker exec -it opencode-server sudo -u opencode + +# opencode 사용자의 셸 가져오기 +docker exec -it opencode-server sudo -u opencode /bin/bash +``` + +루트 액세스가 필요한 경우: + +```bash +docker exec -it opencode-server /bin/bash +``` + +## 설치된 도구 + +이미지에는 다음 도구가 기본적으로 포함되어 있습니다: + +| 도구 | 설명 | +| ----------------- | ---------------------------------- | +| `opencode` | OpenCode CLI | +| `bun` | JavaScript 런타임 및 패키지 관리자 | +| `bunx` | npx의 Bun 버전 (npm 패키지 실행) | +| `uv` | Python 패키지 관리자 | +| `git` | 버전 관리 | +| `git-lfs` | Git의 대용량 파일 저장소 확장 | +| `build-essential` | GCC, make 및 빌드 라이브러리 | +| `curl` | HTTP 클라이언트 | +| `wget` | 파일 다운로드 유틸리티 | +| `openssh-client` | SSH 클라이언트 및 키 도구 | +| `xz-utils` | 압축 유틸리티 | + +### bun 사용 + +```bash +# Node.js 패키지 실행 +docker exec -it opencode-server bunx create-next-app + +# 의존성 설치 +docker exec -it opencode-server bun install +``` + +### uv 사용 + +```bash +# Python 패키지 설치 +docker exec -it opencode-server uv pip install pandas + +# Python 스크립트 실행 +docker exec -it opencode-server uv run script.py +``` + +### git 사용 + +```bash +# 저장소를 작업 영역에 클론 +docker exec -it opencode-server git clone https://github.com/user/repo.git /workspace/repo +``` + +## 상태 확인 + +컨테이너에는 서버가 응답하는지 확인하는 내장 상태 확인이 포함되어 있습니다: + +```bash +# 컨테이너 상태 확인 +docker inspect --format='{{.State.Health.Status}}' opencode-server +``` + +상태 엔드포인트는 정상일 때 HTTP 200을 반환합니다: + +```bash +# 수동 상태 확인 +curl -f http://localhost:3000/health +``` + +상태 확인 구성: + +- 간격: 30초 +- 시간 초과: 10초 +- 시작 기간: 10초 +- 재시도: 3회 + +## Docker Compose 예시 + +`docker-compose.yml` 파일을 생성합니다: + +```yaml +services: + opencode: + image: ghcr.io/anomalyco/opencode/server:debian + container_name: opencode-server + restart: unless-stopped + ports: + - "3000:3000" + environment: + - OPENCODE_SERVER_PASSWORD=your_secure_password + - OPENCODE_SERVER_USERNAME=opencode + volumes: + - ./workspace:/workspace + - opencode_config:/home/opencode/.config + - opencode_cache:/home/opencode/.cache + - ~/.ssh:/home/opencode/.ssh:ro + - ~/.gitconfig:/home/opencode/.gitconfig:ro + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000/health"] + interval: 30s + timeout: 10s + retries: 3 + +volumes: + opencode_config: + opencode_cache: +``` + +스택을 시작합니다: + +```bash +docker-compose up -d +``` + +## 소스에서 빌드 + +소스에서 서버 이미지를 빌드합니다: + +### 저장소 클론 + +```bash +git clone https://github.com/anomalyco/opencode.git +cd opencode +``` + +### Debian 변형 빌드 + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.debian \ + -t opencode-server:local \ + . +``` + +### Alpine 변형 빌드 + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.alpine \ + -t opencode-server:alpine-local \ + . +``` + +### 로컬 빌드 실행 + +```bash +docker run -d \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=dev_password \ + -v $(pwd)/workspace:/workspace \ + opencode-server:local +``` + +## 문제 해결 + +### 서버가 시작되지 않음 + +로그를 확인합니다: + +```bash +docker logs opencode-server +``` + +일반적인 문제: + +- `OPENCODE_SERVER_PASSWORD` 누락 - 서버가 인증 없이 시작을 거부함 +- 포트가 이미 사용 중 - 호스트 포트 매핑 변경 + +### 인증 실패 + +비밀번호가 정확히 일치하는지 확인합니다. 서버는 HTTP Basic Auth를 사용합니다: + +```bash +# 인증 테스트 +curl -u opencode:your_password http://localhost:3000/health +``` + +### 작업 영역 권한 오류 + +마운트된 디렉토리가 UID 1000에서 쓰기 가능한지 확인합니다: + +```bash +# 소유권 수정 +sudo chown -R 1000:1000 /path/to/workspace +``` + +### 시작이 느림 + +첫 실행 시 언어 서버와 도구를 다운로드합니다. 진행 상황을 확인합니다: + +```bash +docker logs -f opencode-server +``` + +### 컨테이너가 인터넷에 연결할 수 없음 + +DNS 구성을 확인합니다: + +```bash +docker exec opencode-server ping -c 3 8.8.8.8 +docker exec opencode-server cat /etc/resolv.conf +``` + +### 상태 확인 실패 + +서버가 실제로 실행 중인지 확인합니다: + +```bash +docker exec opencode-server curl -f http://localhost:3000/health +``` + +### SSH 키가 작동하지 않음 + +컨테이너 내 키 권한이 올바른지 확인합니다: + +```bash +docker exec opencode-server sudo chmod 600 /home/opencode/.ssh/id_rsa +docker exec opencode-server sudo chmod 644 /home/opencode/.ssh/id_rsa.pub +``` diff --git a/docs/docker-server.md b/docs/docker-server.md new file mode 100644 index 000000000000..09279d550d50 --- /dev/null +++ b/docs/docker-server.md @@ -0,0 +1,359 @@ +# OpenCode Server Docker Documentation + +This guide covers running OpenCode in server mode inside Docker containers. + +## Introduction + +OpenCode Server is a headless deployment of OpenCode that runs as a background service, accessible via HTTP API. The Docker image provides a complete runtime environment with all necessary tools pre-installed, making it ideal for: + +- Remote development environments +- CI/CD integration +- Team shared coding instances +- Running OpenCode on servers without a GUI + +## Quick Start + +Run OpenCode Server with a secure password: + +```bash +docker run -d \ + --name opencode-server \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=your_secure_password \ + -v opencode_workspace:/workspace \ + ghcr.io/anomalyco/opencode/server:debian +``` + +Access the server at `http://localhost:3000`. + +## Image Variants + +Two base image variants are available: + +| Variant | Base Image | Size | Use Case | +| -------- | ------------------ | ------ | ------------------------------ | +| `debian` | Debian Trixie Slim | ~500MB | Recommended for most users | +| `alpine` | Alpine Edge | ~200MB | Minimal footprint, faster pull | + +### Pulling Specific Variants + +```bash +# Debian (recommended) +docker pull ghcr.io/anomalyco/opencode/server:debian + +# Alpine (minimal) +docker pull ghcr.io/anomalyco/opencode/server:alpine +``` + +## Environment Variables + +| Variable | Default | Description | +| -------------------------- | ----------------------------- | ---------------------------------------------------- | +| `OPENCODE_SERVER_PASSWORD` | (none) | **Required.** Password for HTTP Basic authentication | +| `OPENCODE_SERVER_USERNAME` | `opencode` | Username for HTTP Basic authentication | +| `XDG_CONFIG_HOME` | `/home/opencode/.config` | Configuration directory | +| `XDG_CACHE_HOME` | `/home/opencode/.cache` | Cache directory | +| `XDG_DATA_HOME` | `/home/opencode/.local/share` | Data directory | + +### Server Options (CLI Flags) + +The server accepts these additional options when overriding the default command: + +```bash +docker run ... ghcr.io/anomalyco/opencode/server:debian \ + opencode serve --hostname=0.0.0.0 --port=3000 --cors=https://example.com +``` + +| Flag | Default | Description | +| --------------- | ---------------- | ------------------------------- | +| `--port` | `0` (random) | Port to listen on | +| `--hostname` | `127.0.0.1` | Hostname to bind to | +| `--mdns` | `false` | Enable mDNS service discovery | +| `--mdns-domain` | `opencode.local` | Custom mDNS domain name | +| `--cors` | `[]` | Additional CORS-allowed domains | + +## Volume Mounts + +Mount these volumes to persist data and share resources: + +### Workspace (Required) + +```bash +-v /path/to/workspace:/workspace +``` + +This is where OpenCode operates on your project files. Mount your code repository here. + +### SSH Keys + +```bash +-v ~/.ssh:/home/opencode/.ssh:ro +``` + +Read-only access to SSH keys for cloning private repositories. + +### Git Configuration + +```bash +-v ~/.gitconfig:/home/opencode/.gitconfig:ro +``` + +Inherit Git user identity from host. + +### OpenCode Configuration + +```bash +-v ~/.config/opencode:/home/opencode/.config/opencode +``` + +Persist OpenCode settings between container restarts. + +### Cache + +```bash +-v opencode_cache:/home/opencode/.cache +``` + +Cache npm packages, language servers, and other downloaded tools. + +## Ports + +| Port | Protocol | Description | +| ------ | -------- | ------------------------- | +| `3000` | HTTP | Main server API (default) | + +The port can be remapped via Docker's `-p` flag: + +```bash +-p 8080:3000 # Access server at http://localhost:8080 +``` + +## User and Permissions + +The container runs as a non-root user (`opencode`, UID 1000) for security. This user has `sudo` access without password for administrative tasks: + +```bash +# Execute commands as opencode user +docker exec -it opencode-server sudo -u opencode + +# Get shell as opencode user +docker exec -it opencode-server sudo -u opencode /bin/bash +``` + +If you need root access: + +```bash +docker exec -it opencode-server /bin/bash +``` + +## Installed Tools + +The image includes these tools out of the box: + +| Tool | Description | +| ----------------- | ------------------------------------------ | +| `opencode` | OpenCode CLI | +| `bun` | JavaScript runtime and package manager | +| `bunx` | Bun's equivalent to npx (run npm packages) | +| `uv` | Python package manager | +| `git` | Version control | +| `git-lfs` | Large file storage extension for Git | +| `build-essential` | GCC, make, and build libraries | +| `curl` | HTTP client | +| `wget` | File download utility | +| `openssh-client` | SSH client and key tools | +| `xz-utils` | Compression utilities | + +### Using bun + +```bash +# Run a Node.js package +docker exec -it opencode-server bunx create-next-app + +# Install dependencies +docker exec -it opencode-server bun install +``` + +### Using uv + +```bash +# Install a Python package +docker exec -it opencode-server uv pip install pandas + +# Run a Python script +docker exec -it opencode-server uv run script.py +``` + +### Using git + +```bash +# Clone a repository into the workspace +docker exec -it opencode-server git clone https://github.com/user/repo.git /workspace/repo +``` + +## Health Check + +The container includes a built-in health check that verifies the server is responding: + +```bash +# Check container health +docker inspect --format='{{.State.Health.Status}}' opencode-server +``` + +The health endpoint returns HTTP 200 when healthy: + +```bash +# Manual health check +curl -f http://localhost:3000/health +``` + +Health check configuration: + +- Interval: 30 seconds +- Timeout: 10 seconds +- Start period: 10 seconds +- Retries: 3 + +## Docker Compose Example + +Create a `docker-compose.yml` file: + +```yaml +services: + opencode: + image: ghcr.io/anomalyco/opencode/server:debian + container_name: opencode-server + restart: unless-stopped + ports: + - "3000:3000" + environment: + - OPENCODE_SERVER_PASSWORD=your_secure_password + - OPENCODE_SERVER_USERNAME=opencode + volumes: + - ./workspace:/workspace + - opencode_config:/home/opencode/.config + - opencode_cache:/home/opencode/.cache + - ~/.ssh:/home/opencode/.ssh:ro + - ~/.gitconfig:/home/opencode/.gitconfig:ro + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000/health"] + interval: 30s + timeout: 10s + retries: 3 + +volumes: + opencode_config: + opencode_cache: +``` + +Start the stack: + +```bash +docker-compose up -d +``` + +## Building from Source + +To build the server image from source: + +### Clone the repository + +```bash +git clone https://github.com/anomalyco/opencode.git +cd opencode +``` + +### Build Debian variant + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.debian \ + -t opencode-server:local \ + . +``` + +### Build Alpine variant + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.alpine \ + -t opencode-server:alpine-local \ + . +``` + +### Run your local build + +```bash +docker run -d \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=dev_password \ + -v $(pwd)/workspace:/workspace \ + opencode-server:local +``` + +## Troubleshooting + +### Server not starting + +Check the logs: + +```bash +docker logs opencode-server +``` + +Common issues: + +- Missing `OPENCODE_SERVER_PASSWORD` - the server refuses to start without authentication +- Port already in use - change the host port mapping + +### Authentication failing + +Ensure the password matches exactly. The server uses HTTP Basic Auth: + +```bash +# Test authentication +curl -u opencode:your_password http://localhost:3000/health +``` + +### Workspace permission errors + +Ensure the mounted directory is writable by UID 1000: + +```bash +# Fix ownership +sudo chown -R 1000:1000 /path/to/workspace +``` + +### Slow startup + +The first run downloads language servers and tools. Check progress: + +```bash +docker logs -f opencode-server +``` + +### Container can't reach internet + +Check DNS configuration: + +```bash +docker exec opencode-server ping -c 3 8.8.8.8 +docker exec opencode-server cat /etc/resolv.conf +``` + +### Health check failing + +Verify the server is actually running: + +```bash +docker exec opencode-server curl -f http://localhost:3000/health +``` + +### SSH key not working + +Ensure proper key permissions inside the container: + +```bash +docker exec opencode-server sudo chmod 600 /home/opencode/.ssh/id_rsa +docker exec opencode-server sudo chmod 644 /home/opencode/.ssh/id_rsa.pub +``` diff --git a/docs/docker-server.no.md b/docs/docker-server.no.md new file mode 100644 index 000000000000..7cf765915fec --- /dev/null +++ b/docs/docker-server.no.md @@ -0,0 +1,359 @@ +# OpenCode Server Docker Dokumentasjon + +Denne guiden dekker kjøring av OpenCode i servermodus inne i Docker-containere. + +## Introduksjon + +OpenCode Server er en hodeløs distribusjon av OpenCode som kjører som en bakgrunnstjeneste, tilgjengelig via HTTP API. Docker-bildet gir et komplett kjøremiljø med alle nødvendige verktøy forhåndsinstallert, noe som gjør det ideelt for: + +- Eksterne utviklingsmiljøer +- CI/CD-integrasjon +- Dele kodende instanser for team +- Kjøre OpenCode på servere uten GUI + +## Hurtigstart + +Kjør OpenCode Server med et sikkert passord: + +```bash +docker run -d \ + --name opencode-server \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=your_secure_password \ + -v opencode_workspace:/workspace \ + ghcr.io/anomalyco/opencode/server:debian +``` + +Få tilgang til serveren på `http://localhost:3000`. + +## Bildevarianter + +To basebildevarianter er tilgjengelige: + +| Variant | Bildebase | Størrelse | Brukstilfelle | +| -------- | ------------------ | --------- | -------------------------------------- | +| `debian` | Debian Trixie Slim | ~500MB | Anbefalt for de fleste brukere | +| `alpine` | Alpine Edge | ~200MB | Minimal fotavtrykk, raskere nedlasting | + +### Hente spesifikke varianter + +```bash +# Debian (anbefalt) +docker pull ghcr.io/anomalyco/opencode/server:debian + +# Alpine (minimal) +docker pull ghcr.io/anomalyco/opencode/server:alpine +``` + +## Miljøvariabler + +| Variabel | Standard | Beskrivelse | +| -------------------------- | ----------------------------- | ------------------------------------------------- | +| `OPENCODE_SERVER_PASSWORD` | (ingen) | **Påkrevd.** Passord for HTTP Basic autentisering | +| `OPENCODE_SERVER_USERNAME` | `opencode` | Brukernavn for HTTP Basic autentisering | +| `XDG_CONFIG_HOME` | `/home/opencode/.config` | Konfigurasjonskatalog | +| `XDG_CACHE_HOME` | `/home/opencode/.cache` | Cache-katalog | +| `XDG_DATA_HOME` | `/home/opencode/.local/share` | Datakatalog | + +### Serveralternativer (CLI-flagg) + +Serveren godtar disse tilleggsalternativene når standardkommandoen overskrives: + +```bash +docker run ... ghcr.io/anomalyco/opencode/server:debian \ + opencode serve --hostname=0.0.0.0 --port=3000 --cors=https://example.com +``` + +| Flagg | Standard | Beskrivelse | +| --------------- | ---------------- | ------------------------------- | +| `--port` | `0` (tilfeldig) | Port å lytte på | +| `--hostname` | `127.0.0.1` | Vertnavn å binde til | +| `--mdns` | `false` | Aktiver mDNS-tjenesteoppdagelse | +| `--mdns-domain` | `opencode.local` | Egendefinert mDNS-domenenavn | +| `--cors` | `[]` | Ekstra CORS-tillatte domener | + +## Volumkjøring + +Kjør disse volumene for å vedvare data og dele ressurser: + +### Arbeidsområde (Påkrevd) + +```bash +-v /path/to/workspace:/workspace +``` + +Dette er der OpenCode opererer på prosjektfilene dine. Kjør kodearkivet ditt her. + +### SSH-nøkler + +```bash +-v ~/.ssh:/home/opencode/.ssh:ro +``` + +Skrivebeskyttet tilgang til SSH-nøkler for å klone private arkiver. + +### Git-konfigurasjon + +```bash +-v ~/.gitconfig:/home/opencode/.gitconfig:ro +``` + +Arv Git-brukeridentitet fra verten. + +### OpenCode-konfigurasjon + +```bash +-v ~/.config/opencode:/home/opencode/.config/opencode +``` + +Vedvar OpenCode-innstillinger mellom containeromstarter. + +### Cache + +```bash +-v opencode_cache:/home/opencode/.cache +``` + +Bufret npm-pakker, språkservere og andre nedlastede verktøy. + +## Porter + +| Port | Protokoll | Beskrivelse | +| ------ | --------- | -------------------------- | +| `3000` | HTTP | Hovedserver API (standard) | + +Porten kan omkartlegges via Docker sin `-p` flagg: + +```bash +-p 8080:3000 # Få tilgang til server på http://localhost:8080 +``` + +## Bruker og Tillatelser + +Containeren kjører som en ikke-root bruker (`opencode`, UID 1000) av sikkerhetsgrunner. Denne brukeren har `sudo`-tilgang uten passord for administrative oppgaver: + +```bash +# Kjør kommandoer som opencode-bruker +docker exec -it opencode-server sudo -u opencode + +# Få shell som opencode-bruker +docker exec -it opencode-server sudo -u opencode /bin/bash +``` + +Hvis du trenger root-tilgang: + +```bash +docker exec -it opencode-server /bin/bash +``` + +## Installerte Verktøy + +Bildet inkluderer disse verktøyene: + +| Verktøy | Beskrivelse | +| ----------------- | -------------------------------------------- | +| `opencode` | OpenCode CLI | +| `bun` | JavaScript runtime og pakkebehandler | +| `bunx` | Bun sin equivalent til npx (kjør npm-pakker) | +| `uv` | Python pakkebehandler | +| `git` | Versjonskontroll | +| `git-lfs` | Large file storage-utvidelse for Git | +| `build-essential` | GCC, make og byggebiblioteker | +| `curl` | HTTP-klient | +| `wget` | Filnedlastingsverktøy | +| `openssh-client` | SSH-klient og nøkkelverktøy | +| `xz-utils` | Komprimeringsverktøy | + +### Bruke bun + +```bash +# Kjør en Node.js-pakke +docker exec -it opencode-server bunx create-next-app + +# Installer avhengigheter +docker exec -it opencode-server bun install +``` + +### Bruke uv + +```bash +# Installer en Python-pakke +docker exec -it opencode-server uv pip install pandas + +# Kjør et Python-skript +docker exec -it opencode-server uv run script.py +``` + +### Bruke git + +```bash +# Klon et arkiv til arbeidsområdet +docker exec -it opencode-server git clone https://github.com/user/repo.git /workspace/repo +``` + +## Helsesjekk + +Containeren inkluderer en innebygd helsesjekk som verifiserer at serveren svarer: + +```bash +# Sjekk containerhelse +docker inspect --format='{{.State.Health.Status}}' opencode-server +``` + +Helseslutpunktet returnerer HTTP 200 når det er sunt: + +```bash +# Manuell helsesjekk +curl -f http://localhost:3000/health +``` + +Helsesjekk-konfigurasjon: + +- Intervall: 30 sekunder +- Tidsavbrudd: 10 sekunder +- Startperiode: 10 sekunder +- Forsøk: 3 + +## Docker Compose Eksempel + +Opprett en `docker-compose.yml` fil: + +```yaml +services: + opencode: + image: ghcr.io/anomalyco/opencode/server:debian + container_name: opencode-server + restart: unless-stopped + ports: + - "3000:3000" + environment: + - OPENCODE_SERVER_PASSWORD=your_secure_password + - OPENCODE_SERVER_USERNAME=opencode + volumes: + - ./workspace:/workspace + - opencode_config:/home/opencode/.config + - opencode_cache:/home/opencode/.cache + - ~/.ssh:/home/opencode/.ssh:ro + - ~/.gitconfig:/home/opencode/.gitconfig:ro + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000/health"] + interval: 30s + timeout: 10s + retries: 3 + +volumes: + opencode_config: + opencode_cache: +``` + +Start stacken: + +```bash +docker-compose up -d +``` + +## Bygge fra Kilde + +For å bygge serverbildet fra kilde: + +### Klon arkivet + +```bash +git clone https://github.com/anomalyco/opencode.git +cd opencode +``` + +### Bygg Debian-varianten + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.debian \ + -t opencode-server:local \ + . +``` + +### Bygg Alpine-varianten + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.alpine \ + -t opencode-server:alpine-local \ + . +``` + +### Kjør din lokale bygging + +```bash +docker run -d \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=dev_password \ + -v $(pwd)/workspace:/workspace \ + opencode-server:local +``` + +## Feilsøking + +### Serveren starter ikke + +Sjekk loggene: + +```bash +docker logs opencode-server +``` + +Vanlige problemer: + +- Mangler `OPENCODE_SERVER_PASSWORD` - serveren nekter å starte uten autentisering +- Port allerede i bruk - endre vertsport-kartleggingen + +### Autentisering feiler + +Sørg for at passordet matcher nøyaktig. Serveren bruker HTTP Basic Auth: + +```bash +# Test autentisering +curl -u opencode:your_password http://localhost:3000/health +``` + +### Arbeidsområdet tillatelsesfeil + +Sørg for at den monterte katalogen er skrivbar av UID 1000: + +```bash +# Fiks eierskap +sudo chown -R 1000:1000 /path/to/workspace +``` + +### Treg oppstart + +Første kjøring laster ned språkservere og verktøy. Sjekk fremdriften: + +```bash +docker logs -f opencode-server +``` + +### Container kan ikke nå internett + +Sjekk DNS-konfigurasjonen: + +```bash +docker exec opencode-server ping -c 3 8.8.8.8 +docker exec opencode-server cat /etc/resolv.conf +``` + +### Helsesjekk feiler + +Verifiser at serveren faktisk kjører: + +```bash +docker exec opencode-server curl -f http://localhost:3000/health +``` + +### SSH-nøkkel fungerer ikke + +Sørg for riktige nøkkeltillatelser inne i containeren: + +```bash +docker exec opencode-server sudo chmod 600 /home/opencode/.ssh/id_rsa +docker exec opencode-server sudo chmod 644 /home/opencode/.ssh/id_rsa.pub +``` diff --git a/docs/docker-server.pl.md b/docs/docker-server.pl.md new file mode 100644 index 000000000000..f5038075921a --- /dev/null +++ b/docs/docker-server.pl.md @@ -0,0 +1,359 @@ +# Dokumentacja Docker OpenCode Server + +Ten przewodnik obejmuje uruchamianie OpenCode w trybie serwerowym wewnątrz kontenerów Docker. + +## Wprowadzenie + +OpenCode Server to wdrożenie OpenCode bez interfejsu graficznego, działające jako usługa w tle, dostępne przez API HTTP. Obraz Docker zapewnia kompletne środowisko uruchomieniowe ze wszystkimi niezbędnymi narzędziami wstępnie zainstalowanymi, co czyni go idealnym do: + +- Zdalnych środowisk programistycznych +- Integracji CI/CD +- Wspólnych instancji kodowania dla zespołów +- Uruchamiania OpenCode na serwerach bez interfejsu graficznego + +## Szybki start + +Uruchom OpenCode Server z bezpiecznym hasłem: + +```bash +docker run -d \ + --name opencode-server \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=your_secure_password \ + -v opencode_workspace:/workspace \ + ghcr.io/anomalyco/opencode/server:debian +``` + +Dostęp do serwera pod adresem `http://localhost:3000`. + +## Warianty obrazu + +Dostępne są dwa warianty obrazów bazowych: + +| Wariant | Obraz bazowy | Rozmiar | Przypadek użycia | +| -------- | ------------------ | ------- | ------------------------------------- | +| `debian` | Debian Trixie Slim | ~500MB | Zalecane dla większości użytkowników | +| `alpine` | Alpine Edge | ~200MB | Minimalny rozmiar, szybsze pobieranie | + +### Pobieranie określonych wariantów + +```bash +# Debian (zalecane) +docker pull ghcr.io/anomalyco/opencode/server:debian + +# Alpine (minimalny) +docker pull ghcr.io/anomalyco/opencode/server:alpine +``` + +## Zmienne środowiskowe + +| Zmienna | Domyślna | Opis | +| -------------------------- | ----------------------------- | -------------------------------------------------- | +| `OPENCODE_SERVER_PASSWORD` | (brak) | **Wymagane.** Hasło do uwierzytelniania HTTP Basic | +| `OPENCODE_SERVER_USERNAME` | `opencode` | Nazwa użytkownika do uwierzytelniania HTTP Basic | +| `XDG_CONFIG_HOME` | `/home/opencode/.config` | Katalog konfiguracyjny | +| `XDG_CACHE_HOME` | `/home/opencode/.cache` | Katalog cache | +| `XDG_DATA_HOME` | `/home/opencode/.local/share` | Katalog danych | + +### Opcje serwera (flagi CLI) + +Serwer akceptuje te dodatkowe opcje podczas nadpisywania domyślnego polecenia: + +```bash +docker run ... ghcr.io/anomalyco/opencode/server:debian \ + opencode serve --hostname=0.0.0.0 --port=3000 --cors=https://example.com +``` + +| Flaga | Domyślna | Opis | +| --------------- | ---------------- | ------------------------------- | +| `--port` | `0` (losowy) | Port do nasłuchiwania | +| `--hostname` | `127.0.0.1` | Nazwa hosta do powiązania | +| `--mdns` | `false` | Włącz wykrywanie usług mDNS | +| `--mdns-domain` | `opencode.local` | Niestandardowa domena mDNS | +| `--cors` | `[]` | Dodatkowe dozwolone domeny CORS | + +## Montowanie woluminów + +Zamontuj te woluminy, aby zachować dane i udostępniać zasoby: + +### Przestrzeń robocza (Wymagane) + +```bash +-v /path/to/workspace:/workspace +``` + +Tutaj OpenCode operuje na plikach projektu. Zamontuj tutaj swoje repozytorium kodu. + +### Klucze SSH + +```bash +-v ~/.ssh:/home/opencode/.ssh:ro +``` + +Dostęp tylko do odczytu do kluczy SSH do klonowania prywatnych repozytoriów. + +### Konfiguracja Git + +```bash +-v ~/.gitconfig:/home/opencode/.gitconfig:ro +``` + +Dziedziczenie tożsamości użytkownika Git z hosta. + +### Konfiguracja OpenCode + +```bash +-v ~/.config/opencode:/home/opencode/.config/opencode +``` + +Utrzymywanie ustawień OpenCode między restartami kontenera. + +### Cache + +```bash +-v opencode_cache:/home/opencode/.cache +``` + +Cache pakietów npm, serwerów językowych i innych pobranych narzędzi. + +## Porty + +| Port | Protokół | Opis | +| ------ | -------- | ----------------------------- | +| `3000` | HTTP | Główne API serwera (domyślne) | + +Port można zmienić za pomocą flagi `-p` Dockera: + +```bash +-p 8080:3000 # Dostęp do serwera pod http://localhost:8080 +``` + +## Użytkownik i uprawnienia + +Kontener działa jako użytkownik niebędący root (`opencode`, UID 1000) ze względów bezpieczeństwa. Ten użytkownik ma dostęp do `sudo` bez hasła do zadań administracyjnych: + +```bash +# Wykonaj polecenia jako użytkownik opencode +docker exec -it opencode-server sudo -u opencode + +# Uzyskaj powłokę jako użytkownik opencode +docker exec -it opencode-server sudo -u opencode /bin/bash +``` + +Jeśli potrzebujesz dostępu root: + +```bash +docker exec -it opencode-server /bin/bash +``` + +## Zainstalowane narzędzia + +Obraz zawiera te narzędzia out-of-the-box: + +| Narzędzie | Opis | +| ----------------- | -------------------------------------------------------- | +| `opencode` | CLI OpenCode | +| `bun` | Środowisko uruchomieniowe JavaScript i menedżer pakietów | +| `bunx` | Odpowiednik Bun dla npx (uruchamianie pakietów npm) | +| `uv` | Menedżer pakietów Python | +| `git` | Kontrola wersji | +| `git-lfs` | Rozszerzenie do przechowywania dużych plików w Git | +| `build-essential` | GCC, make i biblioteki budowania | +| `curl` | Klient HTTP | +| `wget` | Narzędzie do pobierania plików | +| `openssh-client` | Klient SSH i narzędzia do kluczy | +| `xz-utils` | Narzędzia kompresji | + +### Używanie bun + +```bash +# Uruchom pakiet Node.js +docker exec -it opencode-server bunx create-next-app + +# Zainstaluj zależności +docker exec -it opencode-server bun install +``` + +### Używanie uv + +```bash +# Zainstaluj pakiet Python +docker exec -it opencode-server uv pip install pandas + +# Uruchom skrypt Python +docker exec -it opencode-server uv run script.py +``` + +### Używanie git + +```bash +# Klonuj repozytorium do przestrzeni roboczej +docker exec -it opencode-server git clone https://github.com/user/repo.git /workspace/repo +``` + +## Sprawdzanie zdrowia + +Kontener zawiera wbudowane sprawdzanie zdrowia, które weryfikuje, czy serwer odpowiada: + +```bash +# Sprawdź stan zdrowia kontenera +docker inspect --format='{{.State.Health.Status}}' opencode-server +``` + +Punkt końcowy zdrowia zwraca HTTP 200, gdy jest zdrowy: + +```bash +# Ręczne sprawdzanie zdrowia +curl -f http://localhost:3000/health +``` + +Konfiguracja sprawdzania zdrowia: + +- Interwał: 30 sekund +- Timeout: 10 sekund +- Okres startowy: 10 sekund +- Próby: 3 + +## Przykład Docker Compose + +Utwórz plik `docker-compose.yml`: + +```yaml +services: + opencode: + image: ghcr.io/anomalyco/opencode/server:debian + container_name: opencode-server + restart: unless-stopped + ports: + - "3000:3000" + environment: + - OPENCODE_SERVER_PASSWORD=your_secure_password + - OPENCODE_SERVER_USERNAME=opencode + volumes: + - ./workspace:/workspace + - opencode_config:/home/opencode/.config + - opencode_cache:/home/opencode/.cache + - ~/.ssh:/home/opencode/.ssh:ro + - ~/.gitconfig:/home/opencode/.gitconfig:ro + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000/health"] + interval: 30s + timeout: 10s + retries: 3 + +volumes: + opencode_config: + opencode_cache: +``` + +Uruchom stos: + +```bash +docker-compose up -d +``` + +## Budowanie ze źródła + +Aby zbudować obraz serwera ze źródła: + +### Klonuj repozytorium + +```bash +git clone https://github.com/anomalyco/opencode.git +cd opencode +``` + +### Buduj wariant Debian + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.debian \ + -t opencode-server:local \ + . +``` + +### Buduj wariant Alpine + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.alpine \ + -t opencode-server:alpine-local \ + . +``` + +### Uruchom swoją lokalną kompilację + +```bash +docker run -d \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=dev_password \ + -v $(pwd)/workspace:/workspace \ + opencode-server:local +``` + +## Rozwiązywanie problemów + +### Serwer nie startuje + +Sprawdź logi: + +```bash +docker logs opencode-server +``` + +Częste problemy: + +- Brak `OPENCODE_SERVER_PASSWORD` - serwer odmawia startu bez uwierzytelniania +- Port już w użyciu - zmień mapowanie portów hosta + +### Uwierzytelnianie nie działa + +Upewnij się, że hasło jest dokładnie dopasowane. Serwer używa HTTP Basic Auth: + +```bash +# Testuj uwierzytelnianie +curl -u opencode:your_password http://localhost:3000/health +``` + +### Błędy uprawnień przestrzeni roboczej + +Upewnij się, że zamontowany katalog jest zapisywalny przez UID 1000: + +```bash +# Napraw własność +sudo chown -R 1000:1000 /path/to/workspace +``` + +### Wolny start + +Pierwsze uruchomienie pobiera serwery językowe i narzędzia. Sprawdź postęp: + +```bash +docker logs -f opencode-server +``` + +### Kontener nie może połączyć się z internetem + +Sprawdź konfigurację DNS: + +```bash +docker exec opencode-server ping -c 3 8.8.8.8 +docker exec opencode-server cat /etc/resolv.conf +``` + +### Sprawdzanie zdrowia nie działa + +Zweryfikuj, czy serwer faktycznie działa: + +```bash +docker exec opencode-server curl -f http://localhost:3000/health +``` + +### Klucz SSH nie działa + +Upewnij się, że klucze mają odpowiednie uprawnienia wewnątrz kontenera: + +```bash +docker exec opencode-server sudo chmod 600 /home/opencode/.ssh/id_rsa +docker exec opencode-server sudo chmod 644 /home/opencode/.ssh/id_rsa.pub +``` diff --git a/docs/docker-server.ru.md b/docs/docker-server.ru.md new file mode 100644 index 000000000000..a07c02ac8225 --- /dev/null +++ b/docs/docker-server.ru.md @@ -0,0 +1,359 @@ +# Документация по OpenCode Server Docker + +В этом руководстве рассматривается запуск OpenCode в серверном режиме внутри контейнеров Docker. + +## Введение + +OpenCode Server — это автономное развёртывание OpenCode, которое работает как фоновый сервис и доступно через HTTP API. Образ Docker предоставляет полноценную среду выполнения со всеми необходимыми инструментами, что делает его идеальным для: + +- Удалённых сред разработки +- Интеграции CI/CD +- Общих экземпляров кодирования для команд +- Запуска OpenCode на серверах без графического интерфейса + +## Быстрый старт + +Запустите OpenCode Server с безопасным паролем: + +```bash +docker run -d \ + --name opencode-server \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=your_secure_password \ + -v opencode_workspace:/workspace \ + ghcr.io/anomalyco/opencode/server:debian +``` + +Доступ к серверу по адресу `http://localhost:3000`. + +## Варианты образа + +Доступны два варианта базового образа: + +| Вариант | Базовый образ | Размер | Сценарий использования | +| -------- | ------------------ | ------ | ------------------------------------------- | +| `debian` | Debian Trixie Slim | ~500MB | Рекомендуется для большинства пользователей | +| `alpine` | Alpine Edge | ~200MB | Минимальный размер, быстрее загрузка | + +### Загрузка определённых вариантов + +```bash +# Debian (рекомендуется) +docker pull ghcr.io/anomalyco/opencode/server:debian + +# Alpine (минимальный) +docker pull ghcr.io/anomalyco/opencode/server:alpine +``` + +## Переменные окружения + +| Переменная | По умолчанию | Описание | +| -------------------------- | ----------------------------- | ----------------------------------------------------- | +| `OPENCODE_SERVER_PASSWORD` | (нет) | **Обязательно.** Пароль для HTTP Basic аутентификации | +| `OPENCODE_SERVER_USERNAME` | `opencode` | Имя пользователя для HTTP Basic аутентификации | +| `XDG_CONFIG_HOME` | `/home/opencode/.config` | Каталог конфигурации | +| `XDG_CACHE_HOME` | `/home/opencode/.cache` | Каталог кэша | +| `XDG_DATA_HOME` | `/home/opencode/.local/share` | Каталог данных | + +### Параметры сервера (флаги CLI) + +Сервер принимает эти дополнительные параметры при переопределении команды по умолчанию: + +```bash +docker run ... ghcr.io/anomalyco/opencode/server:debian \ + opencode serve --hostname=0.0.0.0 --port=3000 --cors=https://example.com +``` + +| Флаг | По умолчанию | Описание | +| --------------- | ---------------- | ---------------------------------- | +| `--port` | `0` (случайный) | Порт для прослушивания | +| `--hostname` | `127.0.0.1` | Имя хоста для привязки | +| `--mdns` | `false` | Включить обнаружение сервисов mDNS | +| `--mdns-domain` | `opencode.local` | Пользовательское доменное имя mDNS | +| `--cors` | `[]` | Дополнительные домены CORS | + +## Монтирование томов + +Смонтируйте эти тома для сохранения данных и предоставления общих ресурсов: + +### Рабочая область (Обязательно) + +```bash +-v /path/to/workspace:/workspace +``` + +Здесь OpenCode работает с файлами проекта. Смонтируйте ваш репозиторий кода сюда. + +### SSH-ключи + +```bash +-v ~/.ssh:/home/opencode/.ssh:ro +``` + +Доступ только для чтения к SSH-ключам для клонирования приватных репозиториев. + +### Конфигурация Git + +```bash +-v ~/.gitconfig:/home/opencode/.gitconfig:ro +``` + +Наследование идентификатора пользователя Git от хоста. + +### Конфигурация OpenCode + +```bash +v ~/.config/opencode:/home/opencode/.config/opencode +``` + +Сохранение настроек OpenCode между перезапусками контейнера. + +### Кэш + +```bash +-v opencode_cache:/home/opencode/.cache +``` + +Кэш npm-пакетов, языковых серверов и других загруженных инструментов. + +## Порты + +| Порт | Протокол | Описание | +| ------ | -------- | ----------------------------------- | +| `3000` | HTTP | Основной API сервера (по умолчанию) | + +Порт можно переназначить через флаг `-p` Docker: + +```bash +-p 8080:3000 # Доступ к серверу по http://localhost:8080 +``` + +## Пользователь и разрешения + +Контейнер работает от непривилегированного пользователя (`opencode`, UID 1000) в целях безопасности. Этот пользователь имеет доступ к `sudo` без пароля для административных задач: + +```bash +# Выполнить команды от имени пользователя opencode +docker exec -it opencode-server sudo -u opencode + +# Получить оболочку от имени пользователя opencode +docker exec -it opencode-server sudo -u opencode /bin/bash +``` + +Если вам нужен доступ root: + +```bash +docker exec -it opencode-server /bin/bash +``` + +## Установленные инструменты + +Образ включает эти инструменты из коробки: + +| Инструмент | Описание | +| ----------------- | ---------------------------------------------- | +| `opencode` | CLI OpenCode | +| `bun` | Среда выполнения JavaScript и менеджер пакетов | +| `bunx` | Эквивалент Bun для npx (запуск npm-пакетов) | +| `uv` | Менеджер пакетов Python | +| `git` | Система контроля версий | +| `git-lfs` | Расширение Git для хранения больших файлов | +| `build-essential` | GCC, make и библиотеки сборки | +| `curl` | HTTP-клиент | +| `wget` | Утилита для загрузки файлов | +| `openssh-client` | SSH-клиент и инструменты для ключей | +| `xz-utils` | Утилиты сжатия | + +### Использование bun + +```bash +# Запустить Node.js-пакет +docker exec -it opencode-server bunx create-next-app + +# Установить зависимости +docker exec -it opencode-server bun install +``` + +### Использование uv + +```bash +# Установить Python-пакет +docker exec -it opencode-server uv pip install pandas + +# Запустить Python-скрипт +docker exec -it opencode-server uv run script.py +``` + +### Использование git + +```bash +# Клонировать репозиторий в рабочую область +docker exec -it opencode-server git clone https://github.com/user/repo.git /workspace/repo +``` + +## Проверка состояния + +Контейнер включает встроенную проверку состояния, которая проверяет, отвечает ли сервер: + +```bash +# Проверить состояние контейнера +docker inspect --format='{{.State.Health.Status}}' opencode-server +``` + +Эндпоинт состояния возвращает HTTP 200, когда сервер здоров: + +```bash +# Ручная проверка состояния +curl -f http://localhost:3000/health +``` + +Конфигурация проверки состояния: + +- Интервал: 30 секунд +- Тайм-аут: 10 секунд +- Начальный период: 10 секунд +- Повторные попытки: 3 + +## Пример Docker Compose + +Создайте файл `docker-compose.yml`: + +```yaml +services: + opencode: + image: ghcr.io/anomalyco/opencode/server:debian + container_name: opencode-server + restart: unless-stopped + ports: + - "3000:3000" + environment: + - OPENCODE_SERVER_PASSWORD=your_secure_password + - OPENCODE_SERVER_USERNAME=opencode + volumes: + - ./workspace:/workspace + - opencode_config:/home/opencode/.config + - opencode_cache:/home/opencode/.cache + - ~/.ssh:/home/opencode/.ssh:ro + - ~/.gitconfig:/home/opencode/.gitconfig:ro + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000/health"] + interval: 30s + timeout: 10s + retries: 3 + +volumes: + opencode_config: + opencode_cache: +``` + +Запустите стек: + +```bash +docker-compose up -d +``` + +## Сборка из исходного кода + +Для сборки образа сервера из исходного кода: + +### Клонируйте репозиторий + +```bash +git clone https://github.com/anomalyco/opencode.git +cd opencode +``` + +### Сборка варианта Debian + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.debian \ + -t opencode-server:local \ + . +``` + +### Сборка варианта Alpine + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.alpine \ + -t opencode-server:alpine-local \ + . +``` + +### Запустите локальную сборку + +```bash +docker run -d \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=dev_password \ + -v $(pwd)/workspace:/workspace \ + opencode-server:local +``` + +## Устранение неполадок + +### Сервер не запускается + +Проверьте журналы: + +```bash +docker logs opencode-server +``` + +Распространённые проблемы: + +- Отсутствует `OPENCODE_SERVER_PASSWORD` — сервер отказывается запускаться без аутентификации +- Порт уже используется — измените сопоставление портов хоста + +### Ошибка аутентификации + +Убедитесь, что пароль точно соответствует. Сервер использует HTTP Basic Auth: + +```bash +# Проверить аутентификацию +curl -u opencode:your_password http://localhost:3000/health +``` + +### Ошибки разрешений рабочей области + +Убедитесь, что смонтированный каталог доступен для записи UID 1000: + +```bash +# Исправить владельца +sudo chown -R 1000:1000 /path/to/workspace +``` + +### Медленный запуск + +При первом запуске загружаются языковые серверы и инструменты. Проверьте прогресс: + +```bash +docker logs -f opencode-server +``` + +### Контейнер не может подключиться к интернету + +Проверьте конфигурацию DNS: + +```bash +docker exec opencode-server ping -c 3 8.8.8.8 +docker exec opencode-server cat /etc/resolv.conf +``` + +### Проверка состояния не работает + +Убедитесь, что сервер действительно запущен: + +```bash +docker exec opencode-server curl -f http://localhost:3000/health +``` + +### SSH-ключ не работает + +Убедитесь в правильных разрешениях ключей внутри контейнера: + +```bash +docker exec opencode-server sudo chmod 600 /home/opencode/.ssh/id_rsa +docker exec opencode-server sudo chmod 644 /home/opencode/.ssh/id_rsa.pub +``` diff --git a/docs/docker-server.th.md b/docs/docker-server.th.md new file mode 100644 index 000000000000..1db6f1b8b9af --- /dev/null +++ b/docs/docker-server.th.md @@ -0,0 +1,359 @@ +# เอกสาร OpenCode Server Docker + +คู่มือนี้ครอบคลุมการรัน OpenCode ในโหมดเซิร์ฟเวอร์ภายในคอนเทนเนอร์ Docker + +## บทนำ + +OpenCode Server คือการติดตั้ง OpenCode แบบ headless ที่ทำงานเป็นเซิร์ฟเวอร์พื้นหลัง เข้าถึงได้ผ่าน HTTP API อิมเมจ Docker มีสภาพแวดล้อมรันไทม์ที่สมบูรณ์พร้อมเครื่องมือที่จำเป็นทั้งหมดติดตั้งไว้แล้ว ทำให้เหมาะสำหรับ: + +- สภาพแวดล้อมการพัฒนาระยะไกล +- การรวม CI/CD +- อินสแตนซ์การเขียนโค้ดที่ใช้ร่วมกันในทีม +- การรัน OpenCode บนเซิร์ฟเวอร์ที่ไม่มี GUI + +## เริ่มต้นอย่างรวดเร็ว + +รัน OpenCode Server ด้วยรหัสผ่านที่ปลอดภัย: + +```bash +docker run -d \ + --name opencode-server \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=your_secure_password \ + -v opencode_workspace:/workspace \ + ghcr.io/anomalyco/opencode/server:debian +``` + +เข้าถึงเซิร์ฟเวอร์ที่ `http://localhost:3000` + +## ตัวแปรของอิมเมจ + +มีตัวแปรอิมเมจพื้นฐานสองแบบให้เลือก: + +| ตัวแปร | อิมเมจพื้นฐาน | ขนาด | กรณีการใช้งาน | +| -------- | ------------------ | ------ | ------------------------------ | +| `debian` | Debian Trixie Slim | ~500MB | แนะนำสำหรับผู้ใช้ส่วนใหญ่ | +| `alpine` | Alpine Edge | ~200MB | ขนาดเล็กสุด, ดาวน์โหลดเร็วกว่า | + +### การดึงตัวแปรเฉพาะ + +```bash +# Debian (แนะนำ) +docker pull ghcr.io/anomalyco/opencode/server:debian + +# Alpine (ขนาดเล็ก) +docker pull ghcr.io/anomalyco/opencode/server:alpine +``` + +## ตัวแปรสภาพแวดล้อม + +| ตัวแปร | ค่าเริ่มต้น | คำอธิบาย | +| -------------------------- | ----------------------------- | ---------------------------------------------------- | +| `OPENCODE_SERVER_PASSWORD` | (ไม่มี) | **จำเป็น.** รหัสผ่านสำหรับ HTTP Basic authentication | +| `OPENCODE_SERVER_USERNAME` | `opencode` | ชื่อผู้ใช้สำหรับ HTTP Basic authentication | +| `XDG_CONFIG_HOME` | `/home/opencode/.config` | ไดเรกทอรีการตั้งค่า | +| `XDG_CACHE_HOME` | `/home/opencode/.cache` | ไดเรกทอรีแคช | +| `XDG_DATA_HOME` | `/home/opencode/.local/share` | ไดเรกทอรีข้อมูล | + +### ตัวเลือกเซิร์ฟเวอร์ (CLI Flags) + +เซิร์ฟเวอร์รับตัวเลือกเพิ่มเติมเหล่านี้เมื่อแทนที่คำสั่งเริ่มต้น: + +```bash +docker run ... ghcr.io/anomalyco/opencode/server:debian \ + opencode serve --hostname=0.0.0.0 --port=3000 --cors=https://example.com +``` + +| Flag | ค่าเริ่มต้น | คำอธิบาย | +| --------------- | ---------------- | ----------------------------- | +| `--port` | `0` (สุ่ม) | พอร์ตสำหรับรับการเชื่อมต่อ | +| `--hostname` | `127.0.0.1` | ชื่อโฮสต์สำหรับผูกมัด | +| `--mdns` | `false` | เปิดใช้งานการค้นหาบริการ mDNS | +| `--mdns-domain` | `opencode.local` | ชื่อโดเมน mDNS ที่กำหนดเอง | +| `--cors` | `[]` | โดเมนเพิ่มเติมที่อนุญาต CORS | + +## การ Mount Volume + +Mount volumes เหล่านี้เพื่อคงข้อมูลไว้และแบ่งปันทรัพยากร: + +### Workspace (จำเป็น) + +```bash +-v /path/to/workspace:/workspace +``` + +นี่คือที่ที่ OpenCode ทำงานกับไฟล์โปรเจกต์ของคุณ Mount ที่เก็บโค้ดของคุณที่นี่ + +### SSH Keys + +```bash +-v ~/.ssh:/home/opencode/.ssh:ro +``` + +การเข้าถึงแบบอ่านอย่างเดียวสำหรับ SSH keys สำหรับ clone private repositories + +### การตั้งค่า Git + +```bash +-v ~/.gitconfig:/home/opencode/.gitconfig:ro +``` + +รับค่า Git user identity จากโฮสต์ + +### การตั้งค่า OpenCode + +```bash +-v ~/.config/opencode:/home/opencode/.config/opencode +``` + +คงการตั้งค่า OpenCode ไว้ระหว่างการรีสตาร์ทคอนเทนเนอร์ + +### แคช + +```bash +-v opencode_cache:/home/opencode/.cache +``` + +แคชแพ็คเกจ npm, language servers และเครื่องมืออื่นๆ ที่ดาวน์โหลด + +## พอร์ต + +| พอร์ต | โปรโตคอล | คำอธิบาย | +| ------ | -------- | --------------------------------- | +| `3000` | HTTP | API เซิร์ฟเวอร์หลัก (ค่าเริ่มต้น) | + +พอร์ตสามารถ remap ได้ผ่าน Docker `-p` flag: + +```bash +-p 8080:3000 # เข้าถึงเซิร์ฟเวอร์ที่ http://localhost:8080 +``` + +## ผู้ใช้และสิทธิ์ + +คอนเทนเนอร์ทำงานเป็นผู้ใช้ที่ไม่ใช่ root (`opencode`, UID 1000) เพื่อความปลอดภัย ผู้ใช้นี้มีสิทธิ์ `sudo` โดยไม่ต้องใช้รหัสผ่านสำหรับงานบริหาร: + +```bash +# รันคำสั่งเป็นผู้ใช้ opencode +docker exec -it opencode-server sudo -u opencode + +# เข้าถึง shell เป็นผู้ใช้ opencode +docker exec -it opencode-server sudo -u opencode /bin/bash +``` + +หากคุณต้องการสิทธิ์ root: + +```bash +docker exec -it opencode-server /bin/bash +``` + +## เครื่องมือที่ติดตั้ง + +อิมเมจมีเครื่องมือเหล่านี้ติดตั้งไว้แล้ว: + +| เครื่องมือ | คำอธิบาย | +| ----------------- | ---------------------------------------------- | +| `opencode` | OpenCode CLI | +| `bun` | JavaScript runtime และ package manager | +| `bunx` | ตัวเทียบเท่ากับ npx ของ Bun (รัน npm packages) | +| `uv` | Python package manager | +| `git` | การควบคุมเวอร์ชัน | +| `git-lfs` | ส่วนขยาย large file storage สำหรับ Git | +| `build-essential` | GCC, make และ build libraries | +| `curl` | HTTP client | +| `wget` | ยูทิลิตี้ดาวน์โหลดไฟล์ | +| `openssh-client` | SSH client และเครื่องมือ key | +| `xz-utils` | ยูทิลิตี้การบีบอัด | + +### การใช้ bun + +```bash +# รัน Node.js package +docker exec -it opencode-server bunx create-next-app + +# ติดตั้ง dependencies +docker exec -it opencode-server bun install +``` + +### การใช้ uv + +```bash +# ติดตั้ง Python package +docker exec -it opencode-server uv pip install pandas + +# รัน Python script +docker exec -it opencode-server uv run script.py +``` + +### การใช้ git + +```bash +# Clone repository ไปยัง workspace +docker exec -it opencode-server git clone https://github.com/user/repo.git /workspace/repo +``` + +## ตรวจสอบสถานะ + +คอนเทนเนอร์มี health check ในตัวที่ตรวจสอบว่าเซิร์ฟเวอร์ตอบสนอง: + +```bash +# ตรวจสอบสถานะคอนเทนเนอร์ +docker inspect --format='{{.State.Health.Status}}' opencode-server +``` + +health endpoint ส่งคืน HTTP 200 เมื่อสุขภาพดี: + +```bash +# ตรวจสอบสถานะด้วยตนเอง +curl -f http://localhost:3000/health +``` + +การตั้งค่า health check: + +- Interval: 30 วินาที +- Timeout: 10 วินาที +- Start period: 10 วินาที +- Retries: 3 + +## ตัวอย่าง Docker Compose + +สร้างไฟล์ `docker-compose.yml`: + +```yaml +services: + opencode: + image: ghcr.io/anomalyco/opencode/server:debian + container_name: opencode-server + restart: unless-stopped + ports: + - "3000:3000" + environment: + - OPENCODE_SERVER_PASSWORD=your_secure_password + - OPENCODE_SERVER_USERNAME=opencode + volumes: + - ./workspace:/workspace + - opencode_config:/home/opencode/.config + - opencode_cache:/home/opencode/.cache + - ~/.ssh:/home/opencode/.ssh:ro + - ~/.gitconfig:/home/opencode/.gitconfig:ro + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000/health"] + interval: 30s + timeout: 10s + retries: 3 + +volumes: + opencode_config: + opencode_cache: +``` + +เริ่มต้น stack: + +```bash +docker-compose up -d +``` + +## สร้างจาก Source + +เพื่อสร้างอิมเมจเซิร์ฟเวอร์จาก source: + +### Clone repository + +```bash +git clone https://github.com/anomalyco/opencode.git +cd opencode +``` + +### สร้างตัวแปร Debian + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.debian \ + -t opencode-server:local \ + . +``` + +### สร้างตัวแปร Alpine + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.alpine \ + -t opencode-server:alpine-local \ + . +``` + +### รัน build ในเครื่อง + +```bash +docker run -d \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=dev_password \ + -v $(pwd)/workspace:/workspace \ + opencode-server:local +``` + +## การแก้ไขปัญหา + +### เซิร์ฟเวอร์ไม่เริ่มทำงาน + +ตรวจสอบ logs: + +```bash +docker logs opencode-server +``` + +ปัญหาที่พบบ่อย: + +- ขาด `OPENCODE_SERVER_PASSWORD` - เซิร์ฟเวอร์ปฏิเสธที่จะเริ่มทำงานโดยไม่มีการยืนยันตัวตน +- พอร์ตถูกใช้งานอยู่ - เปลี่ยนการ map พอร์ตของโฮสต์ + +### การยืนยันตัวตนล้มเหลว + +ตรวจสอบว่ารหัสผ่านตรงกัน เซิร์ฟเวอร์ใช้ HTTP Basic Auth: + +```bash +# ทดสอบการยืนยันตัวตน +curl -u opencode:your_password http://localhost:3000/health +``` + +### ข้อผิดพลาดสิทธิ์ Workspace + +ตรวจสอบว่าไดเรกทอรีที่ mount สามารถเขียนได้โดย UID 1000: + +```bash +# แก้ไข ownership +sudo chown -R 1000:1000 /path/to/workspace +``` + +### เริ่มต้นช้า + +การรันครั้งแรกจะดาวน์โหลด language servers และเครื่องมือ ตรวจสอบความคืบหน้า: + +```bash +docker logs -f opencode-server +``` + +### คอนเทนเนอร์เข้าถึงอินเทอร์เน็ตไม่ได้ + +ตรวจสอบการตั้งค่า DNS: + +```bash +docker exec opencode-server ping -c 3 8.8.8.8 +docker exec opencode-server cat /etc/resolv.conf +``` + +### Health check ล้มเหลว + +ตรวจสอบว่าเซิร์ฟเวอร์ทำงานจริง: + +```bash +docker exec opencode-server curl -f http://localhost:3000/health +``` + +### SSH key ไม่ทำงาน + +ตรวจสอบสิทธิ์ key ที่ถูกต้องภายในคอนเทนเนอร์: + +```bash +docker exec opencode-server sudo chmod 600 /home/opencode/.ssh/id_rsa +docker exec opencode-server sudo chmod 644 /home/opencode/.ssh/id_rsa.pub +``` diff --git a/docs/docker-server.tr.md b/docs/docker-server.tr.md new file mode 100644 index 000000000000..c31939347456 --- /dev/null +++ b/docs/docker-server.tr.md @@ -0,0 +1,359 @@ +# OpenCode Server Docker Dokümantasyonu + +Bu kılavuz, Docker container'larında sunucu modunda OpenCode çalıştırmayı kapsar. + +## Giriş + +OpenCode Server, arka planda çalışan ve HTTP API üzerinden erişilebilen OpenCode'un headless dağıtımıd. Docker imajı, önceden yüklenmiş tüm gerekli araçlarla birlikte eksiksiz bir çalışma zamanı ortamı sağlar ve şunlar için idealdir: + +- Uzaktan geliştirme ortamları +- CI/CD entegrasyonı +- Takım paylaşımlı kodlama örnekleri +- GUI olmayan sunucularda OpenCode çalıştırma + +## Hızlı Başlangıç + +Güvenli bir şifre ile OpenCode Server'ı çalıştırın: + +```bash +docker run -d \ + --name opencode-server \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=your_secure_password \ + -v opencode_workspace:/workspace \ + ghcr.io/anomalyco/opencode/server:debian +``` + +Sunucuya `http://localhost:3000` adresinden erişin. + +## İmaj Çeşitleri + +İki temel imaj çeşidi mevcuttur: + +| Çeşit | Temel İmaj | Boyut | Kullanım Durumu | +| -------- | ------------------ | ------ | ------------------------------------ | +| `debian` | Debian Trixie Slim | ~500MB | Çoğu kullanıcı için önerilir | +| `alpine` | Alpine Edge | ~200MB | Minimum ayak izi, daha hızlı indirme | + +### Belirli Çeşitleri İndirme + +```bash +# Debian (önerilen) +docker pull ghcr.io/anomalyco/opencode/server:debian + +# Alpine (minimum) +docker pull ghcr.io/anomalyco/opencode/server:alpine +``` + +## Ortam Değişkenleri + +| Değişken | Varsayılan | Açıklama | +| -------------------------- | ----------------------------- | ---------------------------------------------- | +| `OPENCODE_SERVER_PASSWORD` | (yok) | **Gerekli.** HTTP Basic authentication şifresi | +| `OPENCODE_SERVER_USERNAME` | `opencode` | HTTP Basic authentication kullanıcı adı | +| `XDG_CONFIG_HOME` | `/home/opencode/.config` | Yapılandırma dizini | +| `XDG_CACHE_HOME` | `/home/opencode/.cache` | Önbellek dizini | +| `XDG_DATA_HOME` | `/home/opencode/.local/share` | Veri dizini | + +### Sunucu Seçenekleri (CLI Bayrakları) + +Sunucu, varsayılan komutu geçersiz kılarken bu ek seçenekleri kabul eder: + +```bash +docker run ... ghcr.io/anomalyco/opencode/server:debian \ + opencode serve --hostname=0.0.0.0 --port=3000 --cors=https://example.com +``` + +| Bayrak | Varsayılan | Açıklama | +| --------------- | ---------------- | ------------------------------- | +| `--port` | `0` (rastgele) | Dinlenecek port | +| `--hostname` | `127.0.0.1` | Bağlanacak host adı | +| `--mdns` | `false` | mDNS hizmet keşfini etkinleştir | +| `--mdns-domain` | `opencode.local` | Özel mDNS domain adı | +| `--cors` | `[]` | İzin verilen ek CORS domainları | + +## Volume Mounting + +Verileri kalıcı kılmak ve kaynakları paylaşmak için bu volume'ları mount edin: + +### Workspace (Gerekli) + +```bash +-v /path/to/workspace:/workspace +``` + +OpenCode'un proje dosyalarınız üzerinde çalıştığı yerdir. Kod deponuzu buraya mount edin. + +### SSH Anahtarları + +```bash +-v ~/.ssh:/home/opencode/.ssh:ro +``` + +Özel repository'leri klonlamak için SSH anahtarlarına salt okunur erişim. + +### Git Yapılandırması + +```bash +-v ~/.gitconfig:/home/opencode/.gitconfig:ro +``` + +Git kullanıcı kimliğini host'tan devral. + +### OpenCode Yapılandırması + +```bash +-v ~/.config/opencode:/home/opencode/.config/opencode +``` + +Container yeniden başlatmaları arasında OpenCode ayarlarını kalıcı kıl. + +### Önbellek + +```bash +-v opencode_cache:/home/opencode/.cache +``` + +npm paketleri, language server'ları ve diğer indirilen araçları önbelleğe al. + +## Portlar + +| Port | Protokol | Açıklama | +| ------ | -------- | --------------------------- | +| `3000` | HTTP | Ana sunucu API (varsayılan) | + +Port, Docker `-p` bayrağı ile yeniden eşlenebilir: + +```bash +-p 8080:3000 # Sunucuya http://localhost:8080 adresinden eriş +``` + +## Kullanıcı ve İzinler + +Container, güvenlik için root olmayan bir kullanıcı (`opencode`, UID 1000) olarak çalışır. Bu kullanıcının yönetim görevleri için şifresiz `sudo` erişimi vardır: + +```bash +# opencode kullanıcısı olarak komut çalıştır +docker exec -it opencode-server sudo -u opencode + +# opencode kullanıcısı olarak shell al +docker exec -it opencode-server sudo -u opencode /bin/bash +``` + +Root erişimine ihtiyacınız varsa: + +```bash +docker exec -it opencode-server /bin/bash +``` + +## Yüklü Araçlar + +İmaj, kutudan çıktığı gibi şu araçları içerir: + +| Araç | Açıklama | +| ----------------- | --------------------------------------------- | +| `opencode` | OpenCode CLI | +| `bun` | JavaScript runtime ve package manager | +| `bunx` | Bun'un npx karşılığı (npm paketleri çalıştır) | +| `uv` | Python package manager | +| `git` | Sürüm kontrolü | +| `git-lfs` | Git için büyük dosya depolama uzantısı | +| `build-essential` | GCC, make ve build kütüphaneleri | +| `curl` | HTTP istemcisi | +| `wget` | Dosya indirme yardımcı programı | +| `openssh-client` | SSH istemcisi ve anahtar araçları | +| `xz-utils` | Sıkıştırma yardımcı programları | + +### bun Kullanımı + +```bash +# Node.js paketi çalıştır +docker exec -it opencode-server bunx create-next-app + +# Bağımlılıkları yükle +docker exec -it opencode-server bun install +``` + +### uv Kullanımı + +```bash +# Python paketi yükle +docker exec -it opencode-server uv pip install pandas + +# Python scripti çalıştır +docker exec -it opencode-server uv run script.py +``` + +### git Kullanımı + +```bash +# Repository'yi workspace'e klonla +docker exec -it opencode-server git clone https://github.com/user/repo.git /workspace/repo +``` + +## Sağlık Kontrolü + +Container, sunucunun yanıt verdiğini doğrulayan yerleşik bir sağlık kontrolü içerir: + +```bash +# Container sağlığını kontrol et +docker inspect --format='{{.State.Health.Status}}' opencode-server +``` + +Sağlık endpoint'i sağlıklı olduğunda HTTP 200 döndürür: + +```bash +# Manuel sağlık kontrolü +curl -f http://localhost:3000/health +``` + +Sağlık kontrolü yapılandırması: + +- Aralık: 30 saniye +- Zaman aşımı: 10 saniye +- Başlangıç süresi: 10 saniye +- Deneme sayısı: 3 + +## Docker Compose Örneği + +Bir `docker-compose.yml` dosyası oluşturun: + +```yaml +services: + opencode: + image: ghcr.io/anomalyco/opencode/server:debian + container_name: opencode-server + restart: unless-stopped + ports: + - "3000:3000" + environment: + - OPENCODE_SERVER_PASSWORD=your_secure_password + - OPENCODE_SERVER_USERNAME=opencode + volumes: + - ./workspace:/workspace + - opencode_config:/home/opencode/.config + - opencode_cache:/home/opencode/.cache + - ~/.ssh:/home/opencode/.ssh:ro + - ~/.gitconfig:/home/opencode/.gitconfig:ro + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000/health"] + interval: 30s + timeout: 10s + retries: 3 + +volumes: + opencode_config: + opencode_cache: +``` + +Stack'i başlatın: + +```bash +docker-compose up -d +``` + +## Kaynaktan Derleme + +Sunucu imajını kaynaktan derlemek için: + +### Repository'yi klonla + +```bash +git clone https://github.com/anomalyco/opencode.git +cd opencode +``` + +### Debian çeşidini derle + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.debian \ + -t opencode-server:local \ + . +``` + +### Alpine çeşidini derle + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.alpine \ + -t opencode-server:alpine-local \ + . +``` + +### Yerel derlemenizi çalıştırın + +```bash +docker run -d \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=dev_password \ + -v $(pwd)/workspace:/workspace \ + opencode-server:local +``` + +## Sorun Giderme + +### Sunucu başlamıyor + +Logları kontrol edin: + +```bash +docker logs opencode-server +``` + +Yaygın sorunlar: + +- `OPENCODE_SERVER_PASSWORD` eksik - sunucu kimlik doğrulama olmadan başlamayı reddeder +- Port zaten kullanımda - host port eşlemesini değiştirin + +### Kimlik doğrulama başarısız + +Şifrenin tam olarak eşleştiğinden emin olun. Sunucu HTTP Basic Auth kullanır: + +```bash +# Kimlik doğrulamayı test et +curl -u opencode:your_password http://localhost:3000/health +``` + +### Workspace izin hataları + +Mount edilen dizinin UID 1000 tarafından yazılabilir olduğundan emin olun: + +```bash +# Sahipliği düzelt +sudo chown -R 1000:1000 /path/to/workspace +``` + +### Yavaş başlangıç + +İlk çalıştırma language server'ları ve araçları indirir. İlerlemeyi kontrol edin: + +```bash +docker logs -f opencode-server +``` + +### Container internete erişemiyor + +DNS yapılandırmasını kontrol edin: + +```bash +docker exec opencode-server ping -c 3 8.8.8.8 +docker exec opencode-server cat /etc/resolv.conf +``` + +### Sağlık kontrolü başarısız + +Sunucunun gerçekten çalıştığını doğrulayın: + +```bash +docker exec opencode-server curl -f http://localhost:3000/health +``` + +### SSH anahtarı çalışmıyor + +Container içinde doğru anahtar izinlerini sağlayın: + +```bash +docker exec opencode-server sudo chmod 600 /home/opencode/.ssh/id_rsa +docker exec opencode-server sudo chmod 644 /home/opencode/.ssh/id_rsa.pub +``` diff --git a/docs/docker-server.uk.md b/docs/docker-server.uk.md new file mode 100644 index 000000000000..a289b21f6d16 --- /dev/null +++ b/docs/docker-server.uk.md @@ -0,0 +1,359 @@ +# Документація OpenCode Server Docker + +Цей посібник охоплює запуск OpenCode у режимі сервера всередині Docker-контейнерів. + +## Вступ + +OpenCode Server — це headless-розгортання OpenCode, яке працює як фонова служба та доступне через HTTP API. Docker-образ надає повне середовище виконання з усіма необхідними інструментами, що робить його ідеальним для: + +- Віддалених середовищ розробки +- Інтеграції CI/CD +- Спільних екземплярів кодування для команди +- Запуску OpenCode на серверах без GUI + +## Швидкий старт + +Запустіть OpenCode Server з безпечним паролем: + +```bash +docker run -d \ + --name opencode-server \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=your_secure_password \ + -v opencode_workspace:/workspace \ + ghcr.io/anomalyco/opencode/server:debian +``` + +Доступ до сервера за адресою `http://localhost:3000`. + +## Варіанти образу + +Доступні два варіанти базового образу: + +| Варіант | Базовий образ | Розмір | Випадок використання | +| -------- | ------------------ | ------ | ---------------------------------------- | +| `debian` | Debian Trixie Slim | ~500MB | Рекомендовано для більшості користувачів | +| `alpine` | Alpine Edge | ~200MB | Мінімальний розмір, швидше завантаження | + +### Завантаження конкретних варіантів + +```bash +# Debian (рекомендовано) +docker pull ghcr.io/anomalyco/opencode/server:debian + +# Alpine (мінімальний) +docker pull ghcr.io/anomalyco/opencode/server:alpine +``` + +## Змінні середовища + +| Змінна | За замовчуванням | Опис | +| -------------------------- | ----------------------------- | ------------------------------------------- | +| `OPENCODE_SERVER_PASSWORD` | (немає) | **Обов'язково.** Пароль для HTTP Basic auth | +| `OPENCODE_SERVER_USERNAME` | `opencode` | Ім'я користувача для HTTP Basic auth | +| `XDG_CONFIG_HOME` | `/home/opencode/.config` | Каталог конфігурації | +| `XDG_CACHE_HOME` | `/home/opencode/.cache` | Каталог кешу | +| `XDG_DATA_HOME` | `/home/opencode/.local/share` | Каталог даних | + +### Параметри сервера (CLI-прапорці) + +Сервер приймає ці додаткові параметри під час перевизначення команди за замовчуванням: + +```bash +docker run ... ghcr.io/anomalyco/opencode/server:debian \ + opencode serve --hostname=0.0.0.0 --port=3000 --cors=https://example.com +``` + +| Прапорець | За замовчуванням | Опис | +| --------------- | ---------------- | ------------------------------- | +| `--port` | `0` (випадковий) | Порт для прослуховування | +| `--hostname` | `127.0.0.1` | Ім'я хоста для прив'язки | +| `--mdns` | `false` | Увімкнути виявлення mDNS-служби | +| `--mdns-domain` | `opencode.local` | Власне доменне ім'я mDNS | +| `--cors` | `[]` | Додаткові домени для CORS | + +## Монтування томів + +Монтуйте ці томи для збереження даних та спільного використання ресурсів: + +### Робочий простір (Обов'язково) + +```bash +-v /path/to/workspace:/workspace +``` + +Тут OpenCode працює з файлами вашого проєкту. Змонтуйте сюди свій репозиторій коду. + +### SSH-ключі + +```bash +-v ~/.ssh:/home/opencode/.ssh:ro +``` + +Доступ лише для читання до SSH-ключів для клонування приватних репозиторіїв. + +### Конфігурація Git + +```bash +-v ~/.gitconfig:/home/opencode/.gitconfig:ro +``` + +успадкувати ідентичність користувача Git від хост-системи. + +### Конфігурація OpenCode + +```bash +-v ~/.config/opencode:/home/opencode/.config/opencode +``` + +Зберігати налаштування OpenCode між перезапусками контейнера. + +### Кеш + +```bash +-v opencode_cache:/home/opencode/.cache +``` + +Кешувати npm-пакети, мовні сервери та інші завантажені інструменти. + +## Порти + +| Порт | Протокол | Опис | +| ------ | -------- | --------------------------------------- | +| `3000` | HTTP | Основний API сервера (за замовчуванням) | + +Порт можна перенаправити через прапорець Docker `-p`: + +```bash +-p 8080:3000 # Доступ до сервера за http://localhost:8080 +``` + +## Користувач та дозволи + +Контейнер працює як не-root користувач (`opencode`, UID 1000) з міркувань безпеки. Цей користувач має sudo-доступ без пароля для адміністративних завдань: + +```bash +# Виконати команду як користувач opencode +docker exec -it opencode-server sudo -u opencode + +# Отримати shell як користувач opencode +docker exec -it opencode-server sudo -u opencode /bin/bash +``` + +Якщо вам потрібен root-доступ: + +```bash +docker exec -it opencode-server /bin/bash +``` + +## Встановлені інструменти + +Образ включає ці інструменти: + +| Інструмент | Опис | +| ----------------- | ------------------------------------------- | +| `opencode` | OpenCode CLI | +| `bun` | JavaScript runtime і package manager | +| `bunx` | еквівалент npx від Bun (запуск npm-пакетів) | +| `uv` | Python package manager | +| `git` | контроль версій | +| `git-lfs` | розширення для великих файлів Git | +| `build-essential` | GCC, make та бібліотеки збірки | +| `curl` | HTTP-клієнт | +| `wget` | утиліта для завантаження файлів | +| `openssh-client` | SSH-клієнт та інструменти для ключів | +| `xz-utils` | утиліти стиснення | + +### Використання bun + +```bash +# Запустити Node.js-пакет +docker exec -it opencode-server bunx create-next-app + +# Встановити залежності +docker exec -it opencode-server bun install +``` + +### Використання uv + +```bash +# Встановити Python-пакет +docker exec -it opencode-server uv pip install pandas + +# Запустити Python-скрипт +docker exec -it opencode-server uv run script.py +``` + +### Використання git + +```bash +# Клонувати репозиторій у робочий простір +docker exec -it opencode-server git clone https://github.com/user/repo.git /workspace/repo +``` + +## Перевірка стану + +Контейнер включає вбудовану перевірку стану, яка перевіряє, чи сервер відповідає: + +```bash +# Перевірити стан контейнера +docker inspect --format='{{.State.Health.Status}}' opencode-server +``` + +Ендпоінт стану повертає HTTP 200, коли система здорова: + +```bash +# Ручна перевірка стану +curl -f http://localhost:3000/health +``` + +Конфігурація перевірки стану: + +- Інтервал: 30 секунд +- Тайм-аут: 10 секунд +- Початковий період: 10 секунд +- Повтори: 3 + +## Приклад Docker Compose + +Створіть файл `docker-compose.yml`: + +```yaml +services: + opencode: + image: ghcr.io/anomalyco/opencode/server:debian + container_name: opencode-server + restart: unless-stopped + ports: + - "3000:3000" + environment: + - OPENCODE_SERVER_PASSWORD=your_secure_password + - OPENCODE_SERVER_USERNAME=opencode + volumes: + - ./workspace:/workspace + - opencode_config:/home/opencode/.config + - opencode_cache:/home/opencode/.cache + - ~/.ssh:/home/opencode/.ssh:ro + - ~/.gitconfig:/home/opencode/.gitconfig:ro + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000/health"] + interval: 30s + timeout: 10s + retries: 3 + +volumes: + opencode_config: + opencode_cache: +``` + +Запустіть стек: + +```bash +docker-compose up -d +``` + +## Збірка з вихідного коду + +Для збірки образу сервера з вихідного коду: + +### Клонувати репозиторій + +```bash +git clone https://github.com/anomalyco/opencode.git +cd opencode +``` + +### Збірка варіанту Debian + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.debian \ + -t opencode-server:local \ + . +``` + +### Збірка варіанту Alpine + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.alpine \ + -t opencode-server:alpine-local \ + . +``` + +### Запустити локальну збірку + +```bash +docker run -d \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=dev_password \ + -v $(pwd)/workspace:/workspace \ + opencode-server:local +``` + +## Виправлення проблем + +### Сервер не запускається + +Перевірте логи: + +```bash +docker logs opencode-server +``` + +Поширені проблеми: + +- Відсутній `OPENCODE_SERVER_PASSWORD` — сервер відмовляється запускатися без автентифікації +- Порт вже використовується — змініть маппінг портів хост-системи + +### Помилка автентифікації + +Переконайтеся, що пароль точно збігається. Сервер використовує HTTP Basic Auth: + +```bash +# Тестування автентифікації +curl -u opencode:your_password http://localhost:3000/health +``` + +### Помилки прав робочого простору + +Переконайтеся, що змонтований каталог доступний для запису UID 1000: + +```bash +# Виправити власника +sudo chown -R 1000:1000 /path/to/workspace +``` + +### Повільний запуск + +Перший запуск завантажує мовні сервери та інструменти. Перевірте прогрес: + +```bash +docker logs -f opencode-server +``` + +### Контейнер не може підключитися до інтернету + +Перевірте конфігурацію DNS: + +```bash +docker exec opencode-server ping -c 3 8.8.8.8 +docker exec opencode-server cat /etc/resolv.conf +``` + +### Перевірка стану не вдається + +Переконайтеся, що сервер дійсно працює: + +```bash +docker exec opencode-server curl -f http://localhost:3000/health +``` + +### SSH-ключ не працює + +Переконайтеся у правильних правах на ключі всередині контейнера: + +```bash +docker exec opencode-server sudo chmod 600 /home/opencode/.ssh/id_rsa +docker exec opencode-server sudo chmod 644 /home/opencode/.ssh/id_rsa.pub +``` diff --git a/docs/docker-server.vi.md b/docs/docker-server.vi.md new file mode 100644 index 000000000000..8bda13f0d230 --- /dev/null +++ b/docs/docker-server.vi.md @@ -0,0 +1,359 @@ +# Tài liệu Docker OpenCode Server + +Hướng dẫn này trình bày cách chạy OpenCode ở chế độ server trong các container Docker. + +## Giới thiệu + +OpenCode Server là một triển khai headless của OpenCode chạy như một dịch vụ nền, có thể truy cập qua HTTP API. Image Docker cung cấp môi trường runtime đầy đủ với tất cả các công cụ cần thiết được cài sẵn, lý tưởng cho: + +- Môi trường phát triển từ xa +- Tích hợp CI/CD +- Phiên bản chia sẻ cho nhóm +- Chạy OpenCode trên server không có GUI + +## Bắt đầu nhanh + +Chạy OpenCode Server với mật khẩu bảo mật: + +```bash +docker run -d \ + --name opencode-server \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=your_secure_password \ + -v opencode_workspace:/workspace \ + ghcr.io/anomalyco/opencode/server:debian +``` + +Truy cập server tại `http://localhost:3000`. + +## Các Biến thể Image + +Có hai biến thể image cơ sở: + +| Biến thể | Image cơ sở | Kích thước | Trường hợp sử dụng | +| -------- | ------------------ | ---------- | --------------------------------------- | +| `debian` | Debian Trixie Slim | ~500MB | Được khuyến nghị cho hầu hết người dùng | +| `alpine` | Alpine Edge | ~200MB | Dấu chân tối thiểu, tải nhanh hơn | + +### Pull Các Biến thể Cụ thể + +```bash +# Debian (được khuyến nghị) +docker pull ghcr.io/anomalyco/opencode/server:debian + +# Alpine (tối thiểu) +docker pull ghcr.io/anomalyco/opencode/server:alpine +``` + +## Biến Môi trường + +| Biến | Mặc định | Mô tả | +| -------------------------- | ----------------------------- | ---------------------------------------------------- | +| `OPENCODE_SERVER_PASSWORD` | (không có) | **Bắt buộc.** Mật khẩu cho HTTP Basic authentication | +| `OPENCODE_SERVER_USERNAME` | `opencode` | Tên người dùng cho HTTP Basic authentication | +| `XDG_CONFIG_HOME` | `/home/opencode/.config` | Thư mục cấu hình | +| `XDG_CACHE_HOME` | `/home/opencode/.cache` | Thư mục cache | +| `XDG_DATA_HOME` | `/home/opencode/.local/share` | Thư mục dữ liệu | + +### Tùy chọn Server (CLI Flags) + +Server chấp nhận các tùy chọn bổ sung này khi ghi đè lệnh mặc định: + +```bash +docker run ... ghcr.io/anomalyco/opencode/server:debian \ + opencode serve --hostname=0.0.0.0 --port=3000 --cors=https://example.com +``` + +| Flag | Mặc định | Mô tả | +| --------------- | ---------------- | --------------------------------- | +| `--port` | `0` (ngẫu nhiên) | Cổng để lắng nghe | +| `--hostname` | `127.0.0.1` | Hostname để bind | +| `--mdns` | `false` | Bật dịch vụ khám phá mDNS | +| `--mdns-domain` | `opencode.local` | Tên domain mDNS tùy chỉnh | +| `--cors` | `[]` | Các domain được phép CORS bổ sung | + +## Mount Volumes + +Mount các volumes này để duy trì dữ liệu và chia sẻ tài nguyên: + +### Workspace (Bắt buộc) + +```bash +-v /path/to/workspace:/workspace +``` + +Đây là nơi OpenCode vận hành các file project của bạn. Mount repository code của bạn tại đây. + +### SSH Keys + +```bash +-v ~/.ssh:/home/opencode/.ssh:ro +``` + +Quyền truy cập chỉ đọc SSH keys để clone các repository riêng. + +### Cấu hình Git + +```bash +-v ~/.gitconfig:/home/opencode/.gitconfig:ro +``` + +Kế thừa danh tính người dùng Git từ host. + +### Cấu hình OpenCode + +```bash +-v ~/.config/opencode:/home/opencode/.config/opencode +``` + +Duy trì cài đặt OpenCode giữa các lần khởi động lại container. + +### Cache + +```bash +-v opencode_cache:/home/opencode/.cache +``` + +Cache các gói npm, language servers và các công cụ đã tải xuống khác. + +## Các Cổng + +| Cổng | Giao thức | Mô tả | +| ------ | --------- | --------------------------- | +| `3000` | HTTP | API server chính (mặc định) | + +Cổng có thể được ánh xạ lại qua cờ `-p` của Docker: + +```bash +-p 8080:3000 # Truy cập server tại http://localhost:8080 +``` + +## Người dùng và Quyền + +Container chạy như người dùng không phải root (`opencode`, UID 1000) để bảo mật. Người dùng này có quyền truy cập `sudo` không cần mật khẩu cho các tác vụ quản trị: + +```bash +# Thực thi lệnh với người dùng opencode +docker exec -it opencode-server sudo -u opencode + +# Lấy shell với người dùng opencode +docker exec -it opencode-server sudo -u opencode /bin/bash +``` + +Nếu bạn cần quyền truy cập root: + +```bash +docker exec -it opencode-server /bin/bash +``` + +## Các Công cụ Đã Cài đặt + +Image bao gồm sẵn các công cụ này: + +| Công cụ | Mô tả | +| ----------------- | ------------------------------------- | +| `opencode` | OpenCode CLI | +| `bun` | JavaScript runtime và package manager | +| `bunx` | Phiên bản npx của Bun (chạy gói npm) | +| `uv` | Python package manager | +| `git` | Quản lý phiên bản | +| `git-lfs` | Phần mở rộng lưu trữ file lớn cho Git | +| `build-essential` | GCC, make và thư viện build | +| `curl` | HTTP client | +| `wget` | Công cụ tải file | +| `openssh-client` | SSH client và công cụ key | +| `xz-utils` | Công cụ nén | + +### Sử dụng bun + +```bash +# Chạy gói Node.js +docker exec -it opencode-server bunx create-next-app + +# Cài đặt dependencies +docker exec -it opencode-server bun install +``` + +### Sử dụng uv + +```bash +# Cài đặt gói Python +docker exec -it opencode-server uv pip install pandas + +# Chạy script Python +docker exec -it opencode-server uv run script.py +``` + +### Sử dụng git + +```bash +# Clone repository vào workspace +docker exec -it opencode-server git clone https://github.com/user/repo.git /workspace/repo +``` + +## Health Check + +Container bao gồm health check tích hợp xác minh server đang phản hồi: + +```bash +# Kiểm tra health của container +docker inspect --format='{{.State.Health.Status}}' opencode-server +``` + +Endpoint health trả về HTTP 200 khi khỏe mạnh: + +```bash +# Health check thủ công +curl -f http://localhost:3000/health +``` + +Cấu hình health check: + +- Interval: 30 giây +- Timeout: 10 giây +- Start period: 10 giây +- Retries: 3 + +## Ví dụ Docker Compose + +Tạo file `docker-compose.yml`: + +```yaml +services: + opencode: + image: ghcr.io/anomalyco/opencode/server:debian + container_name: opencode-server + restart: unless-stopped + ports: + - "3000:3000" + environment: + - OPENCODE_SERVER_PASSWORD=your_secure_password + - OPENCODE_SERVER_USERNAME=opencode + volumes: + - ./workspace:/workspace + - opencode_config:/home/opencode/.config + - opencode_cache:/home/opencode/.cache + - ~/.ssh:/home/opencode/.ssh:ro + - ~/.gitconfig:/home/opencode/.gitconfig:ro + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000/health"] + interval: 30s + timeout: 10s + retries: 3 + +volumes: + opencode_config: + opencode_cache: +``` + +Khởi động stack: + +```bash +docker-compose up -d +``` + +## Build từ Source + +Để build image server từ source: + +### Clone repository + +```bash +git clone https://github.com/anomalyco/opencode.git +cd opencode +``` + +### Build biến thể Debian + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.debian \ + -t opencode-server:local \ + . +``` + +### Build biến thể Alpine + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.alpine \ + -t opencode-server:alpine-local \ + . +``` + +### Chạy bản build local + +```bash +docker run -d \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=dev_password \ + -v $(pwd)/workspace:/workspace \ + opencode-server:local +``` + +## Xử lý sự cố + +### Server không khởi động + +Kiểm tra logs: + +```bash +docker logs opencode-server +``` + +Các vấn đề phổ biến: + +- Thiếu `OPENCODE_SERVER_PASSWORD` - server từ chối khởi động không có authentication +- Cổng đã được sử dụng - thay đổi ánh xạ cổng host + +### Authentication thất bại + +Đảm bảo mật khẩu khớp chính xác. Server sử dụng HTTP Basic Auth: + +```bash +# Test authentication +curl -u opencode:your_password http://localhost:3000/health +``` + +### Lỗi quyền Workspace + +Đảm bảo thư mục được mount có thể ghi bởi UID 1000: + +```bash +# Sửa quyền sở hữu +sudo chown -R 1000:1000 /path/to/workspace +``` + +### Khởi động chậm + +Lần chạy đầu tiên tải xuống language servers và công cụ. Kiểm tra tiến độ: + +```bash +docker logs -f opencode-server +``` + +### Container không thể truy cập internet + +Kiểm tra cấu hình DNS: + +```bash +docker exec opencode-server ping -c 3 8.8.8.8 +docker exec opencode-server cat /etc/resolv.conf +``` + +### Health check thất bại + +Xác minh server đang thực sự chạy: + +```bash +docker exec opencode-server curl -f http://localhost:3000/health +``` + +### SSH key không hoạt động + +Đảm bảo quyền key đúng trong container: + +```bash +docker exec opencode-server sudo chmod 600 /home/opencode/.ssh/id_rsa +docker exec opencode-server sudo chmod 644 /home/opencode/.ssh/id_rsa.pub +``` diff --git a/docs/docker-server.zh.md b/docs/docker-server.zh.md new file mode 100644 index 000000000000..f7dbfabbfa6e --- /dev/null +++ b/docs/docker-server.zh.md @@ -0,0 +1,359 @@ +# OpenCode 服务器 Docker 文档 + +本指南介绍如何在 Docker 容器中以服务器模式运行 OpenCode。 + +## 简介 + +OpenCode 服务器是 OpenCode 的无头部署版本,作为后台服务运行,可通过 HTTP API 访问。Docker 镜像提供了完整的运行时环境,预装了所有必要的工具,非常适合: + +- 远程开发环境 +- CI/CD 集成 +- 团队共享编码实例 +- 在无 GUI 的服务器上运行 OpenCode + +## 快速开始 + +使用安全密码运行 OpenCode 服务器: + +```bash +docker run -d \ + --name opencode-server \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=your_secure_password \ + -v opencode_workspace:/workspace \ + ghcr.io/anomalyco/opencode/server:debian +``` + +在 `http://localhost:3000` 访问服务器。 + +## 镜像变体 + +提供两个基础镜像变体: + +| 变体 | 基础镜像 | 大小 | 使用场景 | +| -------- | ------------------ | ------ | -------------------- | +| `debian` | Debian Trixie Slim | ~500MB | 推荐给大多数用户 | +| `alpine` | Alpine Edge | ~200MB | 最小化占用,更快拉取 | + +### 拉取特定变体 + +```bash +# Debian(推荐) +docker pull ghcr.io/anomalyco/opencode/server:debian + +# Alpine(最小化) +docker pull ghcr.io/anomalyco/opencode/server:alpine +``` + +## 环境变量 + +| 变量 | 默认值 | 描述 | +| -------------------------- | ----------------------------- | ------------------------------ | +| `OPENCODE_SERVER_PASSWORD` | (无) | **必需。** HTTP Basic 认证密码 | +| `OPENCODE_SERVER_USERNAME` | `opencode` | HTTP Basic 认证用户名 | +| `XDG_CONFIG_HOME` | `/home/opencode/.config` | 配置目录 | +| `XDG_CACHE_HOME` | `/home/opencode/.cache` | 缓存目录 | +| `XDG_DATA_HOME` | `/home/opencode/.local/share` | 数据目录 | + +### 服务器选项(CLI 标志) + +覆盖默认命令时,服务器接受以下额外选项: + +```bash +docker run ... ghcr.io/anomalyco/opencode/server:debian \ + opencode serve --hostname=0.0.0.0 --port=3000 --cors=https://example.com +``` + +| 标志 | 默认值 | 描述 | +| --------------- | ---------------- | -------------------- | +| `--port` | `0`(随机) | 监听端口 | +| `--hostname` | `127.0.0.1` | 绑定主机名 | +| `--mdns` | `false` | 启用 mDNS 服务发现 | +| `--mdns-domain` | `opencode.local` | 自定义 mDNS 域名 | +| `--cors` | `[]` | 额外的 CORS 允许域名 | + +## 卷挂载 + +挂载这些卷以持久化数据并共享资源: + +### 工作区(必需) + +```bash +-v /path/to/workspace:/workspace +``` + +这是 OpenCode 操作项目文件的位置。将您的代码仓库挂载到这里。 + +### SSH 密钥 + +```bash +-v ~/.ssh:/home/opencode/.ssh:ro +``` + +用于克隆私有仓库的 SSH 密钥只读访问权限。 + +### Git 配置 + +```bash +-v ~/.gitconfig:/home/opencode/.gitconfig:ro +``` + +从主机继承 Git 用户身份。 + +### OpenCode 配置 + +```bash +-v ~/.config/opencode:/home/opencode/.config/opencode +``` + +在容器重启之间保持 OpenCode 设置。 + +### 缓存 + +```bash +-v opencode_cache:/home/opencode/.cache +``` + +缓存 npm 包、语言服务器和其他下载的工具。 + +## 端口 + +| 端口 | 协议 | 描述 | +| ------ | ---- | -------------------- | +| `3000` | HTTP | 主服务器 API(默认) | + +可以通过 Docker 的 `-p` 标志重映射端口: + +```bash +-p 8080:3000 # 在 http://localhost:8080 访问服务器 +``` + +## 用户和权限 + +容器以非root用户(`opencode`,UID 1000)运行以确保安全。该用户拥有免密 `sudo` 权限用于管理任务: + +```bash +# 以 opencode 用户执行命令 +docker exec -it opencode-server sudo -u opencode + +# 获取 opencode 用户的 shell +docker exec -it opencode-server sudo -u opencode /bin/bash +``` + +如果需要 root 访问权限: + +```bash +docker exec -it opencode-server /bin/bash +``` + +## 已安装工具 + +镜像预装了以下工具: + +| 工具 | 描述 | +| ----------------- | ---------------------------------- | +| `opencode` | OpenCode CLI | +| `bun` | JavaScript 运行时和包管理器 | +| `bunx` | Bun 的 npx 等效命令(运行 npm 包) | +| `uv` | Python 包管理器 | +| `git` | 版本控制 | +| `git-lfs` | Git 的大文件存储扩展 | +| `build-essential` | GCC、make 和构建库 | +| `curl` | HTTP 客户端 | +| `wget` | 文件下载工具 | +| `openssh-client` | SSH 客户端和密钥工具 | +| `xz-utils` | 压缩工具 | + +### 使用 bun + +```bash +# 运行 Node.js 包 +docker exec -it opencode-server bunx create-next-app + +# 安装依赖 +docker exec -it opencode-server bun install +``` + +### 使用 uv + +```bash +# 安装 Python 包 +docker exec -it opencode-server uv pip install pandas + +# 运行 Python 脚本 +docker exec -it opencode-server uv run script.py +``` + +### 使用 git + +```bash +# 将仓库克隆到工作区 +docker exec -it opencode-server git clone https://github.com/user/repo.git /workspace/repo +``` + +## 健康检查 + +容器内置了健康检查,验证服务器是否正常响应: + +```bash +# 检查容器健康状态 +docker inspect --format='{{.State.Health.Status}}' opencode-server +``` + +健康端点在服务正常时返回 HTTP 200: + +```bash +# 手动健康检查 +curl -f http://localhost:3000/health +``` + +健康检查配置: + +- 间隔:30 秒 +- 超时:10 秒 +- 启动周期:10 秒 +- 重试次数:3 + +## Docker Compose 示例 + +创建 `docker-compose.yml` 文件: + +```yaml +services: + opencode: + image: ghcr.io/anomalyco/opencode/server:debian + container_name: opencode-server + restart: unless-stopped + ports: + - "3000:3000" + environment: + - OPENCODE_SERVER_PASSWORD=your_secure_password + - OPENCODE_SERVER_USERNAME=opencode + volumes: + - ./workspace:/workspace + - opencode_config:/home/opencode/.config + - opencode_cache:/home/opencode/.cache + - ~/.ssh:/home/opencode/.ssh:ro + - ~/.gitconfig:/home/opencode/.gitconfig:ro + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000/health"] + interval: 30s + timeout: 10s + retries: 3 + +volumes: + opencode_config: + opencode_cache: +``` + +启动栈: + +```bash +docker-compose up -d +``` + +## 从源码构建 + +从源码构建服务器镜像: + +### 克隆仓库 + +```bash +git clone https://github.com/anomalyco/opencode.git +cd opencode +``` + +### 构建 Debian 变体 + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.debian \ + -t opencode-server:local \ + . +``` + +### 构建 Alpine 变体 + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.alpine \ + -t opencode-server:alpine-local \ + . +``` + +### 运行本地构建 + +```bash +docker run -d \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=dev_password \ + -v $(pwd)/workspace:/workspace \ + opencode-server:local +``` + +## 故障排除 + +### 服务器无法启动 + +检查日志: + +```bash +docker logs opencode-server +``` + +常见问题: + +- 缺少 `OPENCODE_SERVER_PASSWORD` - 服务器在没有认证的情况下拒绝启动 +- 端口已被占用 - 更改主机端口映射 + +### 认证失败 + +确保密码完全匹配。服务器使用 HTTP Basic Auth: + +```bash +# 测试认证 +curl -u opencode:your_password http://localhost:3000/health +``` + +### 工作区权限错误 + +确保挂载的目录对 UID 1000 可写: + +```bash +# 修复所有权 +sudo chown -R 1000:1000 /path/to/workspace +``` + +### 启动缓慢 + +首次运行会下载语言服务器和工具。查看进度: + +```bash +docker logs -f opencode-server +``` + +### 容器无法访问互联网 + +检查 DNS 配置: + +```bash +docker exec opencode-server ping -c 3 8.8.8.8 +docker exec opencode-server cat /etc/resolv.conf +``` + +### 健康检查失败 + +验证服务器是否实际运行: + +```bash +docker exec opencode-server curl -f http://localhost:3000/health +``` + +### SSH 密钥不工作 + +确保容器内的密钥权限正确: + +```bash +docker exec opencode-server sudo chmod 600 /home/opencode/.ssh/id_rsa +docker exec opencode-server sudo chmod 644 /home/opencode/.ssh/id_rsa.pub +``` diff --git a/docs/docker-server.zht.md b/docs/docker-server.zht.md new file mode 100644 index 000000000000..c64458b8d8e4 --- /dev/null +++ b/docs/docker-server.zht.md @@ -0,0 +1,359 @@ +# OpenCode 伺服器 Docker 文檔 + +本指南說明如何在 Docker 容器中以伺服器模式執行 OpenCode。 + +## 簡介 + +OpenCode 伺服器是 OpenCode 的無頭部署版本,作為背景服務執行,可透過 HTTP API 存取。Docker 映像檔提供了完整的執行環境,預先安裝了所有必要的工具,非常適合: + +- 遠端開發環境 +- CI/CD 整合 +- 團隊共用編碼執行個體 +- 在沒有 GUI 的伺服器上執行 OpenCode + +## 快速開始 + +使用安全密碼執行 OpenCode 伺服器: + +```bash +docker run -d \ + --name opencode-server \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=your_secure_password \ + -v opencode_workspace:/workspace \ + ghcr.io/anomalyco/opencode/server:debian +``` + +在 `http://localhost:3000` 存取伺服器。 + +## 映像檔變體 + +提供兩個基礎映像檔變體: + +| 變體 | 基礎映像檔 | 大小 | 使用場景 | +| -------- | ------------------ | ------ | -------------------- | +| `debian` | Debian Trixie Slim | ~500MB | 推薦給大多數使用者 | +| `alpine` | Alpine Edge | ~200MB | 最小化佔用,更快下載 | + +### 下載特定變體 + +```bash +# Debian(推薦) +docker pull ghcr.io/anomalyco/opencode/server:debian + +# Alpine(最小化) +docker pull ghcr.io/anomalyco/opencode/server:alpine +``` + +## 環境變數 + +| 變數 | 預設值 | 描述 | +| -------------------------- | ----------------------------- | ------------------------------ | +| `OPENCODE_SERVER_PASSWORD` | (無) | **必要。** HTTP Basic 認證密碼 | +| `OPENCODE_SERVER_USERNAME` | `opencode` | HTTP Basic 認證使用者名稱 | +| `XDG_CONFIG_HOME` | `/home/opencode/.config` | 設定目錄 | +| `XDG_CACHE_HOME` | `/home/opencode/.cache` | 快取目錄 | +| `XDG_DATA_HOME` | `/home/opencode/.local/share` | 資料目錄 | + +### 伺服器選項(CLI 旗標) + +覆寫預設命令時,伺服器接受以下額外選項: + +```bash +docker run ... ghcr.io/anomalyco/opencode/server:debian \ + opencode serve --hostname=0.0.0.0 --port=3000 --cors=https://example.com +``` + +| 旗標 | 預設值 | 描述 | +| --------------- | ---------------- | -------------------- | +| `--port` | `0`(隨機) | 監聽連接埠 | +| `--hostname` | `127.0.0.1` | 綁定主機名稱 | +| `--mdns` | `false` | 啟用 mDNS 服務發現 | +| `--mdns-domain` | `opencode.local` | 自訂 mDNS 網域 | +| `--cors` | `[]` | 額外的 CORS 允許網域 | + +## 磁碟區掛載 + +掛載這些磁碟區以持久化資料並共用資源: + +### 工作區(必要) + +```bash +-v /path/to/workspace:/workspace +``` + +這是 OpenCode 操作專案檔案的位置。將您的程式碼儲存庫掛載到這裡。 + +### SSH 金鑰 + +```bash +-v ~/.ssh:/home/opencode/.ssh:ro +``` + +用於複製私人儲存庫的 SSH 金鑰唯讀存取權限。 + +### Git 設定 + +```bash +-v ~/.gitconfig:/home/opencode/.gitconfig:ro +``` + +從主機繼承 Git 使用者身份。 + +### OpenCode 設定 + +```bash +-v ~/.config/opencode:/home/opencode/.config/opencode +``` + +在容器重啟之間保持 OpenCode 設定。 + +### 快取 + +```bash +-v opencode_cache:/home/opencode/.cache +``` + +快取 npm 套件、語言伺服器和其他下載的工具。 + +## 連接埠 + +| 連接埠 | 通訊協定 | 描述 | +| ------ | -------- | -------------------- | +| `3000` | HTTP | 主伺服器 API(預設) | + +可以透過 Docker 的 `-p` 旗標重新對應連接埠: + +```bash +-p 8080:3000 # 在 http://localhost:8080 存取伺服器 +``` + +## 使用者和權限 + +容器以非 root 使用者(`opencode`,UID 1000)執行以確保安全。該使用者擁有免密 `sudo` 權限用於管理任務: + +```bash +# 以 opencode 使用者執行命令 +docker exec -it opencode-server sudo -u opencode + +# 取得 opencode 使用者的 shell +docker exec -it opencode-server sudo -u opencode /bin/bash +``` + +如果需要 root 存取權限: + +```bash +docker exec -it opencode-server /bin/bash +``` + +## 已安裝工具 + +映像檔預先安裝了以下工具: + +| 工具 | 描述 | +| ----------------- | ------------------------------------ | +| `opencode` | OpenCode CLI | +| `bun` | JavaScript 執行環境和套件管理工具 | +| `bunx` | Bun 的 npx 等價命令(執行 npm 套件) | +| `uv` | Python 套件管理工具 | +| `git` | 版本控制 | +| `git-lfs` | Git 的大檔案儲存擴展 | +| `build-essential` | GCC、make 和建構庫 | +| `curl` | HTTP 用戶端 | +| `wget` | 檔案下載工具 | +| `openssh-client` | SSH 用戶端和金鑰工具 | +| `xz-utils` | 壓縮工具 | + +### 使用 bun + +```bash +# 執行 Node.js 套件 +docker exec -it opencode-server bunx create-next-app + +# 安裝相依套件 +docker exec -it opencode-server bun install +``` + +### 使用 uv + +```bash +# 安裝 Python 套件 +docker exec -it opencode-server uv pip install pandas + +# 執行 Python 腳本 +docker exec -it opencode-server uv run script.py +``` + +### 使用 git + +```bash +# 將儲存庫複製到工作區 +docker exec -it opencode-server git clone https://github.com/user/repo.git /workspace/repo +``` + +## 健康檢查 + +容器內建了健康檢查,驗證伺服器是否正常回應: + +```bash +# 檢查容器健康狀態 +docker inspect --format='{{.State.Health.Status}}' opencode-server +``` + +健康端點在服務正常時回傳 HTTP 200: + +```bash +# 手動健康檢查 +curl -f http://localhost:3000/health +``` + +健康檢查設定: + +- 間隔:30 秒 +- 逾時:10 秒 +- 啟動週期:10 秒 +- 重試次數:3 + +## Docker Compose 範例 + +建立 `docker-compose.yml` 檔案: + +```yaml +services: + opencode: + image: ghcr.io/anomalyco/opencode/server:debian + container_name: opencode-server + restart: unless-stopped + ports: + - "3000:3000" + environment: + - OPENCODE_SERVER_PASSWORD=your_secure_password + - OPENCODE_SERVER_USERNAME=opencode + volumes: + - ./workspace:/workspace + - opencode_config:/home/opencode/.config + - opencode_cache:/home/opencode/.cache + - ~/.ssh:/home/opencode/.ssh:ro + - ~/.gitconfig:/home/opencode/.gitconfig:ro + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:3000/health"] + interval: 30s + timeout: 10s + retries: 3 + +volumes: + opencode_config: + opencode_cache: +``` + +啟動堆疊: + +```bash +docker-compose up -d +``` + +## 從原始碼建構 + +從原始碼建構伺服器映像檔: + +### 複製儲存庫 + +```bash +git clone https://github.com/anomalyco/opencode.git +cd opencode +``` + +### 建構 Debian 變體 + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.debian \ + -t opencode-server:local \ + . +``` + +### 建構 Alpine 變體 + +```bash +docker build \ + -f packages/containers/server/docker/Dockerfile.alpine \ + -t opencode-server:alpine-local \ + . +``` + +### 執行本機建構 + +```bash +docker run -d \ + -p 3000:3000 \ + -e OPENCODE_SERVER_PASSWORD=dev_password \ + -v $(pwd)/workspace:/workspace \ + opencode-server:local +``` + +## 疑難排解 + +### 伺服器無法啟動 + +檢查日誌: + +```bash +docker logs opencode-server +``` + +常見問題: + +- 缺少 `OPENCODE_SERVER_PASSWORD` - 伺服器在沒有認證的情況下拒絕啟動 +- 連接埠已被佔用 - 變更主機連接埠對應 + +### 認證失敗 + +確保密碼完全相符。伺服器使用 HTTP Basic Auth: + +```bash +# 測試認證 +curl -u opencode:your_password http://localhost:3000/health +``` + +### 工作區權限錯誤 + +確保掛載的目錄對 UID 1000 可寫入: + +```bash +# 修復所有權 +sudo chown -R 1000:1000 /path/to/workspace +``` + +### 啟動緩慢 + +首次執行會下載語言伺服器和工具。查看進度: + +```bash +docker logs -f opencode-server +``` + +### 容器無法存取網際網路 + +檢查 DNS 設定: + +```bash +docker exec opencode-server ping -c 3 8.8.8.8 +docker exec opencode-server cat /etc/resolv.conf +``` + +### 健康檢查失敗 + +驗證伺服器是否實際執行中: + +```bash +docker exec opencode-server curl -f http://localhost:3000/health +``` + +### SSH 金鑰無法運作 + +確保容器內的金鑰權限正確: + +```bash +docker exec opencode-server sudo chmod 600 /home/opencode/.ssh/id_rsa +docker exec opencode-server sudo chmod 644 /home/opencode/.ssh/id_rsa.pub +``` diff --git a/packages/containers/script/build-server.ts b/packages/containers/script/build-server.ts new file mode 100644 index 000000000000..c051eb13dde6 --- /dev/null +++ b/packages/containers/script/build-server.ts @@ -0,0 +1,56 @@ +#!/usr/bin/env bun + +import { $ } from "bun" +import path from "path" +import { fileURLToPath } from "url" + +const rootDir = fileURLToPath(new URL("../../..", import.meta.url)) +process.chdir(rootDir) + +const reg = process.env.REGISTRY ?? "ghcr.io/anomalyco" +const push = process.argv.includes("--push") || process.env.PUSH === "1" + +const root = path.join(rootDir, "package.json") +const pkg = await Bun.file(root).json() +const manager = pkg.packageManager ?? "" +const bunVersion = manager.startsWith("bun@") ? manager.slice(4) : "" +if (!bunVersion) throw new Error("packageManager must be bun@") + +const variants = ["debian", "alpine"] + +const setup = async () => { + if (!push) return + const list = await $`docker buildx ls`.text() + if (list.includes("opencode-server")) { + await $`docker buildx use opencode-server` + return + } + await $`docker buildx create --name opencode-server --use` +} + +await setup() + +const platform = "linux/amd64,linux/arm64" + +for (const variant of variants) { + const image = `${reg}/opencode:dev-${variant}` + const file = `packages/containers/server/docker/Dockerfile.${variant}` + + if (push) { + console.log(`Building and pushing: ${image}`) + await $`docker buildx build \ + --platform ${platform} \ + -f ${file} \ + -t ${image} \ + --push .` + } else { + console.log(`Building: ${image}`) + await $`docker buildx build \ + --platform ${platform} \ + -f ${file} \ + -t ${image} \ + .` + } + + console.log(`✓ ${image}`) +} diff --git a/packages/containers/server/docker/Dockerfile.alpine b/packages/containers/server/docker/Dockerfile.alpine new file mode 100644 index 000000000000..543f7d644c8d --- /dev/null +++ b/packages/containers/server/docker/Dockerfile.alpine @@ -0,0 +1,127 @@ +# ============================================================================= +# OpenCode Server - Alpine Linux Base +# ============================================================================= +# Multi-stage build for opencode server (headless mode) +# Build: docker build -f packages/containers/server/docker/Dockerfile.alpine -t opencode-server:alpine . +# ============================================================================= + +# ----------------------------------------------------------------------------- +# Stage 1: Builder +# ----------------------------------------------------------------------------- +FROM alpine:edge AS builder + +RUN apk add --no-cache \ + build-base \ + curl \ + git \ + git-lfs \ + xz \ + ca-certificates \ + unzip \ + pkgconfig + +# Install Bun runtime +RUN curl -fsSL https://bun.sh/install | bash +ENV PATH="/root/.bun/bin:$PATH" + +WORKDIR /build + +# Copy package files first for better layer caching +COPY package.json bun.lockb* .npmrc ./ +COPY packages/opencode/package.json packages/opencode/ +COPY packages/opencode/tsconfig.json packages/opencode/ +COPY packages/opencode/src packages/opencode/src +COPY packages/opencode/bin packages/opencode/bin +COPY packages/opencode/migration packages/opencode/migration +COPY packages/script/package.json packages/script/ +COPY packages/util/package.json packages/util/ +COPY packages/sdk/js/package.json packages/sdk/js/ +COPY packages/plugin/package.json packages/plugin/ + +RUN bun install --frozen-lockfile + +# Build opencode binary +RUN bun run --filter opencode build + +# ----------------------------------------------------------------------------- +# Stage 2: Runtime +# ----------------------------------------------------------------------------- +FROM alpine:edge + +ARG OPENCODE_VERSION=dev + +RUN apk add --no-cache \ + build-base \ + ca-certificates \ + curl \ + git \ + git-lfs \ + openssh-client \ + xz \ + unzip \ + sudo \ + wget \ + nodejs \ + npm + +# Copy opencode binary from builder +COPY --from=builder /build/packages/opencode/dist/*/bin/opencode /usr/local/bin/opencode +RUN chmod +x /usr/local/bin/opencode && opencode --version + +# Create opencode user (non-root) +RUN addgroup -g 1000 -S opencode || true && \ + adduser -u 1000 -S -G opencode opencode || true + +# Install uv (Python package manager) +RUN curl -LsSf https://astral.sh/uv/install.sh | sh +ENV PATH="/root/.local/bin:$PATH" + +# Install Bun for root (needed for some operations) +RUN curl -fsSL https://bun.sh/install | bash +ENV PATH="/root/.bun/bin:$PATH" + +# Install devcontainer CLI (VS Code Dev Containers) - enables devcontainer.json support +RUN curl -fsSL https://code.visualstudio.com/sha/download?build=stable&os=cli-alpine-x64 \ + --output /tmp/vscode-cli.tar.gz && \ + tar -xzf /tmp/vscode-cli.tar.gz -C /usr/local/bin && \ + rm /tmp/vscode-cli.tar.gz + +# Create directories with correct ownership +RUN mkdir -p /workspace \ + /home/opencode/.ssh \ + /home/opencode/.gitconfig \ + /home/opencode/.config/opencode \ + /home/opencode/.cache/opencode \ + /home/opencode/.local/share/opencode \ + && chown -R opencode:opencode /home/opencode + +# Configure sudo without password for opencode user +RUN echo 'opencode ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/opencode && \ + chmod 440 /etc/sudoers.d/opencode + +# Copy Bun to user home +COPY --from=builder /root/.bun /home/opencode/.bun +RUN chown -R opencode:opencode /home/opencode/.bun +ENV PATH="/home/opencode/.bun/bin:$PATH" + +# Switch to non-root user +USER opencode +WORKDIR /workspace + +# Environment variables for server +ENV OPENCODE_VERSION=${OPENCODE_VERSION} +ENV OPENCODE_SERVER_PASSWORD=${OPENCODE_SERVER_PASSWORD:-} +ENV OPENCODE_SERVER_USERNAME=${OPENCODE_SERVER_USERNAME:-opencode} +ENV XDG_CONFIG_HOME=/home/opencode/.config +ENV XDG_CACHE_HOME=/home/opencode/.cache +ENV XDG_DATA_HOME=/home/opencode/.local/share + +# Expose default server port +EXPOSE 3000 + +# Health check +HEALTHCHECK --interval=30s --timeout=10s --start-period=10s --retries=3 \ + CMD wget -qO- http://localhost:3000/health || exit 1 + +# Default command - start opencode server +CMD ["opencode", "serve", "--hostname=0.0.0.0", "--port=3000"] diff --git a/packages/containers/server/docker/Dockerfile.debian b/packages/containers/server/docker/Dockerfile.debian new file mode 100644 index 000000000000..c8b83e03a359 --- /dev/null +++ b/packages/containers/server/docker/Dockerfile.debian @@ -0,0 +1,130 @@ +# ============================================================================= +# OpenCode Server - Debian Trixie Base +# ============================================================================= +# Multi-stage build for opencode server (headless mode) +# Build: docker build -f packages/containers/server/docker/Dockerfile.debian -t opencode-server:debian . +# ============================================================================= + +# ----------------------------------------------------------------------------- +# Stage 1: Builder +# ----------------------------------------------------------------------------- +FROM debian:trixie-slim AS builder + +ARG DEBIAN_FRONTEND=noninteractive + +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential \ + curl \ + git \ + git-lfs \ + xz-utils \ + ca-certificates \ + unzip \ + pkg-config + +# Install Bun runtime +RUN curl -fsSL https://bun.sh/install | bash +ENV PATH="/root/.bun/bin:$PATH" + +WORKDIR /build + +# Copy package files first for better layer caching +COPY package.json bun.lockb* .npmrc ./ +COPY packages/opencode/package.json packages/opencode/ +COPY packages/opencode/tsconfig.json packages/opencode/ +COPY packages/opencode/src packages/opencode/src +COPY packages/opencode/bin packages/opencode/bin +COPY packages/opencode/migration packages/opencode/migration +COPY packages/script/package.json packages/script/ +COPY packages/util/package.json packages/util/ +COPY packages/sdk/js/package.json packages/sdk/js/ +COPY packages/plugin/package.json packages/plugin/ + +RUN bun install --frozen-lockfile + +# Build opencode binary +RUN bun run --filter opencode build + +# ----------------------------------------------------------------------------- +# Stage 2: Runtime +# ----------------------------------------------------------------------------- +FROM debian:trixie-slim + +ARG DEBIAN_FRONTEND=noninteractive +ARG OPENCODE_VERSION=dev + +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential \ + ca-certificates \ + curl \ + git \ + git-lfs \ + openssh-client \ + xz-utils \ + unzip \ + sudo \ + wget \ + nodejs \ + npm + +# Copy opencode binary from builder +COPY --from=builder /build/packages/opencode/dist/*/bin/opencode /usr/local/bin/opencode +RUN chmod +x /usr/local/bin/opencode && opencode --version + +# Create opencode user (non-root) +RUN groupadd -g 1000 opencode || true && \ + useradd -r -u 1000 -g opencode -s /bin/bash -m opencode || true + +# Install uv (Python package manager) +RUN curl -LsSf https://astral.sh/uv/install.sh | sh +ENV PATH="/root/.local/bin:$PATH" + +# Install Bun for root (needed for some operations) +RUN curl -fsSL https://bun.sh/install | bash +ENV PATH="/root/.bun/bin:$PATH" + +# Install devcontainer CLI (VS Code Dev Containers) - enables devcontainer.json support +RUN curl -fsSL https://code.visualstudio.com/sha/download?build=stable&os=cli-alpine-x64 \ + --output /tmp/vscode-cli.tar.gz && \ + tar -xzf /tmp/vscode-cli.tar.gz -C /usr/local/bin && \ + rm /tmp/vscode-cli.tar.gz + +# Create directories with correct ownership +RUN mkdir -p /workspace \ + /home/opencode/.ssh \ + /home/opencode/.gitconfig \ + /home/opencode/.config/opencode \ + /home/opencode/.cache/opencode \ + /home/opencode/.local/share/opencode \ + && chown -R opencode:opencode /home/opencode + +# Configure sudo without password for opencode user +RUN echo 'opencode ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/opencode && \ + chmod 440 /etc/sudoers.d/opencode + +# Copy Bun to user home +COPY --from=builder /root/.bun /home/opencode/.bun +RUN chown -R opencode:opencode /home/opencode/.bun +ENV PATH="/home/opencode/.bun/bin:$PATH" + +# Switch to non-root user +USER opencode +WORKDIR /workspace + +# Environment variables for server +ENV OPENCODE_VERSION=${OPENCODE_VERSION} +ENV OPENCODE_SERVER_PASSWORD=${OPENCODE_SERVER_PASSWORD:-} +ENV OPENCODE_SERVER_USERNAME=${OPENCODE_SERVER_USERNAME:-opencode} +ENV XDG_CONFIG_HOME=/home/opencode/.config +ENV XDG_CACHE_HOME=/home/opencode/.cache +ENV XDG_DATA_HOME=/home/opencode/.local/share + +# Expose default server port +EXPOSE 3000 + +# Health check +HEALTHCHECK --interval=30s --timeout=10s --start-period=10s --retries=3 \ + CMD curl -f http://localhost:3000/health || exit 1 + +# Default command - start opencode server +CMD ["opencode", "serve", "--hostname=0.0.0.0", "--port=3000"]