
startersclan/bf2stats。它运行在PHP 7.4和nginx环境上。
asp镜像(支持的环境变量详见此处):
shdocker run --rm -it -p 80:80 -e DB_HOST=db -e DB_PORT=3306 -e DB_NAME=bf2stats -e DB_USER=admin -e DB_PASS=admin startersclan/bf2stats:2.9.4-asp
bf2sclone镜像(支持的环境变量详见此处):
shdocker run --rm -it -p 80:80 -e DBIP=db -e DBNAME=bf2stats -e DBLOGIN=admin -e DBPASSWORD=admin startersclan/bf2stats:2.9.4-bf2sclone
查看此示例,了解如何使用docker-compose部署《战地2》1.5服务器、PRMasterserver(作为主服务器)和bf2stats(作为统计网页服务器)。
查看此示例,了解如何使用docker-compose部署《战地2》1.5服务器,搭配BF2Hub作为主服务器和bf2stats作为统计网页服务器。
v2.2.0至v2.5.x版本间升级:更新Docker镜像标签,登录ASP并按照说明升级数据库<= v2.5.x升级到v2.6.x:详见此处的说明v2.6.0及以上版本间升级:更新Docker镜像标签,登录ASP并按照说明升级数据库若使用Docker Compose v2,请使用docker compose而非docker-compose。
sh# 1. 启动 docker-compose up --build # ASP可通过 http://localhost:8081/ASP 访问。用户名:admin,密码:admin。首次使用需登录并设置数据库。详见 ./config/ASP/config.php # bf2sclone可通过 http://localhost:8082 访问 # phpmyadmin可通过 http://localhost:8083 访问。用户名:admin,密码:admin。详见 ./config/ASP/config.php 配置文件 # 2. 若首次设置数据库,需重启BF2服务器以开始记录统计数据 docker-compose restart bf2 # 3. 启动BF2客户端前,需通过修改 C:\Windows\system32\drivers\etc\hosts 文件伪造GameSpy DNS。这是BF2客户端正常工作的必要步骤。 # 将'192.168.1.100'替换为开发机器的IP地址 192.168.1.100 battlefield2.available.gamespy.com 192.168.1.100 battlefield2.master.gamespy.com 192.168.1.100 battlefield2.ms14.gamespy.com 192.168.1.100 master.gamespy.com 192.168.1.100 motd.gamespy.com 192.168.1.100 gpsp.gamespy.com 192.168.1.100 gpcm.gamespy.com 192.168.1.100 gamespy.com 192.168.1.100 bf2web.gamespy.com 192.168.1.100 gamestats.gamespy.com 192.168.1.100 eapusher.dice.se # 4. 启动BF2客户端并连接到BF2服务器 # - 若使用BF2Hub作为GameSpy服务器,启动BF2.exe,登录BF2Hub账户,通过“多人游戏 > 连接到IP”连接服务器 # - 若使用docker-compose中的PRMasterserver作为GameSpy服务器,若之前使用BF2Hub补丁器修补过BF2.exe,需先取消修补。然后启动BF2.exe(不使用BF2Hub),创建新在线账户并登录,通过“多人游戏 > 连接到IP”连接服务器 # 回合结束后,BF2服务器会将统计快照发送至ASP。可在ASP和bf2sclone中查看统计数据。 # 开发 - 安装VSCode扩展 # 安装后,在代码中设置断点,按F5开始调试 code --install-extension bmewburn.vscode-intelephense-client # PHP智能感知 code --install-extension xdebug.php-debug # PHP远程调试(通过xdebug) code --install-extension ms-python.python # Python智能感知 # 若xdebug无法工作,可能是docker桥接的iptables INPUT链设置为DROP。 # 执行以下命令允许PHP通过docker0桥接访问主机 sudo iptables -A INPUT -i br+ -j ACCEPT # BF2服务器 - 重启服务器 docker-compose restart bf2 # BF2服务器 - 附加到服务器控制台 docker attach $( docker-compose ps -q bf2 ) # BF2服务器 - 进入容器 docker exec -it $( docker-compose ps -q bf2) bash # BF2服务器 - 查看日志 docker exec -it $( docker-compose ps -q bf2 ) bash -c 'cat python/bf2/logs/bf2game_*' # BF2服务器 - 列出快照 docker exec -it $( docker-compose ps -q bf2 ) ls -alR python/bf2/logs/snapshots/unsent # asp - 进入容器 docker exec -it $( docker-compose ps -q asp ) sh # asp - 列出备份 docker exec -it $( docker-compose ps -q asp ) ls -al /src/ASP/system/database/backups # asp - 列出配置 docker exec -it $( docker-compose ps -q asp ) ls -al /src/ASP/system/config # asp - 查看日志 docker exec -it $( docker-compose ps -q asp ) ls -al /src/ASP/system/logs # asp - 列出快照 docker exec -it $( docker-compose ps -q asp ) ls -alR /src/ASP/system/snapshots # 测试 ./test/test.sh dev 1 # 测试生产构建1 ./test/test.sh prod1 1 # 测试生产构建2 ./test/test.sh prod2 1 # 测试快照 curl -s -A GameSpyHTTP/1.0 -H 'Content-Type: application/json' --data @test/snapshots/-test-snapshot.txt localhost:8081/ASP/bf2statistics.php # 备份数据库 docker exec $( docker-compose ps -q db ) mysqldump -uroot -padmin bf2stats | gzip > bf2stats.sql.gz # 恢复数据库 zcat bf2stats.sql.gz | docker exec -i $( docker-compose ps -q db ) mysql -uroot -padmin bf2stats # 停止 docker-compose down # 清理 docker-compose down --remove-orphans docker volume rm bf2stats_prmasterserver-volume docker volume rm bf2stats_backups-volume docker volume rm bf2stats_config-volume docker volume rm bf2stats_logs-volume docker volume rm bf2stats_snapshots-volume docker volume rm bf2stats_bf2sclone-cache-volume docker volume rm bf2stats_db-volume
sh./release.sh 2.x.x git add . git commit -m "Chore: Release 2.x.x"
A: 这是由于UI无法处理后端无效响应的bug导致。在JSON响应前会输出PHP_ERROR警告:Warning: file_put_contents(/src/ASP/system/config/config.php): failed to open stream: Permission denied in /src/ASP/system/core/Config.php on line 165,导致JSON无效。
授予PHP对config.php的写权限:
shchmod 666 ./config/ASP/config.php docker-compose restart asp
Warning: file_put_contents(/src/ASP/system/config/config.php): failed to open stream: Permission denied in /src/ASP/system/core/Config.php on line 165A: 授予PHP用户对./src/ASP/system/config/config.php的写权限。
There was an error testing the system. Please refresh the page and try again.A: 表示UI从后端接收到无效的JSON响应。若有能力,可检查POST响应的负载。
BF2Statistics Processing Check: Fail或Gamespy (.aspx) Basic Response: Fail或Gamespy (.aspx) Advanced (1) Response: FailA: DNS解析问题。测试中用于验证GameSpy端点的HOST与浏览器中访问ASP的主机相同。例如,若通过[***]访问ASP,测试会针对[***]进行,若yourdomain.com的DNS解析失败则会出错。
开发环境中可忽略此错误,已有集成测试确保这些端点正常工作。
生产环境中应使用完全限定域名(FQDN),使ASP能解析其外部DNS名称以测试外部Web端点。
Importing Logs Failed!A: 与此问题原因相同。
Table (army) *NOT* Backed Up: [1045] Access denied for user 'admin'@'%' (using password: YES)A: db用户没有FILE权限。可手动添加授权,但即使添加,仍无法在不引入重大安全问题的情况下完成备份。详见此问题。
Table (army) *NOT* Backed Up: [1] Can't create/write to filebackupdb模块使用SELECT * INTO OUTFILE,但src文件不在db容器中,mariadb无法找到导出路径。过去,apache、php和mysql运行在同一台机器上,可写入相同文件系统;但在Docker中,每个容器有独立文件系统。唯一解决方法是将backups-volume以相同路径/src/ASP/system/database/backups/挂载到db容器和ASP容器中,并授予php用户(82)和mariadb用户(999)写权限,这需要目录权限设为777(全局可写),存在严重安全隐患。
建议通过cron任务使用mysqldump从链接到db容器的其他容器备份数据库:
sh# 从主机`db`、用户`root`、密码`admin`、数据库`bf2stats`导出数据 mysqldump -hdb -uroot -padmin bf2stats
docker-compose up时PHP日志中出现Xdebug: [Step Debug] Could not connect to debugging client. Tried: host.docker.internal:9000 (through xdebug.client_host/xdebug.client_port)A: 开发环境中,PHP调试器未运行。在VSCode中按F5启动PHP调试器。若无需调试,在docker-compose.yml中设置XDEBUG_MODE=off禁用XDebug。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务