Files
2026-06-21 20:42:44 +08:00

109 lines
2.6 KiB
Bash

#!/bin/bash
# Write Server systemd 服务配置脚本
# 将 Write Server 设置为系统服务,支持开机自启
set -e
echo "==================================="
echo " Write Server 服务配置脚本"
echo "==================================="
# 检查是否为 root 用户
if [ "$EUID" -ne 0 ]; then
echo "错误: 请使用 sudo 运行此脚本"
exit 1
fi
# 获取当前用户和目录
CURRENT_USER=$(whoami)
CURRENT_DIR=$(pwd)
SERVICE_FILE="/etc/systemd/system/write-server.service"
echo "当前用户: $CURRENT_USER"
echo "项目目录: $CURRENT_DIR"
# 检查 .env 文件
if [ ! -f .env ]; then
echo "错误: 未找到 .env 文件"
exit 1
fi
# 创建 systemd 服务文件
echo "创建 systemd 服务文件..."
cat > "$SERVICE_FILE" << EOF
[Unit]
Description=Write Server - Hugo Blog Admin
Documentation=https://github.com/your-repo/write-server
After=network.target
[Service]
Type=simple
User=$CURRENT_USER
Group=$CURRENT_USER
WorkingDirectory=$CURRENT_DIR
Environment=NODE_ENV=production
Environment=PORT=8016
EnvironmentFile=$CURRENT_DIR/.env
ExecStart=/usr/bin/node $CURRENT_DIR/.next/standalone/server.js
ExecReload=/bin/kill -HUP \$MAINPID
Restart=always
RestartSec=10
StandardOutput=append:$CURRENT_DIR/logs/app.log
StandardError=append:$CURRENT_DIR/logs/app.log
# 安全限制
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=$CURRENT_DIR
[Install]
WantedBy=multi-user.target
EOF
# 设置权限
chmod 644 "$SERVICE_FILE"
# 重新加载 systemd 配置
echo "重新加载 systemd 配置..."
systemctl daemon-reload
# 启用服务
echo "启用服务..."
systemctl enable write-server
# 启动服务
echo "启动服务..."
systemctl start write-server
# 等待服务启动
sleep 3
# 检查服务状态
if systemctl is-active --quiet write-server; then
echo ""
echo "==================================="
echo " 服务配置成功!"
echo "==================================="
echo ""
echo "服务已启动并设置为开机自启"
echo ""
echo "管理命令:"
echo " 查看状态: sudo systemctl status write-server"
echo " 查看日志: sudo journalctl -u write-server -f"
echo " 重启服务: sudo systemctl restart write-server"
echo " 停止服务: sudo systemctl stop write-server"
echo " 禁用自启: sudo systemctl disable write-server"
echo ""
else
echo ""
echo "==================================="
echo " 服务启动失败!"
echo "==================================="
echo ""
echo "请查看日志:"
echo " sudo journalctl -u write-server -n 50"
echo ""
exit 1
fi