前言
虽然本人还是游戏技术不行,还是一个萌新。但我搞搞这东西还是不错的😋
最近在研究使用linux服务器来搭建服务端,研究了两天,fork了spt/server的代码来自行编译并创建docker镜像,方便linux服务器部署。现在给大家分享一下。两个方法:docker和service
代码仓库和docker镜像地址:
官方: https://dev.sp-tarkov.com/SPT/Server sp-tarkov/server
我的仓库,只修改了默认的http地址为0.0.0.0和输出的文件名:https://dev.sp-tarkov.com/medusa/spt-server AirryCo/spt-server: SP-Tarkov Server's Docker image supported
自动构建地址:https://github.com/AirryCo/spt-server-ci.git
Docker镜像:
SPT 镜像站:https://dev.sp-tarkov.com/medusa/-/packages/container/spt-server/latest(停止更新,请更换为DockerHub地址或者GHCR地址)
Docker Hub:https://hub.docker.com/r/stblog/spt-server
GHCR:https://github.com/AirryCo/spt-server-ci/pkgs/container/spt-server
【推荐】阿里云镜像地址:registry.cn-shenzhen.aliyuncs.com/spt-server/spt-server
本教程只分享搭建方法和解决搭建过程中遇到的问题,不解答服务端遇到bug。如果游玩中遇到bug,请考虑官方发布的程序。
未经本人授权,禁止搬运。
一、使用docker部署
安装docker
参考中科大脚本:
curl -fsSL https://get.docker.com -o get-docker.sh sudo DOWNLOAD_URL=https://mirrors.ustc.edu.cn/docker-ce sh get-docker.sh
拉取镜像
由于SPT站点空间有限,24-09-20开始停止更新SPT的Docker仓库镜像,请即时更换为DockerHub、GHCR或者阿里云源
三选一
docker pull stblog/spt-server docker pull ghcr.io/airryco/spt-server docker pull registry.cn-shenzhen.aliyuncs.com/spt-server/spt-server
指定版本号,如:
docker pull ghcr.io/airryco/spt-server:nightly docker pull stblog/spt-server:nightly-fika docker pull stblog/spt-server:3.9.8 docker pull registry.cn-shenzhen.aliyuncs.com/spt-server/spt-server:3.9.8
建议拉取时指定版本号,如果不指定,则默认使用 latest ,为最新稳定版。nightly为每夜版,即每天晚上自动构建版本,体验最新版服务端。nightly-fika为每夜版内置Fika-Server。详情:https://sns.oddba.cn/140144.html
运行容器
程序根目录为:/opt/spt-server/,用户数据存放在 /opt/spt-server/user ,容器端口为 6969
!!!注意防火墙要放行主机映射过去的端口!!!
!!!注意防火墙要放行主机映射过去的端口!!!
!!!注意防火墙要放行主机映射过去的端口!!!
以下两种方式二选一
[*]对于 docker run
使用 -p 来开启端口映射:-p <宿主机端口>:<容器端口>
使用 -v 并开启数据持久化:-v <宿主机目录>:<容器目录>
每夜版(每日更新版本):
docker run -d --name spt-server --restart always -p 6969:6969 -e backendIp=192.168.1.1 -e backendPort=6969 -v ./spt-server:/opt/spt-server stblog/spt-server:nightly
3.10版本:
docker run -d --name spt-server --restart always -p 6969:6969 -e backendIp=192.168.1.1 -e backendPort=6969 -v ./spt-server:/opt/spt-server stblog/spt-server:3.10.0
3.9版本:
docker run -d --name spt-server --restart always -p 6969:6969 -v ./spt-server:/opt/spt-server dev.sp-tarkov.com/medusa/spt-server:3.9.8
[*]对于 docker compose,compose.yml 配置如下
3.10及以上版本: services: spt-server: image: registry.cn-shenzhen.aliyuncs.com/spt-server/spt-server:nightly container_name: spt-server restart: always volumes: - './spt-server:/opt/spt-server' ports: - '6969:6969' environment: - backendIp=192.168.1.1 # 填写你服务器的IP - backendPort=6969 # 填写你要映射的端口 3.9.5~3.9.8: services: spt-server: image: dev.sp-tarkov.com/medusa/spt-server:latest container_name: spt-server restart: always network_mode: host volumes: - './spt-server:/opt/spt-server' ports: - '6969:6969' 3.9.4版本: services: spt-server: image: dev.sp-tarkov.com/medusa/spt-server:3.9.4 container_name: spt-server restart: always volumes: - './user:/opt/spt-server/user' - './configs:/opt/spt-server/configs' ports: - '6969:6969'
然后运行:
docker compose -p spt-server up -d
查看容器日志:
docker logs spt-server
不出意外,内容输出如下:
➜ sudo docker logs -f spt-server
Commit hash: a0c4ffe210e9b3a15bf600f8ffc03ca7ad13392b
Build date: 1722043761109
┌─────────────────────────────────────────┐
│ SPT 3.9.4 │
│ https://discord.sp-tarkov.com │
│ │
│ This work is free of charge │
│ If you paid money, you were scammed │
│ Commercial use is prohibited │
└─────────────────────────────────────────┘
ModLoader: loading: 1 server mods…
Mod: nanosuit version: 1.1.0 by: AT loaded
Server: executing startup callbacks…
Importing database…
Database import finished
Started webserver at http://192.168.31.51:6969
Started websocket at ws://192.168.31.51:6969
Server is running, do not close while playing SPT, Happy playing!
更新容器
3.10及后面的版本请切换为DockerHub、GHCR或者阿里云!!!
3.10及后面的版本请切换为DockerHub、GHCR或者阿里云!!!
3.10及后面的版本请切换为DockerHub、GHCR或者阿里云!!!
后续更新服务端版本,只需要重新拉取一遍容器,然后删除旧容器,重新运行新容器即可。
docker stop spt-server docker rm spt-server docker run -d --name spt-server --restart always -p 6969:6969 -v ./spt-server:/opt/spt-server stblog/spt-server:latest
连接
更改登入器连接地址
二、使用linux服务的方式进行部署
另外一篇教程提到,使用nohup方式运行的话,需要编译时把utf8编码输出那行代码删除,不然会报ERROR。现在提供一种以linux服务的方式运行,不需要删除代码,直接编译就能运行。
!!!注意防火墙要放行6969端口!!!
!!!注意防火墙要放行6969端口!!!
!!!注意防火墙要放行6969端口!!!
下载压缩包并解压
github发布地址:https://github.com/AirryCo/spt-server-ci/releases
举个栗子:
3.10及以上版本
wget https://github.com/AirryCo/spt-server-ci/releases/download/3.10.0-BEM-20240919/spt-server-3.10.0-BEM-20240919-linux-release-faa0b61f-EFT0.15.0.32291-20240920004544.zip unzip spt-server-3.10.0-BEM-20240919-linux-release-faa0b61f-EFT0.15.0.32291-20240920004544.zip
3.9版本
wget https://github.com/AirryCo/spt-server-ci/releases/download/3.9.8/spt-server-3.9.8-linux-release-EFT0.14.9.30626.tgz tar -zxvf spt-server-3.9.8-linux-release-EFT0.14.9.30626
会解压出一个目录 spt-server
目录结构如下:
创建linux服务
使用编辑工具(vim、nano等)编辑文件 /usr/lib/systemd/system/spt-server.service
vim /usr/lib/systemd/system/spt-server.service
然后写入配置参考如下:
[Unit] #服务描述 Description=逃离塔科夫离线模式服务端 After=network.target auditd.service [Service] #定义systemctl start|stop|reload *.service 的执行方法(具体命令需要写绝对路径) ExecStartPre= ExecStart=/opt/data/spt-server/SPT.Server ExecReload= ExecStop= # 应用程序工作目录(即服务端根目录) WorkingDirectory=/opt/data/spt-server Restart=no #创建私有的内存临时空间 PrivateTmp=True [Install] #多用户 WantedBy=multi-user.target
保存退出
运行服务
sudo systemctl daemon-reload sudo systemctl start spt-server.service
查看服务状态
sudo systemctl status spt-server.service
参考如下,主要注意 active (running) 字段,一定要为 running 才行!!!
查看服务器日志
sudo journalctl -u spt-server.service
日志太多我就不截图了
开机自启(可选)
sudo systemctl enable spt-server.service sudo systemctl status spt-server.service
这个时候看到两个 enabled 就代表开机自启成功了
三、关于3.9.8版本的Mod使用
由于编译3.9版本的时候,没有注意编译路径,导致使用mod之后会报错。现贴出解决办法:
please replace all instances of the string “/snapshot/project” in the mod folder with “/snapshot/workspace/medusa/spt-server/code/project” before running.(version 3.9 only,No changes required for version 3.10)
Error: Cannot find module '/snapshot/project'
replace:
/snapshot/project
——->/snapshot/workspace/medusa/spt-server/code/project
command:sed -i "s/\/snapshot\/project/\/snapshot\/workspace\/medusa\/spt-server\/code\/project/g" $(grep -rl "/snapshot/project" .)
Error: Cannot find module '/snapshot/workspace/node_modules
replace:
/snapshot/workspace
——->/snapshot/workspace/medusa/spt-server/code/project
command:sed -i "s/\/snapshot\/workspace/\/snapshot\/workspace\/medusa\/spt-server\/code\/project/g" $(grep -rl "/snapshot/workspace" .)
Error: Cannot find module 'C:/snapshot/project'
replace:
C:/snapshot/project
——->/snapshot/workspace/medusa/spt-server/code/project
具体可查看:Error: Cannot find module '/snapshot/workspace/node_modules' · Issue #3 · AirryCo/spt-server-ci
写在最后
最后祝大家玩得开心!!!
参考文章:
【SPTarkov】SPT-AKI 3.9.3 Release-30626【24.07.20更新】【逃离塔科夫单机离线版】
【服务端配置详解】【3.5.0】详细的服务端配置注释|修改成舒服的游戏环境|给萌新开启自定义的大门
[Linux 教程]在Linux云服务器上使用docker部署SPT-AKI服务器
在Linux上搭建SPT服务器(Aki.Server服务端)
可能是史上最全面易懂的 Systemd 服务管理教程!( 强烈建议收藏 )-腾讯云开发者社区-腾讯云 (tencent.com)
版本会自动更新并发布在DockerHub和GitHub上
关于mod:如果需要使用mod,请先运行一次容器或服务,然后再把需要使用的Mod放入user/mods下。如果提示“Error: Cannot find module”的错误,查找Mod代码里的“C:/snapshot/project”,将其替换成“/snapshot/project”即可
二楼备用
docker下貌似MG-Mod会爆红
再查看,或者检查你的路径是不是对了
已经按照Pronax的说法改了MGUSmod和MGTrader