98 lines
2.6 KiB
Bash
98 lines
2.6 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
# FunMC 服务器安装脚本
|
||
|
|
# 用于 Linux 服务器部署
|
||
|
|
|
||
|
|
set -e
|
||
|
|
|
||
|
|
echo "================================"
|
||
|
|
echo " FunMC 服务器安装脚本"
|
||
|
|
echo " 魔幻方开发"
|
||
|
|
echo "================================"
|
||
|
|
|
||
|
|
# 检查 root 权限
|
||
|
|
if [ "$EUID" -ne 0 ]; then
|
||
|
|
echo "错误: 请使用 root 权限运行此脚本"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
# 变量
|
||
|
|
FUNMC_USER="funmc"
|
||
|
|
FUNMC_DIR="/opt/funmc"
|
||
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
|
ROOT_DIR="$(dirname "$SCRIPT_DIR")"
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "[1/6] 创建系统用户..."
|
||
|
|
if ! id "$FUNMC_USER" &>/dev/null; then
|
||
|
|
useradd --system --shell /sbin/nologin --home-dir "$FUNMC_DIR" "$FUNMC_USER"
|
||
|
|
echo "已创建用户: $FUNMC_USER"
|
||
|
|
else
|
||
|
|
echo "用户已存在: $FUNMC_USER"
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "[2/6] 创建安装目录..."
|
||
|
|
mkdir -p "$FUNMC_DIR"
|
||
|
|
mkdir -p /var/log/funmc
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "[3/6] 编译服务端..."
|
||
|
|
cd "$ROOT_DIR"
|
||
|
|
cargo build --release -p funmc-server
|
||
|
|
cargo build --release -p funmc-relay-server
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "[4/6] 安装二进制文件..."
|
||
|
|
cp target/release/server "$FUNMC_DIR/server"
|
||
|
|
cp target/release/relay-server "$FUNMC_DIR/relay-server"
|
||
|
|
|
||
|
|
# 复制迁移文件
|
||
|
|
cp -r server/migrations "$FUNMC_DIR/"
|
||
|
|
|
||
|
|
# 创建环境配置
|
||
|
|
if [ ! -f "$FUNMC_DIR/.env" ]; then
|
||
|
|
cp .env.example "$FUNMC_DIR/.env"
|
||
|
|
echo "请编辑配置文件: $FUNMC_DIR/.env"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# 设置权限
|
||
|
|
chown -R "$FUNMC_USER:$FUNMC_USER" "$FUNMC_DIR"
|
||
|
|
chown -R "$FUNMC_USER:$FUNMC_USER" /var/log/funmc
|
||
|
|
chmod 600 "$FUNMC_DIR/.env"
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "[5/6] 安装 systemd 服务..."
|
||
|
|
cp deploy/funmc-server.service /etc/systemd/system/
|
||
|
|
cp deploy/funmc-relay.service /etc/systemd/system/
|
||
|
|
systemctl daemon-reload
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "[6/6] 配置防火墙..."
|
||
|
|
if command -v ufw &>/dev/null; then
|
||
|
|
ufw allow 3000/tcp comment "FunMC API"
|
||
|
|
ufw allow 3001/udp comment "FunMC Built-in Relay"
|
||
|
|
ufw allow 7900/udp comment "FunMC Relay"
|
||
|
|
ufw allow 17900/udp comment "FunMC Relay Ping"
|
||
|
|
elif command -v firewall-cmd &>/dev/null; then
|
||
|
|
firewall-cmd --permanent --add-port=3000/tcp
|
||
|
|
firewall-cmd --permanent --add-port=3001/udp
|
||
|
|
firewall-cmd --permanent --add-port=7900/udp
|
||
|
|
firewall-cmd --permanent --add-port=17900/udp
|
||
|
|
firewall-cmd --reload
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "================================"
|
||
|
|
echo " 安装完成!"
|
||
|
|
echo "================================"
|
||
|
|
echo ""
|
||
|
|
echo "后续步骤:"
|
||
|
|
echo "1. 编辑配置: nano $FUNMC_DIR/.env"
|
||
|
|
echo "2. 初始化数据库并启动服务:"
|
||
|
|
echo " systemctl enable --now funmc-server"
|
||
|
|
echo " systemctl enable --now funmc-relay"
|
||
|
|
echo "3. 查看日志:"
|
||
|
|
echo " journalctl -u funmc-server -f"
|
||
|
|
echo " journalctl -u funmc-relay -f"
|
||
|
|
echo ""
|