关于个人服务器配置论坛功能的实现,以及一些出现的问题的解决办法

前言
关于个人服务器配置论坛功能的实现,以及一些出现的问题的解决办法

到这里为止的,以之前的方式整体总结一遍(关键问题、解决方法、方便下次复现的总结代码及解释(精简些,第一性原理,看到就能瞬间懂的,不用多解释,不用花里胡哨的))

Flask + Systemd 部署核心要点

🔥 核心问题(第一性原理)

Python路径不匹配

  • 你的项目用的Python在 /usr/local/miniconda3/bin/python3
  • Systemd默认用的Python在 /usr/bin/python3
  • 路径不同 → 包找不到 → ModuleNotFoundError

🛠️ 解决方案

让Systemd使用你的Python

# 1. 查看你的Python路径
which python3

# 2. 修改服务文件
sudo tee /etc/systemd/system/你的服务.service << 'EOF'
[Unit]
Description=你的服务
After=network.target

[Service]
Type=simple
User=你的用户名
WorkingDirectory=/项目路径
ExecStart=$(which python3) /项目路径/app.py  # 关键:用你的Python
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

# 3. 重启生效
sudo systemctl daemon-reload
sudo systemctl restart 你的服务
sudo systemctl status 你的服务

📦 一键部署脚本

#!/bin/bash
# deploy.sh
SERVICE="myapp"
PROJECT="/home/$(whoami)/project"
PYTHON=$(which python3)

# 创建服务文件
sudo tee /etc/systemd/system/${SERVICE}.service << EOF
[Unit]
Description=${SERVICE}
After=network.target

[Service]
Type=simple
User=$(whoami)
WorkingDirectory=${PROJECT}
ExecStart=${PYTHON} ${PROJECT}/app.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

# 启用服务
sudo systemctl daemon-reload
sudo systemctl enable ${SERVICE}
sudo systemctl start ${SERVICE}
echo "访问: http://$(hostname -I | awk '{print $1}'):端口"

🚨 故障排查

服务启动失败 → 
1. sudo journalctl -u 服务名 --no-pager    # 看错误
2. 如果是ModuleNotFoundError → 环境问题
3. 检查: which python3 和 ExecStart 是否一致
4. 修改服务文件 → daemon-reload → restart

🌐 Cloudflare隧道断线修复

# 隧道断了就重启
sudo systemctl restart cloudflared

nano script.sh

# 设置6小时自动检查
#!/bin/bash
# ~/sh/script.sh - Cloudflare隧道监控

# 检查隧道是否正常
if curl -s -I http://code.tokesystem.top 2>/dev/null | grep -q "Cloudflare Tunnel error"; then
    echo "$(date): 隧道错误,重启cloudflared" >> /home/HwHiAiUser/tunnel_monitor.log
    sudo systemctl restart cloudflared
else
    echo "$(date): 隧道正常" >> /home/HwHiAiUser/tunnel_monitor.log
fi

# 2. 设置权限
sudo chmod +x script.sh

2. 添加到 crontab
# 编辑当前用户的crontab
crontab -e

# 在文件末尾添加一行(每6小时检查)
0 0,6,12,18 * * * /home/HwHiAiUser/sh/script.sh

# 保存退出(nano编辑器:Ctrl+X → Y → Enter)

# 查看crontab列表
crontab -l

# 测试运行脚本
/home/HwHiAiUser/sh/script.sh

# 查看日志
cat /tmp/tunnel_fix.log 2>/dev/null || echo "还没有日志"

💎 记住两件事

  1. Systemd用的Python = $(which python3)
  2. 隧道断了 → sudo systemctl restart cloudflared

下次部署只要:

  1. which python3 拿到路径
  2. 服务文件里 ExecStart=这个路径 /app.py
  3. sudo systemctl daemon-reload && restart

搞定。

拓展 一键部署脚本

 一键部署脚本(下次直接复制)
bash
#!/bin/bash
# deploy_flask.sh

PROJECT_DIR="/home/用户名/项目目录"
SERVICE_NAME="my-flask-service"

# 1. 创建服务文件
sudo tee /etc/systemd/system/${SERVICE_NAME}.service << EOF
[Unit]
Description=My Flask Service
After=network.target

[Service]
Type=simple
User=$(whoami)
WorkingDirectory=${PROJECT_DIR}
ExecStart=$(which python3) ${PROJECT_DIR}/app.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

# 2. 启用服务
sudo systemctl daemon-reload
sudo systemctl enable ${SERVICE_NAME}
sudo systemctl start ${SERVICE_NAME}

# 3. 查看结果
echo "服务状态:"
sudo systemctl status ${SERVICE_NAME}
echo -e "\n访问地址:http://$(hostname -I | awk '{print $1}'):8080"

posted @ 2025-12-24 19:55  TokE648  阅读(11)  评论(0)    收藏  举报