drops 是基于 ssh 和 docker-compose 的运维模板,附带的 drops 命令可以方便的管理项目,部署服务。
Project description
drops
drops 是基于 ssh 和 docker-compose 的运维模板。 附带的 drops 命令可以方便的管理项目,部署服务。并提供常见服务配置示例以供参考。
快速入门
安装
- 安装 rsync 和 ssh 客户端
- 安装 drops:
pip install drops
注:pip 是 python 的包管理器,视系统可能需要手动安装,像是 apt install python3-pip。
初始化项目
drops new example # 创建 drops 项目
cd example
配置远程服务器
drops host add ssh.example.com 22 root utf-8 -k ~/.ssh/id_ed25519 -g test # 配置一个默认服务器到 test group。
drops init_env_debian # debian 系这样初始化远程环境,centos 系用 init_env_centos,要自备 docker 软件源。
如果配置出现问题,请手动安装 rsync
和 docker-compose
部署示例服务
drops deploy # 同步项目目录到 /usr/local/<项目文件夹名> 并启动容器。
顺利的话,访问 http:// 可以看到后端返回的数据。
项目背景
虽然看上去 drops 是一个部署工具;但我想表达的是:
- 一个项目的运维立一个项目。
- 用容器保证环境一致。
- 做版本控制,保证运维操作可追踪可回溯。
- 不要手动编辑线上和测试的配置文件,不要在线调试。
- 所有更改上测试通过之后传版本控制,再自动部署到线上;出问题马上回滚。
- 应用发布的包,静态文件,也应该纳入运维项目的版本控制。
- 对应用数据做快照和备份。
项目管理
将服务部署管理分为:系统-机器-项目-服务
。
一台机器
可以部署多个项目
,一个系统由一到多台机器,一到多个项目组成。
drops
对应项目
这一层,管理多个服务。
服务的配置文件、依赖文件,在servers
下创建以服务名命名的文件夹,放到对应的文件夹中。
编辑docker-compose.yaml
,定义你需要的服务。
为了方便管理和迁移,建议程序生成的目录映射统一放到/srv/drops
,格式为:/srv/drops/<项目名>/<服务名>/<映射到容器的文件夹>
参照 servers/crond/periodic_example/backup.sh
快速搭建异地增量备份。
一个项目可以部署到多台机器,其中机器可以分为:线上,测试1,测试2,bulabula。。。。
drops host
可以管理多个分组的机器。可以试试 drops ls
输出目前的 group
和 host
drops
没有指定 -g
参数的时候,默认对 test group
下所有机器做操作。所以可以当作单机部署工具用。
数据管理
将项目分成运行时可变和不可变的
- 运行时可变的是服务产生的数据,如:用户数据, 日志,数据库
- 运行时不可变的,如:程序,服务配置,静态文件
运行时可变的数据是放到/srv/drops/<项目名>/<服务名>/<映射到容器的文件夹>
。
不变的数据放到servers
下并做版本控制。
如果拿不准,就考虑数据是否需要版本控制,需要的话就放到servers
下。
drops 命令帮助
drops 命令 | 功能 |
---|---|
new |
创建一个drops 项目。 |
init |
在当前目录初始化一个 drops 项目。 |
host |
管理服务器连结配置。 |
deploy |
同步后启动容器。 |
redeploy |
同步后启动容器,不同的是它会重新 build,并删除不需要的容器。 |
sync |
同步项目到服务器。 |
ps |
查看当前运行的容器。 |
stop |
停止容器。 |
kill |
杀掉容器。 |
rm |
删除容器。 |
nginxReload |
对容器nginx 执行nginx -s reload 。 |
nginxForceReload |
更新nginx 证书时,用这个脚本执行 reload 。 |
init_env_debian |
初始化远程服务器环境Debian 系用。 |
init_env_centos |
初始化远程服务器环境Centos 系用。 |
undeploy |
清理掉服务器上的项目和容器。 |
clean |
删除当前项目下 drops 相关的文件。 |
包含的示例
docker-compose.yaml
中可以看到nginx
、http_server
、syncthing
这三个代表了http
服务,nginx
与http
的通讯方式,有socket
,p2p
和局域网发现的服务配置。crond
演示了实现定时任务。
servers/nginx/lib
中有几个简单的配置
servers/nginx/nginx.conf
可以选择开启的配置
servers/nginx/conf.d/default.conf
有内部服务的示例,其中 http_server
是容器的名字。docker 有内置的DNS
服务用来解析容器名。
servers/crond/periodic_example/backup.sh
是一个异地备份脚本。
servers/acme.sh
是目前我在用的 acme.sh
配置。
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file drops-0.1.5.tar.gz
.
File metadata
- Download URL: drops-0.1.5.tar.gz
- Upload date:
- Size: 59.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 60d5f9f8957d027619dbfe0f4d3d43427981c406d9bba7b2332ca122358183d1 |
|
MD5 | ba3d72fc4c55acf85cdb285915d73ae5 |
|
BLAKE2b-256 | 95c59fc1fb253ae3f58a23ecb0f01a1bdb5f608980247ec19ddb15fcf4caef69 |
File details
Details for the file drops-0.1.5-py3-none-any.whl
.
File metadata
- Download URL: drops-0.1.5-py3-none-any.whl
- Upload date:
- Size: 65.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c1c0408148979949e6bc4a041ceb2776dfa51b8aa1833342057b3b3819b4a502 |
|
MD5 | 1e8a62536f5fb96e20f615acfe8c92dd |
|
BLAKE2b-256 | a7efd942e86885f106ceec1868d155eda8ff227cf74c1de5fa31ca8a8dd200d6 |