1. Development environment
Docker Webserver Stack
Dự án Docker webserver hoàn chỉnh hỗ trợ nhiều ứng dụng web PHP và Frappe Framework cho môi trường development.
Các Services
- Nginx: Reverse proxy và web server với cấu hình động
- PHP 7.4 FPM: PHP FastCGI Process Manager cho ứng dụng PHP cũ
- PHP 8.4 FPM: PHP FastCGI Process Manager cho ứng dụng PHP mới
- Frappe/Bench: Frappe Framework development environment
Cài đặt
Bước 1: Truy cập WSL từ Windows
Cách 1: Sử dụng Windows Terminal (Khuyến nghị)
# Mở Windows Terminal và chọn WSL
# Hoặc sử dụng shortcut: Ctrl + Shift + `
# Sau đó chọn distribution WSL (Ubuntu/Debian)
Cách 2: Sử dụng Command Prompt
# Mở Command Prompt và gõ:
wsl
# Hoặc truy cập trực tiếp vào distribution cụ thể:
wsl -d Ubuntu
wsl -d Debian
Cách 3: Sử dụng PowerShell
# Mở PowerShell và gõ:
wsl
# Hoặc truy cập trực tiếp:
wsl -d Ubuntu
wsl -d Debian
Cách 4: Từ Start Menu
Bước 2: Chuẩn bị môi trường WSL
# Tạo thư mục Sources trong WSL
mkdir -p /home/$USER/Sources
cd /home/$USER/Sources
Bước 3: Clone tất cả source code cần thiết
# Clone docker-webserver
git clone <docker-webserver-repo-url> docker-webserver
# Tạo cấu trúc thư mục SM
mkdir -p SM
cd SM
# Clone các repository SmartPost
git clone <soft-repo-url> soft
git clone <customer_api-repo-url> customer_api
git clone <customer_web-repo-url> customer_web
git clone <import-repo-url> import
git clone <vcb-gateway-repo-url> vcb-gateway
cd ..
# Tạo cấu trúc thư mục TMS
mkdir -p TMS
cd TMS
# Clone các repository TMS
git clone <tms-soft-repo-url> soft
git clone <fleet-repo-url> fleet
cd ..
# Tạo cấu trúc thư mục saas
mkdir -p saas
cd saas
# Clone repository havico
git clone <havico-repo-url> havico
# Cài đặt node_modules cho havico
cd havico
npm install
# hoặc
yarn install
cd ../..
Bước 4: Cấu hình docker-webserver
cd docker-webserver
# Tạo file .env với cấu hình cơ bản
cat > .env << EOF
# Network Configuration
NETWORK_SUBNET=172.18.0.0/16
NETWORK_GATEWAY=172.18.0.1
NETWORK_IP_RANGE=172.18.1.0/24
# Local IP (thay đổi theo IP máy của bạn)
LOCAL_IP=192.168.1.100
# User Configuration
UID=1000
UNAME=lt
UGID=1000
UGNAME=lt
# Domain Configuration
DOMAIN_SOFT=pm.smartpost.vn.local
DOMAIN_API_SOFT=api.smartpost.vn.local
DOMAIN_CUSTOMER=thanhvien.smartpost.vn.local
DOMAIN_API_CUSTOMER=api-customer.smartpost.vn.local
DOMAIN_IMPORT=import.smartpost.vn.local
DOMAIN_PAYMENT_SERVICE=payment.itvina.com.local
DOMAIN_TMS_SOFT=tms.smartpost.vn.local
DOMAIN_TMS_API=tms-api.smartpost.vn.local
DOMAIN_FLEET_SOFT=fleet.smartpost.vn.local
DOMAIN_FLEET_API=fleet-api.smartpost.vn.local
DOMAIN_SAAS=havico.vn.local
# Nginx Configuration
NGINX_CONFIG_DIR=/etc/nginx/conf.d
# Domain Array (space-separated domains for hosts file)
DOMAIN_ARRAY="pm.smartpost.vn.local api.smartpost.vn.local thanhvien.smartpost.vn.local api-customer.smartpost.vn.local import.smartpost.vn.local payment.itvina.com.local tms.smartpost.vn.local tms-api.smartpost.vn.local fleet.smartpost.vn.local fleet-api.smartpost.vn.local havico.vn.local"
EOF
Bước 5: Chạy dự án
# Cách 1: Sử dụng Makefile
make run
# Cách 2: Sử dụng script start
./start
# Cách 3: Sử dụng docker-compose trực tiếp
docker-compose down && docker-compose up --build -d
Cấu trúc dự án
docker-webserver/
├── dockers/ # Dockerfiles
│ ├── nginx # Nginx Dockerfile
│ ├── php74 # PHP 7.4 Dockerfile
│ ├── php84 # PHP 8.4 Dockerfile
│ └── frappe # Frappe Dockerfile
├── dockers/configs/ # Container configurations
│ ├── nginx/ # Nginx configs
│ ├── php/ # PHP configs
│ └── frappe/ # Frappe configs
├── configs/ # Host configurations
│ ├── nginx/ # Nginx host configs
│ └── etc/ # System configs
├── scripts/ # Utility scripts
│ ├── update-hosts.sh # Update hosts file
│ └── setup-frappe.sh # Setup Frappe
├── docker-compose.yml # Docker Compose config
├── Makefile # Build commands
└── start # Start script
Cấu hình Source Code
Mount Volumes:
../SM→/opt/dev(SmartPost source code)../TMS→/opt/dev/tms(TMS source code)../saas/havico→/home/frappe/frappe-bench(Complete Frappe bench)
Cấu trúc thư mục cần thiết:
/home/$USER/Sources/
├── docker-webserver/ # Docker stack configuration
├── SM/ # SmartPost applications
│ ├── soft/ # Soft management system
│ ├── customer_api/ # Customer API service
│ ├── customer_web/ # Customer web portal
│ ├── import/ # Import service
│ └── vcb-gateway/ # VCB payment gateway
├── TMS/ # TMS applications
│ ├── soft/ # TMS soft management
│ └── fleet/ # Fleet management
└── saas/ # Frappe applications
└── havico/ # Havico SAAS platform
├── node_modules/ # Node.js dependencies
├── apps/ # Frappe applications
├── sites/ # Frappe sites
└── ...
Cấu hình Frappe
Truy cập Frappe:
- URL: http://havico.vn.local
- Admin: Administrator
- Password: 123456
Frappe Development:
- Bench Directory:
/home/frappe/frappe-bench(mounted from ../saas/havico) - Sites:
/home/frappe/frappe-bench/sites - Apps:
/home/frappe/frappe-bench/apps - Framework:
/home/frappe/frappe-bench/apps/frappe
Các Domain được hỗ trợ
SmartPost Applications:
pm.smartpost.vn.local- Soft management systemapi.smartpost.vn.local- API servicethanhvien.smartpost.vn.local- Customer portalapi-customer.smartpost.vn.local- Customer APIimport.smartpost.vn.local- Import servicepayment.itvina.com.local- Payment service
TMS Applications:
tms.smartpost.vn.local- TMS soft managementtms-api.smartpost.vn.local- TMS API servicefleet.smartpost.vn.local- Fleet managementfleet-api.smartpost.vn.local- Fleet API service
Frappe Applications:
havico.vn.local- Frappe Framework (SAAS)
NIP.IO Support:
Tất cả domain đều hỗ trợ .nip.io tự động:
pm.smartpost.vn.local.192.168.1.100.nip.iohavico.vn.local.192.168.1.100.nip.io
Development Commands
PHP Development:
# Truy cập PHP 7.4 container
docker exec -it php74 bash
# Truy cập PHP 8.4 container
docker exec -it php84 bash
# Chạy Composer trong container
docker exec -it php84 composer install
Frappe Development:
# Truy cập Frappe container
docker exec -it frappe bash
Nginx Configuration:
# Kiểm tra cấu hình nginx
docker exec -it nginx nginx -t
# Reload nginx
docker exec -it nginx nginx -s reload
# Xem logs nginx
docker-compose logs nginx
Troubleshooting
Kiểm tra logs:
# Xem logs tất cả services
docker-compose logs
# Xem logs service cụ thể
docker-compose logs nginx
docker-compose logs php74
docker-compose logs php84
docker-compose logs frappe
Restart services:
# Restart tất cả
docker-compose restart
# Restart service cụ thể
docker-compose restart nginx
docker-compose restart php74
docker-compose restart php84
docker-compose restart frappe
Rebuild containers:
# Rebuild tất cả
docker-compose up --build -d
# Rebuild service cụ thể
docker-compose up --build nginx -d
docker-compose up --build php74 -d
docker-compose up --build php84 -d
docker-compose up --build frappe -d
Kiểm tra status:
# Xem status tất cả containers
docker-compose ps
# Kiểm tra network
docker network ls
docker network inspect webserver
Xóa và tạo lại:
# Xóa tất cả containers và volumes
docker-compose down -v
# Xóa images
docker-compose down --rmi all
# Tạo lại từ đầu
docker-compose up --build -d
Tính năng đặc biệt
Auto Domain Resolution:
- Tự động cập nhật file
/etc/hostsvới các domain - Hỗ trợ
.nip.iodomains cho development - Backup và restore hosts file tự động
Dynamic Nginx Configuration:
- Tạo cấu hình nginx dựa trên biến môi trường
- Hỗ trợ multiple domains và subdomains
- WebSocket support cho real-time applications
Multi-PHP Support:
- PHP 7.4 cho ứng dụng legacy
- PHP 8.4 cho ứng dụng mới
- Composer tích hợp sẵn
- Cấu hình PHP tùy chỉnh
Frappe Integration:
- Frappe Framework development environment
- MariaDB và Redis tích hợp
- Bench commands support
- Asset building và compilation
Biến môi trường
Network Configuration:
NETWORK_SUBNET: Subnet cho Docker networkNETWORK_GATEWAY: Gateway cho Docker networkNETWORK_IP_RANGE: IP range cho containers
User Configuration:
UID: User ID cho containersUNAME: Username cho containersUGID: Group ID cho containersUGNAME: Group name cho containers
Domain Configuration:
LOCAL_IP: IP máy hostDOMAIN_*: Các domain cho từng ứng dụngDOMAIN_ARRAY: Danh sách domain cho hosts fileNGINX_CONFIG_DIR: Thư mục cấu hình nginx
Scripts
update-hosts.sh:
- Cập nhật file hosts tự động
- Backup và restore
- Hỗ trợ multiple domains
generate-nginx-config.sh:
- Tạo cấu hình nginx động
- Hỗ trợ .nip.io domains
- Multiple environment support
setup-frappe.sh:
- Setup Frappe container
- Tạo cấu hình cơ bản
- Hướng dẫn sử dụng
Lưu ý quan trọng
Yêu cầu hệ thống:
- Windows 10/11 với WSL2
- Docker Desktop for Windows
- Git
- Node.js và npm/yarn (cho havico)
- Ít nhất 8GB RAM
- 20GB disk space
Cài đặt WSL2 (nếu chưa có):
# Mở PowerShell với quyền Administrator và chạy:
wsl --install
# Hoặc cài đặt thủ công:
# 1. Enable WSL feature
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
# 2. Restart computer
# 3. Set WSL2 as default
wsl --set-default-version 2
# 4. Install Ubuntu/Debian from Microsoft Store hoặc:
wsl --install -d Ubuntu
wsl --install -d Debian
Kiểm tra trước khi chạy:
# Kiểm tra WSL
wsl --list --verbose
# Kiểm tra Docker
docker --version
docker-compose --version
# Kiểm tra cấu trúc thư mục
ls -la /home/$USER/Sources/
tree /home/$USER/Sources/ -L 2
# Kiểm tra node_modules trong havico
ls -la /home/$USER/Sources/saas/havico/node_modules/
Truy cập file từ Windows Explorer:
# Mở Windows Explorer tại thư mục WSL
explorer.exe .
# Hoặc truy cập trực tiếp:
explorer.exe \\wsl$\Ubuntu\home\$USER\Sources
explorer.exe \\wsl$\Debian\home\$USER\Sources
Troubleshooting phổ biến:
- Lỗi permission: Đảm bảo user có quyền truy cập thư mục Sources
- Lỗi node_modules: Chạy lại
npm installtrong thư mục havico - Lỗi Docker network: Xóa và tạo lại network:
docker network prune - Lỗi hosts file: Chạy script update-hosts.sh với quyền sudo
- WSL không khởi động: Kiểm tra WSL service và restart:
wsl --shutdown && wsl - Docker không chạy trong WSL: Đảm bảo Docker Desktop đang chạy trên Windows
- Lỗi file path: Sử dụng đường dẫn Linux trong WSL, không dùng Windows path