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

329 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🚀 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:
```bash
# 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)
```bash
# 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)
```bash
# 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
```bash
go mod download
```
#### 2. .env Dosyasını Yapılandırın
```bash
# .env dosyasını düzenleyin
nano .env
```
Gerekli ayarlar:
```env
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
```bash
# 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
```bash
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
```bash
# Docker ile
docker run -d \
--name gauth_redis \
-p 6379:6379 \
redis:7-alpine
```
#### 4. .env Dosyasını Yapılandırın
```bash
cp .env.example .env
# .env dosyasını düzenleyin
```
Örnek .env:
```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
```bash
# 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:
```go
AllowOrigins: []string{"http://localhost:3000", "https://yourdomain.com"},
```
## 🧪 Test Etme
### 1. Sağlık Kontrolü
```bash
curl http://localhost:8080/
```
### 2. Swagger UI
Tarayıcınızda: `http://localhost:8080/docs/index.html`
### 3. Kullanıcı Kaydı
```bash
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ş
```bash
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ü
```bash
# 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ü
```bash
# 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](https://console.cloud.google.com/) → 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](https://github.com/settings/developers) → 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
```bash
# 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
```bash
# 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:
```bash
swag init -g main.go
```
Migration eklemek için:
`internal/database/db.go` dosyasındaki `Migrate()` fonksiyonunu güncelleyin.
## 📚 Daha Fazla Bilgi
- [Gin Web Framework](https://gin-gonic.com/)
- [GORM ORM](https://gorm.io/)
- [Redis Go Client](https://redis.uptrace.dev/)
- [JWT Go](https://github.com/golang-jwt/jwt)