
- Nâng cấp MySQL image lên phiên bản 8.0 - Thêm các tùy chọn cấu hình chi tiết cho hiệu suất và bảo mật - Cập nhật healthcheck và các tham số kết nối - Thêm volume khởi tạo và cấu hình character set - Điều chỉnh các tham số hiệu suất MySQL
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%