Bootstrap

利用宝塔面板部署云服务器(Flask+uwsgi)

一、安装Python3以及虚拟环境

安装Python3

在这里插入图片描述

# 下载 python 3.8.6
wget https://www.Python.org/ftp/python/3.8.6/Python-3.8.6.tar.xz
# 解压
tar xvf Python-3.8.6.tar
 
# 进入 python3.8.6 目录
cd  Python-3.8.6
# 安装
./configure  --prefix=/usr/local/python3 && make && make install
#创建软连接
ln -s /usr/local/python3/bin/python3 /usr/bin/python
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip

安装虚拟环境

  1. 安装virtualenvvirtualenvwrapper

    pip3 install virtualenv
    pip3 install virtualenvwrapper
    

    在安装virtualenvwrapper过程中遇到了一个Error,一开始这个错误直接导致安装失败,后面用rm -rf /usr/bin/pythonln -s /usr/local/python3/bin/python3 /usr/bin/python更新了一下软连接,更新了一下pip
    python -m pip install --upgrade pip,把它从pip 20.2.1更新到了pip 21.0.1
    在这里插入图片描述
    之后再安装可以安装成功了,如下图:
    在这里插入图片描述
    但是安装过程中还是会报这个错,如有大佬烦请帮忙看看原因。
    Error内容如下:

    distutils.errors.DistutilsError: Command '['/usr/bin/python', '-m', 'pip', '--disable-pip-version-check', 'wheel', '--no-deps', '-w', '/tmp/tmpbyfisgsj', '--quiet', '--index-url', 'http://mirrors.tencentyun.com/pypi/simple', 'pbr']' returned non-zero exit status 1.
    
  2. 修改虚拟环境的配置为Python3

    vim /usr/local/python3/bin/virtualenvwrapper.sh
    

    修改如下:
    在这里插入图片描述

  3. 修改bashrc配置文件

    vim ~/.bashrc
    

    在末行添加以下内容:
    在这里插入图片描述
    执行以下命令使得对.bashrc配置文件的修改有效

    source ~/.bashrc
    
  4. 增加虚拟环境的软链接

    cd /usr/bin/
    ls -al |grep virtualenv
    cd /usr/local/python3/bin/
    ln virtualenv /usr/bin/virtualenv
    
  5. 创建虚拟环境实例

    mkvirtualenv -p python3 [虚拟环境实例名字]
    workon	# 查看所有的虚拟环境实例
    deactivate	# 退出当前虚拟环境实例
    workon [虚拟环境实例名字]		# 退出后再进入某个虚拟环境实例
    rmvirtualenv [虚拟环境实例名字]		# 删除某个虚拟环境实例
    

    进入虚拟环境后会出现(虚拟实例名) [root@....],如图:
    在这里插入图片描述

二、利用宝塔面板快速部署项目环境

Centos安装宝塔面板命令:

yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh

安装完成之后会出现以下信息:
在这里插入图片描述
打开外网面板地址,是一个登录页面,然后用username和password进行登录。

如果登录不上,有可能是服务器没有放行面板的端口[8888],云服务器可以找到控制台该实例的安全组设置,修改原来的或者新建一组安全组规则,放行该端口,再次尝试登录即可。
放行端口安全组如图
这里是宝塔官方提供的开端口教程,很详细了。
腾讯云服务器:https://www.bt.cn/bbs/thread-1229-1-1.html
阿里云服务器:https://www.bt.cn/bbs/thread-2897-1-1.html
华为云服务器:https://www.bt.cn/bbs/thread-3923-1-1.html

宝塔面板登录成功后,会有一个快速部署这四项的选择,当然也可以之后到软件商店手动选择安装
在这里插入图片描述
打开SSH
在这里插入图片描述
安装pip install uwsgipip install flask
在这里插入图片描述

至此,

三、上传Flask项目到服务器

在这里插入图片描述
上传项目默认上传目录是在/www/wwwroot下。
上传了一个最简单的Flask项目HW
在这里插入图片描述
点击终端,打开终端(确保终端的当前目录在HelloWorld下面),执行命令pip freeze >requirements.txt,再点击刷新,目录下会出现这个文件。这个文件是Python项目管理器创建Flask项目时需要的可执行文件?我也不是很懂这里,但是没有这个文件,下一步部署项目就会出问题。
在这里插入图片描述
这里找到了解释和一个说明,🐎🐖
在这里插入图片描述
创建一个run.py文件,文件内容是以下内容:

from app import app

if __name__ == '__main__':
    app.run()

创建一个uwsgi.ini,内容如下:

[uwsgi]
module = run:app
master = true
processes = 3
threads = 2
# chdir是项目目录,一定要填对!!
chdir = /www/wwwroot/HelloWorld 
# wsgi-file= /www/wwwroot/HelloWorld/app.py
wsgi-file= /www/wwwroot/HelloWorld/run.py
# http = 42.192.77.44:22
logto = /www/wwwroot/HelloWorld/logs/error.log
chmod-socket = 660
vacuum = true
master = true
max-requests = 1000
socket = 127.0.0.1:5000

把文件的后缀名改成.ini

如果有域名绑定,在域名绑定后,把app.pyrun.pyuwsgi.ini这三个文件复制到/www/wwwroot/www.[我的域名].xyz这个路径下,Flask项目上传完成。

四、启动uwsgi

在面板SSH用以下命令启动uwsgi。

uwsgi --ini /www/wwwroot/HelloWorld/uwsgi.ini &

启动的状态可以用进程查看netstat -anp|grep 5000,也可以在日志里查看,我推荐查看启动日志,不论是项目的问题还是启动的状态日志都写得一清二楚,日志查看请参考uwsgi.ini这个配置文件的logto的路径。启动一次日志截图如下:(一般启动有问题,问题都会在*** Operational MODE: preforking+threaded ***下面进行说明,你根据它的error提示进行修改,再重新启动uwsgi就行)
在这里插入图片描述
关闭uwsgi的命令是pkill -f uwsgi -9
到这一步,如果你输入服务器的公网ip,就能看到Hello World出现了。

五、 域名绑定

在这里插入图片描述
宝塔面板点开“网站”,然后创建站点(这一步相当于在服务器端绑定域名,同时在域名处也需要绑定服务器,双向绑定才能用域名打开服务器部署的项目。站点需要在域名购买的地方进行解析,一般是在域名管理处)
在这里插入图片描述
域名解析详细内容,一般会有帮助,这里不详述了。

(创建站点后,会自动生成一个网站目录,/www/wwwroot/www.[域名].xyz

修改nginx,在网站设置的配置文件中的这个位置添加这一段

location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:5000;
    }

uwsgi_pass后面的地址一定要跟uwsgi.ini配置文件里的socket地址一致
在这里插入图片描述
解析完成后,可以用域名显示HelloWorld,就OK了。
在这里插入图片描述


这是个人(小白)经验总结帖,表述不合理的地方敬请(大佬)指正。


参考:
利用宝塔搭建nginx+uwsgi+flask的web服务器(阿里云centos_7系统)
宝塔python项目管理器_宝塔python项目管理器部署flask笔记

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;