首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用UWSGI、Nginx、direnv和systemd部署Flask应用程序

使用UWSGI、Nginx、direnv和systemd部署Flask应用程序
EN

Stack Overflow用户
提问于 2018-10-11 03:55:47
回答 1查看 537关注 0票数 1

我使用烧瓶创建了一个API,我正试图通过创建一个systemd服务将其部署到linux服务器上。

我已经使用direnv设置输入参数到应用程序,如数据库连接。下面是文件的样子:

uwsgi配置如下:

systemd文件有以下条目:

每当我试图访问浏览器上的服务时,我都会在我的uwsgi日志中得到折叠错误:

-没有找到python应用程序,请检查启动日志中是否有错误- pid: 23791\x{req:-1/3 192.168.9.180 () {44 vars ( 719字节)}清华10月11日14:35:09 :2018年GET / =>在0 msecs (HTTP/1.1 500)中生成了21个字节(HTTP/1.1 500),2个标头为83个字节(1个在核心0上切换)

我的理解是,systemd文件中的ExecStart命令无法调用direnv变量,因此我添加了ExecStartPre条目,但似乎不起作用。

如有任何提示或想法,将不胜感激。

注意:当我通过命令行从python虚拟环境运行uwsgi时,应用程序是可以访问的,没有错误:

uwsgi --套接字0.0.0.0:5000 -协议=http -w app:app

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-20 06:49:27

我有一些建议可能对你有帮助,也许只有第一个是你需要的.

1)要么将所有在direnv中定义的env变量作为Environment移动到systemd单元,要么将它们移动到一个特殊文件中(类似于您已经拥有的文件),而不使用“源激活”行和导出,然后将该文件作为EnvironmentFile传递,这是该https://www.freedesktop.org/software/systemd/man/systemd.exec.html#Environment的文档。

2)你的ExecStartPre实际上什么也不做,即使你做"cd“进入这条路,这是丢失的,也不是持久的。你应该把它移走。

3)通过将你的路径设置为这条路,你限制了你的自我,我会建议你看看你当前路径的价值,然后将它设置为这个值。但至少要添加"/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin".现在,扰流警报,您可能不需要设置它。

4)将套接字放在/run//socket.socket目录中,让systemd使用RuntimeDirectory指令管理您的RuntimeDirectory。

祝好运!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52751950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档