Skip to main content

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

  • Mở Start Menu
  • Tìm kiếm "Ubuntu" hoặc "Debian"
  • Click vào ứng dụng WSL distribution

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:

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 system
  • api.smartpost.vn.local - API service
  • thanhvien.smartpost.vn.local - Customer portal
  • api-customer.smartpost.vn.local - Customer API
  • import.smartpost.vn.local - Import service
  • payment.itvina.com.local - Payment service

TMS Applications:

  • tms.smartpost.vn.local - TMS soft management
  • tms-api.smartpost.vn.local - TMS API service
  • fleet.smartpost.vn.local - Fleet management
  • fleet-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.io
  • havico.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/hosts với các domain
  • Hỗ trợ .nip.io domains 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 network
  • NETWORK_GATEWAY: Gateway cho Docker network
  • NETWORK_IP_RANGE: IP range cho containers

User Configuration:

  • UID: User ID cho containers
  • UNAME: Username cho containers
  • UGID: Group ID cho containers
  • UGNAME: Group name cho containers

Domain Configuration:

  • LOCAL_IP: IP máy host
  • DOMAIN_*: Các domain cho từng ứng dụng
  • DOMAIN_ARRAY: Danh sách domain cho hosts file
  • NGINX_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:

  1. Lỗi permission: Đảm bảo user có quyền truy cập thư mục Sources
  2. Lỗi node_modules: Chạy lại npm install trong thư mục havico
  3. Lỗi Docker network: Xóa và tạo lại network: docker network prune
  4. Lỗi hosts file: Chạy script update-hosts.sh với quyền sudo
  5. WSL không khởi động: Kiểm tra WSL service và restart: wsl --shutdown && wsl
  6. Docker không chạy trong WSL: Đảm bảo Docker Desktop đang chạy trên Windows
  7. Lỗi file path: Sử dụng đường dẫn Linux trong WSL, không dùng Windows path