{"id":13637991,"url":"https://github.com/liquanzhou/cedardeploy","last_synced_at":"2025-10-03T19:16:44.934Z","repository":{"id":38359962,"uuid":"156845494","full_name":"liquanzhou/cedardeploy","owner":"liquanzhou","description":"cedardeploy:发布系统基于python,flask,mysql,git,ssh-key,supervisor.支持多类型,上线,回滚,监控,报警","archived":false,"fork":false,"pushed_at":"2022-12-08T01:17:01.000Z","size":354,"stargazers_count":256,"open_issues_count":6,"forks_count":71,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-03-31T13:16:43.341Z","etag":null,"topics":["deploy","flask","git","ldap","monitoring-server","on-line","online","python","rollback","ssh","supervisor","workorder"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/liquanzhou.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-11-09T10:17:03.000Z","updated_at":"2025-03-05T06:04:20.000Z","dependencies_parsed_at":"2023-01-25T02:31:04.054Z","dependency_job_id":null,"html_url":"https://github.com/liquanzhou/cedardeploy","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liquanzhou%2Fcedardeploy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liquanzhou%2Fcedardeploy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liquanzhou%2Fcedardeploy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/liquanzhou%2Fcedardeploy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/liquanzhou","download_url":"https://codeload.github.com/liquanzhou/cedardeploy/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247675597,"owners_count":20977376,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["deploy","flask","git","ldap","monitoring-server","on-line","online","python","rollback","ssh","supervisor","workorder"],"created_at":"2024-08-02T01:00:38.133Z","updated_at":"2025-10-03T19:16:39.894Z","avatar_url":"https://github.com/liquanzhou.png","language":"Python","readme":"# 前言\n\n基于ssh-key,git仓库,supervisor服务管理. \n\n代码逻辑和技术实现简单,无需专业运维开发功底,会点python的运维即可上手维护源码,自定义与公司业务相关的功能,自行发挥.\n\n    python,flask,js,mysql,ldap\n    \n    git: 仅支持git,只会拉取当前项目分支最新代码,建议控制上线用户分组权限,增加Code Review过程.gitlab可使用Merge Requests功能.\n    \n    ssh: 需要普通用户ssh秘钥无密码方式,无需安装其他客户端\n    \n    上线工单: 支持给不同人员独立分组的上线权限,并可以控制上线时间\n    \n    supervisor: 守护进程,自动生成模板,需要标准部署,普通用户可以操作权限,并指定加载目录下配置文件.\n    \n    发布历史日志: 记录时间,执行人,状态,CommitId,详细过程信息\n    \n    服务状态监控: 多线程循环检查所有服务状态,根据supervisor的服务状态,无supervisor,检查ssh状态\n    \n    报警: 目前仅支持钉钉\n    \n    服务上线: 勾选主机,检查git代码是否更新,拉取代码,编译,同步,摘除服务,重启服务,状态检查,挂载服务.顺序执行,任何一部失败终止上线.\n    \n    版本回滚: 可选择最近的几个版本回滚代码.\n    \n    用户分组管理权限\n    \n    对接自动扩容和缩容\n    \n\n\n# 发布系统界面\n\n   ![添加项目](https://github.com/liquanzhou/img/blob/master/cedardeploy/111.jpeg \"添加项目\")\n\n   ![工单](https://github.com/liquanzhou/img/blob/master/cedardeploy/444.jpeg \"工单\")\n\n   ![发布页面](https://github.com/liquanzhou/img/blob/master/cedardeploy/333.jpeg \"发布页面\")\n\n   ![日志](https://github.com/liquanzhou/img/blob/master/cedardeploy/222.jpeg \"日志\")\n\n\n# 发布过程介绍\n支持编译发布的项目类型,每个项目都需要填git地址,jobs,sh,static也是需要统一的git仓库管理.\n\n    \n    nodejs 多进程 编译         supervisor  index.js --port=4000, 在添加主机同时要选择进程数量,服务端口从项目配置端口起始递增, 其他方式,可编辑配置中修改\n\n    python 多进程              supervisor  main.py --port=5000, 在添加主机同时要选择进程数量,服务端口从项目配置端口起始递增, 其他方式或无端口,可在编辑配置修改\n\n    golang        编译bin文件  supervisor  每个公司可能编译方式一样,需要自行定义\n\n    sh                         supervisor  非nohup的前台持续运行进程, 默认 启动脚本: deploy_start.sh , 里面可 exec 启动命令,避免进程无法被正常重启\n\n    java-jar      mvn编译      supervisor  由于很久不用,改动中删除了,如果需要支持,也可以自定义编译方式,supervisor模板,重启方式\n\n    java-tomcat   mvn编译  需要系统镜像放置一个标准的空tomcat,在添加主机的同时拷贝一个服务的tomcat目录,在把添加项目时生成的模板配置文件,server_xml, catalina_sh,传递到远程服务主机.有需要改动在 app/main/forms.py 中修改模板配置.\n\n    static        发布到nginx机器,nginx配置中指定项目对应目录即可\n\n    php           先同步配置文件,在发布代码,nginx配置中指定项目对应目录即可\n\n    job           发布系统只负责同步目录,同时生成定时任务配置文件。传到远程主机cron.d目录，系统自动加载  # 下个版本更新\n\n    编译: 编译环境自行安装\n    配置文件: 如果需要分离,可在配置信息中定义,直接填文件,或者拉取地址.编译脚本中,自行写文件或者拉取配置.\n    启动方式: 添加项目后,可看配置信息中生成的 supervisor 模板,如不可改动,请自行修改 app/main/forms.py 中模板\n    服务摘除与注册: 请在 app/main/deploy.py 中函数自行实现. 添加发现服务 def increaseService ,  剔除服务 def removeService\n    服务检查: 有supervisor的服务会检查supervisor状态. 没有会检查ssh状态.\n    自动扩容: app/main/views.py  扩容接口: /expansion . 缩容接口: /reduced . 可根据条件判断自行对接. 后续会更新其他项目基于监控条件触发,调用阿里云按量付费,自动扩容. 例:可通过发布系统获取项目对应列表,在通过监控拿到cpu使用,大于cpu60%扩容,低于30%缩容\n    其它项目类型: 运维人员可与程序沟通清晰,制定仓库规则规范,项目统一,就可以自行定制扩展\n    注意： 以上类型,并不一定业务完全匹配,代码仓库目录结构,编译方式,同步目录过程先后,等都要与程序沟通清晰明确,逐一确定统一.  \n    \n\n项目信息分三块:\n\n    项目基础信息:  创建项目需要名称, git地址,端口,项目类型, 环境等\n\n    项目配置模板:  添加项目后,自动生成统一的模板,配置信息.比如: supervisor_conf,  编译命令, 检查方式等\n\n    主机信息:      可配置针对不同主机独立的信息,比如: 启动进程数, 环境变量\n\n\n# 安装\n\n一.准备环境\n\n    python 2.7\n\n    发布机器普通用户对其他主机普通用户ssh秘钥免密码\n\n    supervisord, 并且要所有主机加载统一目录,ssh用户有权限拷贝文件\n\n    远程主机supervisor配置文件加载目录\n\n    [include]\n\n    files = supervisor_conf_dir/*.conf\n\n    依赖包\n\n    pip install -r requirements.txt\n\n\n二.创建mysql数据库\n\n    创建数据库,请先修改配置文件\n\n    CREATE DATABASE `cedardeploy` /*!40100 DEFAULT CHARACTER SET utf8 */;\n\n    grant all on cedardeploy.* to deploy@127.0.0.1 identified by 'Deploy123';\n\n\n三.修改DB配置\n\n    vim app/configdb.py\n\n\n四.初始化数据库\n\n    # 如果初始化数据库报错,检查是否有 migrations目录, 删除目录\n\n    python manager.py db init\n\n    python manager.py db migrate\n\n    python manager.py db upgrade\n\n\n\n\n五.配置\n\n    目录请自行配置\n\n    vim app/config.py\n\n\n六.用户\n\n    如果有ldap,请打开Ldap项为True\n\n    如果没有ldap,需要手动创创建 admin 用户\n\n    python manager.py shell\n\n    with app.app_context():\n\n        u = User(email='admin@163.com',username='admin',password='admin')\n\n        db.session.add(u)\n\n        db.session.commit()\n\n\n\n\n七.启动服务\n\n    1.deploy web启动\n\n    2.检查服务:  app/hostscheck/hostscheck.py\n\n    把 deploy-supervisor.conf 拷贝到 supervisord的配置目录下,修改具体程序路径,log目录,ip和port,然后加载\n\n\n八.服务状态报警\n\n    如果都启动正常, 检查服务也正常启动, 可以配置定时任务报警\n\n    * * * * * cd /app/deploy/app/hostscheck/;python service_alarm.py \u003e\u003e /data/log/service_alarm.log 2\u003e\u00261\n\n\n\n# 使用\n\n    ldap或用户登陆系统后,确保用户在配置文件的管理员列表中\n\n    登陆后,界面空白,需要先添加组,在添加项目: \n\n    添加组: 用户管理 选择用户 添加组\n\n    添加项目: 项目管理, 选择组, 选择项目语言类型, 项目名, 选择环境, git地址,分支,端口,编译方式,检查方式等. 添加后,会自动生成supervisord等模板.看情况修改\n\n    添加主机: 项目管理, 选择组, 选择项目, 在下方添加主机名和主机ip确认. 在添加主机的同时, 会到远程创建目录,创建服务的supervisor文件,并加载\n\n    上线服务: 上线,选择组,选择项目,勾选项目,点击更新. 确保启动发布系统的用户可以免密码拉取仓库建议添加ssh秘钥. 默认会拉取git地址对应的最新的代码,编译上线.仓库不改动,用历史最近版本上线.\n\n    管理员不受上线时间限制,不受组限制.普通用户看不到组,可以提工单, 工单可以跳转到项目,管理员上线完,在关闭工单.也可以给普通用户对组授权,自行上线.\n\n\n\n","funding_links":[],"categories":["运维相关管理系统"],"sub_categories":["运维管理系统"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fliquanzhou%2Fcedardeploy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fliquanzhou%2Fcedardeploy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fliquanzhou%2Fcedardeploy/lists"}