Python版——博客网站七 部署Web App项目

news/2024/5/10 15:49:19/文章来源:https://blog.csdn.net/weixin_34311757/article/details/92385688

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

开源地址:https://github.com/leebingbin/Python3.WebAPP.Blog

 

一、何为 DevOps

        DevOps(英文Development和Operations的组合)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运营工作必须紧密合作。简单地说,可以把DevOps看作开发(软件工程)、技术运营和质量保障(QA)三者的交集。

                                152411_rcAH_3375733.png

 

        可以把DevOps看作开发(软件工程)、技术运营和质量保障(QA)三者的交集。使用现代化的DevOps工具,如Chef、Docker、Ansible、Packer、Troposphere、Consul、Jenkins、SonarQube、AWS等,并不代表你就在正确的应用DevOps的原则。DevOps是一种思维方式。我们所有人都是该系统流程的一部分,我们一起分享共同的时光和交付价值。每个参加到这个软件交付流程上来的成员都能够加速或减缓整个系统的运作速度。系统出现的一个缺陷,以及错误配置的团队之间的“防火墙”,都可能会使得整个系统瘫痪,所有的人都是DevOps的一部分,一旦你的组织明白了这一点,能够帮你管理好这些的工具和技术栈就自然而然的会出现在你眼前了。

        就是说,开发和运维要变成一个整体。其次,运维的难度,其实跟开发质量有很大的关系。代码写得垃圾,运维再好也架不住天天挂掉。最后,DevOps理念需要把运维、监控等功能融入到开发中。你想服务器升级时不中断用户服务?那就得在开发时考虑到这一点。

二、部署 Web App 项目

        利用 Python 自带的 asyncio ,已经编写了一个异步高性能服务器。但是,还需要一个高性能的Web服务器(这里选择Nginx),它可以处理静态资源,同时作为反向代理把动态请求交给 Python 代码处理。

                160836_UY3s_3375733.png

        Nginx负责分发请求,在服务器端,我们需要定义好部署的目录结构:

/
+- srv/+- blog-python3-webapp/       <-- Web App根目录+- www/        		     <-- 存放Python源码|  +- static/  			 <-- 存放静态资源文件+- log/                    <-- 存放log

        在服务器上部署,要考虑到新版本如果运行不正常,需要回退到旧版本时怎么办。每次用新的代码覆盖掉旧的文件是不行的,需要一个类似版本控制的机制。由于Linux系统提供了软链接功能,所以,我们把 www 作为一个软链接,它指向哪个目录,哪个目录就是当前运行的版本,而Nginx和python代码的配置文件只需要指向 www 目录即可。        

        Nginx可以作为服务进程直接启动,但 app.py 还不行,所以,可以使用 Supervisor !Supervisor 是一个管理进程的工具,可以随系统启动而启动服务,它还时刻监控服务进程,如果服务进程意外退出,Supervisor可以自动重启服务。

        总结一下我们需要用到的服务有:

        · Nginx:高性能Web服务器+负责反向代理;

        · Supervisor:监控服务进程的工具;

        · MySQL:数据库服务。

    自动化部署

        用FTP还是SCP还是rsync复制文件?如果手动复制,用一次两次还行,一天如果部署100次不但慢、效率低,而且容易出错。

        正确的部署方式是使用工具配合脚本完成自动化部署。Fabric就是一个自动化部署工具。由于Fabric是用Python 2.x开发的,所以,部署脚本要用Python 2.7来编写,本机还必须安装Python 2.7版本。

        要用Fabric部署,需要在本机(是开发机器,不是Linux服务器)安装Fabric: 


$ easy_install fabric

        Linux服务器上不需要安装Fabric,Fabric使用SSH直接登录服务器并执行部署命令。

        编写部署脚本。Fabric的部署脚本叫autoblog.py,我们把它放到 blog-python3-webapp 的目录下,与 www 目录平级:


blog-python3-webapp/
+- autoblog.py
+- www/
+- ...

        Fabric 的脚本编写很简单,首先导入 Fabric 的API,设置部署时的变量:


# fabfile.py
import os, re
from datetime import datetime# 导入Fabric API:
from fabric.api import *# 服务器登录用户名:
env.user = 'redhat'
# sudo用户为root:
env.sudo_user = 'root'
# 服务器地址,可以有多个,依次部署:
env.hosts = ['192.168.1.66']# 服务器MySQL用户名和口令:
db_user = 'root'
db_password = 'root'

        然后,每个 Python 函数都是一个任务。我们先编写一个打包的任务:

_TAR_FILE = 'blog-python3-webapp.tar.gz'def build():includes = ['static', 'templates', 'transwarp', 'favicon.ico', '*.py']excludes = ['test', '.*', '*.pyc', '*.pyo']local('rm -f dist/%s' % _TAR_FILE)with lcd(os.path.join(os.path.abspath('.'), 'www')):cmd = ['tar', '--dereference', '-czvf', '../dist/%s' % _TAR_FILE]cmd.extend(['--exclude=\'%s\'' % ex for ex in excludes])cmd.extend(includes)local(' '.join(cmd))

        Fabric提供local('...')来运行本地命令,with lcd(path)可以把当前命令的目录设定为lcd()指定的目录,注意Fabric只能运行命令行命令,Windows 下可能需要 Cgywin 环境。

        在 blog-python3-webapp 目录下运行:


$ fab build

        看看是否在 dist 目录下创建了 blog-python3-webapp.tar.gz 的文件。

        打包后,我们就可以继续编写 deploy 任务,把打包文件上传至服务器,解压,重置 www 软链接,重启相关服务:


_REMOTE_TMP_TAR = '/tmp/%s' % _TAR_FILE
_REMOTE_BASE_DIR = '/srv/blog-python3-webapp'def deploy():newdir = 'www-%s' % datetime.now().strftime('%y-%m-%d_%H.%M.%S')# 删除已有的tar文件:run('rm -f %s' % _REMOTE_TMP_TAR)# 上传新的tar文件:put('dist/%s' % _TAR_FILE, _REMOTE_TMP_TAR)# 创建新目录:with cd(_REMOTE_BASE_DIR):sudo('mkdir %s' % newdir)# 解压到新目录:with cd('%s/%s' % (_REMOTE_BASE_DIR, newdir)):sudo('tar -xzvf %s' % _REMOTE_TMP_TAR)# 重置软链接:with cd(_REMOTE_BASE_DIR):sudo('rm -f www')sudo('ln -s %s www' % newdir)sudo('chown www-data:www-data www')sudo('chown -R www-data:www-data %s' % newdir)# 重启Python服务和nginx服务器:with settings(warn_only=True):sudo('supervisorctl stop blog-python3-webapp')sudo('supervisorctl start blog-python3-webapp')sudo('/etc/init.d/nginx reload')

       注意 run() 函数执行的命令是在服务器上运行,with cd(path) 和 with lcd(path) 类似,
把当前目录在服务器端设置为 cd() 指定的目录。如果一个命令需要 sudo 权限,就不能用 run() ,而是用sudo() 来执行。

    配置Supervisor

        上面让 Supervisor 重启 blog-python3-webapp 的命令会失败,因为我们还没有配置 Supervisor 呢。

        编写一个 Supervisor 的配置文件 blog-python3-webapp.conf,存放到/etc/supervisor/conf.d/目录下:


[program:blog-python3-webapp]command     = /srv/blog-python3-webapp/www/app.py
directory   = /srv/blog-python3-webapp/www
user        = www-data
startsecs   = 3redirect_stderr         = true
stdout_logfile_maxbytes = 50MB
stdout_logfile_backups  = 10
stdout_logfile          = /srv/blog-python3-webapp/log/app.log

        配置文件通过[program:blog-python3-webapp]指定服务名为 blog-python3-webapp ,command 指定启动 app.py。

        然后重启 Supervisor 后,就可以随时启动和停止 Supervisor 管理的服务了:


$ sudo supervisorctl reload
$ sudo supervisorctl start blog-python3-webapp
$ sudo supervisorctl status
blog-python3-webapp        RUNNING    pid 1501, uptime 6:05:34

配置Nginx

        Supervisor 只负责运行 app.py,我们还需要配置Nginx。把配置文件 blog-python3-webapp 放到/etc/nginx/html/目录下:


server {listen      80; # 监听80端口root       /srv/blog-python3-webapp/www;access_log /srv/blog-python3-webapp/log/access_log;error_log  /srv/blog-python3-webapp/log/error_log;# server_name www.baidu.com; # 配置域名# 处理静态文件/favicon.ico:location /favicon.ico {root /srv/blog-python3-webapp/www;}# 处理静态资源:location ~ ^\/static\/.*$ {root /srv/blog-python3-webapp/www;}# 动态请求转发到9000端口:location / {proxy_pass       http://127.0.0.1:9000;proxy_set_header X-Real-IP $remote_addr;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}

        然后在 /etc/nginx/html/ 目录下创建软链接:

$ pwd
/etc/nginx/sites-enabled
$ sudo ln -s /etc/nginx/html/blog-python3-webapp.

        让Nginx重新加载配置文件,不出意外,我们的项目应该正常运行:


$ sudo /etc/init.d/nginx reload

        如果Supervisor启动时报错,可以 /var/log/supervisor 下查看Supervisor的log。

        如果在开发环境更新了代码,只需要在命令行执行:


$ fab build
$ fab deploy

        自动部署完成!刷新浏览器就可以看到服务器代码更新后的效果。

 

 

 

 

 

本文为博主原创文章,转载请注明出处!

https://my.oschina.net/u/3375733/blog/

转载于:https://my.oschina.net/u/3375733/blog/1547269

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

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

相关文章

【第二期】如何制作属于自己网站的音乐播放器 - 该换了

大家好&#xff0c;欢迎喜欢我的朋友继续关注我的技术文章&#xff0c;话说现在的东西越来越快了&#xff0c;更新的不是你所想象的到的。 接着上次的讲&#xff0c;对于企业的建站&#xff0c;现在大多数都是使用公司中成熟的类库构架网站的速度不是你能想象的&#xff0c;就拿…

linux网站dos攻击自动封15分钟,简单的shell脚本结合awk实现防止对web服务的dos攻击...

一 实验环境鄙人使用的是centos 6.8操作系统 需要安装iptables(常见的linux系统貌似都会自动安装iptables)这条可以忽略 awk也需要安装没有的话就用yum装下吧当然最重要的是web服务 我这里使用的是apache 对日志进行分析 当然你也可以分析其他的日志嘛 只是拿web服务来当…

解决网站快照内容被篡改跳转被挂马的问题

首先请各位网站运营者&#xff0c;检查下网站从百度点击进去&#xff0c;是否跳转到了恶意网站上了&#xff0c;直接输入网址则不会跳转的这个情况。再一个查看网站在百度里的首页快照是否是自身网站的内容&#xff0c;如果出现一些跟网站不相关的内容。 比如&#xff1a;恶意内…

【网站制作设计】建议这三个基本要求你一定要掌握!

做什么事情都要有一定的基本尺度来衡量自己&#xff0c;当然&#xff0c;在网站制作设计过程中&#xff0c;我们应该需要衡量网站制作基本标准&#xff0c;那网站建设到底应该符合什么样的标准呢?又有哪些掌握哪些可以使网站制作得更为完善呢?下面&#xff0c;我们重点一起来…

为在Windows Azure上的网站配置自定义域名

本篇体验给Windows Azure上的网站自定义域名&#xff0c;首先"CNAME"和"A记录"是必须了解的概念。 假设&#xff0c;在Windows Azure上的网站域名是&#xff1a;x.chinacloudsites.cn CNAME 通过CNAME&#xff0c;可以把诸如mywebiste.com, www.mywebsite.…

笔记篇-一些很牛×的网站

1.东方博宜 一个适合新手的C练习&#xff08;做题&#xff09;网站。 2.MC皮肤网站 这里为MC&#xff08;Minecraft&#xff09;玩家提供了许多皮肤。 3.Jetbrains 这里有比较常见的编程软件&#xff1a;Pycharm、IDEA、Rubymine。。。 4.清华大学镜像站 这里有linux系统的…

笔记篇-制作自己的个人网站(使用GithubPages)

本章将介绍如何创建自己的个人网站&#xff0c;并且确保你有一个Github账号。 1.创建网站 来到你的github个人主页&#xff0c;选择Repositories存储库。 选择New&#xff0c;新建一个存储库。 命名格式为&#xff1a;你的用户名.github.io。别的选项都保持默认&#xff0c;最…

nginx替换网站响应内容(ngx_http_sub_module)

为什么80%的码农都做不了架构师&#xff1f;>>> ngx_http_sub_module模块是一个过滤器&#xff0c;它修改网站响应内容中的字符串&#xff0c;比如你想把响应内容中的‘ttlsa’全部替换成‘运维生存时间’&#xff0c;这个模块已经内置在nginx中&#xff0c;但是默…

大型网站技术架构(一)大型网站架构演化

2019独角兽企业重金招聘Python工程师标准>>> 看完了有一本书&#xff0c;就应该有所收获&#xff0c;有所总结&#xff0c;最近把《大型网站技术架构》一书给看完了&#xff0c;给人的印象实在深刻&#xff0c;再加上之前也搞过书本上讲的反向代理和负载均衡以及ses…

4个资源多到溢出来的在线网站,个个都是“上好佳”

现在人们对资源的需求很多&#xff0c;不管是图片资源还是电影、音乐、资源等。有需要就有对应的资源网站&#xff0c;如果你还没有好用的在线网站&#xff0c;可以看看下面的这些哦。一、图片——thestocks写文章总是找不到好看的、无版权的图片可用&#xff1f;这个网站已经帮…

IIS日志-网站运维的好帮手

对于一个需要长期维护的网站来说&#xff0c;如何让网站长久稳定运行是件很有意义的事情。 有些在开发阶段没有暴露的问题很有可能就在运维阶段出现了&#xff0c;这也是很正常的。 还有些时候&#xff0c;我们希望不断地优化网站&#xff0c;让网站更快速的响应用户请求&#…

《高扩展性网站的50条原则》

《高扩展性网站的50条原则》 基本信息 原书名&#xff1a;Scalability Rules: 50 Principles for Scaling Web Sites 作者&#xff1a; (美)Martin L.Abbott Michael T.Fisher [作译者介绍] 译者&#xff1a; 张欣 杨海玲 丛书名&#xff1a; 图灵程序设计丛书 出版社&#xff…

c++封装HTTP GET请求访问网站

运行环境&#xff1a;VS2013 功能&#xff1a;模拟浏览器访问百度 具体代码如下 #include <iostream> #include <WinSock2.h> #include <WS2tcpip.h> #include <sstream>#pragma comment(lib,"ws2_32.lib")int main() {//初始化配置WORD …

阻止某些网站打开调试就跳转

https://91mjw.com/&#xff0c;我想把视频地址扒出来单独播放&#xff0c;但是一打开调试就跳转。 https://www.cnblogs.com/jinyuu/p/11590343.html 测试页面&#xff0c;原理我还是不懂&#xff1a; <html> <title>打开调试就跳转</title> <style&g…

使用LAMP创建基于wordpress的个从博客网站

参考&#xff1a; http://blog.csdn.net/ck_boss/article/details/27866117 一、mysql配置1、安装mysqlyum install mysql-serverCentOS中已经默认安装&#xff0c;此步骤忽略。2、启动mysqlservice mysqld start3、登录mysql[rootjediael44 share]# mysql -u -root -p Enter…

GC日志分析工具网站

https://gceasy.io/gc-index.jsp 可以通过上传文件&#xff0c;也可以通过直接复制粘贴日志&#xff0c;进行分析。 堆分配&#xff0c;各个区域大小 GC停顿时间 GC过程分析 GC次数、GC时间统计值&#xff0c;最大值、最小值

程序员如何使用RSS订阅网站更新

很多国内程序员可能都有这种疑惑&#xff0c;去哪里看技术圈最新的消息&#xff1f;怎么知道厂都在用什么技术&#xff1f;做什么&#xff1f;怎么知道圈内最新的paper&#xff1f;怎么跟踪国内外技术大佬的博客&#xff1f; 如果你有上述这些疑惑&#xff0c;那么本文适合你读…

PHP——使用wordpress制作博客网站

1、wordpress软件下载地址&#xff1a;https://cn.wordpress.org/ 下载的wordpress程序可能和自己的php服务版本不配&#xff0c;运行报错如下&#xff1a; Your server is running PHP version 5.4.45 but WordPress 5.8 requires at least 5.6.20. 下载对应的wordpress版本或…

BeagleBone_Black常用网站及书籍

官方镜像地址 https://beagleboard.org/latest-images uboot 、kernel移植指导网站 https://www.digikey.com/eewiki/display/linuxonarm/BeagleBoneBlack TI官方SDK下载网站 适用于 AM335X Sitara™ 处理器的处理器 SDK http://www.ti.com.cn/tool/cn/PROCESSOR-SDK-AM335…

织梦自定义表单做网站在线留言

织梦自定义表单功能是十分强大的&#xff0c;用来做一些在线报名&#xff0c;在线留言&#xff0c;客户反馈等一些需要提交的后台的功能十分方便。操作起来也很简单&#xff0c;下面就一晴天做的一个在线留言功能为例&#xff0c;说下自定义表单怎样使用 1.登录织梦后台依次点击…