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. viewPager2的Bug

    在使用数据绑定时,viewpager2的 android:layout_width 必需 match_parent,不然要么显示不正常,要么直接崩溃.

  2. android 数据绑定(4)实用特性及疑惑:使用控件、格式化@string/xxx、对象传递、双向数据绑定

    1.在布局内使用其它控件 1.1 效果 箭头所指3个控件的内容随输入框内容而变化. 1.2 示例代码 <?xml version="1.0" encoding="u ...

  3. Android反解符号表工具

    cd ~/android-ndk-r13b/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin ./arm-linux-an ...

  4. C++轻量级跨平台文件系统API

    http://en.cppreference.com/w/cpp/experimental/fs https://www.starmessagesoftware.com/cpcclibrary htt ...

  5. App性能测试前需要了解的内存原理

    这两天在研究性能中内存方面的一块,网上也零散看了挺多文章,写得很细但是感觉不够整体,所以这篇算是总结一下吧,当个复习资料. 那么这里个人分为两个大部分,第一部分应用内的内存管理,主要是oom的理解,G ...

  6. AMQP 概论

    AMQP 是应用层协议的一个开放标准,为面向消息的中间件设计.基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制.目标是实现一种在全行业广泛使用的标准消 ...

  7. 《C++深度解析》课程目录

    <C++深度解析>课程目录 第1课 - 学习 C++ 的意义 第2课 - C到C++的升级     第3课 - 进化后的const分析 第4课 - 布尔类型和引用 第5课 - 引用的本质分 ...

  8. Kubernetes K8S之Service服务详解与示例

    K8S之Service概述与代理说明,并详解所有的service服务类型与示例 主机配置规划 服务器名称(hostname) 系统版本 配置 内网IP 外网IP(模拟) k8s-master Cent ...

  9. js学习笔记之作用域链和闭包

    在学习闭包之前我们很有必要先了解什么是作用域链 一.作用域链 作用域链是保证对执行环境有权访问的所有变量和函数的有序访问. 这句话其实还是蛮抽象的,但是通过下面一个例子,我们就能清楚的了解到作用域链了 ...

  10. Java基本数据类型、关键字

    Java基本数据类型.关键字 一.Java基本数据类型 Java有8中基本数据类型:byte\char \short \int\float\double\long\boolean 在说明每种类型大小前 ...