ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

使用 Supervisor 部署和管理 Litestar 应用(Linux 进程守护实战指南)

使用 Supervisor 部署和管理 Litestar 应用(Linux 进程守护实战指南) 使用 Supervisor 部署和管理 Litestar 应用Linux 进程守护实战指南【免费下载链接】litestarLight, flexible and extensible ASGI framework | Built to scale项目地址: https://gitcode.com/GitHub_Trending/li/litestar导读本指南讲解如何在 Linux 服务器上使用Supervisor这一进程控制系统对 Litestar 应用进行持续的守护、监控与后台管理。你将掌握 Supervisor 的完整配置方式ini 服务定义、日志轮转、自动启停、常用supervisorctl运维命令以及通过 shell 别名和自动更新脚本把日常部署操作收敛为exampleapp start/stop/update等一条命令的实战方案。文中所有命令与配置均可在本仓库Litestar 官方源码中找到对应实现依据可直接复制落地。Supervisorsupervisord是面向 UNIX 类操作系统的进程控制系统允许你监控和控制多个进程特别适合管理需要持续运行、且在后台运行并需要被监控与控制的进程。对于需要长时间在线、具备健壮进程控制能力的 Python Web 应用来说Supervisor 是非常理想的管理工具——它提供完善的进程管理、监控、日志管理以及对应用进程启停/重启的定制化控制能力。本文对应的仓库文档为 docs/topics/deployment/supervisor.rst文中涉及的部署方案索引见 docs/topics/deployment/index.rst。适用场景Use When当你的 Litestar 应用需要满足以下诉求时Supervisor 是合适的选择持续在线continuous uptime应用需要长时间不间断运行进程异常退出后能自动拉起健壮的进程控制robust process control需要对启动、停止、重启进行精细且统一的控制监控与日志管理需要集中查看应用的标准输出/错误日志并保留多份历史备份后台运行管理应用作为守护进程运行不占用交互式终端。若对 Supervisor 的底层机制想进一步了解可查阅官方 Supervisor 文档supervisord.org/introduction.html中的详细介绍。部署方案对比Alternatives根据不同的部署场景官方还提供了以下替代方案方案特点适用场景Docker 容器化部署容器化环境提供隔离性与可扩展性微服务、CI/CD、需要环境一致性systemd系统与服务管理器已集成进多数 Linux 发行版直接使用系统级服务管理官方文档即将补充手动使用 ASGI 服务器运行通过 Uvicorn / Hypercorn / Daphne / Granian 直接启动应用通常仅适合开发与测试环境其中systemd方案官方文档尚未发布原文档标注 Official documentation coming soon而手动运行 ASGI 服务器的方式通常只推荐用于开发和测试环境生产环境建议使用容器化方案或 Supervisor / systemd 这类进程控制方案。安装与前提Supervisor 通过其配置文件定义服务。在开始之前请确保你的服务器上已安装 Supervisor一般通过系统包管理器安装supervisor包以及 Litestar 应用依赖。关于运行应用所需的命令行工具Litestar 的 CLI 默认不随主包安装需要安装cliextra额外提供运行litestar run所需的 uvicorn官方推荐直接安装standardextra它一并打包了 CLI 与其他常用可选依赖见 docs/usage/cli.rstpip install litestar[standard]安装完成后即可使用litestar run命令该命令要求环境中存在 uvicorn若缺失会提示安装litestar[standard]后退出参见源码 litestar/cli/commands/core.py。配置服务SetupSupervisor 使用一个配置文件来定义服务关于配置文件的详细语法可参考 Supervisor 官方配置文档supervisord.org/configuration.html。下面是一个为 Litestar 应用定义的 Supervisor 服务配置示例[program:exampleapp] # Defines the service name. directory/opt/exampleapp/src # Specifies the directory where the service should run. command/opt/exampleapp/venv/bin/litestar app.py # Specifies the command to run the service. redirect_stderrtrue # Redirects stderr to stdout. stdout_logfile/var/log/exampleapp.log # Specifies the log file to write to. stdout_logfile_backups10 # Specifies the number of backups to keep. autostarttrue # Specifies that the service should start automatically when supervisor starts. autorestarttrue # Specifies that the service should restart automatically if it exits unexpectedly.各配置项含义如下配置项含义说明[program:exampleapp]定义服务名称exampleapp是你在supervisorctl中操作的服务标识directory服务运行的工作目录进程将在此目录下启动command运行服务的命令使用虚拟环境中的可执行文件避免依赖系统 Python 环境redirect_stderr将 stderr 重定向到 stdout便于日志统一收集stdout_logfile日志文件路径应用的 stdout 输出写入该文件stdout_logfile_backups日志备份数量配合日志轮转保留多份历史autostart随 Supervisor 启动而自动启动设为true保证开机/重启后服务自动拉起autorestart进程意外退出时自动重启设为true保证崩溃后自动恢复关于 command 的补充说明上面的command使用的是litestar app.py写法。需要说明的是在当前仓库版本的 CLI 中运行应用的入口命令是litestar run参见源码 litestar/cli/commands/core.py它支持自动发现应用CLI 会按顺序查找app.py、app/__init__.py、app子模块、application.py、application/__init__.py及application子模块并从中寻找名为app/application的Litestar实例、create_app工厂或标注返回Litestar的可调用对象详见 docs/usage/cli.rst。因此若你的应用文件为标准的app.pySupervisor 配置可等价写作[program:exampleapp] directory/opt/exampleapp/src command/opt/exampleapp/venv/bin/litestar run --host 0.0.0.0 --port 8000 redirect_stderrtrue stdout_logfile/var/log/exampleapp.log stdout_logfile_backups10 autostarttrue autorestarttrue若应用不是标准的app/application模块例如工厂函数位于my_application/app.py中的create_my_app可通过--app参数或LITESTAR_APP环境变量显式指定格式为module.submodule:app instance or factory详见 docs/usage/cli.rst/opt/exampleapp/venv/bin/litestar --appmy_application.app:create_my_app run关于监听地址的补充说明关于访问地址需要特别留意原文档示例中提到应用默认监听http://0.0.0.0:8000但从当前仓库源码看litestar run命令的默认host为127.0.0.1、默认port为8000参见源码 litestar/cli/commands/core.py 中--port的default8000与--host的default127.0.0.1。这意味着默认情况下服务仅本机可访问。要在生产环境对外提供服务务必显式指定litestar run --host 0.0.0.0 --port 8000litestar run还支持--workersHTTP 工作进程数、--reload开发期热重载、--fd/--uds绑定文件描述符或 UNIX 域套接字等选项并可通过LITESTAR_HOST、LITESTAR_PORT、LITESTAR_WEB_CONCURRENCY等环境变量配置同一源码段中的envvar声明这些均可灵活运用到 Supervisor 的command中。放置配置文件并加载将上述配置文件保存到/etc/supervisor/conf.d/exampleapp.conf。创建完成后需要重载 Supervisor 配置以加载新的服务文件# 重载 supervisor 配置 sudo supervisorctl reread sudo supervisorctl update常用运维命令Helpful Commands服务注册完成后日常运维全部通过supervisorctl完成# 启停/重启/查看状态 sudo supervisorctl start exampleapp sudo supervisorctl stop exampleapp sudo supervisorctl restart exampleapp sudo supervisorctl status exampleapp# 查看日志实时跟踪 sudo supervisorctl tail -f exampleapp其中supervisorctl tail -f可实时输出应用的 stdout 日志是排查问题最直接的手段。启动与验证配置完成后即可启动应用若服务尚未运行启动它sudo supervisorctl start exampleapp检查输出确认运行正常、无错误sudo supervisorctl status exampleapp确认无误后Litestar 应用即可访问默认监听127.0.0.1:8000若需外部访问请按上文说明显式指定--host 0.0.0.0。至此你已经可以用 Supervisor 管理你的 Litestar 应用了。下面两个小节属于可选建议用于让日常管理更省心并非必需步骤。进阶建议Shell 别名Aliases创建一个别名文件/etc/profile.d/exampleapp.sh即可用exampleapp start替代冗长的sudo supervisorctl start exampleapp。别名文件示例exampleapp() { case $1 in start) echo Starting exampleapp... sudo supervisorctl start exampleapp ;; stop) echo Stopping exampleapp... sudo supervisorctl stop exampleapp ;; restart) echo Restarting exampleapp... sudo supervisorctl restart exampleapp ;; status) echo Checking status of exampleapp... sudo supervisorctl status exampleapp ;; watch) echo Tailing logs for exampleapp... sudo supervisorctl tail -f exampleapp ;; help) cat EOF Available options: exampleapp start - Start the exampleapp service exampleapp stop - Stop the exampleapp service exampleapp restart - Restart the exampleapp service exampleapp status - Check the status of the exampleapp service exampleapp watch - Tail the logs for the exampleapp service EOF ;; *) echo Unknown command: $1 echo Use exampleapp help for a list of available commands. ;; esac }保存后即可使用以下命令exampleapp start exampleapp stop exampleapp restart exampleapp status exampleapp watch无需重启会话即可激活别名source /etc/profile.d/exampleapp.sh其中watch命令让你实时监控应用输出非常便于开发调试与线上巡检。进阶建议更新脚本Update Script可以在exampleapp函数中扩展一个update命令将整个应用更新流程自动化exampleapp() { case $1 in # ... other cases ... # update) echo Updating exampleapp... # Stop the service echo Stopping service... sudo supervisorctl stop exampleapp # Update application files echo Pulling latest changes from repository... cd /opt/exampleapp git fetch --all git reset --hard origin/master # Update Supervisor configuration and alias echo Updating Supervisor and shell configurations... sudo ln -sf /opt/exampleapp/server/service.conf /etc/supervisor/conf.d/exampleapp.conf sudo ln -sf /opt/exampleapp/server/alias.sh /etc/profile.d/exampleapp.sh source /etc/profile.d/exampleapp.sh # Update Supervisor to apply new configurations echo Reloading Supervisor configuration... sudo supervisorctl reread sudo supervisorctl update # Update Python dependencies using requirements.txt # Here you could replace with poetry, pdm, etc., alleviating the need for # a requirements.txt file and virtual environment activation. source venv/bin/activate echo Installing updated dependencies... python3 -m pip install -r requirements.txt deactivate # ... other update processes like docs building, cleanup, etc. ... # echo Update process complete. # Prompt to start the service read -p Start the service? (y/n) -n 1 -r echo if [[ $REPLY ~ ^[Yy]$ ]] then echo Starting service... sudo supervisorctl start exampleapp fi ;; # ... # esac }该更新流程包含以下步骤停止服务Stop the Service改动前安全地暂停应用Git 操作Git Operations确保从仓库拉取最新代码git fetch --allgit reset --hard origin/master配置符号链接Configuration Symlinking通过ln -sf将 Supervisor 配置与 shell 别名指向最新版本重载 SupervisorSupervisor Reload执行supervisorctl reread与supervisorctl update应用新配置依赖更新Dependency Update按requirements.txt也可替换为 poetry、pdm、uv 等工具从而无需手写 requirements.txt 和手动激活虚拟环境安装或更新 Python 依赖用户确认User Prompt询问是否立即启动服务输入y则自动supervisorctl start exampleapp。注该脚本中git reset --hard origin/master会强制将本地代码回退到远端分支请确保服务器上的工作区可安全覆盖例如仅作为部署目录使用否则会造成本地改动丢失。执行更新Execution运行exampleapp update即可触发上述完整更新流程exampleapp update它把新代码拉取、配置变更、依赖更新与服务重启串成一条命令确保部署过程平滑且一致显著降低线上手动操作出错的风险。小结至此你已经拥有了一套完整的 Litestar 生产部署方案通过 Supervisor 的[program]配置实现进程守护、崩溃自动重启与日志集中管理通过supervisorctl完成日常启停与状态监控再借助/etc/profile.d别名与update脚本把复杂的部署动作收敛为exampleapp start/exampleapp watch/exampleapp update等简洁命令。结合litestar run的自动发现机制与--host 0.0.0.0等运行参数依据见 litestar/cli/commands/core.py即可在 Linux 服务器上稳定、持续地对外提供 Litestar 服务。【免费下载链接】litestarLight, flexible and extensible ASGI framework | Built to scale项目地址: https://gitcode.com/GitHub_Trending/li/litestar创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表