Docker部署jumpserver

GitHub地址: https://github.com/jumpserver/Dockerfile

创建目录

创建持久化目录

mkdir -pv /data/jumpserver/SECRET

创建docker-compose目录

mkdir -pv /data/docker-compose/jumpserver

生成密钥

生成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" >> /data/docker-compose/jumpserver/BOOTSTRAP_TOKEN; echo "$SECRET_KEY" >> /data/jumpserver/SECRET/SECRET_KEY ;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" >> /data/docker-compose/jumpserver/BOOTSTRAP_TOKEN; echo "$BOOTSTRAP_TOKEN" >> /data/jumpserver/SECRET/BOOTSTRAP_TOKEN;echo $BOOTSTRAP_TOKEN; else echo $BOOTSTRAP_TOKEN; fi

创建变量文件.env

  • 文件名不可随意更改, docker-compose会自动加载.env作为环境变量
# 版本号可以自己根据项目的版本修改
Version=v2.24.0
TZ=Asia/Shanghai

# Compose
COMPOSE_PROJECT_NAME=jms
COMPOSE_HTTP_TIMEOUT=3600
DOCKER_CLIENT_TIMEOUT=3600
DOCKER_SUBNET=172.16.240.0/24

# 持久化存储
VOLUME_DIR=/data/jumpserver

# MySQL  # 填写你的 Mysql 服务器信息
DB_HOST=jms_db
DB_PORT=3306
DB_ROOT_PASSWORD=Aa123456
DB_USER=jumpserver
DB_PASSWORD=jumpserver
DB_NAME=jumpserver

# Redis  # 填写你的 Redis 服务器信息
REDIS_HOST=jms_redis
REDIS_PORT=6379
REDIS_PASSWORD=8URXPL2x3HZMi7xoGTdk3Upj

# Core
UI_PORT=8088
SECRET_KEY=B3f2w8P2PfxIAS7s4URrD9YmSbtqX4vXdPUL217kL9XPUOWrmy
BOOTSTRAP_TOKEN=7Q11Vz6R2J6BLAdO
DEBUG=FALSE
LOG_LEVEL=ERROR

# SECRET_KEY 保护签名数据的密匙, 首次安装请一定要修改并牢记, 后续升级和迁移不可更改, 否则将导致加密的数据不可解密。
# BOOTSTRAP_TOKEN 为组件认证使用的密钥, 仅组件注册时使用。组件指 koko、guacamole
SECRET_KEY=C72P84gH0RzQCYGW4nINLUZMKKzWwsnntzBiWK3jo4g0vWq71V
BOOTSTRAP_TOKEN=nKp3K2P0oSDuIS2u

docker-compose编排

示例

version: '3'
services:
  jms_db:
    container_name: jms_db
    image: mysql:8.0
    restart: always
    # docker安全验证
    security_opt:
      - seccomp:unconfined
    volumes:
      - /etc/localtime:/etc/localtime
      - $VOLUME_DIR/mysql:/var/lib/mysql
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
      MYSQL_USER: ${DB_USER}
      MYSQL_PASSWORD: ${DB_PASSWORD}
      MYSQL_DATABASE: ${DB_NAME}
    command: --character-set-server=utf8 --collation-server=utf8_general_ci --default-authentication-plugin=mysql_native_password --skip-name-resolve
    deploy:
      resources:
        limits:
           memory: 4G
    networks:
      - jumpserver
  jms_redis:
    container_name: jms_redis
    image: redis:6.2.1
    restart: always
    command: redis-server --requirepass $REDIS_PASSWORD --loglevel warning --maxmemory-policy allkeys-lru
    environment:
      REDIS_PORT: $REDIS_PORT
      REDIS_PASSWORD: $REDIS_PASSWORD
    healthcheck:
      test: "redis-cli -h 127.0.0.1 -p $$REDIS_PORT -a $$REDIS_PASSWORD info Replication"
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 10s
    volumes:
      - $VOLUME_DIR/redis:/data
    networks:
      - jumpserver
  core:
    image: jumpserver/core:${Version}
    container_name: jms_core
    restart: always
    tty: true
    command: start web
    environment:
      SECRET_KEY: $SECRET_KEY
      BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN
      DEBUG: $DEBUG
      LOG_LEVEL: $LOG_LEVEL
      DB_HOST: $DB_HOST
      DB_PORT: $DB_PORT
      DB_USER: $DB_USER
      DB_PASSWORD: $DB_PASSWORD
      DB_NAME: $DB_NAME
      REDIS_HOST: $REDIS_HOST
      REDIS_PORT: $REDIS_PORT
      REDIS_PASSWORD: $REDIS_PASSWORD
    healthcheck:
      test: "curl -fsL http://localhost:8080/api/health/ > /dev/null"
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 90s
    volumes:
      - ${VOLUME_DIR}/core/data:/opt/jumpserver/data
      - ${VOLUME_DIR}/core/logs:/opt/jumpserver/logs
    networks:
      - jumpserver

  celery:
    image: jumpserver/core:${Version}
    container_name: jms_celery
    restart: always
    tty: true
    command: start task
    environment:
      SECRET_KEY: $SECRET_KEY
      BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN
      DEBUG: $DEBUG
      LOG_LEVEL: $LOG_LEVEL
      DB_HOST: $DB_HOST
      DB_PORT: $DB_PORT
      DB_USER: $DB_USER
      DB_PASSWORD: $DB_PASSWORD
      DB_NAME: $DB_NAME
      REDIS_HOST: $REDIS_HOST
      REDIS_PORT: $REDIS_PORT
      REDIS_PASSWORD: $REDIS_PASSWORD
    depends_on:
      core:
        condition: service_healthy
    healthcheck:
      test: "bash /opt/jumpserver/utils/check_celery.sh"
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 30s
    volumes:
      - ${VOLUME_DIR}/core/data:/opt/jumpserver/data
      - ${VOLUME_DIR}/core/logs:/opt/jumpserver/logs
    networks:
      - jumpserver

  koko:
    image: jumpserver/koko:${Version}
    container_name: jms_koko
    restart: always
    privileged: true
    tty: true
    environment:
      CORE_HOST: http://core:8080
      BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN
      LOG_LEVEL: $LOG_LEVEL
    depends_on:
      core:
        condition: service_healthy
    healthcheck:
      test: "curl -fsL http://localhost:5000/koko/health/ > /dev/null"
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 10s
    volumes:
      - ${VOLUME_DIR}/koko/data:/opt/koko/data
    ports:
      - 2222:2222
    networks:
      - jumpserver

  lion:
    image: jumpserver/lion:${Version}
    container_name: jms_lion
    restart: always
    tty: true
    environment:
      CORE_HOST: http://core:8080
      BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN
      LOG_LEVEL: $LOG_LEVEL
    depends_on:
      core:
        condition: service_healthy
    healthcheck:
      test: "curl -fsL http://localhost:8081/lion/health/ > /dev/null"
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 10s
    volumes:
      - ${VOLUME_DIR}/lion/data:/opt/lion/data
    networks:
      - jumpserver

  magnus:
    image: jumpserver/magnus:${Version}
    container_name: jms_magnus
    restart: always
    tty: true
    environment:
      CORE_HOST: http://core:8080
      BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN
      LOG_LEVEL: $LOG_LEVEL
    depends_on:
      core:
        condition: service_healthy
    healthcheck:
      test: "ps axu | grep -v 'grep' | grep magnus"
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 10s
    volumes:
      - ${VOLUME_DIR}/magnus/data:/opt/magnus/data
    ports:
      - 33060:33060
      - 33061:33061
    networks:
      - jumpserver

  web:
    image: jumpserver/web:${Version}
    container_name: jms_web
    restart: always
    tty: true
    depends_on:
      core:
        condition: service_healthy
    healthcheck:
      test: "curl -fsL http://localhost/ > /dev/null"
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 10s
    volumes:
      - ${VOLUME_DIR}/core/data:/opt/jumpserver/data
      - ${VOLUME_DIR}/nginx/data/logs:/var/log/nginx
    ports:
      - $UI_PORT:80
    networks:
      - jumpserver
networks:
  jumpserver:

启动JMS

创建容器:
docker-compose up -d

稍等一会, docker-compose ps查看, jms_core健康监测为healthy后, 所有服务将会启动成功

验证:
http://ip:端口
认证: admin/admin
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Docker是一种流行的容器化技术,可以帮助我们更轻松地部署和管理应用程序。要在Docker部署JumpServer,您可以按照以下步骤操作: 1. 安装DockerDocker Compose 2. 下载JumpServerDocker Compose文件 3. 修改Docker Compose文件中的配置,例如数据库密码和管理员账户密码 4. 运行Docker Compose命令,启动JumpServer容器 5. 访问JumpServer的Web界面,进行初始化设置和管理 需要注意的是,部署JumpServer需要一定的技术水平和经验,如果您不熟悉DockerJumpServer的配置和管理,建议先学习相关知识或寻求专业人士的帮助。 ### 回答2: Docker是一种流行的容器化技术,能够实现快速、可靠的应用程序部署Jumpserver是一种远程连接管理工具,可让用户通过Web界面安全地远程连接到受控节点。下面将介绍如何使用Docker部署Jumpserver。 1. 首先需要安装Docker,可以在官网上下载。安装成功后,可以通过docker version命令检查版本。 2. 下载Jumpserver Docker镜像。可以从Docker Hub上下载Jumpserver镜像,使用以下命令: ``` docker pull jumpserver/jumpserver ``` 3. 创建Jumpserver容器。使用以下命令创建Jumpserver容器: ``` docker run --name jumpserver -d --restart=always \ -p 80:80 -p 2222:2222 -p 50000-50100:50000-50100 \ -v /config:/opt/jumpserver/data \ -v /logs:/opt/jumpserver/logs \ -v /ssh:/opt/jumpserver/ssh \ --env DB_HOST=<DB_HOST> \ --env DB_PORT=<DB_PORT> \ --env DB_NAME=<DB_NAME> \ --env DB_USER=<DB_USER> \ --env DB_PASSWORD=<DB_PASSWORD> \ jumpserver/jumpserver ``` 注意:需要将<DB_HOST>、<DB_PORT>、<DB_NAME>、<DB_USER>和<DB_PASSWORD>替换为实际的数据库连接信息。 4. 初始化Jumpserver。使用以下命令初始化Jumpserver: ``` docker exec -it jumpserver /bin/bash cd /opt/jumpserver/utils && sh make_migrations.sh && sh make_ssh_keys.sh && sh init_db.sh ``` 5. 配置Nginx反向代理。可以通过安装Nginx并配置反向代理来实现对Jumpserver的访问控制和SSL加密。 6. 登录Jumpserver。在浏览器中访问Jumpserver的IP地址或域名以登录。默认管理员用户名为admin,密码为admin。 通过上述步骤,我们可以快速、可靠地部署Jumpserver,并实现远程连接管理。Docker的容器化技术为Jumpserver部署提供了便利性和灵活性,大大提高了部署效率和管理效率。 ### 回答3: JumpServer 是一个全球领先的开源堡垒机,为企业提供安全、快速、便捷的远程访问解决方案。Docker 能够将应用程序及其依赖项打包为容器,使应用程序可以在任何环境中运行。因此,将 JumpServer 部署Docker 上能够让部署变得更为简单、易用、灵活,同时也方便了版本控制和管理。 部署步骤: 1. 准备Docker环境。首先确保Docker环境已正确安装到服务器上; 2. 配置数据库。JumpServer对应用程序数据进行了分离,需要单独配置数据库。可以使用如下命令来启动数据库容器: ``` docker run --name mysql -e MYSQL_ROOT_PASSWORD=jumpserver -p 3306:3306 -d mysql:5.7 --character-set-server=utf8 --collation-server=utf8_general_ci ``` 其中 "-e" 参数可以指定 Mysql 的 root 密码,"-p" 参数可以将容器内部的 3306 端口映射到宿主机上的 3306 端口。 3. 配置Redis容器。使用下列命令启动 Redis 容器: ``` docker run --name redis -p 6379:6379 -d redis redis-server --appendonly yes ``` 4. 准备JumpServer容器。首先拉取JumpServer 镜像,可以在官方网站或镜像库中查找相应版本的 JumpServer 镜像; 5. 启动JumpServer容器。可以使用下列命令启动 JumpServer 容器: ``` docker run --name jms -d -p 80:80 -p 2222:2222 -e DB_HOST=host.docker.internal -e DB_PASSWORD=jumpserver -e JUMP_SERVER_HOST=your.jump.server.com -e SECRET_KEY=jumpserver -e BOOTSTRAP_TOKEN=your_boostrap_token --link mysql:mysql --link redis:redis jumpserver/jms_all:latest ``` 其中 "-d" 参数表示容器会以后台运行,"-p" 参数可以将容器内部的 80 端口映射到宿主机上的 80 端口和映射容器内的 2222 端口到宿主机上的 2222 端口,"-e" 参数可以设置 JumpServer 环境变量,例如数据库主机地址、密码、JumpServer 站点地址等。 6. 查看JumpServer。等待 JumpServer 容器启动后,可以在浏览器中输入映射过的本地地址(例如localhost或ip地址)来访问JumpServer安装页面。 总结 使用Docker 部署 JumpServer 能够让应用程序跨平台运行,方便开发与管理。同时,可以使用 Docker Compose 管理多个容器,达到快速搭建高可用的应用程序的效果。需要注意的是,在使用Docker或其他虚拟化技术时,容器内部的 IP 地址与外部会存在不一致的问题,可以通过端口映射和环境变量等方法进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值