# 介绍:
------------------------------------
essay是我们团队在过去两年Python项目持续部署上经验的总结,核心功能是打包和多Server部署。这个工具的主要功能是简化从开发到部署的流程,方便服务器的扩展。除了打包和部署功能之外,essay还提供了其他的工具,在后面的接口描述中有详细介绍。
essay是基于Fabric开发,在使用上依赖于pypi Server和github/Gitlab。
# 快速开始
------------------------------------
*这里使用自己搭建的pypiserver作为pypi server,github作为代码仓库。*
1. 安装essay: ``pip install essay``
2. github上创建项目:essay_demo_webpy
3. **创建项目**。终端上执行: ``es create essay_demo_webpy`` ,根据提示输入你新创建的git仓库地址,回车完毕你会发现你的github上已经有了初始化好的一个项目结构
.
└── essay_demo_webpy
├── MANIFEST.in
├── README.md
├── conf
│ └── supervisord.conf
├── essay_demo
│ ├── __init__.py
│ ├── log.py
│ ├── main.py
│ └── settings.py
├── fabfile
│ └── __init__.py
└── setup.py
4 directories, 9 files
4. **打包项目**。此时你可以在本地的essay_demo_webpy目录下执行: ``fab -l`` 命令查看哪些命令可用。然后执行 ``fab build.build`` 命令,会帮你打包成tar的源码包,并添加版本后缀,如:essay_demo_webpy-3.11.20.1.tar.gz,之后会被上传到上面说到得pypiserver上。
关于build.build有四个可选参数,fab build.build:name=fixbug,version=0.1,commit=451a9a2784f,branch=master,也可以使用位置参数: ``fab build.build:fixbug,0.1,451a9a2784f,master`` 。其中commit和branch不能同时设置,commit优先于branch起作用。
各参数详解:
name, 版本的后缀,如上例的结果是: essay_demo_webpy-0.1-fixbug.tar.gz
varsion, 版本号,如果为空则会产生:essay_demo_webpy-3.11.20.1-fixbug.tar.gz。规则是:年.月.日.次
commit, 是要打包的commit节点
branch, 要打包的分支,默认为fabfile下__init__.py中的配置
5. **部署项目**。这时在pypiserver上已经有了打好的包,假设为: essay_demo_webpy-3.11.20.1.tar.gz 。然后开始安装,执行: ``fab -R dev deploy:3.11.20.1,a,test`` 把项目安装到fabfile里设置的dev这个role的服务器上,可以是一个或者多个server。
*deploy参数解释:*
deploy后面有三个参数,分别表示:版本号,虚拟环境目录名,profile(会传递到supervisord.conf中)
版本号在上面已经提到,不赘述。
虚拟环境目录名:依赖于fabfile中设置的 env.VIRTUALENV_PREFIX='~/essay_demo_webpy' ,这里参数为a,表示将在服务器家目录下得essay_demo_webpy目录下创建一个目录为 a 的virtualenv环境。
profile:用来控制程序处于什么状态,比如可以传递debug进去,需要程序自己处理。参数会被传递到supervisord.conf中。
> 0.0.7 新增:
> 可以在fabfile中增加:
def pre_deploy(version, venv, profile):
do_something()
env.DEPLOY_PRE_DEPLOY = pre_deploy
def post_deploy(version, venv, profile):
do_something()
env.DEPLOY_POST_DEPLOY = post_deploy
> 来处理部署前后的操作,两个hook均会在虚拟环境激活状态下执行
deploy的内部的过程是:登录-R指定的服务器,在配置的VIRTUALENV_PREFIX目录下创建a虚拟环境,之后在此环境中通过pip安装已打包好的项目,最后通过supervisord来启动程序进程。
6. **快速部署** 针对需要直接部署某个分支或者commit的需求,该功能是基于上面的两个功能: ``build`` 和 ``deploy``。
*使用方法:*
fab -R <role> deploy.quickdeploy:venv_dir,profile,branch
参数解释::
venv_dir: 虚拟环境名称
profile: 运行环境配置,同上面
branch: 要部署的分支
*可以参考Demo:https://github.com/SohuTech/essay_demo_webpy 中的一些配置*
# 配置文件详解
------------------------------------
介绍主要的两个配置文件fabfile和supervisord
### fabfile配置
** myproject/fabfile/__init__.py **
所有env配置项,可根据自身业务删除/添加
1. git服务器
env.GIT_SERVER = 'https://github.com/' # ssh地址只需要填:github.com
2. 项目名(与git上项目名保持一致)
env.PROJECT = 'project_name'
3. 项目在打包服务器上的路径,会在此目录下执行打包操作
env.BUILD_PATH = '/opt/deploy/'
4. 项目所有者(与git保持一致)
env.PROJECT_OWNER = 'EssayTech'
5. git默认分支
env.DEFAULT_BRANCH = 'master'
6. pypi-server地址
env.PYPI_INDEX = 'http://pypi.python.org/simple/'
部署相关:
7. 部署启动进程数目
env.PROCESS_COUNT = 2 #部署时启动的进程数目, 会传递到supervisord.conf中
8. 服务器角色, 打包或部署时通过 ``-R`` 参数指定服务器角色, 每个角色可以定义多组服务器
env.roledefs = {
'build': ['username@buildserverip:port'], # 打包服务器配置
'dev': ['eassay@127.0.0.1:2202'], #部署服务器配置
}
9. 虚拟环境目录, 部署时会在服务器上此目录下创建虚拟环境
env.VIRTUALENV_PREFIX = '/home/SohuTech/project_name'
12. supervisor配置文件地址, PROJECT_ROOT为项目根目录
env.SUPERVISOR_CONF_TEMPLATE = os.path.join(PROJECT_ROOT, 'conf', 'supervisord.conf')
13. 根据工程确定项目编号, 不同虚拟环境监听不同的端口,用来配置一个同一机器多个虚拟环境。通过port参数传到supervisord.conf中。
PROJECT_NUM = 88
env.VENV_PORT_PREFIX_MAP = {
'a': '%d0' % PROJECT_NUM,
'b': '%d1' % PROJECT_NUM,
'c': '%d2' % PROJECT_NUM,
'd': '%d3' % PROJECT_NUM,
'e': '%d4' % PROJECT_NUM,
'f': '%d5' % PROJECT_NUM,
'g': '%d6' % PROJECT_NUM,
'h': '%d7' % PROJECT_NUM,
'i': '%d8' % PROJECT_NUM,
}
nginx配置用于启动、停止、重启、修改配置文件:
14. nginx执行文件地址
env.NGINX_BIN = '/usr/local/nginx/bin/nginx'
15. nginx配置文件地址
env.NGINX_CONF = '/usr/local/nginx/conf/nginx.conf'
16. 切换nginx环境(关于此项,请看下方essay高级功能用法)
env.NGINX_SWITCH_CONF = '/etc/nginx/nginx.conf'
### supervisord配置
** myproject/conf/supervisor.conf **
**几个被替换的字段**
以下参数在fab deploy的时候会替换为fabfile里配置的字段
1. {{ run_root }} 虚拟环境地址,对应于fabfile/__init__.py里的env.VIRTUALENV_PREFIX
2. {{ username }} essay.task.util自动生成用户名
3. {{ password }} essay.task.util自动生成密码
4. {{ project }} 项目名,对应于fabfile/__init__.py里的env.PROJECT
5. {{ port }} 取env.VENV_PORT_PREFIX_MAP对应虚拟环境的端口号
6. {{ process_count }} 对应于fabfile配置中的PROCESS_COUNT
**具体配置**
#项目名(被自动替换)
[program:{{ project }}]
#运行命令
command={{ venv_dir}}/bin/{{ project }} --profile={{ profile }}
#进程名,示例:test_2
process_name=%(program_name)s_%(process_num)d
#设置进程umask,即权限为755
umask=022
#启动后10秒内没有异常则认为启动成功
startsecs=10
#等待0秒退出
stopwaitsecs=0
#重定向日志输出地址
redirect_stderr=true
#日志输出地址
stdout_logfile={{ run_root }}/logs/process_%(process_num)02d.log
#启动进程数
numprocs={{ process_count }}
#�
没有合适的资源?快使用搜索试试~ 我知道了~
Python项目自动化多服务器部署的工具
共70个文件
tpl:25个
py:25个
rst:4个
需积分: 1 0 下载量 109 浏览量
2024-01-17
20:30:14
上传
评论
收藏 143KB ZIP 举报
温馨提示
Python项目自动化多服务器部署的工具Python项目自动化多服务器部署的工具Python项目自动化多服务器部署的工具Python项目自动化多服务器部署的工具
资源推荐
资源详情
资源评论
收起资源包目录
Python项目自动化多服务器部署的工具.zip (70个子文件)
557sdsadasd
.flake8 97B
__init__.py 0B
essay
utils.py 652B
__init__.py 143B
tasks
__init__.py 0B
deploy.py 2KB
supervisor.py 4KB
pypi.py 675B
util.py 1KB
process.py 723B
validate.py 2KB
git.py 2KB
virtualenv.py 3KB
build.py 4KB
package.py 3KB
nginx.py 3KB
fs.py 1KB
config.py 1023B
main.py 2KB
project.py 2KB
pip_.py 237B
templates
django
fabfile
__init__.py.tpl 1KB
MANIFEST.in.tpl 76B
__project__
manage.py.tpl 258B
__init__.py.tpl 0B
__project__
__init__.py.tpl 0B
urls.py.tpl 306B
settings.py.tpl 2KB
wsgi.py.tpl 411B
requirements.txt 68B
.gitignore 85B
setup.py.tpl 603B
conf
supervisord.conf.tpl 3KB
README.tpl 26B
default
fabfile
__init__.py.tpl 835B
MANIFEST.in.tpl 76B
__project__
main.py.tpl 396B
__init__.py.tpl 0B
requirements.txt 60B
settings.py.tpl 224B
log.py.tpl 1KB
.gitignore 85B
setup.py.tpl 624B
conf
supervisord.conf.tpl 2KB
README.tpl 13B
init
fabfile
__init__.py.tpl 835B
MANIFEST.in.tpl 76B
setup.py.tpl 657B
conf
supervisord.conf.tpl 2KB
README.tpl 13B
log.py 1KB
settings.py 221B
.travis.yml 305B
setup.py 1KB
sphinx
Makefile 5KB
source
index.rst 420B
essay.rst 720B
conf.py 9KB
modules.rst 52B
essay.tasks.rst 2KB
data
1.png 66KB
2.png 67KB
fabfile
__init__.py 459B
requirements.txt 14B
release.md 430B
MANIFEST.in 49B
.gitignore 176B
setup.cfg 28B
conf
supervisord.conf 2KB
README.md 14KB
共 70 条
- 1
资源评论
zero2100
- 粉丝: 160
- 资源: 2464
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功