游戏 内网穿透 游戏服务器 搭建 幻兽帕鲁本地服务器外网联机最佳解决方案docker+frp Takake 2024-01-22 2024-01-30 1.安装docker engine
非ubuntu其他系统安装docker官方手册
1 2 3 4 5 6 7 8 9 10 11 12 13 14 sudo apt-get update sudo apt-get install ca-certificates curl gnupg sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME " ) stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt-get update
1 2 3 sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
1 sudo vim /etc/docker/daemon.json
1 2 3 4 5 6 7 8 9 { "registry-mirrors" : [ "https://docker.mirrors.ustc.edu.cn" , "https://dockerproxy.com" , "https://hub-mirror.c.163.com" , "https://mirror.baidubce.com" , "https://ccr.ccs.tencentyun.com" ] }
1 2 3 4 5 6 $ systemctl restart docker $ docker info $ sudo docker run hello-world
2.安装PalServer-Docker服务器
jammsen/palworld-dedicated-server 镜像HUB地址
1 2 3 4 5 $ sudo docker pull jammsen/palworld-dedicated-server:latest $ mkdir ~/palworld $ sudo chmod 777 ~/palworld
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 $ sudo docker run -d --name palworld-dedicated-server \ -p 8211:8211/udp -p 25575:25575/tcp \ -e ALWAYS_UPDATE_ON_START=true \ -e MAX_PLAYERS=32 \ -e MULTITHREAD_ENABLED=true \ -e COMMUNITY_SERVER=true \ -e RCON_ENABLED=true \ -e RCON_PORT=25575 \ -e PUBLIC_IP="" \ -e PUBLIC_PORT=8211 \ -e SERVER_NAME=DockerPalWorld \ -e SERVER_DESCRIPTION="" \ -e SERVER_PASSWORD="" \ -e ADMIN_PASSWORD="" \ -v ~/palworld:/palworld \ jammsen/palworld-dedicated-server:latest
可以使用ctrl + p + q
退出docker交互
可使用docker-compose 构建
compose.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 version: '3.9' services: palworld-dedicated-server: build: . container_name: palworld-dedicated-server image: jammsen/palworld-dedicated-server:latest restart: always network_mode: bridge ports: - target: 8211 published: 8211 protocol: udp mode: host - target: 25575 published: 25575 protocol: tcp mode: host environment: - ALWAYS_UPDATE_ON_START=true - MAX_PLAYERS=32 - MULTITHREAD_ENABLED=true - COMMUNITY_SERVER=true - RCON_ENABLED=true - RCON_PORT=25575 - PUBLIC_IP=10.0.0.5 - PUBLIC_PORT=8211 - SERVER_NAME=jammsen-docker-generated-###RANDOM### - SERVER_DESCRIPTION=Palworld-Dedicated-Server running in Docker by jammsen - SERVER_PASSWORD=serverPasswordHere - ADMIN_PASSWORD=adminPasswordHere volumes: - ./game:/palworld
1 $ vim ~/palworld/Pal/Saved/Config/LinuxServer/PalWorldSettings.ini
需要注意的是不可修改默认环境变量中存在参数,例如端口号,服务器密码,服务器名,等参数,因为修改了也不会生效,因为重启容器会默认加载环境变量来写配置文件。
如要修改环境变量中存在的参数,就需要删除该容器实例,sudo docker rm palworld-dedicated-server ,重新创建一个新的容器实例,只要我们没有删除映射好的~/palworld
文件夹,就不需要重新下载游戏服务器,也不会覆盖存档因此可以放心删除容器。如果实在不放心可以备份存档。
存档位置是~/palworld/Pal/Saved
文件夹,如需备份或迁移存档只需要操作该文件夹即可。
3.添加定时任务重启服务 1 2 3 4 5 $ sudo crontab -e $ systemctl restart cron
如果添加定时任务没有生效,可能是时区的问题,确定一下你的系统时区。
1 2 3 4 5 6 $ timedatectl $ date $ sudo timedatectl set-timezone Asia/Shanghai
4.frp内网穿透 4.1.实现条件
需要一台具有公网ipv4的服务器(最好是国内的服务器这样延迟低,国外的CN2 GIA 之类的高速线路延迟也不低)(经过我的测试ipv6无法解析)
带宽要求不高根据人数来确定,通常3M或以上的带宽,没有问题,不用特别去使用按量计费(1M都能跑起来,就是加载地图有点,慢,延迟也不是很高,只有不到100)。
4.2.实现代码 4.2.1.frp下载与仓库
frp仓库地址
frp实例
1 2 3 4 5 $ wget http://119.23.186.200:8000/frp_0.52.3_linux_amd64.tar.gz $ tar -zxvf frp_0.52.3_linux_amd64.tar.gz $ cd frp_0.52.3_linux_amd64
4.2.2.实现细节
服务端运行frps$: ./frps -c frps.toml
1 2 3 4 5 6 7 8 9 10 11 bindPort = 7000 auth.method = "token" auth.token = "baixiaochun"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 serverAddr = "<云服务器ip>" serverPort = 7000 auth.method = "token" auth.token = "baixiaochun" [[proxies]] name = "PalServer" type = "udp" localIP = "127.0.0.1" localPort = 8211 remotePort = 8211 [[proxies]] name = "RconPalServer" type = "tcp" localIP = "127.0.0.1" localPort = 25575 remotePort = 25575
守护进程运行
nohup ./frpc -c frpc.toml >log.txt 2>&1 &
日志输出到当前文件夹的log.txt中
可用过 ps -ef | grep frp 查看进程号,然后使用 kill -9 <PID>
来删除进程
Windows 运行命令为 ./frpc.exe -c frpc.toml
5.疑难杂症
需要什么配置才能运行起来?
nohup 不生效怎么办?
尝试使用exit退出ssh命令终端,而不是直接关闭
尝试使用screen 指令来管理会话
Windows服务器的存档可以迁移到linux吗?
根据我的尝试是不可以的,存档文件夹中的文件名称有差异。
为什么重启服务器存档丢失?
我也不知道,没遇到过,不过好像好多人遇到过,网上应该有解决办法。
服务启动和我视频显示一致,为什么就是连不上呀。
注意开启防火墙8211/udp端口
注意内网ip和外网ip的区别,不要在外网用内网ip去连服务器,内网ip指192.168.–/172.16.–/10.–。内网就用内网ip连,外网就用外网ip连。
为什么我linux配置在PalWorldSettings.ini 文件中修改了PublicPort=8211 ,端口号,但是不生效。
不生效的话在启动配置中添加参数./PalServer.sh port=10000
,这样端口更改就生效了。(该问题仅针对非docker启动)
如果是docker启动,无需修改端口号,直接在启动端口映射中映射端口就可以了-p 10000:8211
可以使用ipv6吗?
服务器更新怎么解决?
非docker运行下使用下载服务时运行的steamcmd 命令就可以更新了
docker运行添加环境变量**-e ALWAYS_UPDATE_ON_START=true **,每次启动容器实例时就更新服务器了。
在ssh终端输入密码时为什么没反应?
使用frp内网穿透需要服务器性能吗?
不需要,网络带宽够就行。几个人用4M就差不多了,使用内网ip连的人不算人。
使用steamclient.io找不到如何解决?
必须要steam有这个游戏才能开服吗?
linux会比windows使用消耗内存更小吗?
使用docker安装和linux本机安装有什么区别?
docker 更方便,但性能相较于本机要稍微差一些,但也有限,docker容器技术的性能还是可以信任的,不然也不可能这么流行。
Linux系统之前如何进行存档迁移
迁移文件夹Pal/Saved即可
linux eg:~/.steam/SteamApps/common/PalServer/Pal/Saved
docke eg:~/palworld/Pal/Saved