Ana içeriğe geç

systemd ile Deployment

Bare-metal veya VM üzerinde Consul Guardian'ı systemd servisi olarak çalıştırabilirsin. Bu yöntem container kullanmadan sürekli çalışan bir servis sağlar.

Kullanıcı Oluşturma

Guardian için ayrı bir sistem kullanıcısı oluştur. Root olarak çalıştırma:

# Kullanıcı oluştur (login shell'i olmayan sistem kullanıcısı)
sudo useradd --system --home-dir /var/lib/consul-guardian \
--create-home --shell /usr/sbin/nologin consul-guardian

# Git repo dizinini oluştur
sudo mkdir -p /var/lib/consul-guardian/repo
sudo chown consul-guardian:consul-guardian /var/lib/consul-guardian/repo

# Config dizinini oluştur
sudo mkdir -p /etc/consul-guardian

Binary Kurulumu

# Binary'yi indir veya derle
sudo cp consul-guardian /usr/local/bin/consul-guardian
sudo chmod +x /usr/local/bin/consul-guardian

# Doğrula
consul-guardian version

Yapılandırma Dosyası

sudo tee /etc/consul-guardian/config.yaml << 'EOF'
consul:
address: "http://localhost:8500"
token: "${CONSUL_HTTP_TOKEN}"
datacenter: "dc1"

watch:
prefixes:
- "config/"
- "env/"
- "feature-flags/"
poll_interval: "5m"

git:
repo_path: "/var/lib/consul-guardian/repo"
auto_push: true
remote: "origin"
branch: "main"

snapshot:
enabled: true
schedule: "0 */6 * * *"
storage:
type: "local"
path: "/var/lib/consul-guardian/snapshots"
retention:
count: 30

logging:
level: "info"
format: "json"
output: "stdout"
EOF

sudo chown consul-guardian:consul-guardian /etc/consul-guardian/config.yaml
sudo chmod 640 /etc/consul-guardian/config.yaml

systemd Unit Dosyası

sudo tee /etc/systemd/system/consul-guardian.service << 'EOF'
[Unit]
Description=Consul Guardian - Backup, sync and protect Consul KV
Documentation=https://consul-guardian.dev
After=network-online.target consul.service
Wants=network-online.target
Requires=consul.service

[Service]
Type=simple
User=consul-guardian
Group=consul-guardian

# Consul token'ı environment file'dan oku
EnvironmentFile=-/etc/consul-guardian/env

ExecStart=/usr/local/bin/consul-guardian watch \
--config /etc/consul-guardian/config.yaml

Restart=always
RestartSec=5
StartLimitBurst=5
StartLimitIntervalSec=60

# Güvenlik ayarları
NoNewPrivileges=yes
ProtectSystem=strict
ProtectHome=yes
ReadWritePaths=/var/lib/consul-guardian
PrivateTmp=yes
PrivateDevices=yes

# Kaynak limitleri
LimitNOFILE=65536
MemoryMax=256M

# Log ayarları
StandardOutput=journal
StandardError=journal
SyslogIdentifier=consul-guardian

[Install]
WantedBy=multi-user.target
EOF

Environment Dosyası

Consul token gibi hassas değerleri environment file'da sakla:

sudo tee /etc/consul-guardian/env << 'EOF'
CONSUL_HTTP_TOKEN=your-consul-acl-token
CONSUL_GUARDIAN_CONSUL_TOKEN=your-consul-acl-token
EOF

sudo chmod 600 /etc/consul-guardian/env
sudo chown consul-guardian:consul-guardian /etc/consul-guardian/env

Servisi Başlat

# systemd'yi yeniden yükle
sudo systemctl daemon-reload

# Servisi etkinleştir (boot'ta otomatik başlat)
sudo systemctl enable consul-guardian

# Servisi başlat
sudo systemctl start consul-guardian

# Durumu kontrol et
sudo systemctl status consul-guardian

Log Yönetimi

Guardian log'ları journald'ye gider. journalctl ile okuyabilirsin:

# Son log'ları gör
journalctl -u consul-guardian -n 50

# Canlı takip
journalctl -u consul-guardian -f

# Belirli zaman aralığındaki log'lar
journalctl -u consul-guardian --since "2026-04-04 10:00" --until "2026-04-04 12:00"

# JSON formatında (Guardian json log kullanıyorsa)
journalctl -u consul-guardian -o cat | jq '.'

Log rotasyonu

journald varsayılan olarak log rotasyonu yapar. Özellikle ayarlamak istersen:

# /etc/systemd/journald.conf
[Journal]
SystemMaxUse=500M
SystemMaxFileSize=50M
MaxRetentionSec=30day

Dosyaya loglama (opsiyonel)

journald yerine dosyaya loglamak istersen:

# config.yaml
logging:
output: "/var/log/consul-guardian/guardian.log"

logrotate yapılandırması:

sudo tee /etc/logrotate.d/consul-guardian << 'EOF'
/var/log/consul-guardian/*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 640 consul-guardian consul-guardian
postrotate
systemctl reload consul-guardian 2>/dev/null || true
endscript
}
EOF

Dashboard Modu için Unit Dosyası

Watch yerine dashboard çalıştırmak istersen, ExecStart satırını değiştir:

ExecStart=/usr/local/bin/consul-guardian dashboard \
--config /etc/consul-guardian/config.yaml \
--listen :9090 \
--static-dir /opt/consul-guardian/frontend/dist

Gerçek Senaryo: Ubuntu 22.04 Üzerinde Kurulum

# 1. Kullanıcı oluştur
sudo useradd --system --home-dir /var/lib/consul-guardian \
--create-home --shell /usr/sbin/nologin consul-guardian

# 2. Binary'yi indir
curl -sSL https://github.com/consul-guardian/consul-guardian/releases/latest/download/consul-guardian-linux-amd64 \
-o /tmp/consul-guardian
sudo mv /tmp/consul-guardian /usr/local/bin/
sudo chmod +x /usr/local/bin/consul-guardian

# 3. Git repo'yu başlat
sudo -u consul-guardian git init /var/lib/consul-guardian/repo

# 4. Config ve env dosyalarını oluştur (yukarıdaki örnekleri kullan)
# 5. Unit dosyasını oluştur (yukarıdaki örneği kullan)

# 6. Başlat
sudo systemctl daemon-reload
sudo systemctl enable --now consul-guardian

# 7. Doğrula
sudo systemctl status consul-guardian
journalctl -u consul-guardian -n 20