Ubuntu 18.04,Nginx 1.14.0,uWSGI 2.0.17.1,Flask 1.0.2,Python 3.6.5,

多日未更新博客,就是在忙着把自己的Flask应用在Ubuntu上运行起来,额,是生产环境中运行起来,所以,需要用到uWSGI服务器,而不是Flask自带的开发用服务器。

另外,顺便学习Linux,比如,用户和用户组管理、环境变量的配置、各种配置文件修改、进程管理、服务随机启动配置等,只是,尚未精通,但对于目前部署自己的Flask应用时够了。

总之,先在Ubuntu上把程序跑起来!

本文展示在本地运行起来的项目架构图,如下:

下午在本地环境实现了开机自动启动项目需要的服务,其中,uWSGI服务器的随机启动花费了自己不少时间,和自己之前安装uWSGI的方式、不会查看uWSGI的日志 和 对uWSGI的配置不熟悉造成的吧!

刚刚整理了一个自己遇到的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)

uWSGI中文文档-选项(配置)

【启动配置】

配置分为两步,一是配置后手动启动软件或服务,二是配置后随机启动软件或服务。

当然,还有第三步,配置后,服务在挂掉后可以自动恢复。

目前做到了第二步,但是,第二步配置有很多方法可以改进的。

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?

路漫漫~

Ubuntu+Nginx+uWSGI+Flask应用的更多相关文章

  1. Ubuntu下nginx+uwsgi+flask的执行环境搭建

    选择web framwork是个非常艰难的事情, 主要分为轻量级和重量级框架. 因为没有搭建站点这样的须要, 所以回避SSH, Django这样的框架, 而选择一个轻量级框架. 自己也比較青睐pyth ...

  2. Ubuntu下使用Nginx+uWSGI+Flask(初体验)

    Ubuntu 18.04,Nginx 1.14.0, uWSGI 2.0.17.1,Flask, 前言 Windows不支持uWSGI!为了上线自己的项目,只能选择Linux. 自己前面开发了一个Fl ...

  3. nginx+uwsgi+flask+supervisor 项目部署

    环境 - Linux: Ubuntu 16.04 - uWSGI 2.0.18 - Flask 1.0.2 - supervisor 3.2.0 - nginx/1.8.1 首先区分几个概念 WSGI ...

  4. Docker构建nginx+uwsgi+flask镜像(一)

    前言 笔者之前是从事Java方面的工作,自从18年5月左右来到新的公司,接触到Python,被其简单优雅的语法风格深深吸引,同时,新公司也帮助笔者打开Docker世界的大门,让笔者体会到“一次打包,到 ...

  5. 一次请求中,经过 nginx+uWSGI+flask应用程序搭建服务的执行过程

    Flask框架有自带的http server,但是缺点非常明显,并发能力,及时响应非常差,只适合开发时自测使用. 在我接触过的项目中,生产环境使用nginx+uWSGI+flask应用程序进行部署服务 ...

  6. nginx+uwsgi+flask 服务器配置

    注:每个机器,软件版本可能不一样,虽然网上有很多类似的帖子,但是我在搭建的时候遇到了不少的坑,此文仅供参考. 请求流程: 1.安装uwsgi uwsgi是一个应用服务器,非静态文件的网络请求就必须通过 ...

  7. Docker构建nginx+uwsgi+flask镜像(二)

    Dockerfile搭建环境并打包应用 在上一章Docker构建nginx+uwsgi+flask镜像(一)的学习中,我们学会用命令行一句一句在alpine环境中搭建nginx+uwsgi+flask ...

  8. Ubuntu Nginx uwsgi django 初试

    /************************************************************************************** * Ubuntu Ngi ...

  9. [技术博客]ubuntu+nginx+uwsgi+Django+https的部署

    ubuntu+nginx+uwsgi+Django+https部署文档 配置机器介绍 操作系统:Ubuntu 18.04.2 LTS 64位 python版本:Python 3.6.7 Django版 ...

随机推荐

  1. Java认识对象

    一.类与对象 java中有基本类型和类类型两个类型系统.Java撰写程序几乎都在使用对象,要产生对象必须先定义类,类是对象的设计图,对象是类的实例 1.定义类 类定义使用的关键词为class,建立实例 ...

  2. 如何运行spring项目,并打成jar包进行发布

    一.创建spring项目 1.创建项目 2.创建moudule,选择java类型即可. 3.创建lib文件,引入spring的4个核心包spring-beans.spring-context.spri ...

  3. 什么是Asp.net Core?和 .net core有什么区别?

    为什么要写这篇文章 写这篇文章有两个原因,第一个是因为新站点创建出来后一直空置着,所以写一篇文章放在这里.第二就是因为近来在做一些基于Asp.net core平台的项目开发,也遇到了一些问题,正好趁此 ...

  4. 如何取消mysql的密码?

    有两种方法: 1.mysql命令 SET PASSWORD FOR root@localhost=PASSWORD(''); 2.运行  mysqladmin 命令 mysqladmin -u roo ...

  5. IOS AES加密之ECB128模式

    1.AES加密模式有好几种,网上大多是CBC.256模式,找了好久才找到解决ECB128模式加密. AES需要导入头文件 #import <CommonCrypto/CommonCryptor. ...

  6. BZOJ 3170 松鼠聚会(切比雪夫距离转曼哈顿距离)

    题意 有N个小松鼠,它们的家用一个点x,y表示,两个点的距离定义为:点(x,y)和它周围的8个点即上下左右四个点和对角的四个点,距离为1.现在N个松鼠要走到一个松鼠家去,求走过的最短距离. 思路 题目 ...

  7. 【设计模式】—— 享元模式Flyweight

    前言:[模式总览]——————————by xingoo 模式意图 享元模式,也叫[轻量级模式]或者[蝇量级模式].主要目的就是为了减少细粒度资源的消耗.比如,一个编辑器用到大量的字母数字和符号,但是 ...

  8. oracle 获取当前用户下的所有表名与字段信息

     select *from user_col_commentswhere substr(table_name,1,3)<>'BIN' 

  9. 学习6__STM32--SPI外设之中断收发---

    <目标> STM32双机 SPI中断收发通信 <描述> # STM32双机配置为一主一从模式 # 采用主机中断发送,从机中断接收 # 收发机制采用不间断收发(发送为空就发送,接 ...

  10. 前端学习 -- Css -- 行间距

    在CSS并没有为我们提供一个直接设置行间距的方式,我们只能通过设置行高来间接的设置行间距,行高越大行间距越大.使用line-height来设置行高 .行高类似于我们上学单线本,单线本是一行一行,线与线 ...