Files
oneterm/deploy/docker-compose.frontend-dev.yaml
2025-09-16 19:04:19 +08:00

183 lines
4.7 KiB
YAML

# Docker Compose Configuration - Frontend Development Environment
# Start necessary backend containers, run frontend locally
services:
# MySQL Database
mysql:
image: registry.cn-hangzhou.aliyuncs.com/veops/mysql:8.2.0
container_name: oneterm-mysql-dev
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: '123456'
MYSQL_DATABASE: 'oneterm'
volumes:
- ./volume/mysql:/var/lib/mysql
- ./mysqld.cnf:/etc/mysql/conf.d/mysqld.cnf
- ./acl.sql:/docker-entrypoint-initdb.d/2-acl.sql
- ./create-users.sql:/docker-entrypoint-initdb.d/1-create-users.sql
ports:
- "13306:3306"
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-P", "3306", "-u", "root", "-p123456"]
interval: 10s
timeout: 5s
retries: 5
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
restart: always
networks:
new:
aliases:
- mysql
# Redis Cache
redis:
image: registry.cn-hangzhou.aliyuncs.com/veops/redis:7.2.3
container_name: oneterm-redis-dev
restart: always
environment:
TZ: Asia/Shanghai
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 5s
retries: 5
ports:
- "16379:6379"
networks:
new:
aliases:
- redis
# Guacamole Daemon (RDP/VNC Support)
oneterm-guacd:
image: registry.cn-hangzhou.aliyuncs.com/veops/oneterm-guacd:1.5.4
container_name: oneterm-guacd-dev
user: root
restart: always
volumes:
- ./volume/replay:/replay
- ./volume/rdp:/rdp
healthcheck:
test: ["CMD", "nc", "-z", "localhost", "4822"]
interval: 10s
timeout: 5s
retries: 5
ports:
- "14822:4822"
networks:
new:
aliases:
- oneterm-guacd
# ACL API Service
acl-api:
image: registry.cn-hangzhou.aliyuncs.com/veops/acl-api:2.2
container_name: oneterm-acl-api-dev
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
environment:
TZ: Asia/Shanghai
WAIT_HOSTS: mysql:3306, redis:6379
SYSTEM_DEFAULT_LANGUAGE: # en-US, zh-CN
volumes:
- ./.env:/data/apps/acl/.env
restart: always
command:
- /bin/sh
- -c
- |
if [ ! -f /var/run/.initialized ]; then
flask db-setup
flask common-check-new-columns
flask init-acl
flask init-department
touch /var/run/.initialized
fi
nohup bash -c 'flask db-setup && flask common-check-new-columns' >/dev/null 2>&1 &
gunicorn --workers=3 autoapp:app -b 0.0.0.0:5000 -D --access-logfile logs/access.log --error-logfile logs/error.log
celery -A celery_worker.celery worker -E -Q acl_async --logfile=one_acl_async.log --autoscale=2,1
healthcheck:
test: ["CMD", "nc", "-z", "127.0.0.1", "5000"]
interval: 5s
timeout: 5s
retries: 5
ports:
- "15000:5000" # Expose port for local backend access
networks:
new:
aliases:
- acl-api
# OneTerm API Service (optional, for complete backend environment)
oneterm-api:
image: registry.cn-hangzhou.aliyuncs.com/veops/oneterm-api:v25.9.1
container_name: oneterm-api-dev
environment:
ONETERM_RDP_DRIVE_PATH: /rdp
volumes:
- ./volume/replay:/replay
- ./volume/rdp:/rdp
- ./config.yaml:/oneterm/config.yaml
depends_on:
oneterm-guacd:
condition: service_healthy
acl-api:
condition: service_healthy
healthcheck:
test: ["CMD", "nc", "-z", "localhost", "8888"]
interval: 10s
timeout: 5s
retries: 5
command:
- "./server"
- "config.yaml"
restart: always
networks:
new:
aliases:
- oneterm-api
tty: true
ports:
- "2222:2222" # SSH Port
- "18888:8888" # API Port
# Nginx Proxy for Frontend Development (using UI image)
nginx-frontend-dev:
image: registry.cn-hangzhou.aliyuncs.com/veops/oneterm-ui:v25.9.1
container_name: oneterm-nginx-frontend-dev
environment:
TZ: Asia/Shanghai
volumes:
- ./nginx.frontend-dev.conf:/etc/nginx/conf.d/frontend-dev.conf
- ./volume/nginx-logs:/var/log/nginx
ports:
- "8080:8080" # Nginx proxy port
depends_on:
- acl-api
- oneterm-api
restart: always
command:
- /bin/sh
- -c
- |
nginx -g 'daemon off;'
extra_hosts:
- "host.docker.internal:host-gateway" # Allow container to access host
networks:
new:
aliases:
- nginx-frontend-dev
networks:
new:
driver: bridge
name: oneterm_dev_network
ipam:
config:
- subnet: 172.31.0.0/24