294 lines
6.4 KiB
Markdown
294 lines
6.4 KiB
Markdown
# 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!** 🚀
|