# 本地开发/测试用 Compose 文件 # - app 通过 runtime/.env 读取当前系统数据库配置 # - mysql 只用于首次登录和填写“系统数据库”前的临时引导 # - 保存系统数据库后,用户、设置和云数据库登记都来自共享系统数据库 # # 标准启动:bash deploy/local-init.sh(自动判断是否需要重建镜像) # 停止: docker compose -f docker-compose.local.yml down # 日志: docker compose -f docker-compose.local.yml logs -f app # # 不要把生产 APP_KEY、其他开发者的 .env 或云数据库密码复制到本机。 services: app: build: context: . dockerfile: deploy/Dockerfile.local image: jiangling_akaunting:local container_name: jiangling_app restart: unless-stopped depends_on: mysql: condition: service_healthy environment: # Local test data entry uses PATCH requests; do not let the global # firewall heuristics block the maintenance-only test environment. FIREWALL_ENABLED: "false" SUPPLIER_PAYABLE_MAINTENANCE_DB_CONNECTION: supplier_payable_maintenance SUPPLIER_PAYABLE_MAINTENANCE_DB_DRIVER: mysql SUPPLIER_PAYABLE_MAINTENANCE_DB_HOST: mysql SUPPLIER_PAYABLE_MAINTENANCE_DB_PORT: 3306 SUPPLIER_PAYABLE_MAINTENANCE_DB_DATABASE: akaunting SUPPLIER_PAYABLE_MAINTENANCE_DB_USERNAME: akaunting SUPPLIER_PAYABLE_MAINTENANCE_DB_PASSWORD: akaunting123 SUPPLIER_PAYABLE_MAINTENANCE_DB_PREFIX: ak_ ports: - "127.0.0.1:18088:18088" volumes: - ./runtime/.env:/var/www/html/.env - ./runtime/bills.sqlite:/var/www/html/runtime/bills.sqlite:ro - ./deploy/php-local.ini:/usr/local/etc/php/conf.d/zz-local-dev.ini:ro - jiangling_storage:/var/www/html/storage - jiangling_public:/var/www/html/public - ./app:/var/www/html/app - ./config:/var/www/html/config - ./database:/var/www/html/database - ./deploy:/var/www/html/deploy - ./modules:/var/www/html/modules - ./resources:/var/www/html/resources - ./routes:/var/www/html/routes - ./scripts:/var/www/html/scripts - ./tests:/var/www/html/tests networks: - jiangling_net healthcheck: test: ["CMD", "jiangling-healthcheck"] interval: 15s timeout: 5s retries: 10 start_period: 60s # Laravel Mix watcher for local frontend development. The generated assets # live in a shared volume so Apache serves the latest build immediately. frontend: image: jiangling_akaunting:local container_name: jiangling_frontend restart: unless-stopped user: "www-data" working_dir: /var/www/html command: ["npm", "run", "watch-poll"] environment: NPM_CONFIG_UPDATE_NOTIFIER: "false" volumes: - jiangling_public:/var/www/html/public - ./resources:/var/www/html/resources networks: - jiangling_net mysql: image: mysql:8.0 container_name: jiangling_mysql restart: unless-stopped # 这些凭据只属于回环地址上的临时引导库,不是团队共享数据库凭据。 environment: MYSQL_ROOT_PASSWORD: rootpass MYSQL_DATABASE: akaunting MYSQL_USER: akaunting MYSQL_PASSWORD: akaunting123 command: - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci - --default-authentication-plugin=mysql_native_password volumes: - jiangling_mysql:/var/lib/mysql ports: - "127.0.0.1:13306:3306" networks: - jiangling_net healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "-u", "root", "-p$$MYSQL_ROOT_PASSWORD"] interval: 5s timeout: 5s retries: 20 start_period: 30s # 按需启动:docker compose -f docker-compose.local.yml --profile analytics up -d clickhouse # 普通页面开发不需要运行列式库。 clickhouse: image: m.daocloud.io/docker.io/clickhouse/clickhouse-server:26.8.2.7-alpine container_name: jiangling_clickhouse profiles: ["analytics"] restart: unless-stopped environment: CLICKHOUSE_DB: caiwu_business_analytics CLICKHOUSE_USER: caiwu_app CLICKHOUSE_PASSWORD: local-clickhouse-only CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: 1 TZ: Asia/Shanghai ports: - "127.0.0.1:18123:8123" volumes: - jiangling_clickhouse:/var/lib/clickhouse networks: - jiangling_net ulimits: nofile: soft: 262144 hard: 262144 healthcheck: test: ["CMD-SHELL", "clickhouse-client --user \"$$CLICKHOUSE_USER\" --password \"$$CLICKHOUSE_PASSWORD\" --query 'SELECT 1' >/dev/null"] interval: 10s timeout: 5s retries: 12 start_period: 30s volumes: jiangling_storage: name: jiangling_storage jiangling_mysql: name: jiangling_mysql jiangling_clickhouse: name: jiangling_clickhouse jiangling_public: name: jiangling_public networks: jiangling_net: name: jiangling_net driver: bridge