Environment_Infrastructure/setup/05-test-runner-ve-deploy-onkosullari.md
Murat ÖZDEMİR b115a4cbdf Implement Hetzner sizing report recommendations and detailed DB setups
- Add `hetzner-sizing-report.md` defining data-driven server type recommendations for test and prod environments.
- Update Terraform configurations to align with the recommended `CPX` server types and refine firewall rules for Docker Swarm and database interactions.
- Introduce comprehensive documentation and stack files for:
    - Single-node PostgreSQL/MongoDB deployment on a test DB worker node.
    - High-availability 3-node MongoDB replica set and Patroni+etcd PostgreSQL cluster for production.
- Enhance Ansible bootstrap roles with SELinux disabling, fail2ban configuration, and StorageBox SSH key management for CI/CD.
- Reorganize and rename setup documentation files for improved structure and clarity.
2026-05-11 14:54:09 +03:00

4.9 KiB

03 - Test Runner ve Deploy On Kosullari

Bu asamanin amaci test ortaminda Gitea Actions runner'i systemd servisi olarak kurmak ve mevcut test CI/CD pipeline'larinin calisabilecegi host on kosullarini hazirlamaktir.

Runner Yerlesimi

Test ortaminda tek runner yeterlidir:

Host Runner
iklim-app-01 act_runner systemd servisi

Runner Docker container olarak calistirilmayacak. /var/run/docker.sock bir runner container'ina mount edilmeyecek.

Neden Systemd Runner

Mevcut CI/CD akisinda Gitea job'lari gerekli hazirliklari kendi icinde yapip deploy komutlarini calistiriyor. Runner'in Docker container olmasi, Docker socket mount edilmesini gerektirir ve bu model ekstra yetki riski uretir. Systemd runner modelinde socket mount yoktur; ancak runner host uzerinde Docker kullanacagi icin runner kullanicisinin Docker erisimi yine yuksek yetki kabul edilir.

Bu nedenle:

  • Runner sadece guvenilir Gitea instance/repo icin kullanilir.
  • Runner token Ansible Vault veya CI secret olarak saklanir.
  • Runner config ve token repo'ya commit edilmez.

Runner Kullanicisi

Ansible gitea_runner role'u:

  • gitea-runner sistem kullanicisi olusturur.
  • Kullanici shell'i ihtiyaca gore /bin/bash olabilir.
  • Kullanici Docker kullanacaksa docker grubuna eklenir.
  • Home dizini: /var/lib/gitea-runner
  • Config dizini: /etc/gitea-act-runner

Docker group root seviyesine yakin yetki verdigi icin bu karar bilincli kabul edilir.

Runner Binary Kurulumu

Kurulum adimlari:

  1. act_runner Linux amd64 binary indirilir.
  2. /usr/local/bin/act_runner olarak yerlestirilir.
  3. Executable permission verilir.
  4. Config uretilir veya template ile yazilir.
  5. Runner register edilir.
  6. Systemd unit enabled + started edilir.

Runner Label PolitikasI

Test runner label'lari:

test-runner
iklim-app-01
ubuntu-24.04
docker
swarm-manager

Mevcut workflow'larda runs-on degeri test icin bu label'lardan biriyle uyumlu hale getirilmelidir. Eski ubuntu-latest kullanimi self-hosted Gitea runner eslesmesi icin yeterli olmayabilir; bu durum Gitea Actions label konfigurasyonuna gore netlestirilmelidir.

Deploy On Kosullari

Test deploy pipeline'lari icin iklim-app-01 uzerinde bulunmasi gerekenler:

  • Docker Engine
  • Docker Compose plugin
  • Git
  • curl
  • jq
  • gettext/envsubst
  • tree
  • ssh/scp client
  • Harbor registry erisimi
  • StorageBox erisimi
  • Gitea reposuna erisim
  • Swarm manager yetkisi
  • iklimco-net overlay network

CI/CD DB altyapisini kurmayacak. Test DB node hazir olacak; DB yazilimi ve cluster/manual setup ayridir.

Deploy Lock Notu

Test ortaminda tek runner oldugu icin runner'lar arasi deploy yarismasi beklenmez. Yine de ayni branch'e arka arkaya push edilmesi veya manuel yeniden calistirma gibi durumlarda ayni servis deploy'u ust uste binebilir.

Test icin lock zorunlu degildir; ancak prod ile ayni aliskanligi kazanmak istenirse StorageBox uzerinde su path kullanilabilir:

test/locks/test-deploy.lock
test/locks/services/<service-name>.lock

Lock manuel olusturulmaz. Workflow basinda atomik mkdir, bitiste rmdir kullanilir.

Secret Gereksinimleri

Runner kurulumu ve pipeline calismasi icin secret'lar:

  • Gitea runner registration token
  • Harbor username/password veya token
  • StorageBox SSH key (priv + pub)
  • SSH deploy key
  • Hetzner token gerekmez; Terraform asamasinda kullanilir

Bu secret'lar repo'ya yazilmayacak.

Gitea Organizasyon Secret'lari

Gitea → git.tarla.io → Organization → SettingsActionsSecrets altina eklenir.

Secret Aciklama Kaynak
STORAGEBOX_SSH_PRIV StorageBox erisimi icin private SSH key Her sunucuda /root/.ssh/id_ed25519_storagebox
STORAGEBOX_SSH_PUB Eslesen public key Her sunucuda /root/.ssh/id_ed25519_storagebox.pub
REPO_ACCESS_TOKEN Pipeline'in Gitea API'sini cagirabileceği token Gitea → User Settings → Applications → Access Tokens

Workflow'da kullanim ornegi:

- name: Set up StorageBox SSH key
  run: |
    mkdir -p ~/.ssh
    echo "${{ secrets.STORAGEBOX_SSH_PRIV }}" > ~/.ssh/id_ed25519_storagebox
    echo "${{ secrets.STORAGEBOX_SSH_PUB }}" > ~/.ssh/id_ed25519_storagebox.pub
    chmod 600 ~/.ssh/id_ed25519_storagebox
    ssh-keyscan -p 23 u469968-sub1.your-storagebox.de >> ~/.ssh/known_hosts

Ansible Vault Secret'lari

CI/CD disindaki secret'lar ansible/group_vars/test-vault.yml icinde Ansible Vault ile sifrelenir:

ansible-vault edit ansible/group_vars/test-vault.yml

Icerik:

vault_storagebox_password: "SUB_ACCOUNT_PAROLASI"
vault_gitea_runner_token: "RUNNER_REGISTRATION_TOKEN"

Kabul Kriterleri

  • systemctl status gitea-act-runner active gorunur.
  • Gitea UI icinde test runner online gorunur.
  • Runner label'lari test workflow runs-on ile eslesir.
  • Basit bir test workflow runner uzerinde calisir.
  • Runner job'u Docker komutu calistirabiliyorsa deploy on kosulu saglanmistir.
  • 8200/tcp public internete acik degildir.