负载均衡

    • 除 JumpServer 自身组件外, 其他组件的高可用请参考对应的官方文档进行部署
    • 按照此方式部署后, 后续只需要根据需要扩容 core web 节点然后添加节点到 tengine 即可
    • 如果已经有 HLB 或者 SLB 可以跳过 Tengine 部署, 第三方 LB 要注意 session 和 websocket 问题
    • 如果已经有 云存储(* S3/Ceph/Swift/OSS/Azure) 可以跳过 MinIO 部署, MySQL Redis 也一样

    Core Task 目前仅支持单节点运行, 后续会优化

    设置 Repo

    安装 MySQL

    1. yum install -y mysql-community-server

    配置 MySQL

    1. if [ ! "$(cat /usr/bin/mysqld_pre_systemd | grep -v ^\# | grep initialize-insecure )" ]; then
    2. sed -i "s@--initialize @--initialize-insecure @g" /usr/bin/mysqld_pre_systemd
    3. fi

    启动 MySQL

    1. systemctl enable mysqld
    2. systemctl start mysqld

    数据库授权

    1. mysql -uroot
    1. Welcome to the MySQL monitor. Commands end with ; or \g.
    2. Your MySQL connection id is 2
    3. Server version: 5.7.32 MySQL Community Server (GPL)
    4. Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
    5. Oracle is a registered trademark of Oracle Corporation and/or its
    6. affiliates. Other names may be trademarks of their respective
    7. owners.
    8. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    9. mysql> create database jumpserver default charset 'utf8';
    10. Query OK, 1 row affected (0.00 sec)
    11. mysql> set global validate_password_policy=LOW;
    12. Query OK, 0 rows affected (0.00 sec)
    13. mysql> create user 'jumpserver'@'%' identified by 'weakPassword';
    14. Query OK, 0 rows affected (0.00 sec)
    15. mysql> grant all on jumpserver.* to 'jumpserver'@'%';
    16. Query OK, 0 rows affected, 1 warning (0.00 sec)
    17. mysql> flush privileges;
    18. Query OK, 0 rows affected (0.00 sec)
    19. mysql> exit
    20. Bye

    配置防火墙

    1. firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.100.0/24" port protocol="tcp" port="3306" accept"
    2. firewall-cmd --reload

    部署 Redis 服务

    1. 服务器: 192.168.100.11

    设置 Repo

    1. yum -y install epel-release https://repo.ius.io/ius-release-el7.rpm

    安装 Redis

    1. yum install -y redis5

    配置 Redis

    1. sed -i "s/bind 127.0.0.1/bind 0.0.0.0/g" /etc/redis.conf
    2. sed -i "561i maxmemory-policy allkeys-lru" /etc/redis.conf
    3. sed -i "481i requirepass weakPassword" /etc/redis.conf
    1. systemctl enable redis
    2. systemctl start redis

    配置防火墙

    1. firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.100.0/24" port protocol="tcp" port="6379" accept"
    2. firewall-cmd --reload
    1. 服务器: 192.168.100.21

    下载 jumpserver-install

    1. cd /opt
    2. yum -y install wget
    3. wget https://github.com/jumpserver/installer/releases/download/v2.9.2/jumpserver-installer-v2.9.2.tar.gz
    4. tar -xf jumpserver-installer-v2.9.2.tar.gz
    5. cd jumpserver-installer-v2.9.2

    修改配置文件

    1. vi config-example.txt
    1. # 修改下面选项, 其他保持默认
    2. ### 注意: SECRET_KEY 和要其他 JumpServer 服务器一致, 加密的数据将无法解密
    3. ## Task 配置
    4. USE_TASK=0 # 不启动 jms_celery
    5. # Core 配置
    6. ### 启动后不能再修改,否则密码等等信息无法解密
    7. SECRET_KEY=kWQdmdCQKjaWlHYpPhkNQDkfaRulM6YnHctsHLlSPs8287o2kW # 要其他 JumpServer 服务器一致 (*)
    8. BOOTSTRAP_TOKEN=KXOeyNgDeTdpeu9q # 要其他 JumpServer 服务器一致 (*)
    9. LOG_LEVEL=ERROR
    10. # SESSION_COOKIE_AGE=86400
    11. SESSION_EXPIRE_AT_BROWSER_CLOSE=true
    12. # KoKo 配置
    13. SHARE_ROOM_TYPE=redis # KoKo 使用 redis 共享
    1. ./jmsctl.sh install

    启动 JumpServer

    1. ./jmsctl.sh start
    1. Creating network "jms_net" with driver "bridge"
    2. Creating jms_mysql ... done
    3. Creating jms_redis ... done
    4. Creating jms_core ... done
    5. Creating jms_luna ... done
    6. Creating jms_lina ... done
    7. Creating jms_guacamole ... done
    8. Creating jms_koko ... done
    9. Creating jms_nginx ... done

    部署 Core Web 02

    1. 服务器: 192.168.100.22

    下载 jumpserver-install

    1. cd /opt
    2. yum -y install wget
    3. wget https://github.com/jumpserver/installer/releases/download/v2.9.2/jumpserver-installer-v2.9.2.tar.gz
    4. tar -xf jumpserver-installer-v2.9.2.tar.gz
    5. cd jumpserver-installer-v2.9.2

    修改配置文件

    1. vi config-example.txt
    1. # 修改下面选项, 其他保持默认
    2. ### 注意: SECRET_KEY 和要其他 JumpServer 服务器一致, 加密的数据将无法解密
    3. ## Task 配置
    4. USE_TASK=0 # 不启动 jms_celery
    5. # Core 配置
    6. ### 启动后不能再修改,否则密码等等信息无法解密
    7. SECRET_KEY=kWQdmdCQKjaWlHYpPhkNQDkfaRulM6YnHctsHLlSPs8287o2kW # 要其他 JumpServer 服务器一致 (*)
    8. BOOTSTRAP_TOKEN=KXOeyNgDeTdpeu9q # 要其他 JumpServer 服务器一致 (*)
    9. LOG_LEVEL=ERROR
    10. SESSION_EXPIRE_AT_BROWSER_CLOSE=true
    11. # KoKo 配置
    12. SHARE_ROOM_TYPE=redis # KoKo 使用 redis 共享
    1. ./jmsctl.sh install

    启动 JumpServer

    1. Creating network "jms_net" with driver "bridge"
    2. Creating jms_mysql ... done
    3. Creating jms_redis ... done
    4. Creating jms_core ... done
    5. Creating jms_luna ... done
    6. Creating jms_lina ... done
    7. Creating jms_guacamole ... done
    8. Creating jms_koko ... done
    9. Creating jms_nginx ... done
    1. 服务器: 192.168.100.31

    下载 jumpserver-install

    1. cd /opt
    2. yum -y install wget
    3. wget https://github.com/jumpserver/installer/releases/download/v2.9.2/jumpserver-installer-v2.9.2.tar.gz
    4. tar -xf jumpserver-installer-v2.9.2.tar.gz
    5. cd jumpserver-installer-v2.9.2

    修改配置文件

    1. vi config-example.txt
    1. # 修改下面选项, 其他保持默认
    2. ### 注意: SECRET_KEY 和要其他 JumpServer 服务器一致, 加密的数据将无法解密
    3. ## Task 配置
    4. USE_TASK=1 # 启动 jms_celery
    5. # Core 配置
    6. ### 启动后不能再修改,否则密码等等信息无法解密
    7. SECRET_KEY=kWQdmdCQKjaWlHYpPhkNQDkfaRulM6YnHctsHLlSPs8287o2kW # 要其他 JumpServer 服务器一致 (*)
    8. BOOTSTRAP_TOKEN=KXOeyNgDeTdpeu9q # 要其他 JumpServer 服务器一致 (*)
    9. LOG_LEVEL=ERROR
    10. # SESSION_COOKIE_AGE=86400
    11. SESSION_EXPIRE_AT_BROWSER_CLOSE=true
    12. # KoKo 配置
    13. SHARE_ROOM_TYPE=redis # KoKo 使用 redis 共享
    1. ./jmsctl.sh install

    启动 JumpServer

    1. ./jmsctl.sh start
    1. Creating network "jms_net" with driver "bridge"
    2. Creating jms_mysql ... done
    3. Creating jms_redis ... done
    4. Creating jms_core ... done
    5. Creating jms_celery ... done
    6. Creating jms_luna ... done
    7. Creating jms_lina ... done
    8. Creating jms_guacamole ... done
    9. Creating jms_koko ... done
    10. Creating jms_nginx ... done

    部署 Tengine 服务

    1. 服务器: 192.168.100.100
    1. vi /etc/yum.repos.d/nginx.repo

    安装 Tengine

    1. yum install -y https://github.com/wojiushixiaobai/tengine-rpm/releases/download/2.3.2/tengine-2.3.2-1.el7.ngx.x86_64.rpm

    配置 Nginx

    1. vi /etc/nginx/nginx.conf
    1. user nginx;
    2. worker_processes auto;
    3. error_log /var/log/nginx/error.log warn;
    4. pid /var/run/nginx.pid;
    5. events {
    6. worker_connections 1024;
    7. }
    8. stream {
    9. log_format proxy '$remote_addr [$time_local] '
    10. '$protocol $status $bytes_sent $bytes_received '
    11. '$session_time "$upstream_addr" '
    12. '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';
    13. access_log /var/log/nginx/tcp-access.log proxy;
    14. open_log_file_cache off;
    15. upstream kokossh {
    16. # core web 节点
    17. server 192.168.100.21:2222;
    18. server 192.168.100.22:2222;
    19. least_conn;
    20. }
    21. server {
    22. # 对外 ssh 端口
    23. listen 2222;
    24. proxy_pass kokossh;
    25. proxy_protocol on;
    26. proxy_connect_timeout 1s;
    27. }
    28. }
    29. http {
    30. include /etc/nginx/mime.types;
    31. default_type application/octet-stream;
    32. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
    33. '$status $body_bytes_sent "$http_referer" '
    34. '"$http_user_agent" "$http_x_forwarded_for"';
    35. access_log /var/log/nginx/access.log main;
    36. sendfile on;
    37. #tcp_nopush on;
    38. keepalive_timeout 65;
    39. #gzip on;
    40. include /etc/nginx/conf.d/*.conf;
    41. }
    1. echo > /etc/nginx/conf.d/default.conf
    2. vi /etc/nginx/conf.d/jumpserver.conf
    1. upstream core_web {
    2. server 192.168.100.21:8080;
    3. server 192.168.100.22:8080;
    4. session_sticky;
    5. }
    6. upstream core_task {
    7. # use_task = 1 的任务服务器, 目前只能单任务运行
    8. server 192.168.100.31:8080;
    9. }
    10. server {
    11. listen 80;
    12. server_name demo.jumpserver.org; # 自行修改成你的域名
    13. return 301 https://$server_name$request_uri;
    14. }
    15. server {
    16. listen 443 ssl;
    17. server_name demo.jumpserver.org; # 自行修改成你的域名
    18. ssl_certificate /etc/nginx/sslkey/1_jumpserver.org.crt; # 自行设置证书
    19. ssl_certificate_key /etc/nginx/sslkey/2_jumpserver.org.key; # 自行设置证书
    20. ssl_session_timeout 5m;
    21. ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    22. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    23. ssl_prefer_server_ciphers on;
    24. client_max_body_size 4096m; # 录像上传大小限制
    25. location ~ /replay/ {
    26. proxy_pass http://core_web;
    27. proxy_set_header X-Real-IP $remote_addr;
    28. proxy_set_header Host $host;
    29. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    30. }
    31. location ~ /(ops|task|tasks|flower)/ {
    32. proxy_pass http://core_task;
    33. proxy_http_version 1.1;
    34. proxy_set_header Upgrade $http_upgrade;
    35. proxy_set_header Connection "upgrade";
    36. proxy_set_header X-Real-IP $remote_addr;
    37. proxy_set_header Host $host;
    38. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    39. }
    40. location /ws/ {
    41. proxy_pass http://core_task/ws/;
    42. proxy_http_version 1.1;
    43. proxy_set_header Upgrade $http_upgrade;
    44. proxy_set_header Connection "upgrade";
    45. proxy_set_header X-Real-IP $remote_addr;
    46. proxy_set_header Host $host;
    47. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    48. }
    49. location / {
    50. proxy_pass http://core_web;
    51. proxy_buffering off;
    52. proxy_request_buffering off;
    53. proxy_http_version 1.1;
    54. proxy_set_header Upgrade $http_upgrade;
    55. proxy_set_header Connection "upgrade";
    56. proxy_set_header X-Real-IP $remote_addr;
    57. proxy_set_header Host $host;
    58. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    59. }
    60. }
    1. nginx -t

    启动 Tengine

    1. systemctl enable nginx
    2. systemctl start nginx

    配置防火墙

    1. firewall-cmd --permanent --zone=public --add-port=80/tcp
    2. firewall-cmd --permanent --zone=public --add-port=443/tcp
    3. firewall-cmd --permanent --zone=public --add-port=2222/tcp
    4. firewall-cmd --reload
    1. 服务器: 192.168.100.41

    安装 Docker

    1. yum install -y yum-utils device-mapper-persistent-data lvm2
    2. yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    3. sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
    4. yum makecache fast
    5. yum -y install docker-ce

    配置 Docker

    1. mkdir /etc/docker/
    2. vi /etc/docker/daemon.json
    1. {
    2. "live-restore": true,
    3. "registry-mirrors": ["https://hub-mirror.c.163.com", "https://bmtrgdvx.mirror.aliyuncs.com", "http://f1361db2.m.daocloud.io"],
    4. "log-driver": "json-file",
    5. "log-opts": {"max-file": "3", "max-size": "10m"}
    6. }

    启动 Docker

    1. systemctl enable docker
    2. systemctl start docker

    下载 MinIO 镜像

    1. docker pull minio/minio:latest
    1. latest: Pulling from minio/minio
    2. a591faa84ab0: Pull complete
    3. 76b9354adec6: Pull complete
    4. f9d8746550a4: Pull complete
    5. 890b1dd95baa: Pull complete
    6. 3a8518c890dc: Pull complete
    7. 8053f0501aed: Pull complete
    8. 506c41cb8532: Pull complete
    9. Digest: sha256:e7a725edb521dd2af07879dad88ee1dfebd359e57ad8d98104359ccfbdb92024
    10. Status: Downloaded newer image for minio/minio:latest
    11. docker.io/minio/minio:latest

    持久化数据目录

    1. mkdir -p /opt/jumpserver/minio/data /opt/jumpserver/minio/config

    启动 MinIO

    1. ## 请自行修改账号密码并牢记, 丢失后可以删掉容器后重新用新密码创建, 数据不会丢失
    2. # 9000 # 访问端口
    3. # MINIO_ROOT_USER=minio # minip 账号
    1. docker run --name jms_minio -d -p 9000:9000 -e MINIO_ROOT_USER=minio -e MINIO_ROOT_PASSWORD=KXOeyNgDeTdpeu9q -v /opt/jumpserver/minio/data:/data -v /opt/jumpserver/minio/config:/root/.minio --restart=always minio/minio:latest server /data
    • 访问 , 输入刚才设置的 MinIO 账号密码登录
    • 点击右下角的 + 号, 选择 Create bucket 创建桶, Bucket Name 输入 jumpserver 回车确认

    设置 JumpServer

    • 访问 JumpServer Web 页面并使用管理员账号进行登录
    • 点击左侧菜单栏的 [终端管理], 在页面的上方选择 [存储配置], 在 [录像存储] 下方选择 [创建] 选择 [Ceph]