97 lines
2.9 KiB
Bash
97 lines
2.9 KiB
Bash
#!/bin/bash
|
||
#
|
||
# meshgo 安装脚本(Linux)
|
||
# 功能:git pull 拉取最新代码 → 编译 → 安装到 /opt/meshgo
|
||
#
|
||
|
||
set -e
|
||
|
||
APP_NAME="meshgo"
|
||
INSTALL_DIR="/opt/${APP_NAME}"
|
||
DATA_DIR="/var/lib/${APP_NAME}"
|
||
REPO_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||
|
||
echo "=== meshgo 安装脚本 ==="
|
||
echo "安装目录: ${INSTALL_DIR}"
|
||
echo "仓库目录: ${REPO_DIR}"
|
||
echo ""
|
||
|
||
# ---------------------------------------------------------------------------
|
||
# 1. git pull 拉取最新代码
|
||
# ---------------------------------------------------------------------------
|
||
echo "[1/5] 拉取最新代码..."
|
||
cd "${REPO_DIR}"
|
||
if ! git diff-index --quiet HEAD -- 2>/dev/null; then
|
||
echo "警告:本地有未提交的更改,将暂存后拉取..."
|
||
git stash push -m "install.sh auto stash $(date +%Y%m%d%H%M%S)"
|
||
fi
|
||
git pull origin main
|
||
echo "[1/5] 完成"
|
||
echo ""
|
||
|
||
# ---------------------------------------------------------------------------
|
||
# 2. 编译
|
||
# ---------------------------------------------------------------------------
|
||
echo "[2/5] 编译..."
|
||
CGO_ENABLED=1 go build -ldflags="-s -w" -o meshgo .
|
||
echo "[2/5] 完成: meshgo"
|
||
echo ""
|
||
|
||
# ---------------------------------------------------------------------------
|
||
# 3. 创建用户和数据目录
|
||
# ---------------------------------------------------------------------------
|
||
echo "[3/5] 创建用户和数据目录..."
|
||
id -u ${APP_NAME} &>/dev/null || sudo useradd -r -s /usr/sbin/nologin -d /nonexistent ${APP_NAME}
|
||
sudo mkdir -p "${INSTALL_DIR}"
|
||
sudo mkdir -p "${DATA_DIR}"
|
||
echo "[3/5] 完成"
|
||
echo ""
|
||
|
||
# ---------------------------------------------------------------------------
|
||
# 4. 复制到安装目录并设置权限
|
||
# ---------------------------------------------------------------------------
|
||
echo "[4/5] 复制到 ${INSTALL_DIR}..."
|
||
sudo cp meshgo "${INSTALL_DIR}/"
|
||
sudo chown -R ${APP_NAME}:${APP_NAME} "${INSTALL_DIR}"
|
||
sudo chown -R ${APP_NAME}:${APP_NAME} "${DATA_DIR}"
|
||
echo "[4/5] 完成"
|
||
echo ""
|
||
|
||
# ---------------------------------------------------------------------------
|
||
# 5. 安装 systemd 服务
|
||
# ---------------------------------------------------------------------------
|
||
echo "[5/5] 安装 systemd 服务..."
|
||
sudo tee /etc/systemd/system/${APP_NAME}.service > /dev/null <<EOF
|
||
[Unit]
|
||
Description=meshgo MQTT Broker
|
||
Documentation=https://github.com/mochi-mqtt/server
|
||
After=network.target
|
||
|
||
[Service]
|
||
Type=simple
|
||
User=${APP_NAME}
|
||
Group=${APP_NAME}
|
||
ExecStart=${INSTALL_DIR}/meshgo
|
||
ExecReload=/bin/kill -HUP \$MAINPID
|
||
Restart=on-failure
|
||
RestartSec=5s
|
||
StandardOutput=journal
|
||
StandardError=journal
|
||
SyslogIdentifier=${APP_NAME}
|
||
ReadWritePaths=${DATA_DIR}
|
||
PrivateTmp=true
|
||
NoNewPrivileges=true
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
EOF
|
||
sudo systemctl daemon-reload
|
||
echo "[5/5] 完成"
|
||
echo ""
|
||
|
||
echo "=== 安装完成 ==="
|
||
echo ""
|
||
echo "配置文件(程序首次运行自动生成):/etc/meshgo/config.yaml"
|
||
echo "二进制文件:${INSTALL_DIR}/meshgo"
|
||
echo ""
|