基于Docker & Fabric的Web项目部署方案

本文涉及的产品
文档翻译,文档翻译 1千页
图片翻译,图片翻译 100张
语种识别,语种识别 100万字符
简介:

本文描述了Web项目的两种部署方案,石器时代的ssh & pull & restart方式不做太多说明

1.基于Fabric(Python)的部署方案

Fabric 是一个用于ssh的Python库&命令行工具

Fabric is a Python (2.5-2.7) library and command-line tool for streamlining the use of SSH for application deployment or systems administration tasks.

1.1结构

  • Interface

    • flask
    • django
    • ...
  • Script

    • fabric

      • conf (服务器配置列表)
      • lib(基础库&二次开发)

1.2示例

1.2.1.配置文件conf_server.sample.py

#!/usr/bin/env python
# coding=utf-8

SERVER_DICT = {
    "www": [
        "root@0.0.0.0",
        "password",
        "/home/mt/v1"
    ],
    "v1": [
        "root@0.0.0.0",
        "password",
        "/home/mt/v1"
    ],
    "v2": [
        "root@0.0.0.0",
        "password",
        "/home/mt/v2"
    ],
    "v3": [
        "root@0.0.0.0",
        "password",
        "/home/mt/v3"
    ]
}

1.2.2.更新操作deploy.py

#!/usr/bin/env python
# coding=utf-8

import sys
sys.path.append("..")
from conf.conf_server import *
from fabric.api import env, run, local

    def run_remote(self):
        print env.host_string
        _path = self.project[2]
        _string = 'su mt -c "cd %s && git pull origin master"' % _path
        run(_string)

1.3说明

通过不同服务器的配置信息,使用http|socket等方式发送特定的参数如cloud|help来运行上述的命令达到热更新以及修复的功能.对应的接口实现可以通过指定:

  • 基于权限的主动更新(不同身份的管理员人肉发送命令)
  • 基于项目的自动更新(webhook)

注意:项目代码需要特定的branch(不过这其实也是规范化的代码管理必需)

示例:

# 命令行操作
python deploy.py www

# Http接口
curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d 'site=www' "http://api.thonatos.com/deploy/"

2.基于Docker的部署方案

Docker是一个将程序以及其依赖打包进一个标准单元的服务或者工具集

Docker allows you to package an application with all of its dependencies into a standardized unit for software development.

2.1基础

Docker服务的基础是虚拟机,整个Docker服务包含了虚拟机以及操作虚拟机的一些列命令集合

这里需要理解Docker的几个基本概念,便于更好的理解这种部署开发&部署方式与常规方案的区别

  • image(镜像)
  • container(容器)
  • server(服务器)

镜像相当于一个Linux发行版,对比于Linux下的Ubuntu、CentOs等,我们可以按照自己的需求去定义这个发行版的内容以及组件,基础镜像是最小化的Linux运行单元,那么,我们需要做的就是根据程序的需要,安装各种依赖组件,并将APP+DEP进行打包,变成我们的“定制发行版”,以此来部署在真实Server上。于此同时,镜像在初始化的过程中,可以定义一些列操作,比如——安装依赖、拉取代码以及运行程序

容器是一个实例化以后的虚拟机,容器依赖于镜像,在镜像的基础上做实例化,是初始化以后的虚拟机

服务器,就是传统的服务器如实体服务器或者云主机等

Docker对应了一些列的服务端程序,是标准的C/S架构,每一个服务器运行一个或多个容器,一个或多个容器的集合叫做集群,对服务器进行一些列的包装后变成一个控制台,不再去关心服务器的初始化过程,只管理容器本身是目前Docker的优势所在。具体表现为,按照原有方式,我们需要先开通N台服务器,再依次在每一台机器上安装虚拟机;现在需要的是,将所有的服务器进行封装,变成一个通道,在盒子外,我们告诉盒子我们需要多少个容器,它返回给我们对应的服务即可。国内的DaoCloud、阿里云容器服务已经相对完善。(阿里测试中,DaoCloud已经相对成熟)

2.2环境打包

2.2.1 镜像示例

FROM node:argon

# Create app directory
RUN mkdir -p /usr/src/app  
WORKDIR /usr/src/app

# Clone code & Install app dependencies
RUN git clone git@github.com:MT-Libraries/MT-Notes.git ./
RUN npm install

EXPOSE 8080  
CMD [ "npm", "start" ]  

示例在初始化的过程中会从git拉取代码并安装依赖文件,最终运行在8080端口

2.2.2 部署简述

  • 在DC(DaoCloud)控制台创建一个集群
  • 在应用中选择基于镜像m创建n个容器
  • 等待初始化完成,可以看到当前集群中的节点数量(节点即为容器数量)
  • 同一个集群中的机器可以跑相同或者不同的服务,当需要负载均衡时,动态的加入或者移除节点即可(通过配置,自动伸缩)

2.2.3 节点管理

节点管理通过阿里云的Agent服务,相当于为每一个节点创建了一个远程shell,我们通过控制台即可轻松升级&更新程序

  • 批量更新
  • 动态管理
  • 负载均衡

批量更新,通过一些设定创建的数量如20台 ,创建完毕后,从原有集群移除所有节点,加入创建的节点,即可完成更新操作,后续删除或者销货旧版本的容器。停机更新即完成。

动态管理,由于数量可以自定义,我们可以在用户无感知的情况下增加服务器到50或者减少服务器到10,在这个过程中,用户是不会感觉到变化的(注:这里需要设计数据共享机制 Session/Cookie)

3.两种方案的使用

这两种方案并不存在互斥性,可以并从,也可以只选择一种,如:

  • 独立Fabric,则以服务器镜像为基础,备份服务器本身(缺点是数据量大,服务器最少20G)
  • 独立Docker,则每次都是通过销货/初始容器的方式来实现,换言之,如果是一台服务器,则需更换IP
  • 组合使用,针对热更新使用Fabric,针对大规模、大版本、又或者数量大时,使用该方式更便捷
相关文章
|
3月前
|
前端开发 安全 数据库
Web架构&前后端分离站&Docker容器站&集成软件站&建站分配
Web架构&前后端分离站&Docker容器站&集成软件站&建站分配
180 1
|
10天前
|
Web App开发 前端开发 JavaScript
Web前端项目的跨平台桌面客户端打包方案之——CEF框架
Chromium Embedded Framework (CEF) 是一个基于 Google Chromium 项目的开源 Web 浏览器控件,旨在为第三方应用提供嵌入式浏览器支持。CEF 隔离了底层 Chromium 和 Blink 的复杂性,提供了稳定的产品级 API。它支持 Windows、Linux 和 Mac 平台,不仅限于 C/C++ 接口,还支持多种语言。CEF 功能强大,性能优异,广泛应用于桌面端开发,如 QQ、微信、网易云音乐等。CEF 开源且采用 BSD 授权,商业友好,装机量已超 1 亿。此外,GitHub 项目 CefDetector 可帮助检测电脑中使用 CEF
50 3
|
14天前
|
SQL 安全 数据库
Web安全漏洞专项靶场—SQL注入—docker环境—sqli-labs靶场—详细通关指南
Web安全漏洞专项靶场—SQL注入—docker环境—sqli-labs靶场—详细通关指南
43 1
|
17天前
|
监控 测试技术 持续交付
Web2py 项目部署也太让人头疼了吧!但掌握这些,你就能轻松搞定自动化部署!
【8月更文挑战第31天】在现代软件开发中,高效的项目部署至关重要。针对 Web2py 框架,自动化部署不仅提升开发效率,还减少了人为错误。首先需设置版本控制、服务器环境及配置管理;其次利用 CI/CD 工具(如 Jenkins)实现自动构建、测试与部署;再者采用 Docker 容器化技术确保跨环境一致性;最后部署监控与日志记录工具保障系统稳定性。通过这些步骤,可显著优化 Web2py 项目的部署流程。例如,使用 Fabric 可简化部署脚本编写,实现服务器代码更新、依赖安装及服务重启等操作自动化。
22 1
|
1月前
|
jenkins 持续交付 开发工具
"引爆效率革命!Docker+Jenkins+GIT+Tomcat:解锁持续集成魔法,一键部署Java Web应用的梦幻之旅!"
【8月更文挑战第9天】随着软件开发复杂度的增加,自动化变得至关重要。本文通过实例展示如何结合Docker、Jenkins、Git与Tomcat建立高效的持续集成(CI)流程。Docker确保应用环境一致性;Jenkins自动化处理构建、测试和部署;Git管理源代码版本;Tomcat部署Web应用。在Jenkins中配置Git插件并设置项目,集成Docker构建Tomcat应用镜像并运行容器。此外,通过自动化测试、代码质量检查、环境隔离和日志监控确保CI流程顺畅,从而显著提高开发效率和软件质量。
54 3
|
17天前
|
开发者 容器 Docker
JSF与Docker,引领容器化浪潮!让你的Web应用如虎添翼,轻松应对高并发!
【8月更文挑战第31天】在现代Web应用开发中,JSF框架因其实用性和灵活性被广泛应用。随着云计算及微服务架构的兴起,容器化技术变得日益重要,Docker作为该领域的佼佼者,为JSF应用提供了便捷的部署和管理方案。本文通过基础概念讲解及示例代码展示了如何利用Docker容器化JSF应用,帮助开发者实现高效、便携的应用部署。同时也提醒开发者注意JSF与Docker结合使用时可能遇到的限制,并根据实际情况做出合理选择。
26 0
|
1月前
|
运维 安全 网络安全
"革新远程访问体验:Docker化部署webssh2,一键启动Web SSH客户端,让远程管理如虎添翼!"
【8月更文挑战第2天】Docker作为软件开发与运维的关键工具,以其轻量级、可移植及强隔离特性简化了应用部署。结合webssh2这一开源Web SSH客户端,可通过浏览器安全便捷地访问SSH服务器,无需额外软件。首先确保已安装Docker,接着拉取webssh2镜像并运行容器,映射端口以便外部访问。配置好SSH服务器后,通过浏览器访问指定URL即可开始SSH会话。此方案不仅提升了用户体验,还加强了访问控制与系统安全。
104 7
|
19天前
|
运维 前端开发 API
实战 web 应用 Docker 镜像解耦交付
实战 web 应用 Docker 镜像解耦交付
|
2月前
|
Java Serverless Docker
函数计算产品使用问题之使用Docker镜像部署的Web服务如何获取客户端的真实IP
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
23天前
|
Docker 容器
【Azure 应用服务】App Service for Container 无法拉取Docker Hub中的镜像替代方案
【Azure 应用服务】App Service for Container 无法拉取Docker Hub中的镜像替代方案