====== 🌐 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其他页面。