Linux部署python服务

1. 创建虚拟环境和安装依赖

在部署 Python 程序时,使用虚拟环境是一种良好的实践,它可以帮助你隔离项目的依赖,避免与系统的 Python 库冲突。

1.1 创建虚拟环境

首先,确保你已经安装了 Python 和 python3-venv 工具。如果未安装,可以使用以下命令安装:

sudo apt update
sudo apt install python3 python3-pip python3-venv

接下来,在你的项目目录下创建虚拟环境:

cd /path/to/your/project
python3 -m venv venv
  • venv 是虚拟环境的目录,你可以替换为任何你想要的名称。

1.2 激活虚拟环境

创建完虚拟环境后,需要激活它。根据你的操作系统,使用以下命令:

  • Linux/MacOS

    source venv/bin/activate
  • Windows

    venv\Scripts\activate

激活后,你会看到命令行提示符发生变化,表示你已进入虚拟环境。

1.3 安装依赖库

在虚拟环境中,你可以使用 pip 安装项目所需的依赖。通常这些依赖列在项目的 requirements.txt 文件中。

  • 安装依赖
    pip install -r requirements.txt

如果没有 requirements.txt 文件,你可以手动安装所需的库。例如:

pip install flask requests numpy

1.4 确保依赖安装成功

你可以通过以下命令查看已安装的包,确保它们已经正确安装:

pip freeze

2. 使用 systemd 管理程序

假设你已经创建了虚拟环境并安装了所需的库,接下来可以使用 systemdSupervisor 来管理 Python 程序。

以下是使用 systemd 管理 Python 程序的步骤,已经包括了虚拟环境相关的内容。

2.1 创建 systemd 服务文件

/etc/systemd/system/ 目录下创建一个 .service 文件。例如,创建 myapp.service

sudo nano /etc/systemd/system/myapp.service

在文件中添加以下内容:

[Unit]
Description=My Python Application
After=network.target
[Service]
User=your_user
WorkingDirectory=/path/to/your/project
ExecStart=/path/to/your/project/venv/bin/python /path/to/your/project/app.py
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=myapp
[Install]
WantedBy=multi-user.target
  • Description:服务的描述。
  • After=network.target:确保服务在网络可用后启动。
  • User=your_user:指定哪个用户运行该程序。通常推荐创建一个专用的用户运行服务。
  • WorkingDirectory:设置为你的 Python 程序所在的目录。
  • ExecStart:指定程序的启动命令,确保你使用的是虚拟环境中的 Python 解释器。
  • Restart=always:如果程序崩溃,systemd 会自动重启该服务。
  • StandardOutputStandardError:将输出重定向到系统日志。

2.2 启动并启用服务

  1. 重新加载 systemd 配置

    sudo systemctl daemon-reload
  2. 启动服务

    sudo systemctl start myapp
  3. 设置服务开机自启

    sudo systemctl enable myapp
  4. 查看服务状态

    sudo systemctl status myapp

2.3 查看日志

使用 journalctl 命令查看 systemd 服务的日志:

sudo journalctl -u myapp

3. 使用 Supervisor 管理程序

如果你选择使用 Supervisor 来管理程序,以下是补充了虚拟环境的完整步骤:

3.1 安装 Supervisor

在 Linux 上安装 Supervisor

sudo apt update
sudo apt install supervisor

3.2 配置 Supervisor

  1. /etc/supervisor/conf.d/ 目录下创建一个配置文件,例如 myapp.conf

    sudo nano /etc/supervisor/conf.d/myapp.conf
  2. 在文件中添加以下内容:

[program:myapp]
command=/path/to/your/project/venv/bin/python /path/to/your/project/app.py
directory=/path/to/your/project
autostart=true
autorestart=true
stderr_logfile=/var/log/myapp.err.log
stdout_logfile=/var/log/myapp.out.log
user=your_user
environment=HOME="/home/your_user",USER="your_user"
  • command:启动 Python 程序的命令。
  • directory:工作目录,程序运行的目录。
  • autostart=true:在 Supervisor 启动时自动启动此程序。
  • autorestart=true:如果程序崩溃,Supervisor 会自动重启程序。
  • stderr_logfilestdout_logfile:配置日志文件的位置。
  • user:指定以哪个用户运行程序。

3.3 更新 Supervisor 配置并启动

  1. 重新读取并更新配置:

    sudo supervisorctl reread
    sudo supervisorctl update
  2. 启动应用程序:

    sudo supervisorctl start myapp

3.4 查看日志

使用 tail 查看 Supervisor 管理的程序的日志输出:

tail -f /var/log/myapp.out.log
tail -f /var/log/myapp.err.log

总结

  1. 创建虚拟环境:为每个 Python 项目创建一个虚拟环境,避免不同项目之间的依赖冲突。
  2. 安装依赖:在虚拟环境中使用 pip install 安装项目所需的依赖库。
  3. 使用 systemdSupervisor 管理程序
    • systemd 提供了强大的服务管理功能,适合用于与操作系统紧密集成的长时间运行程序。
    • Supervisor 提供了简单易用的进程管理功能,适合需要快速配置和管理的应用程序。

如果你有更多的需求或问题,随时告诉我!

注意:该内容由由AIGC提供。

posted @   长空nice  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示