我知道flask deployment options,但对于我写的这样一个简单的烧瓶应用程序来说,所有这些选项对我来说似乎有些过分。它与flask自己的内置服务器一起工作得很好。
nw=$(echo $line | wc -w)
echo $line | cut -d ' ' -f$nw-
继承我的run.py文件
workon kittapp
python run.py // runs the webserver at configured port, everything's fine
第一个问题是,一旦我退出ssh会话,服务器就会停止,因此我尝试使用一次性from kittapp import app
if __name__ == '__main__':
app.run(host=app.config['HOST'], port=app.config['PORT'], debug=app.config['DEBUG'])
作业cron
或at now
将任务推送到后台命令。它工作正常,但第二个问题是几个小时后python进程(推送到bg)不再运行,webapp已关闭。
我知道我最终需要为此编写一个类似守护进程的启动脚本。只是想看看是否有任何其他简单但可靠的解决方案在ubuntu机器上部署烧瓶应用程序?
答案 0 :(得分:0)
您可能正在寻找Supervisor。
Supervisor是类Unix系统的过程控制工具。它提供了一个易于使用的界面,仅使用config files来构建和管理类似守护进程的监督流程。
您可以为Flask应用创建一个简单的配置文件,将其添加到Supervisor,启动它然后就完成了。方法如下:
# Install supervisor
sudo apt install supervisor -y # Or pip install supervisor
# Start supervisor service
sudo service supervisor start
# Create your config file
# I'll add a sample kittapp.conf later on...
sudo vim /etc/supervisor/conf.d/kittapp.conf
# Add and start your job
sudo supervisorctl add kittapp
sudo supervisorctl start kittapp
容易对吗?但是在使用virtualenvs时会有一些问题。请注意workon
是一个shell函数,而不是PATH中的可执行文件。在运行作业之前,主管不会提取您的~/.bash*
或~/.zsh*
文件。它对它们一无所知。因此,workon
将无法使用。相反,我们需要正确设置python路径以指向我们的venv的bin/
目录。可以使用environment
指令完成。
这是一个最小的Supervisor配置文件:
[program:kittapp]
environment=PATH="/home/user/virtualenvs/kittapp/bin" # Point it to the bin/ directory of your venv
command=python run.py # Here's the actual command that supervisor needs to run in order to start the server
directory=/var/www/kittapp # Instructs supervisor to cd into this directory before running the command
stdout_logfile=/var/www/kittapp/logs/supervisor.log # Write logs to this file
redirect_stderr=true # Redirect errors to supervisor output, so you'll have your errors in the log file
嗯,这就是它的全部。
你可能想看一下Laracasts关于主管的课程:
https://laracasts.com/lessons/supervise-this