3、核心工具安装:JumpServer、Docker与Nginx

好,咱们进入实操环节。这一章要搞定三样东西:JumpServer堡垒机Docker与Docker-Compose、还有Nginx反向代理。这三样装好了,远程运维平台的骨架就算立起来了。

我个人习惯先把Docker搞定,因为后面JumpServer也是跑在容器里的。你想想看,用容器部署多省心,环境隔离、一键启停,比裸机装一堆依赖舒服多了。

核心工具安装逻辑图 Docker 容器运行时 基础依赖 Docker-Compose 编排工具 多容器管理 JumpServer 堡垒机 安全审计 Nginx 反向代理 统一入口 / 负载均衡 / SSL终结

3.1 安装Docker与Docker-Compose

先装Docker。我推荐用官方脚本一键安装,省事。不过要注意,生产环境最好指定版本,别用latest。

# 安装Docker(CentOS 7/8 通用)
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh --version 20.10.21

# 启动并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker

# 验证安装
docker --version
小提示: 装完后记得把当前用户加入docker组,不然每次都要sudo。命令:sudo usermod -aG docker $USER,然后退出重登。

接下来装Docker-Compose。这东西说白了就是用来编排多个容器的。比如JumpServer需要MySQL、Redis、Core、Koko好几个容器,用Compose一个文件全搞定。

# 下载Docker-Compose(v2.12.2 稳定版)
sudo curl -L "https://github.com/docker/compose/releases/download/v2.12.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 赋予执行权限
sudo chmod +x /usr/local/bin/docker-compose

# 验证
docker-compose --version
注意: 国内服务器下载GitHub资源可能很慢。我曾经遇到过下载到一半超时的情况。建议提前准备好离线包,或者配置镜像加速器。

3.2 安装并配置JumpServer堡垒机

JumpServer现在官方推荐用All-in-One的部署方式,基于Docker-Compose。我个人觉得这种方式最省心,升级也方便。

先拉取官方部署脚本:

# 创建目录
mkdir -p /opt/jumpserver
cd /opt/jumpserver

# 下载官方部署包(v3.10.0 为例)
wget https://github.com/jumpserver/installer/releases/download/v3.10.0/jumpserver-installer-v3.10.0.tar.gz
tar -xf jumpserver-installer-v3.10.0.tar.gz
cd jumpserver-installer-v3.10.0

然后执行安装。这里有个坑——配置文件。安装脚本会生成一个config.txt,里面有很多默认参数。我建议你手动改一下:

  • DOMAINS:改成你的实际域名或IP,比如 jump.yourcompany.com
  • SECRET_KEY:生成一个随机字符串,别用默认的
  • DB_PASSWORD:数据库密码,设一个强密码
# 开始安装
./jmsctl.sh install

# 安装完成后启动
./jmsctl.sh start

# 查看状态
./jmsctl.sh status
避坑指南: 我曾经在一台2C4G的机器上部署,结果MySQL容器频繁OOM。后来发现是默认配置里MySQL的buffer pool设得太高。建议小内存机器手动调整docker-compose.yml中的MySQL内存限制。

安装成功后,浏览器访问 http://你的IP:8080,默认账号 admin,密码 admin。第一次登录会强制修改密码。

3.3 部署Nginx反向代理

为什么需要Nginx?说白了,你不能让用户直接访问JumpServer的8080端口吧?不安全,也不优雅。Nginx做反向代理,统一入口,还能加SSL证书。

我习惯用Docker部署Nginx,和JumpServer保持一致的容器化风格。

# 拉取Nginx镜像
docker pull nginx:1.24-alpine

# 创建配置目录
mkdir -p /opt/nginx/conf.d
mkdir -p /opt/nginx/ssl

然后写配置文件。这里我直接给一个生产可用的例子:

# /opt/nginx/conf.d/jumpserver.conf
server {
    listen 80;
    server_name jump.yourcompany.com;

    # 强制跳转HTTPS(如果有证书)
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name jump.yourcompany.com;

    ssl_certificate /etc/nginx/ssl/yourcert.pem;
    ssl_certificate_key /etc/nginx/ssl/yourkey.key;

    # 安全头
    add_header X-Frame-Options SAMEORIGIN;
    add_header X-Content-Type-Options nosniff;

    location / {
        proxy_pass http://你的JumpServerIP:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # WebSocket支持(JumpServer的终端功能需要)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

启动Nginx容器:

docker run -d --name nginx-proxy \
  --restart always \
  -p 80:80 -p 443:443 \
  -v /opt/nginx/conf.d:/etc/nginx/conf.d \
  -v /opt/nginx/ssl:/etc/nginx/ssl \
  nginx:1.24-alpine
经验之谈: 如果你没有正式SSL证书,可以用Let's Encrypt免费证书。我一般用certbot配合Nginx自动续签,省心。

3.4 验证整体链路

装完别急着走,咱们验证一下:

  1. 浏览器访问 https://jump.yourcompany.com,能打开JumpServer登录页
  2. 登录后创建一个测试用户,分配一台服务器
  3. 用Web终端连接测试,看WebSocket是否正常
  4. 检查Nginx日志:docker logs nginx-proxy,看有没有报错
核心要点: 整个链路是 用户 → Nginx(443) → JumpServer(8080) → 目标服务器(22/3389)。每一层都要通,任何一个环节断了,运维平台就用不了。

嗯,到这里核心工具就装完了。Docker提供了运行环境,Compose管理了多容器,JumpServer负责审计和权限控制,Nginx做了统一入口。这套组合拳打下来,远程运维平台的基础设施就稳了。

我记得第一次给客户部署时,光Nginx的WebSocket配置就折腾了半天。后来发现是忘了加proxy_set_header Upgrade那几行。你如果遇到终端连不上,优先检查这里。


专注资料整理