diff --git a/docs/SERVER.md b/docs/SERVER.md index 04c6f4f..d0e992a 100644 --- a/docs/SERVER.md +++ b/docs/SERVER.md @@ -39,10 +39,15 @@ Klucze API OVH: przechowywane w `/srv/infra/stacks/traefik/.env` (poza repo). | Subdomena | Usługa | Publiczna? | Uwagi | |---|---|---|---| -| `git.dfkk.cloud` | Gitea | tak | rejestracja wyłączona | +| `git.dfkk.cloud` | Gitea | tak | rejestracja wyłączona od startu (`DISABLE_REGISTRATION=true`), zweryfikowana | | `status.dfkk.cloud` | Uptime Kuma | tak | za basic auth | | `traefik.dfkk.cloud` | Traefik dashboard | nie | tylko przez tunel SSH | +**Uwaga:** w strefie DNS znaleziono rekordy `n8n.dfkk.cloud`, `portainer.dfkk.cloud`, +`code.dfkk.cloud`, `biznesai.dfkk.cloud` — pozostałość po wcześniejszych eksperymentach, +nic za nimi nie stoi. Do posprzątania przy okazji (usunięcie rekordów w panelu OVH, +runbook `30-usuwanie.md`), nie pilne. + --- ## 3. Użytkownicy systemowi @@ -86,7 +91,7 @@ Pamiętaj: opublikowany port kontenera omija ufw — patrz `CLAUDE.md`, sekcja 3 | Stack | Ścieżka | Status | Opis | |---|---|---|---| | Traefik | `/srv/infra/stacks/traefik` | **działa** (od 2026-08-20) | reverse proxy, TLS DNS-01 przez OVH (`ovh-ca`), image `traefik:v3.7.11`, dashboard tylko przez tunel SSH (`127.0.0.1:8080`) | -| Gitea | `/srv/infra/stacks/gitea` | _(planowany)_ | repozytoria kodu, mirror na GitHub | +| Gitea | `/srv/infra/stacks/gitea` | **działa** (od 2026-08-20) | `gitea/gitea:1.27.2` + `postgres:18.6`, dane w `/srv/data/gitea/{gitea,postgres}`, mirror na GitHub — **do zrobienia** | | Monitoring | `/srv/infra/stacks/monitoring` | _(planowany)_ | Uptime Kuma, alerty na maila | --- @@ -128,6 +133,7 @@ odtworzyć, co się działo — nie o pełny changelog. | Data | Co się zmieniło | Kto | |---|---|---| +| 2026-08-20 | Krok 13 bootstrapu (część 2/3 — Gitea): stack `gitea/gitea:1.27.2` + `postgres:18.6` uruchomiony pod `git.dfkk.cloud`, rejestracja wyłączona od startu, konto admina utworzone przez Kacpra w kreatorze instalacji. Napotkano i naprawiono: postgres 18+ wymaga mountu na `/var/lib/postgresql` (nie `/var/lib/postgresql/data`). Dodano rekord DNS wildcard `*.dfkk.cloud → 54.38.159.156`. Zweryfikowane: HTTPS 200, certyfikat Let's Encrypt ważny, rejestracja faktycznie zablokowana, port SSH kontenera nieopublikowany na hosta | Claude + Kacper | | 2026-08-20 | Krok 13 bootstrapu (część 1/3 — Traefik): stack `traefik:v3.7.11` uruchomiony, DNS-01 przez OVH (endpoint `ovh-ca`), klucze API w `.env` (poza repo, `chmod 600`), dashboard na `127.0.0.1:8080` (tylko tunel SSH). Zweryfikowane: redirect 80→443, dashboard odpowiada lokalnie, logi czyste. Certyfikat wildcard wystawi się przy podpięciu pierwszej usługi (Gitea) | Claude + Kacper | | 2026-08-20 | Krok 11 bootstrapu: snapshot OVH zrobiony — czysty, utwardzony system przed postawieniem usług | Kacper | | 2026-08-20 | Krok 10 bootstrapu: `/srv/apps`, `/srv/data` utworzone (`/srv/infra` już istniało), właściciel `ubuntu:ubuntu` | Claude | diff --git a/stacks/gitea/.env.example b/stacks/gitea/.env.example new file mode 100644 index 0000000..28d506e --- /dev/null +++ b/stacks/gitea/.env.example @@ -0,0 +1,3 @@ +# Hasło do bazy danych Gitei (postgres) +# Generuj: openssl rand -base64 32 +GITEA_DB_PASSWORD= diff --git a/stacks/gitea/compose.yaml b/stacks/gitea/compose.yaml new file mode 100644 index 0000000..aa3624c --- /dev/null +++ b/stacks/gitea/compose.yaml @@ -0,0 +1,55 @@ +services: + gitea: + image: gitea/gitea:1.27.2 + container_name: gitea + restart: unless-stopped + environment: + - USER_UID=1000 + - USER_GID=1000 + - GITEA__database__DB_TYPE=postgres + - GITEA__database__HOST=gitea-db:5432 + - GITEA__database__NAME=gitea + - GITEA__database__USER=gitea + - GITEA__database__PASSWD=${GITEA_DB_PASSWORD} + - GITEA__server__DOMAIN=git.dfkk.cloud + - GITEA__server__ROOT_URL=https://git.dfkk.cloud/ + - GITEA__server__HTTP_PORT=3000 + # Wewnątrz obrazu działa systemowy openssh-server (s6), niezależny od + # wbudowanego SSH Gitei — GITEA__server__DISABLE_SSH go nie wyłącza. + # Nieszkodliwe: port 22 kontenera nie jest publikowany na hosta (brak + # "ports:" w tym serwisie), więc jest nieosiągalny z zewnątrz. Realne + # bezpieczeństwo daje brak publikacji portu, nie ustawienie w app.ini. + - GITEA__service__DISABLE_REGISTRATION=true + - GITEA__service__REQUIRE_SIGNIN_VIEW=false + volumes: + - /srv/data/gitea/gitea:/data + networks: + - edge + - gitea-internal + labels: + - traefik.enable=true + - traefik.http.routers.gitea.rule=Host(`git.dfkk.cloud`) + - traefik.http.routers.gitea.entrypoints=websecure + - traefik.http.routers.gitea.tls.certresolver=ovh + - traefik.http.services.gitea.loadbalancer.server.port=3000 + depends_on: + - gitea-db + + gitea-db: + image: postgres:18.6 + container_name: gitea-db + restart: unless-stopped + environment: + - POSTGRES_USER=gitea + - POSTGRES_PASSWORD=${GITEA_DB_PASSWORD} + - POSTGRES_DB=gitea + volumes: + - /srv/data/gitea/postgres:/var/lib/postgresql # postgres 18+: mount na /var/lib/postgresql, nie /data + networks: + - gitea-internal # bez edge — baza niewidoczna z zewnątrz + +networks: + edge: + external: true + gitea-internal: + name: gitea-internal