gin_template/README.md
koh 86a60a7861
Cập nhật cấu hình môi trường production và development
- Thêm file .env.prod với cấu hình chi tiết cho môi trường production
- Cập nhật docker-compose.dev.yml và docker-compose.prod.yml
- Tạo Dockerfile.prod với cấu hình chi tiết cho production
- Bổ sung cấu hình nginx, prometheus, grafana
- Thêm cấu hình backup và monitoring
- Cập nhật README với hướng dẫn chi tiết
2025-03-03 16:31:52 +07:00

220 lines
4.5 KiB
Markdown

# Senflow App
Ứng dụng Go với Docker cho môi trường development và production.
## Cấu Trúc Thư Mục
```
.
├── Dockerfile.dev
├── Dockerfile.prod
├── docker-compose.dev.yml
├── docker-compose.prod.yml
├── .env.dev
├── .env.prod
├── nginx/
│ └── conf.d/
│ └── default.conf
├── prometheus/
│ └── prometheus.yml
└── scripts/
└── backup.sh
```
## Yêu Cầu Hệ Thống
- Docker
- Docker Compose
- Go 1.21 trở lên
## Môi Trường Development
### Cấu Hình
1. Tạo file `.env.dev`:
```env
PORT=8080
APP_ENV=development
BLUEPRINT_DB_HOST=mysql_bp
BLUEPRINT_DB_PORT=3306
BLUEPRINT_DB_DATABASE=blueprint
BLUEPRINT_DB_USERNAME=root
BLUEPRINT_DB_PASSWORD=root
BLUEPRINT_DB_ROOT_PASSWORD=root
BLUEPRINT_DB_MAX_IDLE_CONNS=10
BLUEPRINT_DB_MAX_OPEN_CONNS=100
BLUEPRINT_DB_CONN_MAX_LIFETIME=1h
LOGGER_LOG_LEVEL=debug
LOGGER_FILE_LOG_NAME=logs/app.log
LOGGER_MAX_SIZE=100
LOGGER_MAX_BACKUPS=3
LOGGER_MAX_AGE=28
LOGGER_COMPRESS=true
```
### Chạy Ứng Dụng
```bash
# Build và chạy
docker-compose -f docker-compose.dev.yml up --build
# Chạy ở chế độ detached
docker-compose -f docker-compose.dev.yml up -d
# Xem logs
docker-compose -f docker-compose.dev.yml logs -f
# Dừng ứng dụng
docker-compose -f docker-compose.dev.yml down
```
## Môi Trường Production
### Cấu Hình
1. Tạo file `.env.prod`:
```env
PORT=8080
APP_ENV=production
BLUEPRINT_DB_HOST=mysql_bp
BLUEPRINT_DB_PORT=3306
BLUEPRINT_DB_DATABASE=blueprint
BLUEPRINT_DB_USERNAME=root
BLUEPRINT_DB_PASSWORD=your_secure_password
BLUEPRINT_DB_ROOT_PASSWORD=your_secure_root_password
BLUEPRINT_DB_MAX_IDLE_CONNS=10
BLUEPRINT_DB_MAX_OPEN_CONNS=100
BLUEPRINT_DB_CONN_MAX_LIFETIME=1h
LOGGER_LOG_LEVEL=info
LOGGER_FILE_LOG_NAME=logs/app.log
LOGGER_MAX_SIZE=1000
LOGGER_MAX_BACKUPS=7
LOGGER_MAX_AGE=30
LOGGER_COMPRESS=true
GRAFANA_ADMIN_PASSWORD=your_secure_grafana_password
```
### Tính Năng Production
1. **Load Balancing**
- Nginx làm load balancer
- 3 instance của ứng dụng
- Health check tự động
- SSL/TLS support
2. **Monitoring**
- Prometheus cho metrics collection
- Grafana cho visualization
- Metrics từ app và MySQL
- Persistent storage cho dữ liệu monitoring
3. **Backup**
- Backup MySQL tự động hàng ngày
- Nén backup với gzip
- Giữ backup trong 7 ngày
- Volume riêng cho backups
4. **High Availability**
- Health checks cho tất cả services
- Auto-restart policy
- Network isolation
- Replica management
### Chạy Production
```bash
# Build và chạy
docker-compose -f docker-compose.prod.yml --env-file .env.prod up --build -d
# Xem logs
docker-compose -f docker-compose.prod.yml logs -f
# Dừng services
docker-compose -f docker-compose.prod.yml down
```
### Endpoints
- App instances: http://localhost:8083, http://localhost:8084, http://localhost:8085
- Nginx (Load Balancer): http://localhost:80
- Grafana: http://localhost:3000
- Prometheus: http://localhost:9090
## Bảo Mật
1. **SSL/TLS**
- Thêm certificates vào `nginx/ssl/`
- Cấu hình SSL trong Nginx
2. **Mật Khẩu**
- Thay đổi mật khẩu trong `.env.prod`
- Sử dụng mật khẩu mạnh
- Không commit file .env
3. **Network**
- Cấu hình firewall
- Giới hạn ports
- Sử dụng internal networks
## Monitoring
1. **Grafana Dashboards**
- App metrics
- MySQL metrics
- System metrics
2. **Alerts**
- Cấu hình trong Prometheus
- Thông báo qua email/Slack
## Backup & Recovery
1. **Backup**
- Tự động hàng ngày
- Nén với gzip
- Giữ 7 ngày
2. **Recovery**
```bash
# Restore từ backup
gunzip -c backup_YYYYMMDD_HHMMSS.sql.gz | mysql -h mysql_bp -u root -p blueprint
```
## Troubleshooting
1. **Logs**
```bash
# App logs
docker-compose -f docker-compose.prod.yml logs app
# MySQL logs
docker-compose -f docker-compose.prod.yml logs mysql_bp
# Nginx logs
docker-compose -f docker-compose.prod.yml logs nginx
```
2. **Health Checks**
- App: http://localhost:8080/health
- MySQL: docker-compose exec mysql_bp mysqladmin ping
- Nginx: http://localhost/health
## Maintenance
1. **Update**
```bash
# Pull latest images
docker-compose -f docker-compose.prod.yml pull
# Rebuild và restart
docker-compose -f docker-compose.prod.yml up -d --build
```
2. **Cleanup**
```bash
# Xóa unused volumes
docker volume prune
# Xóa old images
docker image prune
```