Python Web项目部署

本文详细介绍了Python Web项目部署的全过程,包括Linux软件安装、virtualenv的使用、virtualenvwrapper的配置、Flask和Django项目的部署、Linux定时任务、nginx配置SSL证书以及为何使用uWSGI、virtualenv和Supervisor等工具。
摘要由CSDN通过智能技术生成

1. Linux软件安装的方式

yum 安装适合小型软件;rpm安装软件需要处理依赖关系;编译安装适合大型软件和一般需要自定制功能的软件。

不推荐使用rpm的安装方式,需要处理依赖关系!

2. virtualenv

在使用 Python 开发的过程中,物理环境中存在各种各样的库。这些库的版本是固定的,而 不同的工程项目依赖于不同版本的库,就会引起依赖问题。需要对不同的项目 使用不同的虚拟环境来保持开发环境以及宿主环境的清洁。virtualenv 是一个帮助我们管理不同 python 环境的工具,使用virtualenv可以在系统上建立多个不同并且相互不干扰的虚拟环境

virtualenv的原理:把系统 Python 复制一份到 virtualenv 环境,用命令 source venv/bin/activate 进入virtualenv环境时,virtualenv 会修改环境变量,在原有 $PATH 的最前面加上虚拟环境的 bin 目录,这样,在虚拟环境下优先执行虚拟环境中的 Python 和 pip 。也就是说虚拟环境中的 $PATH 和物理环境中的是不一样的。

(1)安装 virtualenv

升级pip工具:$ pip3 install --upgrade pip

安装 virtualenv:$ pip3 install virtualenv,如果下载慢,可以指定清华源或者豆瓣源下载:

$ pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv

(2)创建独立运行

$ virtualenv --no-site-packages --python=python3.8 venv

--no-site-packages 是构建一个干净的,和外界没有关系的虚拟环境。虚拟环境是基于物理环境的复制,这里是基于Python3.8。venv 是虚拟环境的名字,这里使用的是相对路径。

(3)激活虚拟环境

$ source venv/bin/activate

(4)退出虚拟环境

$ deactivate

(5)查看 pip,可以看到 pip 来自于虚拟环境

$ which pip

3. 开发环境的一致性

我们在本地开发环境准备好了Python项目和依赖环境,现在需要放到服务器中上线发布,那么必须要 保证服务器的Python环境和本地环境是一致的

(1)导出当前Python环境的包

$ pip freeze > requirements.txt

这句命令执行后将会创建一个requirements.txt的文件,其中包含了当前环境所有的包/库以及各自版本的简单列表。

(2)将产生的文件上传到服务器,在服务器下创建虚拟环境,在虚拟环境中导入项目所需要的模块依赖。

$ pip install -r requirements.txt

4. virtualenvwrapper

virtualenv 最大的缺点就是 每次开启虚拟环境都要去虚拟环境所在目录的bin目录下激活虚拟环境 ,这就要求我们每次都要记住这个虚拟环境所在的目录。一种解决方案就是将所有的虚拟环境目录全部收集起来,针对不同的目录做不同的事。 virtualenvwrapper可以统一管理虚拟环境的目录,并且帮助我们省去source 步骤。

(1)安装 virtualenvwrapper

$ pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenvwrapper

(2) 设置 Linux 环境变量,每次启动加载 virtualenvwrapper

找到 virtualenvwrapper.sh 所在路径:

$ which virtualenvwrapper.sh
$ find / -name virtualenvwrapper.sh
/usr/local/python373/bin/virtualenvwrapper.sh

/usr/local/python373/bin/ 目录加入到环境变量:

$ PATH=$PATH:/usr/local/python373/bin

PATH=$PATH:/usr/local/python373/bin/ 放在 /profile 文件的最下面写入配置文件,永久生效。:

$ vim /etc/profile

读取文件生效:

$ source /etc/profile

编辑 ~/.bashrc 文件,此文件在用户每次登录的时候,系统就会读取这个文件:

$ vim ~/.bashrc

在 .bashrc 文件中写入下面三行命令:

export WORK_HOME=/Envs # 设置virtualenv的统一管理目录
export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/python373/bin/virtualenvwrapper.sh # 执行virtualenvwrapper安装脚本

读取文件使生效:

[root@master ~]# source ~/.bashrc 
virtualenvwrapper.user_scripts creating /root/.virtualenvs/premkproject
virtualenvwrapper.user_scripts creating /root/.virtualenvs/postmkproject
virtualenvwrapper.user_scripts creating /root/.virtualenvs/initialize
virtualenvwrapper.user_scripts creating /root/.virtualenvs/premkvirtualenv
virtualenvwrapper.user_scripts creating /root/.virtualenvs/postmkvirtualenv
virtualenvwrapper.user_scripts creating /root/.virtualenvs/prermvirtualenv
virtualenvwrapper.user_scripts creating /root/.virtualenvs/postrmvirtualenv
virtualenvwrapper.user_scripts creating /root/.virtualenvs/predeactivate
virtualenvwrapper.user_scripts creating /root/.virtualenvs/postdeactivate
virtualenvwrapper.user_scripts creating /root/.virtualenvs/preactivate
virtualenvwrapper.user_scripts creating /root/.virtualenvs/postactivate
virtualenvwrapper.user_scripts creating /root/.virtualenvs/get_env_details

此时就可以使用 virtualenvwrapper!

(3)virtualenvwrapper 相关命令

创建 venv 虚拟环境,默认会激活这个虚拟环境:$ mkvirtualenv venv

退出虚拟环境:$ deactivate

进入/切换虚拟环境:$ workon venv

workon提供自动补全功能,可以停止你当前的环境可以在多个虚拟环境中来回切换

删除虚拟环境 venv:$ rmvirtualenv venv

列举所有虚拟环境:$ lsvirtualenv

在虚拟环境下做了统一的管理,查看Envs目录:$ ls ~/Envs/

切换到当前激活的虚拟环境的目录:$ cdvirtualenv

5. Flask项目部署

激活项目所处的虚拟化环境:

$ source activate

导出虚拟化环境中的库并上传到服务器:

$ pip freeze > requirements.txt
$ scp requirements.txt root@106.12.115.136:/root/

创建虚拟化环境并导入依赖包:

$ mkvirtualenv project_name_venv
$ pip3 install -r requirements.txt

本地环境中导出数据库并上传服务器:

$ mysqldump -uroot -p db_name > db_name.sql
$ scp db_name.sql root@123.123.123.123:/root/

登录后导入数据:

MariaDB [(none)]> source db_name.sql

从仓库克隆项目源代码:

$ git clone https://github.com/ThanlonSmith/project_name.git

进入project_name目录创建名为 uwsgi.ini 的文件:

$ touch uwsgi.ini

uwsgi.ini 文件中写入以下内容:

[uwsgi]
socket = 127.0.0.1:8001                   # 启动程序时使用的地址和端口,与nginx中配置的对应
chdir = /home/thanlon/project_name/ 	  # 项目所在目录
wsgi-file = manage.py                     # 项目程序启动文件
callable = app                            # 程序内启用的application变量名字
processes = 2                             # 处理器的数量,我的是2个处理器
stats = 127.0.0.1:9191
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值