329 lines
7.0 KiB
Markdown
329 lines
7.0 KiB
Markdown
# 🚀 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)
|