增加个服务安装文件
This commit is contained in:
+96
@@ -0,0 +1,96 @@
|
|||||||
|
#!/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 ""
|
||||||
Reference in New Issue
Block a user