
- Điều chỉnh cấu hình MySQL trong docker-compose.prod.yml để sử dụng root user - Loại bỏ cấu hình người dùng MySQL không cần thiết - Cập nhật hàm ProvideDB trong wire.go để trả về global database instance - Làm sạch và tối ưu hóa cấu hình kết nối cơ sở dữ liệu
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
- Tạo file
.env.dev
:
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
# 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
- Tạo file
.env.prod
:
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
-
Load Balancing
- Nginx làm load balancer
- 3 instance của ứng dụng
- Health check tự động
- SSL/TLS support
-
Monitoring
- Prometheus cho metrics collection
- Grafana cho visualization
- Metrics từ app và MySQL
- Persistent storage cho dữ liệu monitoring
-
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
-
High Availability
- Health checks cho tất cả services
- Auto-restart policy
- Network isolation
- Replica management
Chạy Production
# 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
-
SSL/TLS
- Thêm certificates vào
nginx/ssl/
- Cấu hình SSL trong Nginx
- Thêm certificates vào
-
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
- Thay đổi mật khẩu trong
-
Network
- Cấu hình firewall
- Giới hạn ports
- Sử dụng internal networks
Monitoring
-
Grafana Dashboards
- App metrics
- MySQL metrics
- System metrics
-
Alerts
- Cấu hình trong Prometheus
- Thông báo qua email/Slack
Backup & Recovery
-
Backup
- Tự động hàng ngày
- Nén với gzip
- Giữ 7 ngày
-
Recovery
# Restore từ backup gunzip -c backup_YYYYMMDD_HHMMSS.sql.gz | mysql -h mysql_bp -u root -p blueprint
Troubleshooting
-
Logs
# 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
-
Health Checks
- App: http://localhost:8080/health
- MySQL: docker-compose exec mysql_bp mysqladmin ping
- Nginx: http://localhost/health
Maintenance
-
Update
# Pull latest images docker-compose -f docker-compose.prod.yml pull # Rebuild và restart docker-compose -f docker-compose.prod.yml up -d --build
-
Cleanup
# Xóa unused volumes docker volume prune # Xóa old images docker image prune
Description
Languages
Go
94%
Makefile
4.5%
Shell
1.5%