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

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

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

MySQL下载安装

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

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

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



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

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



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



我选的 N

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



我选的 Y

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



我选的 Y

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



我选的 Y

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

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

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



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激活



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

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

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

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

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

到此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

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

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

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

ubuntu 18.04 搭建flask服务器(大合集,个人实操)的更多相关文章

  1. 【Ubuntu 18.04 搭建VNC服务器】

    https://www.jianshu.com/p/f58fe5cdeb5f 桌面共享 Ubuntu 18.04自带桌面共享,可以将物理桌面共享给VNC.但是无法创建新的桌面. 具体参考 https: ...

  2. Ubuntu 18.04搭建Git服务器

    学习链接:博客园.廖雪峰 一 前言 前面已经贴了两个链接,为什么还要再写一篇呢,因为可能由于个人能力问题,我觉得上面两篇写的都有点简略,有些地方不太好理解,并不能一次性成功搭建,所以想根据自己踩过的坑 ...

  3. Ubuntu 12.04 搭建TFTP服务器

    吐槽先:在Ubuntu上搭建TFTP服务器,网上搜到一堆资料,可惜基本都是部分能用,至于哪些部分能用还要自己摸索着试出来,郁闷之情仅次于找不到任何资料…… ---------------------- ...

  4. 在 Ubuntu 18.04 LTS 无头服务器上安装 Oracle VirtualBox

    作者: Sk 译者: LCTT qhwdw | 2018-10-12 01:59 本教程将指导你在 Ubuntu 18.04 LTS 无头服务器上,一步一步地安装 Oracle VirtualBox. ...

  5. Ubuntu 18.04安装Samba服务器及配置

    Ubuntu 18.04安装Samba服务器及配置 局域网下使用samba服务在Linux系统与Windows系统直接共享文件是一项很方便的操作.以Ubuntu为例配置samba服务,Linux服务器 ...

  6. CentOS 6.9/Ubuntu 16.04搭建OpenVPN服务器以及客户端的使用

    说明: 1.发现一个很奇怪的现象,CentOS和Ubuntu有着对用户不同的管理理念,比如CentOS中安装一切软件都是以root优先(su -),而Ubuntu则以当前用户优先,安装软件以sudo开 ...

  7. 烂泥:ubuntu 14.04搭建OpenVPN服务器

    本文由秀依林枫提供友情赞助,首发于烂泥行天下 公司分部需要连接公司内部的服务器,但是该服务器只允许公司内部的网络访问. 为了解决这个问题,打算使用VPN.对于VPN以前使用最多的是PPTP这个解决方案 ...

  8. 阿里云ubuntu 16.04搭建odoo11服务器

    ubuntu 16.04 具体如何搭建odoo11网站的具体步骤可以参考这一篇文章 按上面的文章配置环境后,自己网站的启动具体步骤如下: 1.登录阿里云 [远程连接],进入命令行界面1 2.cd到目录 ...

  9. Ubuntu 16.04搭建OpenVPN服务器以及客户端的使用

    说明:启动时注意用户权限,比如root用户启动. Ubuntu: 服务器环境:Ubuntu 16.04 64位系统 内网IP:10.143.80.116 外网IP:203.195.1.2 OpenVP ...

随机推荐

  1. unity坑-编译错误

    问题: 项目里面有一个 StreamReader来读取一个文件,使用OpenText() 方法. 但是UNITY却提示 StreamReader类不包含OpenText()方法,并且也没有找到扩展方法 ...

  2. Easy Game(记忆化搜索)

    You are playing a two player game. Initially there are n integer numbers in an array and player A an ...

  3. Left Mouse Button (bfs)

    Mine sweeper is a very popular small game in Windows operating system. The object of the game is to ...

  4. Activiti7 流程部署

    首先先绘制一个流程图 创建bpmn文件 然后绘制好节点 然后修改节点信息 指定负责人 点击背景,修改ID和名称 保存 然后重命名成xml 使用diagram打开 导出png 然后包xml改回bpmn ...

  5. [bash]查找指定目录下符合格式的txt文件

    需求: 查找指定目录下符合yyyy-MM-dd(-b)NNN.txt格式的文件,如“2020-03-22-b888.txt” 目标目录内容: [root@localhost bashs]# ll /r ...

  6. 同样是logback1.11,更换了log配置后,无论是否有线程持续不断写入log文件,log文件会按设定以日期序号轮换

    上次发现了logback1.11的一个bug,即有线程持续写入log,则log文件不会按设定模式进行轮换. 但发现同样采用logback1.11的另外一个工程,它的日志文件就没有错误,于是参照其配置文 ...

  7. 软件定义网络实验(一)----Mininet源码安装和可视化拓扑工具

    一.实验任务 掌握 Mininet 的源码安装方法和 miniedit 可视化拓扑生成工具. 二.实验任务 使用源码安装 Mininet 的 2.3.0d6 版本,并使用可视化拓扑工具生成一个最简拓扑 ...

  8. python - 模块调用

    基础 调用模块常见的两种方法 import [模块名] from [模块名] import [属性/方法] 进阶用法 调用父级目录下模块 背景介绍 目录new2(b2.py)调用上级目录new1(b1 ...

  9. Java编程系列文章序言

    Java编程系列分为基础编程和高级编程两部分: 其中基础编程包括基础语法如变量和标识符,流程控制等,数组如一维数组二位数组等,及面向对象,异常处理: 高级部分多线程,常用类,注解,Java集合,泛型, ...

  10. docker部署Broketrmq集群

    部署Broketrmq集群 通过docker-compose形式部署 首先创建 broker 配置文件,配置文件如下: brokerClusterName = DefaultCluster #集群名 ...