部署 docker-compose1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 services: web: container_name: ys image: ubuntu:20.04 network_mode: "bridge" ports: - "81:81/tcp" - "3306:3306/tcp" - "8000:8000/tcp" - "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 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 export DEBIAN_FRONTEND=noninteractivesed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list apt-get update apt-get install -y \ nginx \ mysql-server \ redis-server \ php-fpm \ php-mysql \ php-redis \ python2 \ libpython2.7 \ libssl-dev \ libasan5 \ net-tools \ curl \ nano \ wget ln -s /usr/bin/python2 /usr/bin/python
首次启动服务:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 service redis-server start service php7.4-fpm start service nginx start mkdir -p /var/run/mysqld && chown mysql:mysql /var/run/mysqldusermod -d /var/lib/mysql/ mysql service mysql start sleep 5mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '12345678'; FLUSH PRIVILEGES;" echo "环境安装完成,数据库密码已改为 12345678"
复制服务端到容器内
1 2 3 4 5 6 7 docker cp ys3.4.tar.gz ys:/ cd /tar -xvf ys3.4.tar.gz chmod -R 777 /homechmod -R 777 /www/wwwroot/gm
修改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 nano /etc/nginx/sites-available/default
将下面内容覆盖原文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 server { listen 81 ; server_name _; root /www/wwwroot/gm; index index.html index.htm index.php; location / { try_files $uri $uri / /index.php?$query_string ; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.4-fpm.sock; } }
重载服务:
启动脚本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 #!/usr/bin/bash find /home -name "*.0000" -exec rm -rf {} \; find /home -name "*.log" -exec rm -rf {} \; sleep 5service mysql start service redis-server start service php7.4-fpm start service nginx start sleep 5cd /home && ./cli stop_allsleep 2cd /home && ./cli startsleep 5cd /home/via && ./startsleep 5cd /home/sdk && nohup ./main &tail -f /dev/null
防火墙配置 放行端口:
1 2 3 4 5 6 7 8 9 10 sudo ufw allow 81/tcpsudo ufw allow 3306/tcpsudo ufw allow 8000/tcpsudo ufw allow 8888/tcpsudo ufw allow 20071/tcpsudo ufw allow 20081/tcpsudo ufw allow 20011/tcpsudo ufw allow 4433/tcpsudo ufw allow 20041/udpsudo 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 设置允许外部访问:
编辑配置文件 : 通常在 /etc/mysql/mysql.conf.d/mysqld.cnf (MySQL 8.0/Ubuntu)。
1 nano /etc/mysql/mysql.conf.d/mysqld.cnf
找到 bind-address : 找到这一行: bind-address = 127.0.0.1
修改它 : 改成 0.0.0.0 (允许所有 IP 连接),或者直接在前面加 # 注释掉。
TOML (同时检查有没有 skip-networking,如果有,注释掉它)
保存并重启 MySQL : (Ctrl+O 保存,Ctrl+X 退出)
执行 SQL 授权:
内网:
1 2 3 4 5 6 7 8 9 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; #授予权限 FLUSH PRIVILEGES;
1 2 3 4 5 6 7 8 9 mysql -u root -p SELECT host, user FROM mysql.user; CREATE USER 'root'@'%' IDENTIFIED BY '12345678'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; #授予权限 FLUSH PRIVILEGES;
日志:
nano /etc/mysql/mysql.conf.d/mysqld.cnf
1 2 3 4 5 6 7 8 9 10 11 12 13 # --- Extreme Space-Saving Configuration (Append to the end of the file) --- # Completely disable binary logging (Enabled by default in MySQL 8.0, must be explicitly disabled) skip-log-bin # Cap temporary tablespace at 500M (Prevents runaway temporary files) innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:500M # Limit InnoDB redo log capacity to 64M (Maintains minimal crash recovery capabilities) innodb_redo_log_capacity = 64M # Enable file-per-table tablespaces (Releases disk space immediately to the OS when a table is dropped) innodb_file_per_table = 1
Docker 1 docker pull krmeng/ys:3.4
容器内默认ip为192.168.1.101
如果要修改ip记得数据库hk4e_test的表gate_servers的ip也要改