开源 JumpServer 容器化部署(Docker)

本文档详述了如何在Ubuntu服务器上使用Docker部署JumpServer、MySQL和Redis的过程,包括服务器规划、资源清单、各个服务的部署步骤以及验证方法。特别强调了MySQL版本需大于5.7.8,Redis版本建议大于5.0,并提供了遇到问题时的FAQ解答。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

在我之前的博文中有过详细的部署过程,不过那是以源码的形式进行部署的,大家感兴趣的话可以去看一看——《JumpServer 开源堡垒机部署(源码)》。源码形式的部署可能会遇到很多问题,不过这些问题都很容易解决,大家如果想感受其工作过程的话,可以尝试以源码方式进行部署。本次和大家分享的是以 Docker 方式部署的完整过程,以及部署过程中需要注意的一些点。

一、规划

1、服务器规划

OSServer备注
Ubuntu 18.04(192.168.1.146)JumpServer、MySQL、RedisJumpServer
Ubuntu 18.04(192.168.1.144)SSHD远程 SSH 测试
window 10(192.168.1.71)RPD远程 RPD 测试

2、资源清单

二、部署

2.1 Docker 部署

1、卸载旧版本(或已存在的残余 Docker)

sudo apt-get remove docker docker-engine docker.io containerd runc

2、安装必要依赖

sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common

3、安装GPG证书

sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

4、 写入软件源信息

如果使用官方的话,安装 Docker 就会非常慢,所以建议缓存国内源。

sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

5、安装 Docker-CE

  • 安装最新版

    sudo apt-get -y update
    sudo apt-get -y install docker-ce
    
  • 安装指定版本(推荐-根据实际场景选择)

    # 查看apt源中的docker版本
    apt-cache madison docker-ce
    ...
    docker-ce | 18.06.3~ce~3-0~ubuntu | https://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
    docker-ce | 18.06.2~ce~3-0~ubuntu | https://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
    docker-ce | 18.06.1~ce~3-0~ubuntu | https://mirrors.aliyun.com/docker-ce/linux/ubuntu bionic/stable amd64 Packages
    ...
    
    # 安装指定版本
    sudo apt-get -y install docker-ce=18.06.3~ce~3-0~ubuntu
    

6、启动 Docker

# 一般安装完成后就会启动了
sudo systemctl start docker.service
sudo systemctl enable docker.service
sudo systemctl status docker.service

7、添加当前用户至 Docker 组

方便直接 docker,而不需要加 sudo docker

sudo usermod -a -G docker $USER

8、添加加速器

# 添加阿里加速
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://q1rw9tzz.mirror.aliyuncs.com"]
}
EOF

# 重启Docker
sudo systemctl daemon-reload
sudo systemctl restart docker

2.2 MySQL 部署

1、创建数据目录

sudo mkdir -p /data/mysql/data

2、pull 镜像

sudo docker pull mysql:8.0.27

3、运行容器

sudo docker run -itd --name mysql --net=host --restart=always -e MYSQL_ROOT_PASSWORD=susonedu@123 -p 3306:3306 -v /data/mysql/data:/var/lib/mysql mysql:8.0.27 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

4、查看容器状态

sudo docker ps

5、创建数据库及程序用户

  • 登录数据库

    sudo docker exec -it mysql /bin/bash
    mysql -uroot -psusonedu@123
    
  • 创建数据库

    create database jumpserver default charset 'utf8mb4';
    
  • 创建程序用户

    create user 'jumpserver'@'%' identified by 'zhurs@123';
    
  • 授权用户对应数据库

    grant all on jumpserver.* to 'jumpserver'@'%';
    

    对于mysql8.0+,创建用户和授权须分开进行。

  • 刷新授权表

    flush privileges;
    

2.3 Redis 部署

1、创建数据目录

sudo mkdir -p /data/redis/data

2、pull 镜像

sudo docker pull redis:6.2.6

3、运行容器

sudo docker run -itd --name redis --net=host -p 6379:6379 -v /data/redis/data:/data --restart=always --sysctl net.core.somaxconn=1024  redis:6.2.6 --requirepass "zhurs@123"

4、查看容器状态

sudo docker ps

2.4 JumpServer 部署

1、创建数据目录

sudo mkdir -p /data/jumpserver

2、pull 镜像

sudo docker pull jumpserver/jms_all:v2.16.0

3、运行容器

docker run -itd --name jumpserver --net=host -h jumpserver --restart=always  \
-v /data/jumpserver:/opt/jumpserver/data/media \
-p 80:80 \
-p 2222:2222 \
-e SECRET_KEY=if0DW4VrB08z5uTzd7uGvVNeVoTIwZryZ0emRu1cxDem7XGYwx \
-e BOOTSTRAP_TOKEN=VJLH1ZjjwpRvknws \
-e DB_HOST=192.168.1.146 \
-e DB_PORT=3306 \
-e DB_USER=jumpserver \
-e DB_PASSWORD="zhurs@123" \
-e DB_NAME=jumpserver \
-e REDIS_HOST=192.168.1.146 \
-e REDIS_PORT=6379 \
-e REDIS_PASSWORD="zhurs@123" \
jumpserver/jms_all:v2.16.0

注意:保存好 SECRET_KEY 和 BOOTSTRAP_TOKEN,用于版本升级。

随机字符串生成方法:

# SECRET_KEY
if [ "$SECRET_KEY" = "" ]; then SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`; echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc; echo $SECRET_KEY; else echo $SECRET_KEY; fi

# BOOTSTRAP_TOKEN
if [ "$BOOTSTRAP_TOKEN" = "" ]; then BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`; echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc; echo $BOOTSTRAP_TOKEN; else echo $BOOTSTRAP_TOKEN; fi

4、查看容器状态

sudo docker ps

查看 JumpServer 启动日志

docker logs -f jumpserver

看到如下日志,说明启动成功,尝试在浏览器进行访问

在这里插入图片描述

三、验证

3.1 可用性

是否可正常访问:http://192.168.1.146/

默认登录用户/密码:admin/admin

系统用户 是JumpServer 登录资产时使用的账号,如 root ssh root@host,而不是使用该用户名登录资产(ssh admin@host);

特权用户 是资产已存在的, 并且拥有高级权限的系统用户, JumpServer 使用该用户来推送系统用户获取资产硬件信息 等;

普通用户 可以在资产上预先存在,也可以由特权用户来自动创建。

在这里插入图片描述

3.2 远程性

1、Linux

  • 通过 JumpServer 连接远程服务器

    1.创建资源
    2. 创建系统用户
    3. 资源授权
    4. 连通性验证

    在这里插入图片描述

    若水印影响视觉,去掉终端水印即可。终端的水印可以通过【系统设置–>安全设置–>开启水印】把勾去掉即可。

    在这里插入图片描述

  • Linux 终端查看 JumpServer

    ssh admin@192.168.1.146 -p2222
    
    # admin为JumpServer的登录用户
    # 2222为JumpServer的监听端口
    # 密码为JumpServer登录admin用户的登录密码
    # 若开发人员不想通过浏览器登录web界面操作,也可xshell先登录跳板机服务器,再通过上述命令远程自己的主机。
    
    # 1、再跳板机服务器创建一个统一登录的普通用户
    # 2、开发人员通过该普通用户登录跳板机
    # 3、运维通过JumpServer给各开发人员开通普通账户/密码
    # 4、开发再通过跳板机执行ssh命令连接自己的JumpServer账户,查看自己已被授权的主机,并可进行登录
    # 如下图所示,根据对应提示输入即可
    

    在这里插入图片描述

2、Windows

由于我的 windows 暂不支持远程桌面,此处不再演示,但根据以上的步骤是可以正常连接的。注意是 rdp 协议的3389端口进行 win 远程连接。

在这里插入图片描述

四、FAQ

4.1 MySQL 版本问题

注意:数据库版本问题 5.7.7 不行

ERRORS:
acls.LoginACL: (fields.E180) MySQL does not support JSONFields.
acls.LoginAssetACL: (fields.E180) MySQL does not support JSONFields.
acls.LoginAssetACL: (fields.E180) MySQL does not support JSONFields.
acls.LoginAssetACL: (fields.E180) MySQL does not support JSONFields.
applications.Application: (fields.E180) MySQL does not support JSONFields.
notifications.SystemMsgSubscription: (fields.E180) MySQL does not support JSONFields.
notifications.UserMsgSubscription: (fields.E180) MySQL does not support JSONFields.
terminal.Task: (fields.E180) MySQL does not support JSONFields.
tickets.ApprovalRule: (fields.E180) MySQL does not support JSONFields.
tickets.Ticket: (fields.E180) MySQL does not support JSONFields.
tickets.Ticket: (fields.E180) MySQL does not support JSONFields.
2021-11-20 08:50:15 Perform migrate failed, exit

# 由于JumpServer使用了较新的Django版本,因此对数据库的版本也有一定的要求
# Django最新版v3.1的主要更新之一便是完善了对JSON数据存储的支持,新增models.JSONField和forms.JSONField,可在所有受支持的数据库后端上使用
# 目前支持的数据库以及对应版本主要有MariaDB 10.2.7+,MySQL 5.7.8+,Oracle,PostgreSQL和SQLite 3.9.0+
# 但个别Django的查询方法可能与部分数据库不兼容,例如contains和contained_by就不支持Oracle和SQLite数据库

4.2 Redis 版本问题

对于 Redis 版本的话,建议是 >= 5.0,本次使用的是6.2.6版本。因为对于较新版本的 Redis,小版本可能会出现 JumpServer 无法连接的情况。Redis 的话用于数据缓存,提高请求响应,降低 HTTP 请求次数。

总结

应用部署其实很简单,注意一些服务的版本即可(因为可能不兼容),对于线上的 JumpServer 大家可以根据公司的实际情况进行部署,比如购买企业版的 JumpServer,这样会更加安全,对于一些初创型公司,可以考虑先使用开源的 JumpServer,条件允许的话可以进行二次开发。

<点击跳转至开头>

### 使用 Docker-Compose 部署 JumpServer 的指南 JumpServer 是一款开源的堡垒机系统,支持通过 Docker 进行快速部署。以下是使用 Docker-Compose 部署 JumpServer 的详细说明: #### 1. 环境准备 在开始之前,请确保服务器满足以下条件: - 系统为 CentOS 或 Ubuntu(推荐 CentOS 7+ 或 Ubuntu 18.04+)。 - 关闭防火墙和 SELinux,以避免网络通信问题[^4]。 ```bash systemctl stop firewalld systemctl disable firewalld setenforce 0 ``` #### 2. 安装 DockerDocker-Compose ##### 安装 Docker 根据官方文档或阿里云镜像源安装 Docker[^4]: ```bash # 切换到 Yum 配置目录 cd /etc/yum.repos.d/ # 下载 Docker 的 Yum 源配置文件 wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 更新 Yum 缓存并安装 Docker yum clean all && yum makecache fast yum -y install docker-ce # 启用并启动 Docker 服务 systemctl enable --now docker ``` ##### 安装 Docker-Compose Docker-Compose 可以通过以下命令安装[^3]: ```bash # 下载 Docker-Compose 二进制文件 curl -L "https://github.com/docker/compose/releases/download/v2.17.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose # 赋予可执行权限 chmod +x /usr/local/bin/docker-compose # 验证安装是否成功 docker-compose version ``` #### 3. 获取 JumpServerDocker-Compose 文件 从官方仓库克隆 JumpServerDocker 部署文件: ```bash git clone https://github.com/jumpserver/docker.git cd docker ``` #### 4. 修改配置文件 在 `docker` 目录中,编辑 `docker-compose.yml` 文件,根据实际需求调整服务参数。例如,修改 MySQL 数据库密码、Redis 密码等。 同时,检查 `.env` 文件中的环境变量,确保用户名和密码符合安全要求[^5]。 #### 5. 启动 JumpServer 服务 执行以下命令启动所有服务: ```bash docker-compose up -d ``` 这将以后台模式运行所有容器,并初始化 JumpServer 的相关服务[^3]。 #### 6. 访问 JumpServer 默认情况下,JumpServer 的 Web 界面可以通过以下地址访问: ``` http://<服务器IP>:8080 ``` 初始管理员账号信息可以在 `.env` 文件中找到,或者通过日志查看: ```bash docker-compose logs jumpserver ``` #### 7. 停止和重启服务 如果需要停止服务,可以执行以下命令: ```bash docker-compose down ``` 若需要重启服务,可以执行: ```bash docker-compose restart ``` --- ### 注意事项 - 确保服务器有足够的磁盘空间和内存资源,建议最低配置为 2 核 CPU 和 4GB 内存。 - 如果需要持久化数据,可以在 `docker-compose.yml` 中配置卷映射,将数据库和日志存储到主机目录。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云计算-Security

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值