
- 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
220 lines
4.5 KiB
Markdown
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
|
|
``` |