Skip to main content

drops 是基于 ssh 和 docker-compose 的运维模板,附带的 drops 命令可以方便的管理项目,部署服务。

Project description

drops

drops 是基于 ssh 和 docker-compose 的运维模板。 附带的 drops 命令可以方便的管理项目,部署服务。并提供常见服务配置示例以供参考。

快速入门

安装

  1. 安装 rsync 和 ssh 客户端
  2. 安装 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 软件源。

如果配置出现问题,请手动安装 rsyncdocker-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 输出目前的 grouphost

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 中可以看到nginxhttp_serversyncthing 这三个代表了http 服务,nginxhttp的通讯方式,有socketp2p和局域网发现的服务配置。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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

drops-0.1.5.tar.gz (59.0 kB view details)

Uploaded Source

Built Distribution

drops-0.1.5-py3-none-any.whl (65.9 kB view details)

Uploaded Python 3

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

Hashes for drops-0.1.5.tar.gz
Algorithm Hash digest
SHA256 60d5f9f8957d027619dbfe0f4d3d43427981c406d9bba7b2332ca122358183d1
MD5 ba3d72fc4c55acf85cdb285915d73ae5
BLAKE2b-256 95c59fc1fb253ae3f58a23ecb0f01a1bdb5f608980247ec19ddb15fcf4caef69

See more details on using hashes here.

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

Hashes for drops-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 c1c0408148979949e6bc4a041ceb2776dfa51b8aa1833342057b3b3819b4a502
MD5 1e8a62536f5fb96e20f615acfe8c92dd
BLAKE2b-256 a7efd942e86885f106ceec1868d155eda8ff227cf74c1de5fa31ca8a8dd200d6

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page