Files
next-go-blog/docs/SETUP.md
Beyhan Oğur 6d95e27114 first commit
2026-04-26 22:16:43 +03:00

7.0 KiB
Raw Blame History

🚀 GAuth-Central Kurulum Rehberi

Hızlı Başlangıç

Option 1: Standalone Mode (Mevcut Sunucular ile)

Eğer zaten çalışan PostgreSQL ve Redis sunucularınız varsa:

# 1. .env dosyasını kontrol edin ve sunucu bilgilerini girin
# DB_URL="host=YOUR_HOST user=YOUR_USER password=YOUR_PASS dbname=YOUR_DB..."
# REDIS_URL=redis://user:pass@YOUR_HOST:6379/0

# 2. Uygulamayı başlatın
./start.sh

Script şunları yapacaktır:

  • .env dosyasını kontrol eder
  • PostgreSQL bağlantısını test eder
  • Redis bağlantısını test eder
  • Uygulamayı derler ve başlatır

Option 2: Docker ile (Yeni Kurulum)

# 1. Start-with-docker scriptini çalıştırın
./start-with-docker.sh

# 2. Logları izleyin
docker-compose logs -f app

Option 2: Docker ile (Yeni Kurulum)

# 1. Start-with-docker scriptini çalıştırın
./start-with-docker.sh

# 2. Logları izleyin
docker-compose logs -f app

Option 3: Manuel Kurulum (Sadece Uygulama)

Not: Bu option mevcut PostgreSQL ve Redis sunucularınızla çalışmak için kullanılır.

1. Bağımlılıkları Yükleyin

go mod download

2. .env Dosyasını Yapılandırın

# .env dosyasını düzenleyin
nano .env

Gerekli ayarlar:

PORT=8080

# Mevcut PostgreSQL sunucunuz
DB_URL="host=10.80.80.70 user=cloud password=xxx dbname=go_gauth port=5432 sslmode=disable TimeZone=Europe/Istanbul"

# Mevcut Redis sunucunuz
REDIS_URL=redis://default:xxx@10.80.80.70:6379/0

# JWT Secret
JWT_SECRET=your_super_secret_key

# OAuth credentials (opsiyonel)
GOOGLE_CLIENT_ID=...
GOOGLE_CLIENT_SECRET=...
GITHUB_CLIENT_ID=...
GITHUB_CLIENT_SECRET=...
CLIENT_CALLBACK_URL=http://localhost:8080/v1/auth

3. Uygulamayı Çalıştırın

# Quick start script ile
./start.sh

# veya manuel
go build -o main .
./main

# veya doğrudan
go run main.go

Option 4: Docker ile Sadece Veritabanları

Option 4: Docker ile Sadece Veritabanları

Eğer uygulamayı local'de çalıştırıp sadece veritabanlarını Docker'da tutmak isterseniz:

1. PostgreSQL'i Başlatın

docker run -d \
  --name gauth_postgres \
  -e POSTGRES_USER=postgres \
  -e POSTGRES_PASSWORD=yourpassword \
  -e POSTGRES_DB=gauth \
  -p 5432:5432 \
  postgres:17-alpine

2. Redis'i Başlatın

# Docker ile
docker run -d \
  --name gauth_redis \
  -p 6379:6379 \
  redis:7-alpine

4. .env Dosyasını Yapılandırın

cp .env.example .env
# .env dosyasını düzenleyin

Örnek .env:

PORT=8080
DB_URL="host=localhost user=postgres password=yourpassword dbname=gauth port=5432 sslmode=disable TimeZone=Europe/Istanbul"
REDIS_URL=redis://localhost:6379/0
JWT_SECRET=your_super_secret_key

5. Uygulamayı Çalıştırın

# Geliştirme modu
go run main.go

# Veya derleyip çalıştırın
go build -o main .
./main

🔧 Yapılandırma Detayları

PostgreSQL Bağlantısı

Uygulamanız PostgreSQL veritabanına bağlanacak ve otomatik olarak:

  • Tabloları oluşturacak (migration)
  • Seed data ekleyecek (roles, permissions)
  • Email doğrulama sütununu güncelleyecek

Redis Cache

Redis aşağıdaki amaçlarla kullanılır:

  1. Session Yönetimi: Token-based session storage
  2. Rate Limiting: API çağrılarını sınırlandırma
  3. Cache: Kullanıcı verileri ve sık erişilen datalar
  4. Token Blacklist: Logout işlemlerinde token iptal
  5. Email Verification: Email doğrulama token'ları
  6. Password Reset: Şifre sıfırlama token'ları

CORS Yapılandırması

Varsayılan olarak http://localhost:3000 origin'ine izin verilir. Değiştirmek için main.go dosyasını düzenleyin:

AllowOrigins: []string{"http://localhost:3000", "https://yourdomain.com"},

🧪 Test Etme

1. Sağlık Kontrolü

curl http://localhost:8080/

2. Swagger UI

Tarayıcınızda: http://localhost:8080/docs/index.html

3. Kullanıcı Kaydı

curl -X POST http://localhost:8080/v1/auth/register \
  -H "Content-Type: application/json" \
  -d '{
    "email": "test@example.com",
    "password": "SecurePass123!",
    "user_name": "testuser"
  }'

4. Giriş

curl -X POST http://localhost:8080/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{
    "email": "test@example.com",
    "password": "SecurePass123!"
  }'

5. Redis Bağlantı Kontrolü

# Redis CLI ile
docker exec -it gauth_redis redis-cli

# Redis içinde
> PING
PONG

> KEYS *
(Redis'teki tüm key'leri gösterir)

> GET user:UUID_HERE
(Kullanıcı cache verisi)

6. PostgreSQL Bağlantı Kontrolü

# PostgreSQL CLI ile
docker exec -it gauth_postgres psql -U postgres -d gauth

# PostgreSQL içinde
\dt  -- Tabloları listele
\d users  -- Users tablosu yapısını göster
SELECT * FROM roles;  -- Rolleri listele

📊 Rate Limiting Yapılandırması

Varsayılan limitler:

  • Login: 5 deneme / dakika
  • Register: 3 deneme / 5 dakika
  • Genel API: 100 istek / dakika

Değiştirmek için api/middlewares/rate_limit_middleware.go dosyasını düzenleyin.

🔐 OAuth Yapılandırması

Google OAuth

  1. Google Cloud Console → API & Services → Credentials
  2. OAuth 2.0 Client ID oluşturun
  3. Authorized redirect URIs: http://localhost:8080/v1/auth/google/callback
  4. Client ID ve Secret'ı .env dosyasına ekleyin

GitHub OAuth

  1. GitHub Developer Settings → OAuth Apps → New
  2. Authorization callback URL: http://localhost:8080/v1/auth/github/callback
  3. Client ID ve Secret'ı .env dosyasına ekleyin

🐛 Sorun Giderme

Redis bağlanamıyor

# Redis durumunu kontrol et
docker ps | grep redis

# Redis loglarını kontrol et
docker logs gauth_redis

# Redis'i yeniden başlat
docker restart gauth_redis

PostgreSQL bağlanamıyor

# PostgreSQL durumunu kontrol et
docker ps | grep postgres

# PostgreSQL loglarını kontrol et
docker logs gauth_postgres

# Bağlantıyı test et
docker exec -it gauth_postgres pg_isready -U postgres

CORS hatası alıyorum

main.go dosyasında AllowOrigins değerini kontrol edin ve frontend URL'inizi ekleyin.

Rate limit çok düşük

api/middlewares/rate_limit_middleware.go dosyasında limit değerlerini artırın.

📝 Notlar

  • Üretim ortamında JWT_SECRET değerini güçlü bir değerle değiştirin
  • Redis şifre koruması için production'da Redis AUTH kullanın
  • PostgreSQL için SSL bağlantısı kullanın (sslmode=require)
  • Log seviyelerini production'da ayarlayın
  • CORS origin'lerini production domain'lerinizle güncelleyin

🔄 Güncellemeler

Swagger dokümantasyonunu güncellemek için:

swag init -g main.go

Migration eklemek için:

internal/database/db.go dosyasındaki Migrate() fonksiyonunu güncelleyin.

📚 Daha Fazla Bilgi