ubuntu 18.04 搭建flask服务器(大合集,个人实操)

时间:2022-06-01 16:38:34

ubuntu 18.04 搭建flask服务器(大合集)

Ubuntu python flask 服务器


本次使用的Ubuntu版本为:Ubuntu 18.04.5 LTS (GNU/Linux 4.15.0-112-generic x86_64)

本文档基于aliyun服务器上部署个人站步骤建立,全为个人实操,请参考自己项目使用,因为aliyun服务器中的Ubuntu镜像默认使用的就是阿里源,所以我不需要进行换源操作(推荐换为国内源软件下载速度快)

因为服务器上使用的是root账户,所以部分命令没有加sudo权限也能使用,个人电脑上安装时,相应命令无法使用时,可以加上 sudo权限试试

准备:

本次搭建的是flask服务器环境,需要安装的组件有Nginx、MySQL、uwsgi、flask

Ubuntu 18.04中自带的python版本为

Python 2.7.17 (default, Jul 20 2020, 15:37:01)

Python 3.6.9 (default, Jul 17 2020, 12:50:27)

我的项目python3.6就够用了,所以我不需要对python环境进行改变,如有其它需求,请自行对应修改。

对Ubuntu相关资源升级

1. linux资源升级 sudo apt-get update

2. linux软件升级 sudo apt-get upgrade

Nginx组件下载安装

1、Nginx下载并安装 sudo apt install nginx

2、查看安装状态:sudo systemctl status nginx

ubuntu 18.04 搭建flask服务器(大合集,个人实操)

3、查看安装版本:sudo nginx -v

ubuntu 18.04 搭建flask服务器(大合集,个人实操)

4、上面结果正确后,浏览器访问你服务器的地址可得到下面结果(默认情况下,阿里云的80端口是打开的,如果是本地的话还可能需要配置端口以及防火墙,请自行操作,本地地址http://127.0.0.1:80)

ubuntu 18.04 搭建flask服务器(大合集,个人实操)

MySQL下载安装

1、MySQL下载安装:sudo apt-get install mysql-server

2、配置MySQL,初始化:sudo mysql_secure_installation

1)验证密码插件可以用来测试密码提高安全性。它检查密码的强度只允许用户设置足够安全。是否要设置验证密码插件?

ubuntu 18.04 搭建flask服务器(大合集,个人实操)

我选的 N (因为我是个人站,学习使用)

2)然后输入密码,第二次再次输入确认,这个密码就是MySQL数据库的root账号密码

ubuntu 18.04 搭建flask服务器(大合集,个人实操)

3)默认情况下,MySQL安装有一个匿名用户,允许任何人登录MySQL而不必为他们创建的用户帐户。这只是为了测试,并使安装变得更加顺利。您应该在进入生产之前删除它们环境。

ubuntu 18.04 搭建flask服务器(大合集,个人实操)

我选的 N

4)通常,只允许根用户从“本地主机”。这确保了有人不能猜到来自网络的根密码。

ubuntu 18.04 搭建flask服务器(大合集,个人实操)

我选的 Y

5)默认情况下,MySQL附带一个名为“test”的数据库任何人都可以访问。这也仅用于测试,在投入生产前应将其移除环境。

ubuntu 18.04 搭建flask服务器(大合集,个人实操)

我选的 Y

6)重新加载特权表将确保所有更改到目前为止,将立即生效。

ubuntu 18.04 搭建flask服务器(大合集,个人实操)

我选的 Y

3、检查服务状态 systemctl status mysql.service ,出现以下结果及说明正常。

ubuntu 18.04 搭建flask服务器(大合集,个人实操)

4、配置远程访问(仅本地使用即可不管)

1)首先使用root用户登入MySQL sudo mysql -uroot -p,回车后输入密码

ubuntu 18.04 搭建flask服务器(大合集,个人实操)

2)GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "password";

\*.*:代表可以访问所有数据库和表

root:代表远程登录的用户名为root

"%":代表任何ip地址都可访问,默认为本地localhost

"password":代表远程访问root用户的密码是password

成功后会输出如下字样:Query OK, 0 rows affected, 1 warning (0.00 sec)

成功后使用exit; 退出数据库命令行

实例:

1 创建数据库weixx

CREATE DATABASE weixx;

2 创建用户wxx(密码654321) 并允许wxx用户可以从任意机器上登入mysql的weixx数据库

GRANT ALL PRIVILEGES ON weixx.* TO wxx@"%" IDENTIFIED BY "654321";

5、编辑mysql配置文件vi /etc/mysql/mysql.conf.d/mysqld.cnf

bind-address= 127.0.0.1注掉。

或者在bind-address后面增加远程访问IP地址

bind-address=127.0.0.1 114.196.197.1(允许多个IP可访问mysql服务器,空格隔开)

我是简单粗暴直接注释掉

6、重启MySQL服务 service mysql restart ,重启后systemctl status mysql.service检查服务状态是否为runing,是则正确。

flask 环境安装配置

flask可以安装在虚拟环境中,也可全局安装

1、全局安装 pip3 install Flask ,flask后面可跟版本号,不加版本号默认安装资源路径最新版, (aliyun的Ubuntu中pip默认指向的是python2,我需要用python3,所以使用pip3,如果你默认pip指向为python3则使用pip即可)

使用python -m Flask --version命令验证安装,该命令将打印 Flask 版本.

我使用的是 python3 -m flask --version 命令,本教程记录时flask最新版为1.1.2

Python 3.6.9

Flask 1.1.2

Werkzeug 1.0.1

2、虚拟环境中安装。

1)安装虚拟模块 sudo apt-get install python3-venv.

对于使用python2的来说,那么 venv 模块无法使用。相应的,必须安装 virtualenv.

virtualenv 通过操作系统的包管理器安装:

sudo apt-get install python-virtualenv

2)在任何安全位置创建一个你的项目文件夹,用于存放你的项目和虚拟环境,如myproject。然后进入myproject.

使用python3 -m venv venv创建一个环境.创建完成后myproject里面会多一个venv文件夹

3)激活相应的虚拟环境:

. venv/bin/activate,也可以使用source venv/bin/activate激活

ubuntu 18.04 搭建flask服务器(大合集,个人实操)

激活后,你的终端提示符会显示虚拟环境的名称venv

4)激活后,在虚拟环境中可使用pip安装flask: pip install Flask

使用命令 pip 而不是 pip3 、 python 而不是 python3。

(不过我在实际使用中,项目后面安装组件的时候有时使用python安装不上,而使用python3反而安装上了,请自己结合实际使用)

5)使用python -m flask --version验证安装

ubuntu 18.04 搭建flask服务器(大合集,个人实操)

到此flask就安装完成了。接着就开始在你的项目中写代码吧

3、停用虚拟环境

完成工作后,通过键入 deactivate 来停用环境,您将返回正常的 shell。

flask 项目部署

首先将你的完整项目上传到服务器上,上传的方法有许多,自行上传

我使用的是git方式: git在Ubuntu 18.04上安装方法

项目上传到服务器上后,安装缺少的组件

在本地生成requirements.txt文件

pip freeze > requirements.txt

然后在服务器虚拟环境中安装requirements.txt依赖

pip install -r requirements.txt

所有依赖安装完成后使用python运行项目,如果能成功运行则进入下一步,否则解决所有错误。

项目调试完毕后,进行项目部署

uwsgi 安装和配置

1、使用命令 pip3 install uwsgi 安装uwsgi

安装检测:

创建test.py

  1. def application(env, start_response):
  2. start_response('200 OK', [('Content-Type','text/html')])
  3. return [b"Hello uwsgi! uwsgi is ok!"]

然后使用 uwsgi运行该文件

uwsgi --http-socket :5000 --wsgi-file test.py

然后浏览器访问服务器的5000端口(aliyun服务器记得配置5000端口的安全组,或者改成你已经有的端口,但不能是80等其他程序占用了的)。

如果浏览器得到** Hello uwsgi! uwsgi is ok! **输出则成功。

2、uwsgi 配置

在项目更目录下新建一个ini文件 vi uwsgi.ini

文件内容参考如下(下面是我使用的ini配置,uwsgi还有许多其他的配置功能,请自行查阅 官方文档):

  1. [uwsgi]
  2. # 监听端口,使用Nginx代理时使用这个
  3. socket = 127.0.0.1:8000
  4. # 独立服务器运行时使用这个
  5. # http = 0.0.0.0:8000
  6. # 工作路径(你的项目根目录路径)
  7. chdir = /www/myproject
  8. # wsgi 路径,项目调用的主程序文件(不在项目根目录需要带上路径)
  9. wsgi-file = myproject_run.py
  10. # 项目内的python程序名称,flask的程序通常叫app,
  11. callable = app
  12. # 设置进程 processes 和 workers 一样的意思
  13. # processes = 2
  14. workers = 2
  15. # 每个进程下面的线程数
  16. threads = 4
  17. # 以独立守护进程运行
  18. master = True
  19. # 允许在请求中开启新线程
  20. enable-threads = True
  21. # 存放uwsgi进程的pid,便于重启和关闭操作
  22. pidfile = uwsgi.pid
  23. # 日志文件
  24. daemonize = uwsgi_server.log
  25. # 返回一个json串,显示各进程和worker的状态
  26. stats=127.0.0.1:9191
  27. # 启用内存报告,报告占用的内存
  28. memory-report=true
  29. # 缓冲区大小,设置请求的最大大小
  30. buffer-size = 65535

3、uwsgi 相关操作

(ini就是上面新建的ini文件,pid文件在ini运行后会出现)

启动:uwsgi --ini xxx.ini

重启:uwsgi --reload xxx.pid

停止:uwsgi --stop xxx.pid

如果你配置的是 http = 0.0.0.0:8000 的话,启动以后你就可以在浏览器中访问你的网站了,不过当前还没有进行Nginx代理,所以浏览器收不到静态资源文件,网页上的静态文件就,反正我自己理解是这样的。

Nginx配置

假设我项目路径为

  1. myproject/
  2. ├── manage.py
  3. ├── uwsgi.ini
  4. ├── static
  5. ├── mycss.css
  6. ├── myjs.js
  7. ├── myimg.jpg
  8. └── project
  9. ├── __init__.py
  10. ├── settings.py
  11. ├── urls.py
  12. └── works.py

myproject项目路径为/www/myproject

static为项目静态文件

manage.py为项目启动文件

uwsgi.ini为uwsgi配置文件

Nginx配置文件路径在/etc/nginx/sites-available/default

我是直接改的原本的Nginx配置文件,不想修改原文件的可以复制一份或者网上查看其它教程。

不知道为什么aliyun的Nginx安装后配置文件和网上许多教程路径(/etc/nginx/nginx.conf)不一样,aliyun在nginx.conf文件里面又导入了sites-available文件夹里面的default文件,然后default里面的内容才和网络上大部分教程内容相同(我没研究过Nginx),反正结合自己的实际为准。

vi /etc/nginx/sites-available/default修改Nginx配置文件内容

我原本文件内容,其中注释已经被我去掉了,占空间

  1. server {
  2. listen 80 default_server;
  3. listen [::]:80 default_server;
  4. root /var/www/html;
  5. index index.html index.htm index.nginx-debian.html;
  6. server_name _;
  7. location / {
  8. # First attempt to serve request as file, then
  9. # as directory, then fall back to displaying a 404.
  10. try_files $uri $uri/ =404;
  11. }
  12. }

其中:

root :指定虚拟主机根目录(web项目根目录)

index :默认首页

修改后:

  1. server {
  2. listen 80;
  3. server_name _ localhost;
  4. root /www/myproject; # 项目路径
  5. location /static{
  6. # 项目静态文件,动静分离
  7. alias /www/myproject/static;
  8. }
  9. location / {
  10. # uwsgi_params在Nginx里面,使用自己的路径
  11. include /etc/nginx/uwsgi_params;
  12. # 这里是之前配置uwsgi时设置的端口号8000
  13. uwsgi_pass localhost:8000;
  14. }
  15. }

然后重启Nginx,网上的许多重启Nginx的教程和aliyun里面安装的Nginx对不上,比如在我的服务器上找不到/usr/local/nginx/sbin这个路径,我使用的方式是service nginx reload直接重启,结果能成功,至于为什么,我不知道,反正能用就行,哈哈。

nginx启动:service nginx start

nginx停止:service nginx stop

nginx重启:service nginx reload

到此不出意外的话,恭喜你,你已经可以访问你的网站了。

我的小站,里面什么都没有,只是贴上来说明我操作成功了的。

我的小站还在建设中,所以如有问题后面碰到会修改,如果没改那说明我能够运行