Coolify Kurulumu: Self-Hosted PaaS ile Uygulama Deployment
Coolify kurulumu, Docker ve Git entegrasyonu, uygulama deployment, veritabanı yönetimi, SSL sertifikaları, environment variables ve Heroku/Netlify alternatifi self-hosted PaaS.
Portainer CE kurulumu, Docker ve Kubernetes yönetimi, stack deployment, volume/network yönetimi, kullanıcı yetkilendirme, webhook ve GitOps entegrasyonu.
Portainer, Docker ve Kubernetes ortamlarını web tarayıcısı üzerinden yönetmenizi sağlayan açık kaynaklı bir konteyner yönetim platformudur. Komut satırı bilgisi gerektirmeden container başlatma, durdurma, log görüntüleme ve stack deploy etme gibi işlemleri kolayca yapabilirsiniz.
Portainer Community Edition (CE) ücretsiz ve açık kaynaklıdır. Temel özellikleri:
# Portainer verilerini saklamak için volume oluştur
docker volume create portainer_data
docker run -d \
--name portainer \
--restart=always \
-p 8000:8000 \
-p 9443:9443 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
Kurulum tamamlandıktan sonra:
https://SUNUCU_IP:9443
İlk girişte admin şifresi belirlemeniz gerekir. 5 dakika içinde giriş yapmazsanız Portainer güvenlik nedeniyle yeniden başlatılması gerekir.
# portainer-compose.yml
version: '3.8'
services:
portainer:
image: portainer/portainer-ce:latest
container_name: portainer
restart: always
ports:
- "8000:8000"
- "9443:9443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- portainer_data:/data
security_opt:
- no-new-privileges:true
volumes:
portainer_data:
docker compose -f portainer-compose.yml up -d
Portainer, Docker daemon ile /var/run/docker.sock üzerinden iletişim kurar. Bu socket'e erişim Docker üzerinde tam kontrol sağlar:
# Socket izinlerini kontrol et
ls -la /var/run/docker.sock
# srw-rw---- 1 root docker 0 ... /var/run/docker.sock
# Kullanıcıyı docker grubuna ekle (gerekirse)
usermod -aG docker $USER
Docker socket'e erişim root yetkisine eşdeğerdir. Portainer'ı güvenilir ağlarda çalıştırın ve güçlü şifre kullanın.
# Örnek: WordPress Stack
version: '3.8'
services:
wordpress:
image: wordpress:latest
restart: always
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: ${DB_USER}
WORDPRESS_DB_PASSWORD: ${DB_PASSWORD}
WORDPRESS_DB_NAME: wordpress
volumes:
- wordpress_data:/var/www/html
depends_on:
- db
db:
image: mysql:8.0
restart: always
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
volumes:
- db_data:/var/lib/mysql
volumes:
wordpress_data:
db_data:
https://github.com/user/repoPortainer arayüzünden container üzerinde yapabileceğiniz işlemler:
# Portainer arayüzünde:
# Containers → container seç → Actions:
# - Start / Stop / Restart / Kill / Pause
# - Logs (gerçek zamanlı)
# - Console (web terminal)
# - Inspect (JSON detayları)
# - Stats (CPU, RAM, Network kullanımı)
Container içine web tarayıcısından terminal açabilirsiniz:
/bin/bash veya /bin/sh# Container içinde çalıştırılabilecek komutlar:
ls -la /app
cat /etc/nginx/nginx.conf
nginx -t
env | grep DATABASE
# Portainer arayüzünden:
# Images → Pull Image
# Registry: docker.io (varsayılan)
# Image: nginx:latest
# Özel registry eklemek için:
# Registries → Add Registry
# URL: registry.example.com
# Kullanıcı adı ve şifre girin
# Portainer arayüzünden:
# Volumes → Add Volume
# Name: myapp_data
# Driver: local
# Volume detayları:
# - Hangi container'ların kullandığı
# - Disk kullanımı
# - Mount point: /var/lib/docker/volumes/myapp_data/_data
# Portainer arayüzünden:
# Networks → Add Network
# Name: myapp-network
# Driver: bridge
# Subnet: 172.20.0.0/16
# Container'ları ağa bağlama:
# Container → Network → Join Network
# Portainer arayüzünden:
# Settings → Teams → Add Team
# Team adı: developers
# Üye ekle: kullanici1, kullanici2
# Environments → Environment seç → Access Control
# Belirli kullanıcı veya ekiplere erişim ver
# Rol: Manager (tam yetki) veya Operator (sınırlı)
# Stack veya Service için webhook oluşturma:
# Stack → Stack adı → Webhooks
# Webhook URL kopyala
# GitHub Actions'da kullanım:
curl -X POST https://portainer.example.com/api/webhooks/WEBHOOK_TOKEN
# GitLab CI'da kullanım:
wget --post-data '' https://portainer.example.com/api/webhooks/WEBHOOK_TOKEN
Firewall arkasındaki sunucuları yönetmek için Edge Agent kullanın:
# Portainer'da:
# Environments → Add Environment → Edge Agent
# Edge ID ve Edge Key kopyala
# Uzak sunucuda Edge Agent kur:
docker run -d \
--name portainer_edge_agent \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /var/lib/docker/volumes:/var/lib/docker/volumes \
-v /:/host \
-v portainer_agent_data:/data \
-e EDGE=1 \
-e EDGE_ID=EDGE_ID_BURAYA \
-e EDGE_KEY=EDGE_KEY_BURAYA \
-e EDGE_INSECURE_POLL=1 \
portainer/agent:latest
# Mevcut container'ı durdur ve sil
docker stop portainer
docker rm portainer
# En son image'ı çek
docker pull portainer/portainer-ce:latest
# Yeniden başlat (aynı komutla, veriler volume'da korunur)
docker run -d \
--name portainer \
--restart=always \
-p 8000:8000 \
-p 9443:9443 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
portainer/portainer-ce:latest
REXE sunucularında Portainer kurarak tüm Docker container'larınızı tek bir web arayüzünden yönetebilirsiniz. Özellikle birden fazla servis çalıştıran sunucularda büyük kolaylık sağlar.
Sunucu firewall'unda 9443 portunu açın: 'ufw allow 9443/tcp'. Container'ın çalıştığını 'docker ps | grep portainer' ile kontrol edin. Eğer HTTP kullanmak istiyorsanız 9000 portunu da açın ve '-p 9000:9000' parametresini ekleyin.
Portainer container'ını durdurun. 'docker run --rm -v portainer_data:/data portainer/helper-reset-password' komutuyla şifreyi sıfırlayın. Yeni geçici şifre ekranda gösterilir. Portainer'ı yeniden başlatın ve geçici şifreyle giriş yapıp yeni şifre belirleyin.
Docker socket izinlerini kontrol edin: 'ls -la /var/run/docker.sock'. Portainer container'ının socket'e erişimi olduğundan emin olun. Eğer SELinux veya AppArmor aktifse, socket mount için ':z' veya ':Z' flag'i ekleyin: '-v /var/run/docker.sock:/var/run/docker.sock:z'.
Container'ın log driver'ının 'json-file' veya 'local' olduğundan emin olun. 'docker inspect CONTAINER_ID | grep LogConfig' ile kontrol edin. Eğer 'none' log driver kullanılıyorsa loglar görüntülenemez. docker-compose.yml'de logging driver'ı açıkça belirtin.
Environments menüsünden yeni ortam ekleyin. Aynı sunucudaki Docker için 'Local' seçin. Uzak sunucular için 'Docker Standalone' veya 'Docker Swarm' seçip TCP endpoint girin (2375/2376 portu). Güvenli bağlantı için TLS sertifikası kullanın. Edge Agent ile firewall arkasındaki sunuculara da bağlanabilirsiniz.
Evet, Portainer CE Kubernetes desteği sunar. Environments → Add Environment → Kubernetes seçeneğiyle kubeconfig dosyanızı yükleyin veya agent kurulumu yapın. Namespace, deployment, service, ingress ve pod yönetimini web arayüzünden yapabilirsiniz. Ancak gelişmiş Kubernetes özellikleri için Portainer Business Edition gerekebilir.
Coolify kurulumu, Docker ve Git entegrasyonu, uygulama deployment, veritabanı yönetimi, SSL sertifikaları, environment variables ve Heroku/Netlify alternatifi self-hosted PaaS.
Nextcloud kurulumu Docker ile, Apache/Nginx yapılandırması, veritabanı kurulumu, SSL sertifikası, dosya senkronizasyonu, uygulama mağazası ve performans optimizasyonu.
Uptime Kuma kurulumu Docker ile, HTTP/TCP/DNS/ping monitörleme, bildirim entegrasyonları (Telegram, Discord, email), status page oluşturma ve alert yapılandırması.