From 3bf0a513f959858ea98e8c3b9a83e0d0829e93c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Murat=20=C3=96ZDEM=C4=B0R?= Date: Thu, 14 May 2026 16:13:03 +0300 Subject: [PATCH] docs(setup): sync 01-05 documentation with actual terraform/ansible/workflow MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 01: Add WireGuard 51820/udp to public ingress table; add 9000/tcp (APISIX Dashboard) to admin CIDR row in test private rules - 02: Fix admin_ssh_public_key_path (id_rsa.pub, not id_ed25519.pub); add WireGuard 51820/udp to DB firewall table; clarify 9000/9180 port descriptions (app subnet access + SWAG proxy) - 03: Update file structure with new roles (db_stack, wireguard, act_runner) and playbooks (test-app/db-post-stack.yml); add floating IP systemd service to base role description; clarify node labels - 04: Clarify two-phase deployment (Ansible prepares dirs/config, Gitea CI/CD deploys stack); add WireGuard setup info - 05: Add system user column to runner table; fix runner name in acceptance criteria (iklim-test-app → test-runner) --- setup/01-private-network-port-matrisi.md | 7 ++++--- setup/02-test-terraform-iaac.md | 13 +++++++------ setup/03-test-ansible-bootstrap.md | 16 ++++++++++++++-- setup/04-test-db-docker-kurulum.md | 13 ++++++++----- setup/05-test-runner-ve-deploy-onkosullari.md | 8 ++++---- 5 files changed, 37 insertions(+), 20 deletions(-) diff --git a/setup/01-private-network-port-matrisi.md b/setup/01-private-network-port-matrisi.md index d222ae9..db6d50c 100644 --- a/setup/01-private-network-port-matrisi.md +++ b/setup/01-private-network-port-matrisi.md @@ -27,8 +27,9 @@ Tum ortamlar icin public ingress: | Port | Protocol | Kaynak | Hedef | Zorunluluk | | --- | --- | --- | --- | --- | | `22` | TCP | Admin IP/CIDR | Tum node'lar | SSH yonetim | -| `80` | TCP | Internet | Gateway entrypoint | HTTP / ACME redirect | -| `443` | TCP | Internet | Gateway entrypoint | HTTPS | +| `80` | TCP | Internet | `iklim-app-01` (gateway) | HTTP / ACME redirect | +| `443` | TCP | Internet | `iklim-app-01` (gateway) | HTTPS | +| `51820` | UDP | `0.0.0.0/0`, `::/0` | `iklim-db-01` (DB node) | WireGuard VPN — DB node yonetim erisimi | Public olarak acilmayacak kritik portlar: @@ -115,7 +116,7 @@ Test ortaminda minimum: | `10.10.10.0/24` | `10.10.10.0/24` | `2377/tcp`, `7946/tcp`, `7946/udp`, `4789/udp` | | `10.10.10.0/24` | `10.10.20.0/24` | `5432/tcp`, `27017/tcp` | | `10.10.10.0/24` | `10.10.10.0/24` | `8200/tcp`, `6379/tcp`, `5672/tcp`, `61613/tcp`, `15674/tcp` | -| Admin CIDR veya VPN | `10.10.10.0/24` | `15672/tcp`, `9180/tcp`, `9090/tcp`, `3000/tcp` | +| Admin CIDR veya VPN | `10.10.10.0/24` | `9000/tcp`, `15672/tcp`, `9180/tcp`, `9090/tcp`, `3000/tcp` | Testte DB node tek oldugu icin DB subnet icindeki PostgreSQL/MongoDB replication portlari aktif kullanilmayabilir. diff --git a/setup/02-test-terraform-iaac.md b/setup/02-test-terraform-iaac.md index 11f8583..5c4ad30 100644 --- a/setup/02-test-terraform-iaac.md +++ b/setup/02-test-terraform-iaac.md @@ -54,7 +54,7 @@ location = "fsn1" image = "rocky-10" server_type_app = "cpx42" server_type_db = "cpx42" -admin_ssh_public_key_path = "~/.ssh/id_ed25519.pub" +admin_ssh_public_key_path = "~/.ssh/id_rsa.pub" admin_allowed_cidrs = ["X.X.X.X/32"] ``` @@ -110,11 +110,11 @@ App subnet kaynakli (iklim-app-01): | `5672/tcp` | RabbitMQ AMQP | App subnet icinden | | `61613/tcp` | RabbitMQ STOMP | App subnet icinden | | `15674/tcp` | RabbitMQ Web STOMP | App subnet icinden | -| `15672/tcp` | RabbitMQ Management | SWAG arkasinda `443` — IP kisitli | -| `9000/tcp` | APISIX Dashboard | SWAG arkasinda `443` — IP kisitli | -| `9180/tcp` | APISIX Admin API | Docker overlay icinden sadece Dashboard erisir | -| `9090/tcp` | Prometheus | SWAG arkasinda `443` — IP kisitli | -| `3000/tcp` | Grafana | SWAG arkasinda `443` — IP kisitli | +| `15672/tcp` | RabbitMQ Management | App subnet icinden; dis erisim SWAG `443` uzerinden — IP kisitli | +| `9000/tcp` | APISIX Dashboard | App subnet icinden; dis erisim SWAG `443` uzerinden — IP kisitli | +| `9180/tcp` | APISIX Admin API | App subnet icinden (Docker overlay dahil) | +| `9090/tcp` | Prometheus | App subnet icinden; dis erisim SWAG `443` uzerinden — IP kisitli | +| `3000/tcp` | Grafana | App subnet icinden; dis erisim SWAG `443` uzerinden — IP kisitli | DB subnet kaynakli (`iklim-db-01` Swarm'a worker olarak katildigi icin): @@ -129,6 +129,7 @@ DB subnet kaynakli (`iklim-db-01` Swarm'a worker olarak katildigi icin): | Port | Servis | Kaynak | | --- | --- | --- | | `22/tcp` | SSH | `admin_allowed_cidrs` | +| `51820/udp` | WireGuard VPN | `0.0.0.0/0`, `::/0` — kriptografik anahtar ile kimlik dogrulama | | `5432/tcp` | PostgreSQL | `10.10.10.0/24` (app subnet) | | `27017/tcp` | MongoDB | `10.10.10.0/24` (app subnet) | | `2377/tcp` | Docker Swarm control plane | `10.10.10.0/24` (app subnet) | diff --git a/setup/03-test-ansible-bootstrap.md b/setup/03-test-ansible-bootstrap.md index 448cfb4..b1e7e21 100644 --- a/setup/03-test-ansible-bootstrap.md +++ b/setup/03-test-ansible-bootstrap.md @@ -112,7 +112,15 @@ ansible/ all/ vars.yml vault.yml + host_vars/ + iklim-app-01/ + vars.yml # floating IP gibi host'a ozel degiskenler + vault.yml + iklim-db-01/ + vault.yml test-bootstrap.yml + test-app-post-stack.yml # act_runner kurulumu + test-db-post-stack.yml # db_stack + wireguard kurulumu roles/ base/ hardening/ @@ -121,6 +129,9 @@ ansible/ node_dirs/ storagebox/ storagebox_ssh_key/ + db_stack/ # DB dizin ve konfigürasyon hazırlığı + wireguard/ # WireGuard VPN servisi (DB node) + act_runner/ # Gitea act_runner kurulumu (app node) ``` ## Base Role @@ -151,6 +162,7 @@ Tüm test node'larına uygulanır: - hostname ayarı - klavye düzeni: `trq` (Türkçe Q) - sistem reboot gerekiyorsa kontrollü reboot +- **Hetzner Floating IP systemd servisi** (`hetzner-floating-ip`): `host_vars` içinde `hetzner_floating_ip` tanımlıysa, IP adresi `eth0`'a eklenir ve reboot'ta otomatik geri yüklenir (`ip addr replace`) ## Security Hardening Role @@ -252,8 +264,8 @@ Docker convenience script kullanılmayacak. Production benzeri test ortamı içi - driver: `overlay` - attachable: `true` - Node etiketleri: - - `iklim-app-01` -> `type=service` - - `iklim-db-01` -> `role=db` + - `iklim-app-01`: `type=service` — tüm infra ve uygulama servisleri bu node'a deploy olur + - `iklim-db-01`: `role=db` — PostgreSQL ve MongoDB servisleri bu node'a deploy olur - `iklim-app-01` üzerinde hem manager hem worker (Active) görevini sürdürür. diff --git a/setup/04-test-db-docker-kurulum.md b/setup/04-test-db-docker-kurulum.md index 1cebaa3..e9718fc 100644 --- a/setup/04-test-db-docker-kurulum.md +++ b/setup/04-test-db-docker-kurulum.md @@ -4,7 +4,11 @@ Bu aşamanın amacı `iklim-db-01` node'unu Swarm'a worker olarak eklemek ve Pos ## Mimari Karar -Yol haritasında DB'lerin "manuel" kurulacağı belirtilmiştir. Test ortamında bu "manuel" süreç, DB'lerin işletim sistemine doğrudan kurulması yerine, **Swarm Worker** üzerinde Docker konteynerleri olarak ayağa kaldırılması şeklinde uygulanacaktır. Kurulum **Ansible** ile otomatize edilmiştir (`test-db-post-stack.yml`). +Yol haritasında DB'lerin "manuel" kurulacağı belirtilmiştir. Test ortamında bu "manuel" süreç, DB'lerin işletim sistemine doğrudan kurulması yerine, **Swarm Worker** üzerinde Docker konteynerleri olarak ayağa kaldırılması şeklinde uygulanacaktır. + +Kurulum **iki aşamalıdır:** +1. **Hazırlık (Ansible):** `test-db-post-stack.yml` playbook'u DB dizinlerini, `mongod.conf` konfigürasyonunu ve WireGuard VPN servisini kurar. +2. **Deploy (Gitea CI/CD):** `deploy-test.yml` workflow'u `docker-stack-infra.yml` üzerinden PostgreSQL ve MongoDB servislerini Swarm'a deploy eder. **Neden?** 1. **Yönetim Kolaylığı:** Docker ile versiyon geçişleri ve konfigürasyon yönetimi çok daha hızlıdır. @@ -58,13 +62,12 @@ ansible-playbook -i inventory/generated/test.yml test-db-post-stack.yml --ask-va **Playbook ne yapar?** -`iklim-db-01` üzerinde: +`iklim-db-01` üzerinde (`db_stack` ve `wireguard` rolleri): - `/opt/iklimco/db/mongodb/config/` dizinini oluşturur - `mongod.conf` dosyasını yerleştirir +- WireGuard VPN sunucusunu kurar ve yapılandırır (`51820/udp`) -`iklim-app-01` üzerinde: -- `/opt/iklimco/stacks/db.yml` stack dosyasını oluşturur (şifreler vault'tan enjekte edilir) -- `docker stack deploy` ile PostgreSQL ve MongoDB servislerini başlatır +> DB servislerinin (PostgreSQL, MongoDB) Swarm'a deploy edilmesi Ansible'ın değil, Gitea CI/CD workflow'unun (`deploy-test.yml`) sorumluluğundadır. Bu workflow `docker-stack-infra.yml` aracılığıyla tüm servisleri tek seferde deploy eder. ## 4. Volume ve Veri Yapısı diff --git a/setup/05-test-runner-ve-deploy-onkosullari.md b/setup/05-test-runner-ve-deploy-onkosullari.md index 4cc9ce4..9fd7e84 100644 --- a/setup/05-test-runner-ve-deploy-onkosullari.md +++ b/setup/05-test-runner-ve-deploy-onkosullari.md @@ -6,9 +6,9 @@ Bu aşamanın amacı test ortamında Gitea Actions runner'ı (`act_runner`) syst Test ortamında maliyet ve basitlik için tek runner kullanılır: -| Host | Servis Adı | Etiketler | -| --- | --- | --- | -| `iklim-app-01` | `gitea-act-runner` | `ubuntu-latest`, `ubuntu-22.04`, `ubuntu-20.04`, `test-runner` | +| Host | Servis Adı | Sistem Kullanıcısı | Etiketler | +| --- | --- | --- | --- | +| `iklim-app-01` | `gitea-act-runner` | `gitea-runner` | `ubuntu-latest`, `ubuntu-22.04`, `ubuntu-20.04`, `test-runner` | ## 1. Runner Kullanıcısı ve Yetkiler @@ -112,7 +112,7 @@ bash ops/push-harbor-custom-images.sh ## Kabul Kriterleri -1. Gitea Runners sayfasında `iklim-test-app` runner'ı **Idle** (yeşil) görünür. +1. Gitea Runners sayfasında `test-runner` etiketli runner **Idle** (yeşil) görünür. 2. `runs-on: test-runner` kullanan bir workflow başarıyla tetiklenir. 3. Job container'ı Docker daemon'a ve `iklimco-net` overlay network'üne erişebilir. 4. `8200/tcp` (Vault) portu public internete kapalıdır.