docs(setup): sync 01-05 documentation with actual terraform/ansible/workflow
- 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)
This commit is contained in:
parent
39ffd4a33b
commit
3bf0a513f9
@ -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.
|
||||
|
||||
|
||||
@ -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) |
|
||||
|
||||
@ -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.
|
||||
|
||||
|
||||
|
||||
@ -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ı
|
||||
|
||||
|
||||
@ -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.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user