223 lines
4.8 KiB
Markdown
223 lines
4.8 KiB
Markdown
# Production Build - WebP Desteği
|
||
|
||
## ✅ Değişiklikler
|
||
|
||
### 1. WebP Desteği Geri Eklendi
|
||
- ✅ `github.com/chai2010/webp` dependency eklendi
|
||
- ✅ Varsayılan avatar format: **WebP**
|
||
- ✅ CGO enabled build
|
||
|
||
### 2. Docker Configuration
|
||
- ✅ **CGO_ENABLED=1** (WebP için gerekli)
|
||
- ✅ **libwebp-dev** build dependency
|
||
- ✅ **libwebp** runtime dependency
|
||
- ✅ Static linking ile portable binary
|
||
|
||
### 3. docker-compose.prod.yml
|
||
- ✅ **Sadece uygulama** servisi
|
||
- ❌ PostgreSQL yok (Dokploy managed)
|
||
- ❌ Redis yok (Dokploy managed)
|
||
- ✅ Harici DB/Redis connection ayarları
|
||
|
||
## 📋 Dockerfile
|
||
|
||
### Build Stage
|
||
```dockerfile
|
||
FROM golang:1.25.6-alpine AS builder
|
||
WORKDIR /app
|
||
|
||
# WebP için gerekli build dependencies
|
||
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
|
||
|
||
# Swagger
|
||
RUN go install github.com/swaggo/swag/cmd/swag@latest
|
||
RUN swag init
|
||
|
||
# CGO enabled build with static linking
|
||
RUN CGO_ENABLED=1 GOOS=linux go build -a \
|
||
-ldflags '-linkmode external -extldflags "-static"' \
|
||
-o main .
|
||
```
|
||
|
||
### Runtime Stage
|
||
```dockerfile
|
||
FROM alpine:latest
|
||
WORKDIR /app
|
||
|
||
# WebP runtime library + CA certificates
|
||
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"]
|
||
```
|
||
|
||
## 🎯 Desteklenen Format'lar
|
||
|
||
| Format | Varsayılan | Kalite | Dosya Boyutu | CGO Gerekli |
|
||
|--------|-----------|--------|--------------|-------------|
|
||
| **WebP** | ✅ Evet | Ayarlanabilir (0-100) | En küçük | ✅ Evet |
|
||
| JPEG | ❌ Hayır | Ayarlanabilir (1-100) | Orta | ❌ Hayır |
|
||
| PNG | ❌ Hayır | Lossless | En büyük | ❌ Hayır |
|
||
|
||
## 📊 WebP Avantajları
|
||
|
||
### Dosya Boyutu Karşılaştırması
|
||
```
|
||
Aynı kalitede:
|
||
- PNG: 100 KB
|
||
- JPEG: 50 KB
|
||
- WebP: 32 KB ✅ (~%35 daha küçük)
|
||
```
|
||
|
||
### Browser Desteği
|
||
- ✅ Chrome/Edge (tüm versiyonlar)
|
||
- ✅ Firefox (tüm versiyonlar)
|
||
- ✅ Safari 14+ (iOS 14+)
|
||
- ✅ Opera (tüm versiyonlar)
|
||
- ⚠️ IE11 (desteklenmez, fallback gerekebilir)
|
||
|
||
## 🔧 Environment Variables
|
||
|
||
### Avatar Settings
|
||
```env
|
||
AVATAR_H=150 # Height
|
||
AVATAR_W=150 # Width
|
||
AVATAR_Q=90 # Quality (0-100)
|
||
AVATAR_B=cover # Mode (cover/contain/resize)
|
||
AVATAR_F=webp # Format (webp/jpg/png)
|
||
```
|
||
|
||
### Database (Dokploy Managed)
|
||
```env
|
||
DB_HOST=your-dokploy-postgres-host
|
||
DB_PORT=5432
|
||
DB_USER=postgres
|
||
DB_PASSWORD=your_password
|
||
DB_NAME=gauth
|
||
```
|
||
|
||
### Redis (Dokploy Managed)
|
||
```env
|
||
REDIS_HOST=your-dokploy-redis-host
|
||
REDIS_PORT=6379
|
||
REDIS_PASSWORD=your_redis_password
|
||
REDIS_USER=default
|
||
```
|
||
|
||
## 🚀 Deployment Workflow
|
||
|
||
### 1. Dokploy'da Servisler Oluştur
|
||
```
|
||
1. PostgreSQL Database
|
||
- Version: 15
|
||
- Username: postgres
|
||
- Password: [güçlü şifre]
|
||
- Database: gauth
|
||
|
||
2. Redis Cache
|
||
- Version: 7
|
||
- Password: [güçlü şifre]
|
||
- Max Memory: 256MB
|
||
```
|
||
|
||
### 2. GitHub'a Push
|
||
```bash
|
||
git add .
|
||
git commit -m "Production: WebP support + external DB/Redis"
|
||
git push origin main
|
||
```
|
||
|
||
### 3. Dokploy'da Deploy
|
||
```
|
||
1. New Project → GitHub
|
||
2. Repository: your-repo
|
||
3. Branch: main
|
||
4. Build: Docker Compose
|
||
5. File: docker-compose.prod.yml
|
||
6. Environment Variables: (yukardaki tüm değişkenler)
|
||
7. Deploy!
|
||
```
|
||
|
||
### 4. İlk Admin Oluştur
|
||
```bash
|
||
# Container'a bağlan
|
||
docker exec -it app_auth_central /app/main seed-admin
|
||
|
||
# Varsayılan:
|
||
# Email: admin@gauth.local
|
||
# Password: Admin@123
|
||
```
|
||
|
||
## 🧪 Build Test
|
||
|
||
### Local Test
|
||
```bash
|
||
# WebP dependency
|
||
go get github.com/chai2010/webp@latest
|
||
go mod tidy
|
||
|
||
# Local build (macOS/Linux)
|
||
go build -o main .
|
||
|
||
# Cross-compile for Linux
|
||
CGO_ENABLED=1 GOOS=linux go build -o main .
|
||
```
|
||
|
||
### Docker Test
|
||
```bash
|
||
# Build
|
||
docker build -t authcentral .
|
||
|
||
# Run
|
||
docker run -p 8080:8080 \
|
||
-e DB_HOST=your-db-host \
|
||
-e REDIS_HOST=your-redis-host \
|
||
authcentral
|
||
|
||
# Test
|
||
curl http://localhost:8080/
|
||
```
|
||
|
||
## 📝 Notlar
|
||
|
||
### CGO Build
|
||
- ⚠️ **Cross-compile sınırlaması**: CGO enabled olduğunda farklı OS'ler için compile etmek karmaşıktır
|
||
- ✅ **Docker ile çözüm**: Docker builder her platformda Linux için build eder
|
||
- ✅ **Static linking**: Binary portable, dependencies gömülü
|
||
|
||
### Production Checklist
|
||
- [ ] Dokploy'da PostgreSQL oluşturuldu
|
||
- [ ] Dokploy'da Redis oluşturuldu
|
||
- [ ] Tüm environment variables ayarlandı
|
||
- [ ] OAuth credentials (Google, GitHub) ayarlandı
|
||
- [ ] Email SMTP ayarları yapıldı
|
||
- [ ] Domain DNS ayarları yapıldı
|
||
- [ ] SSL sertifikası aktif
|
||
- [ ] İlk admin kullanıcı oluşturuldu
|
||
- [ ] Avatar upload test edildi
|
||
- [ ] WebP support test edildi
|
||
|
||
## 🎉 Sonuç
|
||
|
||
**AuthCentral WebP destekli ve Dokploy'a deploy için hazır!**
|
||
|
||
- ✅ WebP default format
|
||
- ✅ CGO enabled build
|
||
- ✅ Static linking
|
||
- ✅ External PostgreSQL/Redis
|
||
- ✅ Docker Compose production ready
|
||
- ✅ Swagger documentation
|
||
- ✅ Full API documentation
|
||
|
||
**Dosya boyutları ~%35 daha küçük!** 🚀
|