Site Tools


Hotfix release available: 2025-05-14b "Librarian". upgrade now! [56.2] (what's this?)
project:deployment:domain

🌐 DV IT Infrastructure Platform - 域名配置示例

更新日期: 2025年1月 主域名: oasisvape.co.nz 目标: 通过二级域名实现服务分流和灵活切换


🎯 域名配置策略

核心原则

  • 主站独立: www.oasisvape.co.nz 继续指向现有Web Host
  • 服务分流: 所有IT基础设施服务使用二级域名
  • SSL自动化: 通过Traefik自动申请和续期Let's Encrypt证书
  • 灵活切换: 二级域名可随时切换指向不同服务器

优势分析

  • 架构清晰: 每个服务独立域名,便于管理和监控
  • 上线无缝: 本地调试完成后,仅需修改DNS记录即可上线
  • SSL自动化: 无需手动管理证书,Traefik自动处理
  • 后期维护: 服务升级、迁移、故障隔离更加简单

📋 Cloudflare DNS 配置示例

A记录配置

在Cloudflare DNS管理界面添加以下A记录:

类型 名称 内容 TTL 代理状态
A erp 156.67.214.225 Auto 已代理
A strapi 156.67.214.225 Auto 已代理
A n8n 156.67.214.225 Auto 已代理
A docs 156.67.214.225 Auto 已代理
A grafana 156.67.214.225 Auto 已代理
A prometheus 156.67.214.225 Auto 已代理

CNAME记录配置(可选)

如需更灵活的域名管理,可以使用CNAME记录:

类型 名称 内容 TTL 代理状态
CNAME erp srv878756.hstgr.cloud Auto 已代理
CNAME strapi srv878756.hstgr.cloud Auto 已代理
CNAME n8n srv878756.hstgr.cloud Auto 已代理
CNAME docs srv878756.hstgr.cloud Auto 已代理

🐳 Traefik 多域名配置示例

1. 共享PostgreSQL数据库配置

# infra/shared-database/docker-compose.yml
version: '3.8'
services:
  shared-postgres:
    image: postgres:16.0-alpine
    container_name: shared-postgres
    restart: unless-stopped
    environment:
      POSTGRES_DB: shared_postgres_db
      POSTGRES_USER: postgres_admin
      POSTGRES_PASSWORD: ${POSTGRES_ROOT_PASSWORD}
    volumes:
      - shared_postgres_data:/var/lib/postgresql/data
      - ./init-scripts:/docker-entrypoint-initdb.d
    networks:
      - traefik
    ports:
      - "5432:5432"
volumes:
  shared_postgres_data:
networks:
  traefik:
    external: true

2. ERPNext 配置

# infra/erpnext/docker-compose.yml
services:
  erpnext-frontend:
    image: frappe/erpnext:v15
    container_name: erpnext-frontend
    restart: unless-stopped
    environment:
      - SITE_NAME=erp.oasisvape.co.nz
    volumes:
      - erpnext_sites:/home/frappe/frappe-bench/sites
    networks:
      - traefik
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.erpnext.rule=Host(`erp.oasisvape.co.nz`)"
      - "traefik.http.routers.erpnext.entrypoints=websecure"
      - "traefik.http.routers.erpnext.tls.certresolver=mytlschallenge"
      - "traefik.http.services.erpnext.loadbalancer.server.port=80"
      - "traefik.docker.network=traefik"

3. Strapi 电商版配置

# infra/strapi-ecommerce/docker-compose.yml
services:
  strapi:
    image: strapi/strapi:latest
    container_name: dv-strapi-v5-ecommerce
    restart: unless-stopped
    environment:
      - DATABASE_CLIENT=postgres
      - DATABASE_HOST=shared-postgres
      - DATABASE_PORT=5432
      - DATABASE_NAME=shared_postgres_db
      - DATABASE_USERNAME=strapi_user
      - DATABASE_PASSWORD=${DATABASE_PASSWORD}
      - DATABASE_SCHEMA=strapi_ecommerce
      - JWT_SECRET=${JWT_SECRET}
      - ADMIN_JWT_SECRET=${ADMIN_JWT_SECRET}
      - APP_KEYS=${APP_KEYS}
      - NODE_ENV=production
    volumes:
      - ./config:/opt/app/config
      - ./src:/opt/app/src
      - ./package.json:/opt/app/package.json
      - strapi_uploads:/opt/app/public/uploads
    networks:
      - traefik
    depends_on:
      - shared-postgres
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.strapi.rule=Host(`strapi.oasisvape.co.nz`)"
      - "traefik.http.routers.strapi.entrypoints=websecure"
      - "traefik.http.routers.strapi.tls.certresolver=mytlschallenge"
      - "traefik.http.services.strapi.loadbalancer.server.port=1337"
      - "traefik.docker.network=traefik"
volumes:
  strapi_uploads:
networks:
  traefik:
    external: true

4. n8n 工作流自动化配置

# infra/n8n/docker-compose.yml
services:
  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    container_name: n8n-automation
    restart: unless-stopped
    environment:
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=shared-postgres
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_DATABASE=shared_postgres_db
      - DB_POSTGRESDB_USER=n8n_user
      - DB_POSTGRESDB_PASSWORD=${N8N_DB_PASSWORD}
      - DB_POSTGRESDB_SCHEMA=n8n_workflows
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
      - GENERIC_TIMEZONE=Pacific/Auckland
      - TZ=Pacific/Auckland
    volumes:
      - n8n_data:/home/node/.n8n
    networks:
      - traefik
    depends_on:
      - shared-postgres
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.n8n.rule=Host(`n8n.oasisvape.co.nz`)"
      - "traefik.http.routers.n8n.entrypoints=websecure"
      - "traefik.http.routers.n8n.tls.certresolver=mytlschallenge"
      - "traefik.http.services.n8n.loadbalancer.server.port=5678"
      - "traefik.docker.network=traefik"
volumes:
  n8n_data:
networks:
  traefik:
    external: true

5. DokuWiki 文档系统配置

# infra/dokuwiki/docker-compose.yml
services:
  dokuwiki:
    image: bitnami/dokuwiki:latest
    container_name: dokuwiki
    restart: unless-stopped
    environment:
      - TZ=Pacific/Auckland
    volumes:
      - dokuwiki_data:/bitnami/dokuwiki
    networks:
      - traefik
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.dokuwiki.rule=Host(`docs.oasisvape.co.nz`)"
      - "traefik.http.routers.dokuwiki.entrypoints=websecure"
      - "traefik.http.routers.dokuwiki.tls.certresolver=mytlschallenge"
      - "traefik.http.services.dokuwiki.loadbalancer.server.port=8080"
      - "traefik.docker.network=traefik"
volumes:
  dokuwiki_data:
networks:
  traefik:
    external: true

如需更多配置示例和故障排查,请参考Wiki其他页面。

project/deployment/domain.txt · Last modified: by 127.0.0.1