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.
Gitea veya Forgejo Docker kurulumu, repository yönetimi, CI/CD (Gitea Actions), SSH key yapılandırması, organizasyon ve takım yönetimi, mirror ve webhook.
Gitea ve Forgejo, GitHub ve GitLab'a açık kaynaklı, hafif ve self-hosted alternatiflerdir. Kendi sunucunuzda Git repository'leri barındırabilir, CI/CD pipeline'ları çalıştırabilir ve ekibinizle kod işbirliği yapabilirsiniz. Forgejo, Gitea'nın topluluk odaklı fork'udur ve her ikisi de birbirleriyle büyük ölçüde uyumludur.
| Özellik | Gitea | Forgejo |
|---|---|---|
| Lisans | MIT | GPL-3.0 |
| Yönetim | Şirket destekli | Topluluk yönetimli |
| Uyumluluk | Referans uygulama | Gitea uyumlu |
| Güncellemeler | Düzenli | Daha sık |
| Önerilen | Kurumsal | Topluluk |
Her iki proje de aynı docker-compose yapısını kullanır; sadece image adı farklıdır.
version: '3.8'
services:
gitea:
image: gitea/gitea:latest
container_name: gitea
restart: unless-stopped
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=postgres
- GITEA__database__HOST=db:5432
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWD=guclu-sifre
- GITEA__server__DOMAIN=git.example.com
- GITEA__server__SSH_DOMAIN=git.example.com
- GITEA__server__ROOT_URL=https://git.example.com/
- GITEA__server__SSH_PORT=2222
volumes:
- ./gitea-data:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "127.0.0.1:3000:3000"
- "2222:22"
depends_on:
- db
db:
image: postgres:15
container_name: gitea-db
restart: unless-stopped
environment:
POSTGRES_DB: gitea
POSTGRES_USER: gitea
POSTGRES_PASSWORD: guclu-sifre
volumes:
- postgres-data:/var/lib/postgresql/data
volumes:
postgres-data:
# Sadece image satırını değiştirin:
image: codeberg.org/forgejo/forgejo:latest
# veya
image: forgejo/forgejo:latest
# Container'ı başlat
docker compose up -d
# Logları kontrol et
docker logs gitea -f
server {
listen 80;
server_name git.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name git.example.com;
ssl_certificate /etc/letsencrypt/live/git.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/git.example.com/privkey.pem;
client_max_body_size 512M;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Kurulum sonrası https://git.example.com adresine gidin:
# /data/gitea/conf/app.ini
[server]
DOMAIN = git.example.com
ROOT_URL = https://git.example.com/
SSH_DOMAIN = git.example.com
SSH_PORT = 2222
DISABLE_SSH = false
[service]
DISABLE_REGISTRATION = true
REQUIRE_SIGNIN_VIEW = false
ALLOW_ONLY_EXTERNAL_REGISTRATION = false
[mailer]
ENABLED = true
FROM = gitea@example.com
SMTP_ADDR = smtp.example.com
SMTP_PORT = 587
USER = gitea@example.com
PASSWD = smtp-sifresi
# SSH key oluştur
ssh-keygen -t ed25519 -C "kullanici@example.com"
# Public key'i kopyala
cat ~/.ssh/id_ed25519.pub
Gitea'da: Profil → Ayarlar → SSH/GPG Anahtarları → SSH Anahtarı Ekle
# SSH ile clone (port 2222)
git clone ssh://git@git.example.com:2222/kullanici/repo.git
# ~/.ssh/config ile kolaylaştırma
Host git.example.com
HostName git.example.com
User git
Port 2222
IdentityFile ~/.ssh/id_ed25519
# Config sonrası
git clone git@git.example.com:kullanici/repo.git
# Yeni repo oluştur ve push et
mkdir myproject && cd myproject
git init
git add .
git commit -m "İlk commit"
git remote add origin https://git.example.com/kullanici/myproject.git
git push -u origin main
GitHub/GitLab'dan mirror oluşturma:
Yeni Repository → Migrate → GitHub/GitLab/Bitbucket
- Clone URL: https://github.com/user/repo.git
- Mirror (otomatik senkronizasyon): Etkin
- Senkronizasyon aralığı: 8 saat
# docker-compose.yml'e ekle
runner:
image: gitea/act_runner:latest
container_name: gitea-runner
restart: unless-stopped
environment:
- GITEA_INSTANCE_URL=https://git.example.com
- GITEA_RUNNER_REGISTRATION_TOKEN=RUNNER_TOKEN
- GITEA_RUNNER_NAME=my-runner
volumes:
- ./runner-data:/data
- /var/run/docker.sock:/var/run/docker.sock
# Runner token al: Yönetim → Actions → Runner
# Token'ı GITEA_RUNNER_REGISTRATION_TOKEN'a ekle
docker compose up -d runner
# .gitea/workflows/ci.yml
name: CI Pipeline
on:
push:
branches: [main, develop]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Node.js kurulumu
uses: actions/setup-node@v3
with:
node-version: '20'
- name: Bağımlılıkları yükle
run: npm ci
- name: Testleri çalıştır
run: npm test
- name: Build
run: npm run build
Organizasyon Oluştur:
+ → Yeni Organizasyon → Ad ve görünürlük
Takım Oluştur:
Organizasyon → Takımlar → Yeni Takım
- İzinler: Sahip, Yönetici, Yazar, Okuyucu
- Repository erişimi: Belirli veya tüm
Üye Davet:
Takım → Üyeler → Kullanıcı Ekle
Repository → Ayarlar → Webhook → Webhook Ekle
Payload URL: https://ci.example.com/webhook
Content Type: application/json
Secret: webhook-gizli-anahtari
Events: Push, Pull Request, Release
# Gitea verilerini yedekle
docker exec gitea gitea dump -c /data/gitea/conf/app.ini
# Veritabanı yedeği
docker exec gitea-db pg_dump -U gitea gitea > gitea-db-$(date +%Y%m%d).sql
# Tüm veri dizini
tar -czf gitea-backup-$(date +%Y%m%d).tar.gz ./gitea-data/
REXE VPS sunucularında Gitea/Forgejo ile ekibinizin tüm kod altyapısını yönetebilirsiniz. 1 GB RAM ile küçük-orta ekipler için idealdir.
Her ikisi de teknik olarak neredeyse aynıdır. Forgejo, Gitea'nın topluluk yönetimli fork'udur ve daha sık güncelleme alır. Kurumsal destek veya ticari kullanım için Gitea tercih edilebilir. Topluluk odaklı ve özgür yazılım tercih edenler için Forgejo önerilir. Her ikisi de aynı istemciler ve araçlarla uyumludur.
SSH portu 2222 olarak yapılandırıldıysa git clone komutunda portu belirtmeniz gerekir: ssh://git@git.example.com:2222/user/repo.git. ~/.ssh/config dosyasına Host girişi ekleyerek portu otomatik kullanabilirsiniz. Sunucu firewall'unda 2222 portunun açık olduğunu kontrol edin.
Runner container'ının çalıştığını kontrol edin: docker ps | grep runner. GITEA_RUNNER_REGISTRATION_TOKEN değerinin doğru olduğundan emin olun. Runner loglarını inceleyin: docker logs gitea-runner. Gitea instance URL'sinin runner'dan erişilebilir olduğunu doğrulayın. Runner'ı yeniden kaydetmek için container'ı yeniden başlatın.
Nginx'te client_max_body_size değerini artırın (örn: 512M veya 1G). Gitea app.ini'de [server] bölümüne MAX_CREATION_LIMIT ekleyin. Git LFS (Large File Storage) kullanmayı düşünün: git lfs install && git lfs track '*.zip'. LFS için Gitea'da LFS desteğinin etkin olduğunu kontrol edin.
Gitea'da Migrate özelliğini kullanın: Yeni Repository → Migrate → GitHub. GitHub Personal Access Token ile özel repository'leri de taşıyabilirsiniz. Mirror seçeneğiyle GitHub'daki değişiklikler otomatik senkronize edilir. Tüm branch'ler, tag'ler ve commit geçmişi korunur.
Güncelleme öncesi yedek alın: docker exec gitea gitea dump. Ardından docker compose pull && docker compose up -d ile güncelleyin. Gitea otomatik veritabanı migration yapar. Büyük sürüm atlamalarında (örn: 1.19 → 1.21) ara sürümleri tek tek geçmeniz gerekebilir. Release notlarını mutlaka okuyun.
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.
Portainer CE kurulumu, Docker ve Kubernetes yönetimi, stack deployment, volume/network yönetimi, kullanıcı yetkilendirme, webhook ve GitOps entegrasyonu.