• 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

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

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

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

  • 相关阅读:
    函数式语言(老师作业)
    session/cookie
    Linux根目录下各个目录的功能介绍
    Navicat12安装文件和破解补丁
    正则表达式验证示例
    RequestDispatcher接口示例
    hello2部分源码解析
    Introduction of Servlet Filter
    关于hello1中的web.xml解析
    Annotation解释
  • 原文地址:https://www.cnblogs.com/warm-home/p/13794107.html
Copyright © 2020-2023  润新知