Trojan Main 是一个集成 Trojan 服务、Web 管理面板、用户面板、节点同步与 MariaDB 数据存储的 Docker 化管理系统。镜像同时支持 linux/amd64 与 linux/arm64。
80/tcp 和 443/tcp;两项服务通过 SNI 共享公网 443先创建共享网络:
docker network create proxy_network
在部署目录创建 docker-compose.yaml:
services:
mariadb:
image: mariadb:latest
container_name: trojan_db
restart: always
environment:
TZ: Asia/Shanghai
MARIADB_DATABASE: trojan
MARIADB_ROOT_PASSWORD: 请替换为高强度数据库密码
command:
- --event-scheduler=ON
- --default-time-zone=+08:00
volumes:
- ./db_data:/var/lib/mysql
networks:
- proxy_network
trojan:
image: mnday/trojan-main:latest
container_name: trojan
restart: always
depends_on:
- mariadb
environment:
TZ: Asia/Shanghai
# 默认不需要配置。设为 true 会停止自动节点同步调度器。
DISABLE_NODE_SYNC: "false"
ports:
- "443:443"
- "80:80"
dns:
- 1.1.1.1
- 8.8.8.8
volumes:
- ./conf/trojan:/usr/local/etc/trojan
- ./conf/panel:/usr/local/etc/panel
- ./conf/nginx:/etc/nginx
- ./conf/certs:/root/certs:ro
- ./conf/acme:/root/.acme.sh
networks:
- proxy_network
networks:
proxy_network:
name: proxy_network
external: true
启动容器:
docker compose up -d
首次启动时,如果 Trojan 配置仍是模板状态,容器会等待初始化。运行安装向导:
docker exec -it trojan install
向导会要求输入 Trojan 域名、Panel 域名、证书方式、两个内部监听端口、数据库连接信息和管理员账户。默认内部端口为:
56784443两个内部端口不会发布到公网;公网入口固定为 Nginx 443。安装向导会申请或验证一张同时覆盖两个域名的证书,并生成如下 SNI 分流:
Trojan 域名:443 → Trojan 内部端口
Panel 域名:443 → Panel 内部 HTTPS 端口
上面示例对应的数据库信息为:
trojan_dbtrojanMARIADB_ROOT_PASSWORD 设置的值初始化完成后访问:
https://Panel 域名/
./conf/nginx 会整体映射到容器的 /etc/nginx。首次启动只会创建 ./conf/nginx/nginx.conf,之后 install.sh 直接更新该文件。用户可以在宿主机修改它并重启容器,以扩展其他 SNI 或反向代理服务。default.conf、mime.types 等固定依赖均位于镜像内部,不写入持久化目录,也不需要用户维护。
| 宿主机目录 | 容器目录 | 用途 |
|---|---|---|
./db_data | /var/lib/mysql | MariaDB 数据库 |
./conf/trojan | /usr/local/etc/trojan | Trojan 与数据库连接配置 |
./conf/panel | /usr/local/etc/panel | 面板主密钥 |
./conf/nginx | /etc/nginx | install.sh 生成的 Nginx 主配置及用户自定义反代配置 |
./conf/certs | /root/certs | 自定义证书,只读挂载 |
./conf/acme | /root/.acme.sh | acme.sh 证书及账户数据 |
./conf/panel/.panel-secret 会在首次初始化或 API 首次启动时自动生成。JWT 签名密钥和 OTP 加密密钥均由它派生。必须长期持久化并纳入备份;丢失或更换该文件会导致现有登录令牌失效,并可能导致已绑定的 OTP 无法解密。
请勿将 db_data、证书、.panel-secret 或包含真实密码的配置提交到 Git。
同步系统包含两层开关:
全局调度器由主容器环境变量控制:
environment:
DISABLE_NODE_SYNC: "true"
"false":启动自动同步"true":关闭自动同步调度器该变量在 API 进程启动时读取,修改后必须重建或重启主容器:
docker compose up -d --force-recreate trojan
它是部署级紧急开关,目前不在管理页面中修改。管理员首页会显示调度器的真实状态。
管理员可在“节点管理 → 编辑节点”中启用或停用某个节点。单节点开关不会改变全局调度器状态。
启用自动同步需要同时满足:
DISABLE_NODE_SYNC 不为 true同步流程:
上线前建议先使用“测试连接”,再执行一次“立即同步”,并通过实时日志确认完整过程。
数据库事件调度器必须保持开启,否则到期状态、周期流量重置和日志清理等事件不会按时执行。
检查状态:
SHOW VARIABLES LIKE 'event_scheduler';
SELECT EVENT_SCHEMA, EVENT_NAME, STATUS, LAST_EXECUTED
FROM information_schema.EVENTS
WHERE EVENT_SCHEMA = 'trojan';
临时开启:
SET GLOBAL event_scheduler = ON;
Docker Compose 中的持久化配置为:
command:
- --event-scheduler=ON
- --default-time-zone=+08:00
TZ=Asia/Shanghai 设置容器系统时区,--default-time-zone=+08:00 设置 MariaDB 默认时区,两者用途不同。
登录风控只限制 Web 面板认证,不会停用 Trojan 用户,也不会改变用户的服务状态。
至少备份以下内容:
trojan 数据库./conf/trojan./conf/panel导出数据库:
docker exec trojan_db mariadb-dump \
-u root -p \
--single-transaction --routines --events --triggers \
trojan > trojan-backup.sql
使用 --events 非常重要,否则数据库事件不会包含在备份中。
恢复数据库:
docker exec -i trojan_db mariadb -u root -p trojan < trojan-backup.sql
恢复后检查事件调度器、数据库事件、用户数量、节点配置和最近同步日志。
docker compose pull --policy always
docker compose up -d --force-recreate
docker compose ps
docker compose logs --tail=200 trojan
更新前请先备份数据库和 conf 目录。不要删除 db_data 或 conf/panel 后直接重建生产服务。
查看容器状态:
docker compose ps
查看主服务日志:
docker compose logs -f trojan
查看数据库日志:
docker compose logs -f mariadb
检查多架构镜像:
docker buildx imagetools inspect mnday/trojan-main:latest
检查数据库表:
CHECK TABLE
trojan.users,
trojan.nodes,
trojan.gift_cards,
trojan.node_sync_logs;
检查主容器的环境变量:
docker inspect trojan --format '{{range .Config.Env}}{{println .}}{{end}}' \
| grep DISABLE_NODE_SYNC
如果输出 DISABLE_NODE_SYNC=true,请从 Compose 配置中删除该变量或改为 false,然后重新创建主容器。
依次检查:
docker compose pull --policy always
docker compose up -d --force-recreate
随后清除浏览器缓存或使用无痕窗口验证。
确认迁移时同时恢复了 ./conf/panel/.panel-secret。仅恢复数据库但没有恢复该文件,无法解密原有 OTP 密钥。
Content type
Image
Digest
sha256:8f084e824…
Size
130.7 MB
Last updated
20 days ago
docker pull mnday/trojan-main