ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

只需几个命令,用Ansible完成JumpServer一键自动化部署全流程

只需几个命令,用Ansible完成JumpServer一键自动化部署全流程 只需几个命令用Ansible完成JumpServer一键自动化部署全流程【免费下载链接】jumpserverJumpServer is an open-source Privileged Access Management (PAM) platform that provides DevOps and IT teams with on-demand and secure access to SSH, RDP, Kubernetes, Database and RemoteApp endpoints through a web browser.项目地址: https://gitcode.com/GitHub_Trending/ju/jumpserverJumpServer 是目前被广泛使用的开源特权访问管理PAM平台企业内负责运维和研发的团队可以借助它在浏览器中安全地访问 SSH、RDP、Kubernetes、数据库以及各类远程应用。传统安装方式需要手工准备依赖、逐一调整配置再启动多个组件任何一个环节出错都会消耗大量时间。如果你也想把部署变成一条可重复执行的命令用 Ansible 做 JumpServer 自动化部署是目前最省心的路线。先搞清楚这套自动化方案到底在解决什么很多运维都经历过手动部署的痛点可以把它们归结为四类依赖不可控操作系统版本不同、Python 版本有差异同样的脚本在 A 机器能跑、在 B 机器就报错。配置易出错数据库密码、密钥、端口这些参数散落在各个配置文件里漏改一处就可能连不上服务。流程难复现部署步骤靠人肉记忆新机器来了要么重新摸索要么照着旧文档踩坑。排障靠运气组件之间互相依赖问题定位通常要在日志里翻很久。Ansible 的自动化部署方案正好把这些问题逐个击破环境检查交给剧本、配置生成由模板完成、整套流程固定为 inventory 加 playbook每一次部署的结果都是可预期的。在 JumpServer 的源码中自动化能力其实内嵌在项目自身它自己就是通过apps/ops/ansible/interface.py这个模块来调度 Ansible 任务的下面的代码展示了运行器的核心骨架class RunnerInterface: def __init__(self, runner_type, gateway_proxy_host127.0.0.1): if not issubclass(runner_type, BaseRunner): raise TypeError(f{runner_type} can not cast to {BaseRunner}) self._runner_type runner_type self._gateway_proxy_host gateway_proxy_host def run(self, **kwargs): runner_type self.get_runner_type() runner runner_type(**kwargs) return runner.run()这段代码做的事情很简单校验运行器类型然后实例化并执行。正是这种把任务描述给运行器、运行器负责执行的思路构成了整个自动化部署的底层逻辑。第一步准备目标服务器看清最低要求在动手之前先确认目标主机满足硬件和软件门槛。下表是建议的参考值配置项最低要求推荐配置操作系统CentOS 7 / Ubuntu 20.04CentOS 8 / Ubuntu 22.04CPU2 核4 核内存4 GB8 GB磁盘50 GB SSD100 GB SSDPython3.83.9准备工作分两步走第一步克隆仓库到控制节点git clone https://gitcode.com/GitHub_Trending/ju/jumpserver cd jumpserver第二步让剧本自己先体检。部署剧本在正式安装前会做一轮前置检查覆盖系统内核版本、必要依赖包是否齐全、关键端口有没有被占用、SELinux 与 AppArmor 的状态等。对应到项目内部apps/assets/tasks/utils.py中的check_asset_can_run_ansible函数就是这一套检查逻辑的缩影——它会在执行自动化任务前先判断资产是否具备被 Ansible 接管的条件def check_asset_can_run_ansible(asset): if not asset.is_active: msg _(Asset has been disabled, skipped: {}).format(asset) logger.info(msg) return False if not asset.is_support_ansible(): msg _(Asset may not be support ansible, skipped: {}).format(asset) logger.info(msg) return False return True把检查放在前面而不是等装到一半才发现问题是这套方案降低失败率的关键设计。第二步把 Ansible 任务和业务任务分开跑JumpServer 的一个细节值得留意所有 Ansible 任务都被投递到专门的ansible队列里和核心业务请求互不干扰。以连通性测试为例apps/assets/tasks/ping.py中是这样定义任务的shared_task( verbose_name_(Test assets connectivity), queueansible, activity_callbacklambda self, asset_ids, org_id, *args, **kwargs: (asset_ids, org_id), ) def test_assets_connectivity_task(asset_ids, org_id, task_nameNone): task_name PingAutomation.generate_unique_name(task_name) task_snapshot {assets: asset_ids} with tmp_to_org(org_id): quickstart_automation(task_name, AutomationTypes.ping, task_snapshot)这意味着当你在资产详情 - 基本设置里点击测试资产连通性时请求会被异步丢进ansible队列由专门的 Worker 消费不会拖慢主流程。同理生产环境的部署也建议把自动化执行与业务服务放在不同的资源池里方便独立扩容和观察。第三步不同类型资产走不同的 Ansible 策略不是所有资产都用同一套 Ansible 配置。JumpServer 在apps/assets/const/host.py里为不同平台预置了差异化的约束cls.WINDOWS: { ansible_config: { ansible_shell_type: cmd, ansible_connection: smart, }, }默认的 Linux / Unix 资产启用ansible_connection: smart并支持 sudo、su 多种提权方式Windows 则额外指定cmd作为 shell 类型而Other类型的主机默认完全关闭 Ansible 能力避免误操作。在 inventory 里声明主机时尽量明确标注系统类型让自动化适配层帮你选对参数。第四步编写 inventory声明部署参数现在进入实战环节。创建inventory.ini把目标主机和部署参数写清楚[jumpserver] 192.168.1.100 ansible_ssh_userroot ansible_ssh_port22 [jumpserver:vars] ansible_python_interpreter/usr/bin/python3 jumpserver_versionv3.10.0 db_passwordyour_secure_password secret_keyyour_secret_key_here这里有两个参数要特别上心secret_key用于 Django 加密生产环境务必用随机字符串并且绝不能泄露。项目里也给出了生成方式cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 49;echodb_password是数据库口令尽量选择强度足够的组合。第五步执行剧本并学会看日志一切就绪后运行一键部署ansible-playbook -i inventory.ini utils/playbooks/deploy.yml剧本会自动帮你完成一串动作安装系统依赖 → 部署 PostgreSQL → 部署 Redis → 配置 Nginx 反向代理 → 初始化 JumpServer 数据库 → 拉起全部服务组件。部署过程可以开一个终端实时盯日志tail -f /var/log/jumpserver/ansible-deploy.log遇到可自动恢复的错误Ansible 会重试无法自动修复的问题会在日志中标记出具体主机和任务名方便你顺着错误定位。第六步部署后的验收按这三条过一遍1. 服务状态确认systemctl status jumpserver所有服务都应显示为active (running)。2. 登录 Web 界面打开浏览器访问http://目标服务器IP:8080用初始账号登录用户名admin密码ChangeMe首次登录会被强制修改密码这是安全策略的一部分务必配合修改。3. 验证资产连通性登录后添加一台测试资产在资产详情 - 基本设置里点击测试资产连通性观察任务是否正常落库并返回结果。这一步本质上是验证整套 Ansible 执行链路队列 → Worker → 运行器是否畅通。进阶如何做定制化部署多环境复用同一套剧本通过变量文件区分环境一份剧本多处复用# 开发环境 ansible-playbook -i inventory/dev.ini utils/playbooks/deploy.yml -e envdev # 生产环境 ansible-playbook -i inventory/prod.ini utils/playbooks/deploy.yml -e envprod自定义服务配置项目根目录的config_example.yml是配置模板包含数据库、Redis、Vault、LDAP、日志级别、端口等全部核心参数。修改后再通过 Ansible 变量注入即可例如jumpserver_config: SECURITY: ALLOWED_HOSTS: - jumpserver.example.com SESSION_COOKIE_SECURE: True LOGGING: LEVEL: INFO其中ANSIBLE_RUNNER_JOB_TIMEOUT、ANSIBLE_AUTOMATION_TASK_TIMEOUT等参数控制自动化任务的超时行为在大型资产规模下建议根据实际执行时长调优避免任务被误杀。常见问题排查清单数据库连不上。先看 PostgreSQL 状态和网络连通性systemctl status postgresql-13 psql -h 127.0.0.1 -U jumpserver -d jumpserver服务起来就退出。翻应用日志定位tail -n 100 /var/log/jumpserver/jumpserver.log常见的几个坑配置文件写错、端口被占用、权限不足、依赖库缺失按顺序排查通常能快速找到答案。Ansible 报权限不足。在目标主机上执行visudo为部署用户放开免密 sudousername ALL(ALL) NOPASSWD: ALL收尾从能跑到跑得稳一套可重复执行的部署只是起点。接下来建议按这个顺序继续优化容器化改造把各组件迁移到 Kubernetes让扩缩容和滚动更新变得可控。接入 CI/CD代码更新后自动触发构建与部署减少人工操作窗口。构建高可用多区域部署加负载均衡避免单点故障。补齐监控告警把服务状态、任务执行成功率接入现有监控体系。深入理解这套自动化的更多细节可以翻看项目源码中的apps/ops/ansible/目录和apps/assets/tasks/下的实现参与讨论与贡献请参考CONTRIBUTING.md安全问题处理流程见SECURITY.md。实战小贴士建议把utils/backup_db.sh接入 crontab 定期执行并同步备份secret_key。数据库好恢复密钥一旦丢失已加密数据将无法解密——这两样东西都要像对待生产资产一样对待。【免费下载链接】jumpserverJumpServer is an open-source Privileged Access Management (PAM) platform that provides DevOps and IT teams with on-demand and secure access to SSH, RDP, Kubernetes, Database and RemoteApp endpoints through a web browser.项目地址: https://gitcode.com/GitHub_Trending/ju/jumpserver创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表