7.0 KiB
🚀 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:
- Session Yönetimi: Token-based session storage
- Rate Limiting: API çağrılarını sınırlandırma
- Cache: Kullanıcı verileri ve sık erişilen datalar
- Token Blacklist: Logout işlemlerinde token iptal
- Email Verification: Email doğrulama token'ları
- 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
- Google Cloud Console → API & Services → Credentials
- OAuth 2.0 Client ID oluşturun
- Authorized redirect URIs:
http://localhost:8080/v1/auth/google/callback - Client ID ve Secret'ı
.envdosyasına ekleyin
GitHub OAuth
- GitHub Developer Settings → OAuth Apps → New
- Authorization callback URL:
http://localhost:8080/v1/auth/github/callback - Client ID ve Secret'ı
.envdosyası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_SECRETdeğ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.