A hosting- és CI/CD-környezet: verziókezelés, folyamatos integráció és webhosting, Docker Compose-zal összefogva.
| Szolgáltatás | Image | Szerep |
|---|---|---|
| Gitea | gitea/gitea:1.27.3 |
Saját üzemeltetésű Git-szolgáltatás; 2026-10-23 óta saját stack. |
| Woodpecker Server | woodpeckerci/woodpecker-server:v3.19.0 |
CI/CD-szerver, Gitea-integrációval; 2026-10-23 óta saját stack. |
| Woodpecker Agent | woodpeckerci/woodpecker-agent:v3.19.0 |
A Docker socketen át konténerekben futtatja a pipeline lépéseit, egyszerre legfeljebb 3 workflow-t. |
| MySQL | mysql:8 |
A softwares adatbázis: szoftver-metaadatok és kiadások. |
| API | helyi build | Rails 8 alkalmazás: katalógus REST API, fájlletöltés, ActiveAdmin, /build/* végpontok. A teletypegames.org /api, /file, /build és /admin útvonalai ide vannak irányítva. |
| Frontend | helyi build | A Vue 3 / Vite játékportál. |
Az artifactok HTTP-n érkeznek: a POST /build/upload az API artifact-könyvtárába ír — a hoszton ./data/softwares, a konténerben /softwares néven csatolva (FILE_CONTAINER_PATH). Az updater és a /file/* statikus kiszolgálás ugyanezt a könyvtárat olvassa.
Egy játékrepó .woodpecker.yaml fájlja egyetlen soros jelölő (platform: <platform>, illetve name:, ha a szoftvernév eltér a repó nevétől). A teljes pipeline az update szerver Woodpecker-konfigurációs kiterjesztéséből jön — lásd a WarpEngine oldalt:
curl "https://teletypegames.org/build/config?platform=<platform>"
A repóhoz kell még egy metadata.json és az application_token Woodpecker-secret. A build után a pipeline két lépésben publikál.
1. Feltöltés — fájlonként egy multipart curl-kérés. A fájlneveknek tartalmazniuk kell a <név>-<verzió> előtagot.
curl -X POST -H "X-Update-Secret: ${UPDATE_SECRET}" -F "file=@<name>-<version>.zip" \
"${UPDATE_SERVER}/build/upload?name=...&version=..."
2. Publikálás — regisztrálja az új verziót.
curl -X POST -H "X-Update-Secret: ${UPDATE_SECRET}" \
"${UPDATE_SERVER}/build/publish?platform=...&name=...&version=..."
Az UPDATE_SECRET egy WarpEngine::ApplicationToken az update + upload jogosultságokkal — tulajdonosonként külön, opcionálisan lejáró, az adminban létrehozva.
Publikálás után a szoftver és a kiadásai automatikusan megjelennek a teletypegames.org portálon.
A vps.teletype.hu szolgáltatásai is Woodpeckerből települnek, de a pipeline nem kap hoszt-volume-ot vagy Docker socketet. A deploy lépés csak a repó saját kulcsával (deploy_ssh_key secret) csatlakozik a deploy@vps.teletype.hu-hoz. A szerveren ez a kulcs egyetlen fix parancshoz van kötve, a ci-deploy <cél>-hoz, és hogy mi történik, azt a cél konfigja mondja meg a host-configban (/etc/ci-deploy/<cél>.conf). A hívó semmit nem paraméterezhet.
| Céltípus | Mit csinál a szerver | Kik használják |
|---|---|---|
compose-git |
maga klónozza a mastert a Giteáról, a policyval ellenőrzi a compose.yaml-t, a felsorolt útvonalakat a stackbe másolja, docker compose up -d --build |
nyilvános repók: FTP-szerver, LLM, Teletype BBS, Impostor BBS, Alexandria BBS, Feedia BBS, BBS Web, Statusbot, Updater, a TTGWIKI exportere |
compose-checkout |
a szerver saját git checkoutját fast-forwardolja a Giteáról (read-only deploy kulccsal), policy-ellenőrzés, docker compose up -d --build |
privát repók: Redmine, Matomo, ResourceSpace; a wiki (ott a wiki-fetcher szinkronizál) |
compose-services |
egy git checkoutnak csak a megnevezett szolgáltatásait építi és cseréli, migrációt futtat, egészség-ellenőrzés | teletypegames.org |
git-publish |
statikus tartalom | prezentáció |
A DOS-store-nak (az FTP-szerver APPS mappájának) a WarpEngine 1.7 óta nincs deploy-célja: a WarpEngine DOS-polca, minden publikáláskor a katalógusból épül újra.
A policy (ci-deploy-compose-policy) elutasítja a privileged módot, az extra capabilityket, a hoszt-névtereket, az eszközöket, a Docker socketet, a stacken kívüli bind mountokat (kivéve a cél által engedett útvonalakat, pl. a Matomo csak olvasható /var/log/nginx-ét) és a cél által fel nem sorolt publikus portokat. Egy master-push tehát megváltoztatja a stack viselkedését, de root jogot nem ad.
Két dolog, amire egy stack megírásakor figyelni kell:
compose-git másolási listájában szereplő mappa pedig egészében cserélődik. Az ilyen fájlokat süsd az image-be, vagy a mappájukat mountold. Ahol a mountnak maradnia kell (pl. egy image VOLUME-ja alatt), ott a fájlok másolata is kerüljön az image-be, hogy a változásuk újraépítse, és a konténer újra létrejöjjön..env, db.env); a pipeline docker compose config ellenőrzése álértékkel fut.Szándékosan kézzel telepített stackek: a Gitea és a Woodpecker (a CI nem telepítheti saját magát), az Authentik (minden egyszeri bejelentkezés rajta múlik) és az observability stack (hoszt-szintű mountokat igényel). Új cél felvételének menete a VPS-asszisztens jegyzeteiben van (szerverdokumentáció, 9.20).