利用systemd启动部署在服务器上的web应用

0.背景

系统环境: Ubuntu 22.04
web应用情况: 前后端分类,前端采用react,后端采用fastapi

1.具体配置

1.1 前端配置

开发态运行(启动命令是npm run dev),创建systemd服务文件

bash 复制代码
sudo nano /etc/systemd/system/frontend.service

内容如下:

bash 复制代码
[Unit]
Description=React Frontend Dev Server
After=network.target

[Service]
User=youruser
WorkingDirectory=/home/yourusr/yourweb/frontend
ExecStart=/usr/bin/npm run dev
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

如果你使用了nvm来管理Node.js,那么你应该做如下修改

bash 复制代码
[Unit]
Description=React Frontend Dev Server
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/home/yourusr/yourweb/frontend
Environment="NVM_DIR=/root/.nvm"
ExecStart=/bin/bash -c 'source $NVM_DIR/nvm.sh && nvm use 22.15.0 && npm run dev'
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

1.2后端配置

编写fastapi启动脚本,在/home/youruser/backend/start_backend.sh写入:

bash 复制代码
#!/bin/bash
cd /home/yourweb/backend
source venv/bin/activate
exec uvicorn server:app --host 0.0.0.0 --port 8000 --workers 1

如果使用conda管理环境,脚本文件的内容写入如下:

bash 复制代码
#!/bin/bash

cd /home/yourweb/backend
# 加载 conda 环境(确保 conda 可用)
source /home/youruser/miniconda3/etc/profile.d/conda.sh

# 激活 conda 虚拟环境
conda activate myenv

# 启动 Uvicorn
exec uvicorn server:app --host 0.0.0.0 --port 8000 --workers 1

Tip: 把 /home/youruser/miniconda3 替换为你实际的 conda 安装路径(可用 which conda 看一下)

然后授予可执行权限

bash 复制代码
chmod +x /home/yourweb/backend/start_backend.sh

创建systemd服务文件

bash 复制代码
sudo nano /etc/systemd/system/backend.service

内容如下:

bash 复制代码
[Unit]
Description=FastAPI Backend Service
After=network.target

[Service]
Type=simple
User=youruser
ExecStart=/home/youruser/yourweb/backend/start_backend.sh
WorkingDirectory=/home/youruser/yourweb/backend
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

2.启停管理

2.1 前端服务启停

命令如下:

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl start frontend
sudo systemctl enable frontend
sudo systemctl status frontend #查看运行状态

2.2 后端服务启停

命令如下:

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl start backend
sudo systemctl enable backend
sudo systemctl status backend # 查看运行状态
相关推荐
candyTong15 小时前
一觉醒来,大模型就帮我排查完页面性能问题
前端·javascript·架构
魔术师Grace15 小时前
我给 AI 做了场入职培训
前端·程序员
代码AI弗森16 小时前
一文理清楚“算力申请 / 成本测算 / 并发评估”
java·服务器·数据库
玩嵌入式的菜鸡16 小时前
网页访问单片机设备---基于mqtt
前端·javascript·css
前端一小卒17 小时前
我用 Claude Code 的 Superpowers 技能链写了个服务,部署前差点把服务器搞炸
前端·javascript·后端
^—app56686617 小时前
游戏运存小启动不起来临时解决方法
运维·服务器
Ujimatsu17 小时前
虚拟机安装Debian 13.x及其常用软件(2026.4)
linux·运维·ubuntu
志栋智能18 小时前
超自动化安全:构建智能安全运营的核心引擎
大数据·运维·服务器·数据库·安全·自动化·产品运营
滑雪的企鹅.18 小时前
HTML头部元信息避坑指南大纲
前端·html
一拳不是超人18 小时前
老婆天天吵吵要买塔罗牌,我直接用 AI 2 小时写了个在线塔罗牌
前端·ai编程