#!/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