将Flask后端项目部署到云服务器上(部署过程以及踩过的坑)

将Flask后端项目部署到云服务器上(部署过程以及踩过的坑)

记录一下我的部署过程,其中包含参考其他博主的内容,仅供大家参考。


服务器

我使用的是阿里云服务器,安全配置组里配置好使用的端口号。

项目准备

项目上传之前记得要修改一下启动ip
部署到服务器上想要开放访问,需要将IP设置为0.0.0.0

if __name__ == "__main__":
    # webapp.run(debug = True,port=81)
    webapp.run(debug = True,host= '0.0.0.0', port = 81)

还要修改一下数据库的配置,配置为服务器上的数据库。

安装python环境

如果你需要的依赖中也包括mysqlclient,pandas的话,建议先看一下我的这篇记录:

链接: Linux下ModuleNotFoundError: No module named ‘_ctypes’以及ModuleNotFoundError: No module named ‘_bz2‘

  • python官网:https://www.python.org/
    下载你所需要得到python版本的Source code

  • 将下载好的python包传输到服务器上,这里我使用的是Xftp,放在了/usr/local 目录下
    进行解压 tar -Jxvf Python-3.7.8.tar.xz -C /usr/local

  • 解压得到源码后进行安装:
    切换至解压后的python主目录
    执行命令: cd /usr/local/Python-3.7.8/

  • 在python主目录Python-3.7.8下
    执行以下命令配置python:
    ./configure --prefix=/usr/local/Python-3.7.8(其中–prefix是指定python的安装路径)

  • 编译安装python
    执行命令:
    make && make install

  • 完成后执行python -V,应该显示python: command not found
    因为此时还没有配置软连接(类似windows下环境变量)
    执行命令配置软连接:
    ln -s /usr/local/Python-3.7.8/bin/python3.7 /usr/bin/python
    然后再执行python -V即可成功看到 Python 3.7.8

参考文章链接:https://blog.csdn.net/smilehappiness/article/details/117337943

安装python虚拟环境

  • usr/local/Python-3.7.8/bin下安装虚拟环境
    执行命令:
    pip3 install virtualenv
    方便操作添加软连接:
    ln -sv /usr/local/Python-3.7.8/bin/virtualenv /usr/bin/virtualenv

  • 创建虚拟环境 /opt/project/python
    执行命令:
    virtualenv -p /usr/local/Python-3.7.8/bin/python3.7 /opt/project/python/oilblending
    这里要注意:创建虚拟环境后,其采用的python版本不是系统全局的python而是独立的python,所以要注意在-p后指定你需要的python版本!

  • 切换到虚拟环境所在的目录
    执行命令:cd /opt/project/python/oilblending

  • 启用虚拟环境
    执行命令:source ./bin/activate

  • 更换国内镜像源
    使用命令: cd /root/.pip && vim ./pip.conf

## Note, this file is written by cloud-init on first boot of an instance
## modifications made here will not survive a re-bundle.
[global]
index-url=http://mirrors.aliyun.com/pypi/simple/
#index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=mirrors.aliyun.com
#trusted-host=https://pypi.tuna.tsinghua.edu.cn

更改后ESC退出编辑,并输入:wq保存。

  • 安装依赖清单里的库
    执行命令:
    pip3 install -r /opt/project/python/oilblending/requirements.txt
    这里一定要注意在虚拟环境中安装,不然会安装到外面全局的python库里。
  • 列出当前虚拟环境所安装的依赖库
    执行命令: pip3 list
  • 在指定环境下完成任务后关闭虚拟环境
    在虚拟环境下执行命令:deactivate

如果仍有部分包版本不匹配,可以在项目中下载依赖的离线包,然后上传到服务器进行安装。
pip download -r ./requirements.txt -d ./dependencies
把离线包上传到服务器后,使用下列命令安装依赖包:
pip3 install --no-index --find-links=./dependencies -r requirements.txt
其中,–find-links指定的是包文件的存放地址,-r指定的是txt文件的位置。

参考文章链接:https://blog.csdn.net/smilehappiness/article/details/117337943

安装并配置uwsgi

启动方式是flask自带的app.run(host="0.0.0.0", port=81) 只适用于开发模式,因为它是单线程的,生产环境影响性能,替代方案是可以用uWSGI管理。

  • 我安装到了虚拟环境中,所以先进入虚拟环境
    source activate(不在activate所在目录的话需要配置软连接)
    然后执行命令:pip3 install uwsgi进行安装

  • 之后要对uwsgi进行配置
    创建一个配置文件 xxxx.ini

[uwsgi]
socket=0.0.0.0:81
chdir=/usr/flaskapp/productionProcess
wsgi-file=app.py
callable=webapp
processes=4
threads=2
master=True
daemonize=uwsgi.log
pidfile=uwsgi.pid
buffer-size=65536

转一下别的博主的补充

1-通信接口:
	socket=:8080		-- socket通信速度比http快
	http=:8080		-- 官方不推荐使用
	http-socket=:8888		-- 一般使用这个
2-项目目录(启动文件所在位置)
	chdir=
3-项目中wsgi.py文件的目录,相对于项目目录
	wsgi-file=test.py
4-callable的对象就是一个wsgi接口,如Flask中的app,是flask独有的配置项
(django不需要)
	callable = WSGIHandler
5-指定启动的工作进程数
	processes=4
6-指定工作进程中的线程数
	threads=2
7-启动一个master主进程来管理其他进程,建议启动这个进程,在管理的时候
  比较方便;如果kill这个master进程,相当于关闭所有的uwsgi进程。
	master=True
8-使进程在后台运行,并将日志打到指定的日志文件或者udp服务器
	daemonize = uwsgi.log
9-不记录request日志,只记录错误日志
	disable-logging = true
10-保存启动之后主进程的pid(保存在uwsgi.pid文件中),防止运行多余程序
	pidfile=uwsgi.pid
11-一个请求花费的时间超过了这个harakiri超时时间,那么这个请求都会被丢弃,
   并且当前处理这个请求的工作进程会被回收再利用(即重启)
	harakiri = 60
12-为每个工作进程设置请求数的上限。当一个工作进程处理的请求数达到这个值,
   那么该工作进程就会被回收重用(重启)。
	max-requests = 5000
13-这个配置会使在平滑地重启工作子进程中,如果工作进程结束时间超过了
   8秒就会被强行结束(忽略之前已经接收到的请求而直接结束)
	reload-mercy = 8
14-uwsgi不建议使用root权限去启动uwsgi实例。
   可以通过root用户去运行uwsgi文件,当通过uid和gid去修改用户(移除root权限)
	uid=1000
	gid=1000
15-buffer-size用于uwsgi包解析的内部缓存区大小,默认是4k。这个值可以设置到64k
   用于解决报头过大的错误
	buffer-size=65536
16-由于GIL的存在,uwsgi默认不支持多线程,不对GIL进行初始化。
   但如果希望程序中的线程发挥作用,需要加入
   	enable-threads=True

原文链接:https://blog.csdn.net/SiShen654/article/details/109103116

  • 配置好以后执行以下命令启动:
    uwsgi --ini xxxx.ini
    注意启动时要移动到该文件所在处,不然会报错。
  • 执行下列命令查看进程:
    ps -ef | grep uwsgi
  • 执行以下命令关闭:
    uwsgi --stop uwsgi.pid

访问项目

uwsgi配置好,并且启动好后,访问你的服务器公网IP即可访问项目
http://47.xxx.xxx.210:81/python/hello

你可能感兴趣的:(服务器部署,python,flask,服务器,阿里云)