# AuthCentral - Dokploy Deployment Guide ## 🚀 Dokploy'a Deploy Etme ### Ön Hazırlık 1. **Repository'yi GitHub'a Push Edin** ```bash git add . git commit -m "Production ready build" git push origin main ``` 2. **.env.production Dosyası Oluşturun** - `.env.production.example` dosyasını kopyalayın - Gerçek değerlerinizle doldurun - **ÖNEMLİ:** Bu dosyayı GitHub'a pushlamamayın! ### Dokploy Adımları #### 1. Yeni Proje Oluştur - Dokploy dashboard'a giriş yapın - "New Project" butonuna tıklayın - Proje adı: `authcentral` #### 2. GitHub Repository Bağlayın - Source type: **GitHub** - Repository: Projenizin GitHub URL'si - Branch: `main` - Build type: **Docker Compose** #### 3. Environment Variables Ayarlayın Dokploy dashboard'da aşağıdaki environment variable'ları ekleyin: **Veritabanı:** ```env DB_USER=postgres DB_PASSWORD=YOUR_SECURE_PASSWORD DB_NAME=gauth DB_HOST=postgres DB_PORT=5432 ``` **Redis:** ```env REDIS_HOST=redis REDIS_PORT=6379 REDIS_PASSWORD=YOUR_REDIS_PASSWORD REDIS_USER=default ``` **JWT:** ```env JWT_SECRET=YOUR_SUPER_SECRET_JWT_KEY ``` **OAuth - Google:** ```env GOOGLE_CLIENT_ID=your_google_client_id GOOGLE_CLIENT_SECRET=your_google_client_secret ``` **OAuth - GitHub:** ```env GITHUB_CLIENT_ID=your_github_client_id GITHUB_CLIENT_SECRET=your_github_client_secret ``` **URLs:** ```env APP_URL=https://yourdomain.com CLIENT_CALLBACK_URL=https://yourdomain.com/api/v1/auth ``` **Email:** ```env EMAIL_HOST=smtp.gmail.com EMAIL_PORT=587 EMAIL_HOST_USER=your_email@gmail.com EMAIL_HOST_PASSWORD=your_app_password EMAIL_USE_TLS=true EMAIL_USE_SSL=false EMAIL_FROM=noreply@yourdomain.com ``` **Avatar Settings:** ```env AVATAR_H=150 AVATAR_W=150 AVATAR_Q=90 AVATAR_B=cover AVATAR_F=webp ``` #### 4. Docker Compose Dosyası - Dokploy otomatik olarak `docker-compose.prod.yml` dosyasını kullanacak - Bu dosya **sadece uygulama** servisini içerir - PostgreSQL ve Redis Dokploy'da harici servisler olarak yönetilir: - PostgreSQL: Dokploy managed database - Redis: Dokploy managed cache - AuthCentral app: Container (port: 8080) #### 5. Deploy - "Deploy" butonuna tıklayın - Build loglarını izleyin - Deploy tamamlandığında URL'niz aktif olacak --- ## 📋 Build Özellikleri ### WebP Desteği Aktif Avatar resimleri varsayılan olarak WebP formatında: - ✅ **WebP** (default, optimize edilmiş, küçük dosya boyutu) - ✅ **JPEG** (alternatif) - ✅ **PNG** (lossless) **WebP Avantajları:** - %25-35 daha küçük dosya boyutu (JPEG'e göre) - Modern tarayıcılarda tam destek - Yüksek kalite ve düşük boyut ### Dockerfile Özeti ```dockerfile # Build Stage - CGO enabled for WebP FROM golang:1.25.6-alpine AS builder WORKDIR /app RUN apk add --no-cache git gcc musl-dev libwebp-dev COPY ../go.mod go.sum ./ RUN go mod download COPY .. . RUN go mod tidy RUN go install github.com/swaggo/swag/cmd/swag@latest RUN swag init RUN CGO_ENABLED=1 GOOS=linux go build -a -ldflags '-linkmode external -extldflags "-static"' -o main . # Run Stage - WebP runtime library FROM alpine:latest WORKDIR /app RUN apk --no-cache add ca-certificates libwebp COPY --from=builder /app/main . COPY --from=builder /app/.env . COPY --from=builder /app/web ./web COPY --from=builder /app/docs ./docs EXPOSE 8080 CMD ["./main"] ``` ### Production Yapı - **PostgreSQL:** Dokploy managed service (harici) - **Redis:** Dokploy managed service (harici) - **Application:** Docker container - **Volumes:** `./uploads` (avatar storage) --- ## 🔒 Güvenlik Notları ### Önemli! 1. **JWT_SECRET**: Güçlü bir secret kullanın (min 32 karakter) 2. **DB_PASSWORD**: Güvenli bir şifre seçin 3. **REDIS_PASSWORD**: Redis için şifre ayarlayın 4. **Email Credentials**: Gmail için "App Password" kullanın ### Production Checklist - [ ] Tüm secrets güçlü ve benzersiz - [ ] OAuth callback URL'leri doğru - [ ] Email SMTP ayarları test edildi - [ ] Domain DNS ayarları yapıldı - [ ] SSL sertifikası aktif (Dokploy otomatik) - [ ] Rate limiting aktif (default: ✅) - [ ] CORS ayarları yapılandırıldı --- ## 🗄️ Veritabanı ### İlk Admin Kullanıcı Oluşturma Deploy sonrası container'a bağlanın: ```bash # Dokploy dashboard'dan container terminal'i açın veya: docker exec -it app_auth_central /app/main seed-admin ``` **Varsayılan Admin:** - Email: `admin@gauth.local` - Password: `Admin@123` ⚠️ **İlk login sonrası şifreyi değiştirin!** ### PostgreSQL Extensions UUID extension otomatik olarak yüklenir: ```sql CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; ``` --- ## 📊 Monitoring ### Healthcheck Endpoints ```bash # Application health curl https://yourdomain.com/ # Validate token curl https://yourdomain.com/v1/auth/validate \ -H "Authorization: Bearer YOUR_TOKEN" ``` ### Logs Dokploy dashboard'dan: - Application logs - PostgreSQL logs - Redis logs görüntüleyebilirsiniz. --- ## 🔄 Update (Güncelleme) Yeni kod push ettiğinizde: 1. GitHub'a push edin 2. Dokploy dashboard'da "Redeploy" butonuna tıklayın 3. Build tamamlanınca otomatik restart olur **Zero-downtime deployment** için Dokploy'un "Rolling Update" özelliğini kullanın. --- ## 🆘 Troubleshooting ### Build Hatası ``` Error: CGO_ENABLED=0 build failed ``` ✅ **Çözüldü:** WebP kütüphanesi kaldırıldı ### Database Connection Error ``` Error: failed to connect to database ``` ✅ **Kontrol edin:** - `DB_HOST=postgres` (service name) - `DB_PASSWORD` doğru mu? - PostgreSQL container çalışıyor mu? ### Redis Connection Error ``` Error: failed to connect to redis ``` ✅ **Kontrol edin:** - `REDIS_HOST=redis` (service name) - `REDIS_PASSWORD` ayarlandı mı? ### OAuth Login Error ``` Error: OAuth callback failed ``` ✅ **Kontrol edin:** - Google/GitHub Console'da callback URL doğru mu? - `CLIENT_CALLBACK_URL=https://yourdomain.com/api/v1/auth` - OAuth credentials doğru mu? --- ## 📖 API Endpoints Deploy sonrası: - **Swagger UI**: `https://yourdomain.com/v1/docs/index.html` - **Health**: `https://yourdomain.com/` - **Register**: `POST https://yourdomain.com/v1/auth/register` - **Login**: `POST https://yourdomain.com/v1/auth/login` --- ## 🎉 Deploy Sonrası 1. ✅ Admin kullanıcı oluşturun 2. ✅ Test kullanıcısı ile register deneyin 3. ✅ OAuth login test edin 4. ✅ Email doğrulama test edin 5. ✅ Avatar upload test edin 6. ✅ Swagger dokümantasyonu kontrol edin **AuthCentral başarıyla deploy edildi!** 🚀