zoukankan      html  css  js  c++  java
  • ubuntu 18.04 搭建flask服务器(大合集,个人实操)

    ubuntu 18.04 搭建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

    def application(env, start_response):
        start_response('200 OK', [('Content-Type','text/html')])
        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还有许多其他的配置功能,请自行查阅 官方文档):

    [uwsgi]
    # 监听端口,使用Nginx代理时使用这个
    socket = 127.0.0.1:8000
    # 独立服务器运行时使用这个
    # http = 0.0.0.0:8000
    # 工作路径(你的项目根目录路径)
    chdir = /www/myproject
    # wsgi 路径,项目调用的主程序文件(不在项目根目录需要带上路径)
    wsgi-file = myproject_run.py
    # 项目内的python程序名称,flask的程序通常叫app,
    callable = app
    # 设置进程 processes 和 workers 一样的意思
    # processes = 2
    workers = 2
    # 每个进程下面的线程数
    threads = 4
    # 以独立守护进程运行
    master = True
    # 允许在请求中开启新线程
    enable-threads = True
    # 存放uwsgi进程的pid,便于重启和关闭操作
    pidfile = uwsgi.pid
    # 日志文件
    daemonize = uwsgi_server.log
    # 返回一个json串,显示各进程和worker的状态
    stats=127.0.0.1:9191
    # 启用内存报告,报告占用的内存
    memory-report=true
    # 缓冲区大小,设置请求的最大大小
    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配置

    假设我项目路径为

    myproject/
    ├── manage.py
    ├── uwsgi.ini
    ├── static
        ├── mycss.css
        ├── myjs.js
        ├── myimg.jpg
    └── project
        ├── __init__.py
        ├── settings.py
        ├── urls.py
        └── 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配置文件内容
    我原本文件内容,其中注释已经被我去掉了,占空间

    server {
            listen 80 default_server;
            listen [::]:80 default_server;
            root /var/www/html;
            index index.html index.htm index.nginx-debian.html;
            server_name _;
    
            location / {
                    # First attempt to serve request as file, then
                    # as directory, then fall back to displaying a 404.
                    try_files $uri $uri/ =404;
            }
        }
    

    其中:
    root :指定虚拟主机根目录(web项目根目录)
    index :默认首页

    修改后:

    server {
            listen 80;
            server_name _ localhost;
            
            root /www/myproject;  # 项目路径
            
            location /static{  
                # 项目静态文件,动静分离
                alias /www/myproject/static;
            }
            
            location / {
                # uwsgi_params在Nginx里面,使用自己的路径
                include /etc/nginx/uwsgi_params; 
                # 这里是之前配置uwsgi时设置的端口号8000
                uwsgi_pass localhost:8000;
            }
        }
    

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

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

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

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

  • 相关阅读:
    [LeetCode 1029] Two City Scheduling
    POJ 2342 Anniversary party (树形DP入门)
    Nowcoder 106 C.Professional Manager(统计并查集的个数)
    2018 GDCPC 省赛总结
    CF 977 F. Consecutive Subsequence
    Uva 12325 Zombie's Treasure Chest (贪心,分类讨论)
    Poj 2337 Catenyms(有向图DFS求欧拉通路)
    POJ 1236 Network of Schools (强连通分量缩点求度数)
    POJ 1144 Network (求割点)
    POJ 3310 Caterpillar(图的度的判定)
  • 原文地址:https://www.cnblogs.com/warm-home/p/13794107.html
Copyright © 2011-2022 走看看