Supervisor 运行 FastAPI 项目

有 docker 的 k8s 后,基本没用过 supervisor 了,最近一个项目在 docker 中运行有问题,暂时用 supervisor,记录下安装配置过程。

Python 环境安装

安装 poetry

curl -sSL https://install.python-poetry.org | python3 - --version 1.4.2


root 下命令的安装位置: `/root/.local/bin/poetry`

安装 pyenv

curl -s -S -L https://raw.githubusercontent.com/pyenv/pyenv-installer/master/bin/pyenv-installer | bash

安装特定版本 python

# fix ssl
sudo apt-get update && sudo apt-get install libssl-dev

pyenv install 3.9.6
# set python version
pyenv global 3.9.6

问题

ModuleNotFoundError: No module named '_ctypes'

解决:

sudo add-apt-repository ppa:deadsnakes/ppa -y && sudo apt install --reinstall python3.9-distutils
apt install  libffi-dev

# 重新安装 Python
pyenv uninstall <your_version>
sudo apt install libffi-dev
pyenv install <your_version>
pyenv global <your_version>

supervisor 安装与配置

安装 :

 apt install supervisor -y

配置:

[program:app]
user=root
directory=/root/app
command=/var/supervisor/start_app.sh

autostart=true
autorestart=true
stdout_logfile=/var/supervisor/log/access.log
stderr_logfile=/var/supervisor/log/error.log

start 脚本:

#!/bin/bash
cd /root/app
export ENV=local
exec poetry run gunicorn --bind 0.0.0.0:8000 -w 4 -k uvicorn.workers.UvicornWorker app.server:app --timeout 300

Supervisor 常用命令

supervisord -c /etc/supervisor/supervisor.conf

supervisorctl start/restart/stop