项目上线最后工作——布署环境

  • 当项目开发完成后,需要将项目代码放到服务器上,这个服务器拥有固定的IP,再通过域名绑定,就可以供其它人浏览,对于python web开发,可以使用wsgi、apache服务器,此处以wsgi为例进行布署
  • 服务器首先是物理上的一台性能高、线路全、运行稳定的机器,分为私有服务器、公有服务器
  • 私有服务器:公司自己购买、自己维护,只布署自己的应用,可供公司内部或外网访问,成本高,需要专业人员维护,适合大公司使用
  • 公有服务器:集成好运营环境,销售空间或主机,供其布署自己的应用,适合初创公司使用,成本低
  • 常用的公有服务器,如阿里云、青云等,可按流量收费或按时间收费
  • 服务器还需要安装服务器软件,此处需要uWSGI、Nginx
  • 服务器架构如下图

布署

示例

  • 布署前需要关闭调试、允许任何机器访问,打开test6/settings.py文件
DEBUG = False
ALLOWED_HOSTS=['*',]
  • 打开templates/booktest/index.html文件,修改如下
<html>
<head><title>第三方包</title>
</head>
<body>
<h1>第三方包</h1>
<hr>
<h1>布署</h1>
<img src="/static/img/sg.png"/>
</body>
</html>
  • 将图片sg.png拷贝到static/img/目录下

布署

  • 运行服务器,在浏览器中输入如下网址
http://127.0.0.1:8000/
  • 浏览效果如下图,图片是看不到的

布署


搭建服务器虚拟环境

  • 在本机进入虚拟环境,执行命令导出当前需要的所有包
pip freeze > plist.txt
  • 通过ftp软件将项目代码和plist.txt文件上传到服务器
  • 创建虚拟环境,在虚拟环境上安装包
mkvirtualenv 虚拟环境名称
pip install -r plist.txt

WSGI

  • 在生产环境中使用WSGI作为python web的服务器
  • WSGI:全拼为Python Web Server Gateway Interface,Python Web服务器网关接口,是Python应用程序或框架和Web服务器之间的一种接口,被广泛接受。WSGI没有官方的实现, 因为WSGI更像一个协议,只要遵照这些协议,WSGI应用(Application)都可以在任何服务器(Server)上运行
  • 项目默认会生成一个wsgi.py文件,确定了settings模块、application对象
    • application对象:在Python模块中使用application对象与应用服务器交互
    • settings模块:用于进行项目配置

uWSGI

  • uWSGI实现了WSGI的所有接口,是一个快速、自我修复、开发人员和系统管理员友好的服务器
  • uWSGI代码完全用C编写,效率高、性能稳定
  • 安装uWSGI
pip install uwsgi
  • 配置uWSGI,在项目目录下创建uwsgi.ini文件,配置如下
[uwsgi]
#使用nginx连接时使用
#socket=127.0.0.1:8080
#直接做web服务器使用
http=127.0.0.1:8080
#项目目录
chdir=/home/python/Desktop/pytest/test6
#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=test6/wsgi.py
processes=4
threads=2
master=True
pidfile=uwsgi.pid
daemonize=uwsgi.log
  • 启动
uwsgi --ini uwsgi.ini
  • 查看
ps ajx|grep uwsgi
  • 效果如下图

uWSGI

  • 停止
uwsgi --stop uwsgi.pid
  • 在浏览器中输入如下网址
http://127.0.0.1:8080/
  • 浏览效果如下图,图片是看不到的

uWSGI

  • 测试没问题,将配置中启用socket,禁用http

uWSGI

  • 停止uwsgi服务,然后再启动uwsgi

Nginx

  • 使用nginx的作用主要包括负载均衡、反向代理
  • 点击查看官方网站
  • 下载nginx后放到桌面上,解压缩
tar zxvf nginx-1.6.3.tar.gz
  • 进入nginx-1.6.3目录,依次执行以下命令进行安装
./configure
make
sudo make install
  • 默认安装到/usr/local/nginx/目录,进入此目录
cd /usr/local/nginx/
  • 启动
sudo sbin/nginx
  • 查看进程
ps ajx|grep nginx

nginx

  • 停止
sudo sbin/nginx -s stop
  • 打开浏览器,输入如下网址
http://127.0.0.1/
  • 浏览效果如下图

nginx

指向uwsgi项目

  • 打开conf/nginx.conf文件
sudo gedit conf/nginx.conf
  • 在server节点下添加新的location项,指向uwsgi的ip与端口
        location / {#将所有的参数转到uwsgi下include uwsgi_params;#uwsgi的ip与端口uwsgi_pass 127.0.0.1:8080;}
  • 代码效果如下图

nginx

  • 关闭nginx后再开启
  • 打开浏览器,刷新后如下图

nginx

静态文件

  • 所有的静态文件都会由nginx处理,不会将请求转到uwsgi
  • 打开conf/nginx.conf文件
sudo gedit conf/nginx.conf
  • 在server节点下添加新的location项,用于处理静态文件
    location /static {alias /var/www/test6/static/;}
  • 在服务器上创建如下目录
sudo mkdir -vp /var/www/test6/static/
  • 修改目录权限
sudo chmod 777 /var/www/test6/static/
  • 最终目录结构如下图:

nginx

  • 修改test6/settings.py文件
STATIC_ROOT='/var/www/test6/static/'
STATIC_URL='/static/'
  • 收集所有静态文件到static_root指定目录
python manage.py collectstatic
  • 按提示输入yes,收集文件

nginx

  • 停止后再启动nginx服务
  • 在浏览器中刷新,浏览效果如下图

nginx

  • 布署完成


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/473718.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python基础(四)--字典与集合

Python基础&#xff08;四&#xff09;--字典与集合 1 字典 1.1 什么是字典 字典提供的是一种映射存储的方式。字典分为两个部分&#xff0c;一个是键&#xff08;key&#xff09;&#xff0c;一个是key所关联的值&#xff08;value&#xff09;。&#xff0c;一个键关联&am…

[Kaggle] Spam/Ham Email Classification 垃圾邮件分类(spacy)

文章目录1. 导入包2. 数据预览2. 特征组合3. 建模4. 训练5. 预测练习地址&#xff1a;https://www.kaggle.com/c/ds100fa19 相关博文&#xff1a; [Kaggle] Spam/Ham Email Classification 垃圾邮件分类&#xff08;RNN/GRU/LSTM&#xff09; [Kaggle] Spam/Ham Email Classifi…

电商网站(Django框架)—— 大纲内容与基本功能分析

1. 项目架构 2. 数据库表结构 3. 数据库读写分离 4. Django读写分离配置 新建utils/db_router.py 课后阅读资料 http://python.usyiyi.cn/documents/django_182/topics/db/multi-db.html 5. 用户认证模型 注意&#xff1a; AUTH_USER_MODEL配置参数要在第一次迁移数据库之…

Python基础(五)--函数

目录 Python基础&#xff08;五&#xff09;--函数 1 函数的作用 1.1 函数定义与调用 1.2 函数的作用 1.3 空语句 2 参数与返回值 2.1 函数的参数 2.2 函数的返回值 2.3 返回多个值 3 参数的默认值 3.1 可选参数 3.2 参数的默认值 4 位置参数与关键字参数 4.1 关键…

LeetCode 1024. 视频拼接(动态规划/贪心)

文章目录1. 题目2. 解题2.1 动态规划2.2 贪心1. 题目 你将会获得一系列视频片段&#xff0c;这些片段来自于一项持续时长为 T 秒的体育赛事。这些片段可能有所重叠&#xff0c;也可能长度不一。 视频片段 clips[i] 都用区间进行表示&#xff1a;开始于 clips[i][0] 并于 clip…

电商网站(Django框架)—— 思维导图

1.用户模块&#xff1a;注册、登录、激活、退出、个人中心、地址 2.商品模块&#xff1a;首页、详情、列表、搜索 3.购物车&#xff1a; 增加、删除、修改、查询 4. 订单模块&#xff1a;确认订单页面、提交订单&#xff08;下单&#xff09;、请求支付、查询支付结果、评论 5.…

Python基础(六)--类与对象

目录 Python基础&#xff08;六&#xff09;--类与对象 1 类与对象的基本概念 1.1 什么是对象 1.2 什么是类 1.3 类与对象的关系 2 定义与初始化 2.1 类的定义 2.2 对象的初始化 2.3 动态增加属性方法 3 类成员 3.1 类属性与实例属性 3.2 类方法与实例方法 3.3 静态…

HTTP和HTTPS的请求和响应

HTTP协议&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;&#xff1a;是一种发布和接收 HTML页面的方法。 HTTPS&#xff08;Hypertext Transfer Protocol over Secure Socket Layer&#xff09;简单讲是HTTP的安全版&#xff0c;在HTTP下加入…

LeetCode 794. 有效的井字游戏(分类讨论)

文章目录1. 题目2. 解题1. 题目 用字符串数组作为井字游戏的游戏板 board。当且仅当在井字游戏过程中&#xff0c;玩家有可能将字符放置成游戏板所显示的状态时&#xff0c;才返回 true。 该游戏板是一个 3 x 3 数组&#xff0c;由字符 " "&#xff0c;"X&quo…

Requests: 让 HTTP 服务人类

Requests支持HTTP连接保持和连接池&#xff0c;支持使用cookie保持会话&#xff0c;支持文件上传&#xff0c;支持自动确定响应内容的编码&#xff0c;支持国际化的 URL 和 POST 数据自动编码。 Requests的文档非常完备&#xff0c;中文文档也相当不错。Requests能完全满足当前…

Python基础(七)--模块和包

目录 Python基础&#xff08;七&#xff09;--模块和包 1 模块 1.1 什么是模块 1.2 模块的使用 1.3 模块的搜索路径 1.4 模块的缓存 2 包 2.1 什么是包 2.2 包的使用 3 常用模块 3.1 math 3.2 random 3.3 time 3.4 datetime 3.5 sys Python基础&#xff08;七&am…

LeetCode 909. 蛇梯棋(BFS)

文章目录1. 题目2. 解题1. 题目 N x N 的棋盘 board 上&#xff0c;按从 1 到 N*N 的数字给方格编号&#xff0c;编号 从左下角开始&#xff0c;每一行交替方向。 例如&#xff0c;一块 6 x 6 大小的棋盘&#xff0c;编号如下&#xff1a; r 行 c 列的棋盘&#xff0c;按前…

爬虫必须学会的正则表达式

为什么要学正则表达式 实际上爬虫一共就四个主要步骤&#xff1a; 明确目标 (要知道你准备在哪个范围或者网站去搜索)爬 (将所有的网站的内容全部爬下来)取 (去掉对我们没用处的数据)处理数据&#xff08;按照我们想要的方式存储和使用&#xff09; 我们在昨天的案例里实际上…

Python基础(八)--迭代,生成器,装饰器与元类

目录 Python基础&#xff08;八&#xff09;--迭代&#xff0c;生成器&#xff0c;装饰器与元类 1 迭代 1.1 可迭代对象与迭代器 1.2 自定义迭代类型 1.3 迭代合体 2 生成器 2.1 什么是生成器 2.2 生成器表达式 2.3 生成器函数 3 装饰器 3.1 闭包 3.2 什么是装饰器 …

XPath和lxml类库

XPath&#xff0c;我们可以先将 HTML文件 转换成 XML文档&#xff0c;然后用 XPath 查找 HTML 节点或元素。 什么是XML XML 指可扩展标记语言&#xff08;EXtensible Markup Language&#xff09;XML 是一种标记语言&#xff0c;很类似 HTMLXML 的设计宗旨是传输数据&#xf…

Python基础(九)--异常

Python基础&#xff08;九&#xff09;--异常 1 异常相关概念 1.1 什么是异常 异常是程序运行过程中产生的一种事件&#xff0c;该事件会打乱程序的正常流程。可以说&#xff0c;异常就是一种意外&#xff0c;指程序没有按照正常或期望的方式执行。 当异常产生时&#xff0…

爬虫工具:虚拟机Selenium和PhantomJS,ChromeDriver 镜像安装教程

虚拟机Ubuntu 16.04中安装&#xff1a; 1.安装Selenium命令&#xff1a;pip install Selenium 2.安装PhantomJS命令&#xff1a;sudo apt install PhantomJS 3.找到Ubuntu中谷歌所对应的的版本号&#xff1a; 看到网上基本没有最新的chromedriver与chrome的对应关系表&#xff…

Python基础(十)--文件相关

目录 Python基础&#xff08;十&#xff09;--文件相关 1 读写文件 1.1 获取文件对象 1.2 文件读取 1.3 文件写入 1.4 文件定位 2 文件与路径的操作 2.1 os模块 2.2 os.path模块 2.3 shutil模块 2.4 glob模块 3 序列化 3.1 csv 3.2 json 3.3 pickle 4 上下文管理…

memcache 原理 监测 查看状态 stats 结构

Mencache内存存储方式&#xff1a;slab/LRU&#xff0c;采用预先申请固定大小的内存页&#xff08;slab/page&#xff09;&#xff0c;然后再把内存分成多个块&#xff08;chunk) 先放一张从网上找到的memcache内存结构图&#xff0c;觉得非常的赞&#xff1a; 再来一张memcach…

爬虫——多线程糗事百科案例

Queue&#xff08;队列对象&#xff09; Queue是python中的标准库&#xff0c;可以直接import Queue引用;队列是线程间最常用的交换数据的形式 python下多线程的思考 对于资源&#xff0c;加锁是个重要的环节。因为python原生的list,dict等&#xff0c;都是not thread safe的…