Package: drops
dropsdrops 是一套基于 docker compose 的轻量级运维管理方案，提供项目管理方案和单机运维流程。提供版本控制，发布更新，异地备份和迁移。支持集成到现有 CI/CD 系统中。可以应用在：中小型项目运维，离线环境部署。环境要求：Python >=3.9Requires:Python >=3.9快速开始安装安装 rsync 和 ssh 客户端:安装 drops：pipinstall--upgradedrops初始化项目dropsnewexample# 创建示例项目cdexample在本地启动服务dropsup
dropsps访问http://localhost可以看到服务正常运行。部署远程服务drops-edev-H<hostname>-p<port>-uroot-i<~/.ssh/id_ed25519>-P<password>envadd# 替换 <xx> 的相应信息，增加一个 dev 环境的连接配置。-i 和 -P 填其中一个就好。dropsinit_env_debian# debian 系这样初始化远程环境drops-edevdeploy# 同步项目目录到 /srv/drops/example 并启动容器。drops-edevps# 查看容器运行状态如果init_env_debian出现问题，请手动安装rsync、docker和docker-composecentOS配置参考这里安装 dockerhttps://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/，然后去https://github.com/docker/compose/releases/latest下载安装 docker-compose。
podman-compose 和 docker-compose 并不兼容，会导致drops部署功能出现问题。在 docker 中使用dockerpullszerr/drops# 创建示例项目dockerrun-it--rm-v`pwd`:/srv/dropsszerr/dropsdropsnewexamplecdexample项目结构新建drops项目后，会生成一些预定的文件夹，结构如下：├──docker-compose.yaml# 当前项目的 docker compsoe 文件├──drops.yaml# drops 配置文件├──release# 项目发布目录，存放项目的可执行文件，静态文件等。用 volumes 映射到容器中执行。├──secret# 存放验证文件，key 等。├──servers# 容器中服务的配置文件，第三方提供的二进制文件。用 volumes 映射到容器中。├──src# 项目源码路径，每个项目一个文件夹。如果项目适配有 Dockerfile，放在项目根目录中。├──var# 容器暂存的文件，cache、log 等不重要的数据。推荐按 文件类型/容器名 映射到容器中。└──volumes# 容器落地的数据，可以用 drops backup 备份，drops sync volumes 从本地同步到远程。注意！不要将应用数据，容器生成的文件放到servers、releace，docker sync同步时远程路径会被删除或覆盖。配置drops.yamlenv:example:# 环境名，env 名。host:example.com# 远程地址port:22# 远程服务器 SSH 端口号username:root# 远程服务器 SSH 用户名password:""# SSH 密码，明文记录，建议用 identity_file 做验证。identity_file:~/.ssh/id_ed25519# SSH identity file，不填的话会自动搜索 ~/.ssh/ 或 ./secret/id_*deploy_path:/srv/drops/example# 部署路径，默认 /srv/drops/<项目名>encoding:utf-8# 远程服务器编码，默认 utf-8type:remote# 环境类型，如果是 remote 会通过 SSH 执行部署和同步，如果是 local 只会在本地执行。local:# 默认有一个 local 配置，方便本地调试。deploy_path:.# 本地配置的部署路径可以是当前目录，也可以是其他路径type:local# 类型为 localproject:default_env:local# 没有 -e 指定 env 时默认使用的环境name:te# 项目名设计理念使用docker-compose编排服务，基于rsync实现增量备份和数据同步。用git做版本控制。drops推荐使用基础容器，将项目文件映射到容器中，而不是build时打包到容器。这样可以不依赖自建docker源。如果有定制需求，容器在部署时现场build。使用build命令发布项目，结合sync，deploy等命令实现服务部署，git tag的版本控制实现回滚。backup和sync实现备份迁移和预发布环境的快速搭建。与项目集成将项目放到 src 下（或者使用软链接），不需要纳入版本控制。每个项目分开管理。数据管理配置文件映射到servers下并做版本控制。程序生成的文件，不需要做保留的如日志，映射到./var/下。落地的文件，数据库等映射到./volumes/<服务名>，这也是默认备份的位置。CLI全局参数每个env代指一个服务器的连接，部署信息。为了保持灵活的交互界面，drops执行时可以指定env的任意属性，覆盖配置文件。短参数长参数功能-e--env操作的env名字，默认取drops.yaml的project.default_env-t--env-type操作的env类型，默认为drops.yaml-H--host主机名或 ip-p--port远程 ssh 端口号，默认 22-u--username用户名，默认root-P--password密码，默认空-i--identity-fileSSHidentity-file，和密码二选一，都不填的话会自动搜索~/.ssh/或./secret/id_*-E--encoding远程服务器的编码，默认 utf-8-d--deploy-path部署路径，默认/srv/drops/[project name]-c--config指定读取的配置文件--debug输出异常栈，解锁undeploy、clean命令命令drops 命令功能new dirname <projectname>创建一个drops项目。init在当前目录初始化一个drops项目。env管理服务器连结配置。deploy同步后启动容器。redeploy同步后启动容器，不同的是它会重新 build，并删除不需要的容器。sync同步项目到服务器。backup备份远程目录到本地。使用时间做文件夹实现增量备份，如drops backup -d %Y-%m-%d_%H:%M:%Sps查看当前运行的容器。start启动容器。up创建和启动容器。restart重启容器。stop停止容器。kill杀掉容器。rm删除容器。logs输出容器日志。-f 持续输出。exec container cmd执行容器中的命令，因为没有模拟TTY，只能执行非交互式命令。watch监视文件系统事件，执行传入的 command。nginxReload重载nginx配置，但不会更新证书。nginxForceReload重载nginx配置，会更新证书。deployHttpsKey申请并部署https证书。deployHttpsKey申请并部署https证书。initDebianEnv初始化远程服务器环境Debian系用。drops project <name>输出或更改项目名，也就是部署到/srv/drops/<projectName>的路径。undeploy清理掉服务器上的项目和容器。（危）clean删除当前项目下drops相关的文件。（危）--help查看命令的更多帮助。start、up、restart、stop、kill、rm默认对所有容器操作，可以用 -s 指定一个容器。-f强制执行，隐藏需要确认的选项。包含的示例docker-compose.yaml中可以看到nginx，drops，acme.sh。servers/nginx/lib中有几个可复用的配置servers/nginx/nginx.conf可以选择开启的配置servers/crond/periodic_example/drops-backup.py是一个异地备份脚本。致谢感谢JetBrains提供的 IDE如何贡献非常欢迎你的加入！提一个 Issue或者提交一个 Pull Request。标准 Readme 遵循Contributor Covenant行为规范。使用许可GNUv3© Richard Littauer