02. Docker 部署 New API
前置条件
服务器已经具备:
- Docker 可用
- CPA 已经跑通,端口
8317 - 腾讯云实例有公网 IP
本次选择:
- 数据库:SQLite
- 部署方式:单容器 Docker
- 外部端口:
3000 - 数据目录:
/root/new-api/data
1. 创建数据目录
mkdir -p /root/new-api/data
ls -la /root/new-api/期望看到:
data这个目录会挂进容器 /data,里面保存 SQLite 数据库、上传文件等。容器删除重建后,数据仍然保留。
2. 启动容器
多行命令如果复制容易出问题,可以直接用这一行:
docker run -d --name new-api --restart unless-stopped -p 3000:3000 -e TZ=Asia/Shanghai -v /root/new-api/data:/data calciumion/new-api:latest参数说明:
| 参数 | 说明 |
|---|---|
--name new-api | 容器名 |
--restart unless-stopped | Docker 重启后自动拉起 |
-p 3000:3000 | 宿主机 3000 映射到容器 3000 |
-e TZ=Asia/Shanghai | 设置时区 |
-v /root/new-api/data:/data | 持久化数据 |
calciumion/new-api:latest | New API 镜像 |
3. 验证启动
docker ps | grep new-api
docker logs --tail 30 new-api正常日志里能看到类似:
New API v1.0.0-rc.4 started
Network: http://172.17.0.2:3000/如果日志里出现:
system is not initialized and no root user exists这是正常的。新版 New API 第一次访问会让你初始化管理员账号,不一定有默认 root/123456。
4. 服务器本地测试
docker exec new-api wget -qO- http://localhost:3000/ | head -3
curl -sI http://127.0.0.1:3000/
ss -tlnp | grep 3000期望结果:
- 容器内能返回 HTML。
- 宿主机
curl返回HTTP/1.1 200 OK。 ss显示0.0.0.0:3000正在监听。
5. 首次访问
浏览器打开:
http://服务器公网IP:3000第一次进入页面后,按提示创建管理员账号。
创建完成后,先进入后台,再去配置 CPA 渠道。
6. Docker iptables 报错
如果启动容器时报:
iptables: No chain/target/match by that name常见原因是 Docker 的 iptables 链被 firewalld 或系统安全组件刷新了。处理方式:
docker rm new-api
systemctl restart docker
docker ps
docker run -d --name new-api --restart unless-stopped -p 3000:3000 -e TZ=Asia/Shanghai -v /root/new-api/data:/data calciumion/new-api:latest重启 Docker 会让容器短暂中断,但 --restart unless-stopped 的容器会自动回来。