Ubuntu 18.04,Nginx 1.14.0,uWSGI 2.0.17.1,Flask 1.0.2,Python 3.6.5,html
多日未更新博客,就是在忙着把本身的Flask应用在Ubuntu上运行起来,额,是生产环境中运行起来,因此,须要用到uWSGI服务器,而不是Flask自带的开发用服务器。python
另外,顺便学习Linux,好比,用户和用户组管理、环境变量的配置、各类配置文件修改、进程管理、服务随机启动配置等,只是,还没有精通,但对于目前部署本身的Flask应用时够了。nginx
总之,先在Ubuntu上把程序跑起来!mongodb
本文展现在本地运行起来的项目架构图,以下:flask
下午在本地环境实现了开机自动启动项目须要的服务,其中,uWSGI服务器的随机启动花费了本身很多时间,和本身以前安装uWSGI的方式、不会查看uWSGI的日志 和 对uWSGI的配置不熟悉形成的吧!ubuntu
刚刚整理了一个本身遇到的Flask项目开发、部署的全过程的鱼骨图,仅供参考(大概的步骤是对的,具体细节还需调整):安装软件--开发应用(测试)--部署应用(测试)。后端
固然,下面的过程也适合于其它Python Web应用的开发部署吧,好比Django(其它的没有接触过)!浏览器
P.S.要不要开发一个Python Web应用开发部署工具啊?一键在对应的Linux发行版上部署好应用,嘿服务器
P.S.是否是还有容器部署的方式?架构
【软件安装】
1.Python3
Ubuntu 18上已经有了,python3是可用的;
2.pip3
也已经有了,没有的话,请使用下面的命令安装:
apt-get install python3-pip
3.virtualenv
使用pip安装:
pip3 install virtualenv
而后创建虚拟工做目录,前面有博文介绍。
4.Flask
在下午配置uWSGI加载Flask应用随机启动时遇到了问题,虽然系统的Python3中已经安装了Flask,但是,错误日志提示找不到flask模块,并且,尝试了配置pythonpath也没法解决问题,最后,经过在虚拟工做目录中安装flask等模块完成了配置。
使用pip安装(虚拟工做目录,下同):
pip install flask
5.MongoDB 和 Python的MongoDB驱动pymongo
5.1.MongoDB安装
最新版是4.0,参考官网的安装方式:
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/
选择了其中的推荐的Using .deb Packages (Recommended),安装好后市4.0。
固然,安装完毕后的配置是必要的,添加角色、用户等。
5.2.安装pymongo模块
使用pip安装:
pip install pymongo
6.Nginx安装
在安装以前,将pcre、openssl等安装好;
采用的是从源码安装的方式;
7.uWSGI安装
有两种方式:
pip安装;
apt/apt-get安装;
本身先是使用了pip安装(但没安装到虚拟工做目录中),但在配置uWSGI随机启动时遇到了一系列问题,最后放弃并卸载了,改成采用apt/apt-get安装;
使用pip安装时,uwsgi命令出如今当前用户家目录的.local中,而apt/apt-get安装时,uwsgi命令出如今公共目录中,全部用户都是可用的吧;
pip安装时,没有找到配置、日志等的存放位置,而apt/apt-get安装时,/etc/下有uwsgi的配置文件,/var/log/中有其日志文件——在这里,孤看到了随机启动配置时的一些错误信息,最后沿着错误信息解决了问题;
固然,如果采用pip安装方式在虚拟工做目录中安装的话,或许问题也会被解决了——待验证。
apt/apt-get安装时,还要安装python3-uwsgi插件,安装命令以下:
sudo apt install uwsgi uwsgi-plugin-python3
参考连接(还有很多看过的文档就无法记录在这里了):
如何正确的使用uwsgi by 园友 iamroot
Linux下Nginx安装的方法(pcre和openssl)
【启动配置】
配置分为两步,一是配置后手动启动软件或服务,二是配置后随机启动软件或服务。
固然,还有第三步,配置后,服务在挂掉后能够自动恢复。
目前作到了第二步,可是,第二步配置有不少方法能够改进的。
1.Nginx配置
使用apt/apt-get安装时,配置文件存在于/etc/nginx/目录中:
目前本身是 直接修改 sites-available目录下的default文件 实现请求转发给后端的uWSGI服务器的。
使用apt/apt-get安装时,Nginx服务器已是随机启动了,其脚本位于/etc/init.d/目录中:
Nginx的日志文件存放于/var/log/nginx/目录下:
2.MongoDB配置
版本是最新的4.0,使用官方的.deb的方式安装后,mongod、mongo命令是全部用户能够用的。
可是,服务须要本身执行命令(假设读者已经会使用MongoDB了)。
MongoDB会有配置文件,但孤目前只使用过命令行启动模式,命令以下:
mongod --dbpath /home/log/ws/mdb/data0725 --logpath /home/log/ws/mdb/data0725/log --logappend --auth --directoryperdb
默认端口,须要认证,仅能够在本机访问。
配置随机启动:
在/etc/init.d/目录中创建启动脚本mongo01:
只有一条命令,注意,命令最后须要添加&符号。
在/etc/rc3.d/目录中创建mongo01的软链接:
就能够了,从新启动计算机后,可使用mongo访问MongoDB服务器了。
3.uWSGI配置
这个是 重难点!耗费了很多时间啊!
前面有说起了,使用pip安装方式,一直没法配置好随机启动。
以后更改成apt/apt-get安装方式,找到了配置文件,而后才一步一步配置完成随机启动。
在两种安装方式下,均可以使用uwsgi命令,但pip方式安装时只属于安装它的用户,而apt/apt-get方式安装时则全部用户均可以用,并且,更规范一下,虽然版本较低一点。
本文仅介绍apt/apt-get安装方式下成功配置随机启动的过程。
uWSGI的配置存在于/etc/uwsgi/中:
包含两个目录——apps-available、apps-enabled(和Nginx相似),其中,前者存放的是真正的配置文件的地方,能够多个——须要避免冲突吧?,后者存放前者配置文件的 软连接。
最重大的问题就出如今这里:孤觉得把以前手动执行的配置文件直接放到apps-available就能够了,但是,行不通,而后,一下午的时间就耗在这里了!
对比下面两个 手动vs自动 版本的配置文件:
相比于手动,多了plugins、virtualenv两个配置项,另外,socket的配置用的上/run/uwsgi/下的一个socket文件。
尚不清楚为什么plugins是python而不是python3,由于虚拟工做目录的python就是Python 3版本的?错误信息:
-- unavailable modifier requested: 0 --
socket使用/run/uwsgi/下的socket文件,和权限有关系,具体的还没搞清楚。日志文件权限问题致使的错误信息:
error removing unix socket, unlink(): Permission denied [core/socket.c line 198]
关于配置virtualenv,没有配置的话,会出现下面的错误:竟然找不到flask(期间尝试了配置pythonpath,均失败了;加上以前看的博文都是配置virtualenv的,因此,才会有此次尝试,不然,又要更多精时耗费了,不过,以前看博文也是须要耗费精时的嘛,)
from flask import Flask, render_template
ModuleNotFoundError: No module named 'flask'
还好,找到了uwsgi的全局日志文件,存在于/var/log/uwsgi/中,每一个app一个日志文件(感谢日志文件):
日志文件的名称对应配置文件中的apps-enabled目录下的软连接名称。
随机启动?写好uWSGI加载Flask应用的配置文件,扔到apps-available下并在apps-enabled中创建软连接便可。
其它应用也是如此的吧?
而后,其它的就由uWSGI的位于/etc/init.d/目录下的启动脚本负责了(挺长的,本身目前改不了):
固然,随机启动还有其它配置方式的,还须要学习。为什么MongoDB的启动脚本的软连接创建在/etc/rc3.d/目录中呢?这和Linux的运行级别有关系。
最后,重启,测试是否都随机启动了。启动后执行下面的命令:
ps -ef | grep -e nginx -e mongod -e uwsgi
下图显示,三个服务器都启动了。
进一步,经过浏览器访问本身开发的Flask应用,结果显示也是成功的,不然,请检查各类问题吧!
后记
服务坏了怎么办?
通知?
监控?
计划任务?
systemd?
路漫漫~