---
title: 'Üzembe helyezés'
url: 'https://wiki.teletypegames.org/hu/infrastructure/deployment'
markdown: 'https://wiki.teletypegames.org/hu/infrastructure/deployment.md'
lang: hu
date: '2026-06-03'
description: 'A hosting- és CI/CD-környezet: verziókezelés, folyamatos integráció és webhosting, Docker Compose-zal összefogva. Komponensek 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-serv…'
taxonomy:
  tag:
    - howto
---

# Üzembe helyezés

> A hosting- és CI/CD-környezet: verziókezelés, folyamatos integráció és webhosting, Docker Compose-zal összefogva.

# Komponensek

| Szolgáltatás | Image | Szerep |
|---|---|---|
| **[Gitea](https://wiki.teletypegames.org/hu/infrastructure/gitea)** | `gitea/gitea:1.27.3` | Saját üzemeltetésű Git-szolgáltatás; 2026-10-23 óta saját stack. |
| **[Woodpecker](https://wiki.teletypegames.org/hu/infrastructure/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. |

# Közös tárterület

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.

# Telepítési munkafolyamat

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](https://wiki.teletypegames.org/hu/engines/warp-engine) oldalt:

```sh
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.

```sh
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.

```sh
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](https://teletypegames.org) portálon.

# Szerver-stackek (ci-deploy)

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](https://git.teletypegames.org/infra/host-config) (`/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](https://wiki.teletypegames.org/hu/infrastructure/ftp-server), [LLM](https://wiki.teletypegames.org/hu/infrastructure/llm), [Teletype BBS](https://wiki.teletypegames.org/hu/services/teletype-bbs), [Impostor BBS](https://wiki.teletypegames.org/hu/services/impostor-bbs), [Alexandria BBS](https://wiki.teletypegames.org/hu/services/alexandria-bbs), [Feedia BBS](https://wiki.teletypegames.org/hu/services/feedia-bbs), [BBS Web](https://wiki.teletypegames.org/hu/services/bbsweb), [Statusbot](https://wiki.teletypegames.org/hu/services/statusbot), [Updater](https://wiki.teletypegames.org/hu/services/updater), a [TTGWIKI](https://wiki.teletypegames.org/hu/dos/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](https://wiki.teletypegames.org/hu/infrastructure/matomo), [ResourceSpace](https://wiki.teletypegames.org/hu/infrastructure/resourcespace); a [wiki](https://wiki.teletypegames.org/hu/services/wiki-site) (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](https://wiki.teletypegames.org/hu/services/public-site) |
| `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](https://wiki.teletypegames.org/hu/engines/warp-engine) 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:

- **A deploy cseréli a fájlokat, nem szerkeszti őket.** Egy konténerbe mountolt egyetlen fájl a deploy után is a régit mutatja, a `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.
- **A titkok a szerveren maradnak** (`.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](https://wiki.teletypegames.org/hu/infrastructure/gitea) és a [Woodpecker](https://wiki.teletypegames.org/hu/infrastructure/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](https://wiki.teletypegames.org/hu/infrastructure/vps-assistant) jegyzeteiben van (szerverdokumentáció, 9.20).

'; var prevLevel = 2; for (var i = 0; i < headings.length; i++) { var h = headings\[i\]; var text = h.textContent.trim(); var slug = text.toLowerCase() .replace(/\[áàâä\]/g,'a').replace(/\[éèêë\]/g,'e').replace(/\[íìîï\]/g,'i') .replace(/\[óòôöő\]/g,'o').replace(/\[úùûüű\]/g,'u') .replace(/\[^a-z0-9\]+/g, '-').replace(/^-|-$/g, ''); if (!slug) slug = 'heading-' + i; if (used\[slug\]) { slug += '-' + i; } used\[slug\] = true; h.id = slug; var level = parseInt(h.tagName.charAt(1)); var cls = level > 2 ? ' class="toc-child"' : ''; html += '- [' + text + '](#'%20+%20slug%20+%20')
'; } html += '
'; toc.innerHTML = html; // Scroll-spy: highlight current heading var links = toc.querySelectorAll('a'); var ids = \[\]; for (var j = 0; j < links.length; j++) ids.push(links\[j\].getAttribute('href').slice(1)); function updateActive() { var current = ''; for (var k = 0; k < ids.length; k++) { var el = document.getElementById(ids\[k\]); if (el && el.getBoundingClientRect().top <= 80) current = ids\[k\]; } for (var m = 0; m < links.length; m++) { links\[m\].parentNode.classList.toggle('active', links\[m\].getAttribute('href') === '#' + current); } } window.addEventListener('scroll', updateActive, { passive: true }); updateActive(); })();

---

## Navigation

- Parent: [Infrastruktúra](https://wiki.teletypegames.org/hu/infrastructure.md)
- Previous: [Mentés](https://wiki.teletypegames.org/hu/infrastructure/backup.md)
- Next: [FTP-szerver](https://wiki.teletypegames.org/hu/infrastructure/ftp-server.md)
