部署

docker-compose

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
services:
web:
container_name: ys
image: ubuntu:20.04
network_mode: "bridge"
ports:
- "81:81/tcp"
- "3306:3306/tcp"
- "8000:8000/tcp"
- "8888:8888/tcp" # bt端口
- "20071:20071/tcp"
- "20081:20081/tcp"
- "20011:20011/tcp"
- "4433:4433/tcp"
- "1001-1005:1001-1005/udp"
- "20041:20041/udp"
restart: unless-stopped
stdin_open: true
tty: true

准备工作

进入容器

1
2
3
docker exec -it ys bash
apt update
apt install wget curl libasan5 python2.7-dev redis-server

安装宝塔

1
2
3
4
5
6
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && bash install.sh 6dca892c

# 登录宝塔面板安装以下服务
Nginx 1.18
mysql 8.0
php 7.4

复制服务端到容器内

1
2
3
4
5
6
7
docker cp ys3.4.tar.gz ys:/
# 解压
cd /
tar -xvf ys3.4.tar.gz
# 设置权限
chmod -R 777 /home
chmod -R 777 /www/wwwroot/gm

如果想跳过上面的步骤,可以使用镜像krmeng/ys:1.0

端口8888,面板安全入口/bao_ta,账号bao_ta,密码123456

修改ip

1
2
3
4
5
find /home -type f -name '*.yaml' | xargs sed -i 's/150.138.81.173/your-ip/g'
find /home -type f -name '*.json' | xargs sed -i 's/150.138.81.173/your-ip/g'
find /home -type f -name '*.html' | xargs sed -i 's/150.138.81.173/your-ip/g'
find /www/backup -type f -name '*.*' | xargs sed -i 's/150.138.81.173/your-ip/g'
find /www/wwwroot -type f -name '*.*' | xargs sed -i 's/150.138.81.173/your-ip/g'

数据库

修改root密码为:12345678

导入数据库

1
2
cd /home
./sk

添加站点

通过bt开启宝塔面板

http://your-ip:8888进入面板,192.168.1.90为你的ip

启动脚本

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
#!/usr/bin/bash
#清理日志
find /home -name "*.0000" -exec rm -rf {} \;
find /home -name "*.log" -exec rm -rf {} \;
sleep 5

#启动服务 在/etc/init.d/下查看服务名
service nginx start
service mysqld start
service php-fpm-74 start
service redis-server start
sleep 5

#启动游戏
cd /home && ./cli stop_all
sleep 2
cd /home && ./cli start
sleep 5

#启动via
cd /home/via && ./start
sleep 5

#启动sdk
cd /home/sdk && nohup ./main &

# 保持容器运行
tail -f /dev/null

防火墙配置

放行端口:

1
2
3
4
5
6
7
8
9
10
sudo ufw allow 81/tcp
sudo ufw allow 3306/tcp
sudo ufw allow 8000/tcp
sudo ufw allow 8888/tcp
sudo ufw allow 20071/tcp
sudo ufw allow 20081/tcp
sudo ufw allow 20011/tcp
sudo ufw allow 4433/tcp
sudo ufw allow 20041/udp
sudo ufw allow 1001:1005/udp

查看防火墙日志发现:

1
ubuntu-2204 kernel: [72227.397950] [UFW BLOCK] IN=docker0 OUT= MAC=xx:yy:37:9c:b1:dd:02:42:ac:11:00:02:08:00 SRC=172.17.0.2 DST=192.168.1.90 LEN=48 TOS=0x00 PREC=0x00 TTL=64 ID=15690 DF PROTO=UDP SPT=34692 DPT=20041 LEN=28

这条日志的含义是,来自 Docker 容器(IP 地址为 172.17.0.2)的 UDP 数据包试图发送到本地网络(IP 地址为 192.168.1.90)的 20041 端口,但由于 UFW 的防火墙规则,这个连接被阻止了。

放行:

1
sudo ufw allow in on docker0 from 172.17.0.0/24

查看服务端启动情况

查看20071端口监听:

1
netstat -ap | grep 20071

若20071端口已监听,则说明服务端启动成功

数据库备份恢复

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/bin/bash

# 数据库连接配置
HOSTNAME="localhost"
PORT="3306"
USERNAME="root"
PASSWORD="12345678"

# 需要备份的数据库列表
DB1="db_hk4e_config_gio"
DB2="db_hk4e_deploy_config_gio"
DB3="db_hk4e_order_gio"
DB4="db_hk4e_user_gio"
DB5="db_hk4e_gm"
DB6="hk4e_test"

# 备份文件存储路径(按需修改)
BACKUP_DIR="/www/backup/database"
# 备份文件名时间戳(格式示例:20231015_1530)
TIMESTAMP=$(date +%Y%m%d_%H%M%S)

# 创建备份目录(如果不存在)
mkdir -p ${BACKUP_DIR}

# 备份函数
backup_database() {
local db_name=$1
local backup_file="${BACKUP_DIR}/${db_name}_${TIMESTAMP}.sql"

echo "正在备份数据库: ${db_name}..."
mysqldump -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} \
--single-transaction --routines --triggers --hex-blob ${db_name} > ${backup_file}

# 检查备份是否成功
if [ $? -eq 0 ]; then
echo "数据库 ${db_name} 备份成功 → ${backup_file}"
else
echo "错误:数据库 ${db_name} 备份失败!"
exit 1
fi
}

# 逐个备份数据库
backup_database ${DB1}
backup_database ${DB2}
backup_database ${DB3}
backup_database ${DB4}
backup_database ${DB5}
backup_database ${DB6}

# 打包所有备份文件为一个压缩包
echo "正在打包备份文件..."
tar -czvf "${BACKUP_DIR}/all_databases_${TIMESTAMP}.tar.gz" -C "${BACKUP_DIR}" $(ls ${BACKUP_DIR}/*_${TIMESTAMP}.sql)

# 检查打包是否成功
if [ $? -eq 0 ]; then
echo "备份文件打包完成 → ${BACKUP_DIR}/all_databases_${TIMESTAMP}.tar.gz"
else
echo "错误:打包失败!"
exit 1
fi

echo "所有数据库备份及打包完成!"
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/bin/bash

# 数据库连接配置
HOSTNAME="localhost"
PORT="3306"
USERNAME="root"
PASSWORD="12345678"

# 需要恢复的数据库列表(与备份顺序一致)
DB_NAMES=(
"db_hk4e_config_gio"
"db_hk4e_deploy_config_gio"
"db_hk4e_order_gio"
"db_hk4e_user_gio"
"db_hk4e_gm"
"hk4e_test"
)

# 备份文件存储路径
BACKUP_DIR="/www/backup/database"

# 自动获取最新备份时间戳(根据文件修改时间)
LATEST_SQL=$(ls -t ${BACKUP_DIR}/*.sql | head -1)
TIMESTAMP=$(basename "$LATEST_SQL" | awk -F_ '{print $(NF-1)"_"$NF}' | sed 's/\.sql//')

echo "检测到最新备份时间戳:$TIMESTAMP"
read -p "是否恢复该备份?[y/N] " CONFIRM

if [[ ! $CONFIRM =~ ^[Yy]$ ]]; then
echo "已取消恢复操作。"
exit 0
fi

# 恢复函数
restore_database() {
local db_name=$1
local backup_file="${BACKUP_DIR}/${db_name}_${TIMESTAMP}.sql"

if [ ! -f "$backup_file" ]; then
echo "错误:备份文件 $backup_file 不存在!"
exit 1
fi

echo "正在恢复数据库: $db_name..."
mysql -h$HOSTNAME -P$PORT -u$USERNAME -p$PASSWORD $db_name < $backup_file

if [ $? -eq 0 ]; then
echo "数据库 $db_name 恢复成功 ✔️"
else
echo "错误:数据库 $db_name 恢复失败 ❌"
exit 1
fi
}

# 逐个恢复数据库
for db in "${DB_NAMES[@]}"; do
restore_database "$db"
done

echo "所有数据库恢复完成!🎉"

安卓ios客户端

服务器ip需要和127.0.0.11111位数一致(13位,.也计数)

比如192.168.1.101符合,192.168.1.2不符合

因为需要通过十六进制编辑器修改客户端

gm工具

错误:响应:{"data":null,"msg":"region not match","retcode":1010,"ticket":"juliy@1747116358"}

Region留空

mysql 设置允许外部访问:

1
2
3
4
5
6
7
mysql -u root -p

SELECT host, user FROM mysql.user;

CREATE USER 'root'@'192.168.1.%' IDENTIFIED BY '12345678';

GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.%' WITH GRANT OPTION; #授予权限