易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 468|回复: 13
收起左侧

jumpserver集群模式部署

[复制链接]
发表于 2023-3-8 10:00:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?开始注册

x
准备工作⚓︎5 Q* a5 n( B8 ~7 e* o. t
1 整体部署说明⚓︎
# O+ L- _) T! y% N% t& M; K. H环境说明) D8 ~* K- G  u6 p& _7 R" k( s
- o* I6 Y* w' K
除 JumpServer 自身组件外,其他组件的高可用请参考对应的官方文档进行部署。
  o, X7 K! O' C+ [; q按照此方式部署后,后续只需要根据需要扩容 JumpServer 节点然后添加节点到 HAProxy 即可。
2 t. O4 L" A# |* }# }如果已经有 HLB 或者 SLB 可以跳过 HAProxy 部署,第三方 LB 要注意 session 和 websocket 问题。
5 \5 s; F' A! `& s* ^' q; S) q如果已经有 云存储 (S3/Ceph/Swift/OSS/Azure) 可以跳过 MinIO 部署,MySQL、Redis 也一样。3 c6 E. X7 f$ o
生产环境中,应该使用 Ceph 等替代 NFS,或者部署高可用的 NFS 防止单点故障。8 K& x6 p" y" x% ]) Z$ S- G
1.1 数据库要求⚓︎
& d) ?$ a+ z7 V, @6 K3 q3 Q名称        版本        默认字符集        默认字符编码        TLS/SSL8 @, _' _8 O& J9 t* K1 q  c5 m
MySQL        >= 5.7        utf8        utf8_general_ci       
  c9 \/ m! C% v+ |+ r( f# kMariaDB        >= 10.2        utf8mb3        utf8mb3_general_ci       
" |, V  c; C$ |$ tName        Version        Sentinel        Cluster        TLS/SSL7 z1 c+ H( g, l6 f& P6 i* V
Redis        >= 6.0                        5 p% H8 @' O# v; [7 R/ C
1.2 服务器要求⚓︎9 w* ^1 B5 x- u2 f: }6 n7 k3 ?0 r
服务名称        IP 地址        端口        使用涉及组件/服务        最小化硬件配置        标准化硬件配置5 N; r- T2 ]- d! {/ O( [  ?
NFS        192.168.10.11        -        Core        2Core/8GB RAM/100G HDD        4Core/16GB RAM/1T SSD
1 L0 S; e5 u: G) rMySQL        192.168.10.11        3306        Core        2Core/8GB RAM/90G HDD        4Core/16GB RAM/1T SSD
; k5 t+ O6 |. i( v: GRedis        192.168.10.11        6379        Core, Koko, Lion        2Core/8GB RAM/90G HDD        4Core/16GB RAM/1T SSD
5 R+ A) p) l! F9 ?+ R& e. |, p1 G- ^HAProxy        192.168.10.100        80,443,2222,33060,33061        All        2Core/4GB RAM/60G HDD        4Core/8GB RAM/60G SSD* v5 N0 c6 H8 k$ x# @& a
JumpServer 01        192.168.10.21        80,2222,33060,33061        HAProxy        2Core/8GB RAM/60G HDD        4Core/8GB RAM/90G SSD
6 O% ?' C" v% g0 y  [JumpServer 02        192.168.10.22        80,2222,33060,33061        HAProxy        2Core/8GB RAM/60G HDD        4Core/8GB RAM/90G SSD- L1 c+ B2 V3 r, l2 n) h2 N, I
JumpServer 03        192.168.10.23        80,2222,33060,33061        HAProxy        2Core/8GB RAM/60G HDD        4Core/8GB RAM/90G SSD
/ o# N0 F2 P6 J- z, K3 c, SJumpServer 04        192.168.10.24        80,2222,33060,33061        HAProxy        2Core/8GB RAM/60G HDD        4Core/8GB RAM/90G SSD
$ @5 }4 u3 w4 q$ I  DMinIO        192.168.10.41        9000,9001        Core, KoKo, Lion        2Core/4GB RAM/100G HDD        4Core/8GB RAM/1T SSD
( s6 T4 A2 V/ v, o5 c: DElasticsearch        192.168.10.51        9200,9300        Core, KoKo        2Core/4GB RAM/100G HDD        4Core/8GB RAM/1T SSD" L4 h- [2 F* L2 _, z$ r
1.3 组件容器健康检查⚓︎# {! n9 q3 P3 D' @% Z
服务名称        健康检查        实例- T1 E* y4 Z' P0 ?! Q0 q
Core        http://core:8080/api/health/        https://demo.jumpserver.org/api/health/
7 ]4 E9 t, Q! |- `KoKo        http://koko:5000/koko/health/        https://demo.jumpserver.org/koko/health/
" |! Q; f" f/ e7 a0 O7 O+ w0 O$ r0 QLion        http://lion:8081/lion/health/        https://demo.jumpserver.org/lion/health/
9 h: D7 F, o' X; L6 D& k( D. m# ^" d2 部署顺序⚓︎
" l2 R. B1 h$ m1 h6 a  c7 B1.部署 NFS 服务  b( v$ @9 D) H7 k/ B# j
3 x7 A' u3 ^$ X
2.部署 MySQL 服务! T: I3 g1 _/ k* |1 T0 l4 Q

1 i2 U3 |7 N* O/ O; f3.部署 Redis 服务$ q* G% E! N# J9 s$ ^0 _
  L% Q$ ^9 T7 E# ~
4.部署 JumpServer 01 节点
- Z6 v' b$ P3 H! B  X1 d' h; c% |$ z- R: C  [
5.部署 JumpServer 02 节点
4 l) F4 z& O2 w  m  I+ C/ ~$ n6 B- \; G  J$ n8 o
6.部署 JumpServer 03 节点, z5 o  x  F# D, a% @
% S4 }  q: e8 O0 Q1 D
7.部署 JumpServer 04 节点
+ |8 ]" }) o8 a2 F8 t# z' h1 d# q; _, c% n5 W% u# `7 {
8.部署 HAProxy 服务8 A9 Y/ q3 E3 Z2 I1 s" V- ]) G
- V( m5 D* O2 B) g
9.部署 MinIO 服务
2 W6 g9 g' V) ^3 I0 o; ~- r3 h2 E' G& A. [$ b2 O- a
10.部署 Elasticsearch 服务
$ ?+ F+ |8 I1 A% ^! N  U% Y
 楼主| 发表于 2023-3-8 10:00:02 | 显示全部楼层
部署 NFS 服务⚓︎1 g- r: V) W( A0 i0 ^1 t9 U
1 NFS 服务器端安装与配置⚓︎
$ T0 s- s8 C7 C$ G: m/ S1.1 环境信息⚓︎
9 F( A4 P, G3 c7 Y1 [. I) NNFS 服务器信息如下:
2 T7 _* W* Z& v7 F. c) |
7 h3 c+ V# @2 U$ u0 C* d8 S192.168.10.11! E, ^. w: R* g; I' g/ f# }
1.2 安装依赖⚓︎
9 S, ?- F, \. D# y( j3 a: F+ C) q7 M! Q
yum -y install epel-release# B1 {: x/ J2 l3 p& W8 h
1.3 安装 NFS 依赖包⚓︎
/ }1 ]# g) A% i( ?& w# o) f1 {7 o% W2 |8 o. g& Q
yum -y install nfs-utils rpcbind9 ~# j0 S; r/ H
1.4 启动 NFS⚓︎% X3 ?/ R2 L6 A# G9 N

; V: N* i5 A3 y4 V" nsystemctl enable rpcbind nfs-server nfs-lock nfs-idmap
! V: x# M7 `8 u5 F! n, |systemctl start rpcbind nfs-server nfs-lock nfs-idmap- c2 ?' ^( s4 _( Z3 t& |: W/ T3 O
1.5 配置防火墙⚓︎7 G- ?0 k9 a  g2 X' n

; @. m6 o+ _3 Ffirewall-cmd --add-service=nfs --permanent --zone=public, Z, J: G" G5 c- C! m. `7 a/ ?$ H: M
firewall-cmd --add-service=mountd --permanent --zone=public+ a; U9 {, @8 P+ B: C' m
firewall-cmd --add-service=rpc-bind --permanent --zone=public& t1 @/ Y' W: u( w
firewall-cmd --reload
& g- u7 ]! j+ l+ `( w- z. L. n2 |8 ^1.6 配置 NFS⚓︎
& B' E( M  J- ?! J7 g4 T
5 q- v. x' u9 C& @) \mkdir /data  n% F% o) M; i& o" A- S4 a3 X. ?2 c
chmod 755 -R /data
  B; R; U1 G: y/ L+ e
7 U+ R9 e8 v* y4 f# ]6 V1 ~9 _vi /etc/exports' p2 ^9 z4 ]# l
! L' T/ N9 ]5 K' q7 J
# 设置 NFS 访问权限, /data 是刚才创建的将被共享的目录, 192.168.10.* 表示整个 192.168.10.* 的资产都有括号里面的权限
  x* {1 ]3 [& T# w, h4 ?/ K5 X# 也可以写具体的授权对象 /data 192.168.10.30(rw,sync,no_root_squash) 192.168.10.31(rw,sync,no_root_squash)
5 I" P  u+ o# k* U  o& m/ x+ @3 s2 p& q; G4 X; w
/data 192.168.10.*(rw,sync,all_squash,anonuid=0,anongid=0)2 q" A5 ?! a/ V& Q) o8 [' e

) _3 Z% `- h- y  N% Q9 m
! T) T# Y/ H* C7 p, ]- p/ ]* ]5 O( ^1.7 让 exports 配置生效⚓︎
) R: {5 i% ~* U2 U) R$ i6 q  S: g3 F$ J; y, P
exportfs -a
: W: C5 O9 @0 n
 楼主| 发表于 2023-3-8 10:00:03 | 显示全部楼层
部署 MySQL 服务⚓︎
1 n3 \2 t. Y* B6 X( l- X1 准备工作⚓︎# E* N* M$ \4 C" }. |% A) B1 J
1.1 环境信息⚓︎
  G" _/ P% I  U$ H+ }MySQL 服务器信息如下:
, E, o0 r5 A' B" {& W* ?% i, U  u  j7 x, }# v% g3 y
192.168.10.117 ?) w- j9 t+ E! d& Z* m
1.2 设置 Repo⚓︎
1 F- \- T) {4 o1 G4 S0 A
$ Z& b$ w: U4 Wyum -y localinstall http://mirrors.ustc.edu.cn/mysql ... ity-release-el7.rpm& V( D5 P( S  K1 O+ I' h+ |! ^5 e% j
2 安装配置 MySQL⚓︎
' N: b3 y5 ?; `6 q% f. N+ F- z2.1 Yum 方式安装 MySQL⚓︎  [9 [  u% O( k' K" D# ?
6 u0 j2 K; l9 T/ i! f
yum install -y mysql-community-server
4 U) i9 s7 L; j: C8 m2.1 配置 MySQL⚓︎
' {/ m5 A0 \3 d. G2 _! U  }5 v0 R. E& q$ K: p3 z
if [ ! "$(cat /usr/bin/mysqld_systemd | grep -v ^\# | grep initialize-insecure )" ]; then, L8 d% |) Z% N3 _
    sed -i "s@--initialize @--initialize-insecure @g" /usr/bin/mysqld_systemd
$ b# {2 c5 t* E( s# hfi  E' X$ }$ k1 X+ i0 c. X& Y+ u( o
2.2 启动 MySQL⚓︎
! X. f6 n8 u9 A& B3 b5 K8 P; }/ Y; Z  k, u
systemctl enable mysqld
8 S4 E- z. s" k, g2 psystemctl start mysqld0 \2 K) N7 j; E+ L3 b9 d3 S
2.3 配置数据库授权⚓︎0 _$ \  I1 w. m+ \$ {

8 h1 x7 v" ]* x- M+ e  c9 Pmysql -uroot
% Y7 N$ Z5 v8 L( v& b5 z" \
# t3 o3 p7 S! S4 A* M4 i/ F3 jWelcome to the MySQL monitor.  Commands end with ; or \g.
$ g4 x; Y& N; \: a/ u+ `* r5 x7 pYour MySQL connection id is 2$ D0 Z1 Q+ m# G: M
Server version: 5.7.32 MySQL Community Server (GPL)
$ w& O" i2 U2 ?0 v" O
" g0 v1 J! T) Y$ s, ~Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
3 n* i( b' b+ a% f, X* w+ T  Z$ g) D6 P9 T0 L; d
Oracle is a registered trademark of Oracle Corporation and/or its, Y& ?( A! a' l
affiliates. Other names may be trademarks of their respective9 X, w& B8 h# p- Z
owners.+ W7 k/ ~2 g3 ~, c6 L

# w/ E! X7 e9 B5 g$ S. i) a7 L4 L+ xType 'help;' or '\h' for help. Type '\c' to clear the current input statement.+ h/ k0 r3 I1 G/ @' O- D1 @

9 u9 \9 F& S/ S2 Y+ Imysql> create database jumpserver default charset 'utf8';
1 M5 G+ k1 y. ~4 \  u; DQuery OK, 1 row affected (0.00 sec)
! L5 R4 q2 M0 Z7 G# R. G
2 m. ], f$ _, ?mysql> set global validate_password_policy=LOW;
, Y+ [; k* j! Z! o4 n- cQuery OK, 0 rows affected (0.00 sec)0 e* ^) I6 ^& C1 e  g" b. s; h
- ?- ]  y) q0 Z; u4 Y
mysql> create user 'jumpserver'@'%' identified by 'KXOeyNgDeTdpeu9q';; b/ M8 Z2 \2 ^' g) B, C
Query OK, 0 rows affected (0.00 sec)
* M5 I  [# n5 o! N5 K( u4 ^0 v
. i( ~7 P( V: m) s5 a  emysql> grant all on jumpserver.* to 'jumpserver'@'%';
" M5 Q8 m! \) [1 Z& q% hQuery OK, 0 rows affected, 1 warning (0.00 sec)3 p2 a" {, _- v% Z) X* O$ u

  k  n) L  t* [1 z$ E" r) V; S$ @mysql> flush privileges;" v* ?+ e3 @9 J
Query OK, 0 rows affected (0.00 sec)
& a8 N2 O" S& V7 r! b* Y* @% W6 _$ d8 P7 `! J
mysql> exit
$ X, H( }8 A3 x% J) m8 \- PBye
1 e( G3 k7 B4 F& P) W3 配置防火墙⚓︎
2 g7 ^- D/ F( g: @$ s( N: ~3 g/ k
4 m- R$ L+ P) ?firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.10.0/24" port protocol="tcp" port="3306" accept"
' ^0 h3 B) T5 \' _* P& yfirewall-cmd --reload
9 |! k. G4 ]# V1 t$ E' m+ H% u! a/ R8 @& G/ C: l5 _
 楼主| 发表于 2023-3-8 10:00:04 | 显示全部楼层
部署 Redis 服务⚓︎3 Y3 e8 P& x; H0 m
1 准备工作⚓︎8 \% {1 G, e  Z' H6 L, ^$ _3 A
1.1 环境信息⚓︎, _4 ], W7 p* H# }. @: M
Redis 服务器信息如下:' i- Z/ b% J6 @& D+ g4 A

9 X, e! Q0 u! X' j1 l5 U' l9 _) G192.168.10.11
) S  \1 A& c& ^& ~( B$ W2 N3 e5 r1.2 设置 Repo⚓︎7 ^$ t$ ~5 i9 ?/ l* T

1 G( d: _3 D! q! h& X) `8 Uyum -y install epel-release https://repo.ius.io/ius-release-el7.rpm) p, D3 t3 p. I6 q, h7 I5 G9 v6 ]+ e
2 安装配置 Redis⚓︎
, I" H( z6 w! |1 w  s" o. f3 T2.1 Yum 方式安装 Redis⚓︎
! r+ y' q* ]7 Y9 E' r3 \. O4 Z2 P: ?( y! t+ C
yum install -y redis67 G0 R9 Y8 c; q9 L! G
2.2 配置 Redis⚓︎3 f& s8 P, ]. l) e/ C
5 k* g- h5 M9 D/ j' Z4 K7 N
sed -i "s/bind 127.0.0.1/bind 0.0.0.0/g" /etc/redis.conf" w$ j0 q# U, |9 Y6 E  e4 c$ o  G3 w6 k
sed -i "561i maxmemory-policy allkeys-lru" /etc/redis.conf- x; v9 }1 k$ k. m9 {2 l/ M
sed -i "481i requirepass KXOeyNgDeTdpeu9q" /etc/redis.conf4 U0 A- P+ W# S2 K! E
2.3 启动 Redis⚓︎
5 V5 ^& H& Y6 U! j* k
/ I; T5 k5 E# L: Ysystemctl enable redis
% e) n1 V4 p: U7 v& a! ssystemctl start redis% O% Z; U9 @% `  u8 p5 Y+ ]; ]7 d) W
3 配置防火墙⚓︎2 o4 l- p& f% g3 Y4 V
& t7 n) e: |7 `1 ^$ p) Y
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.10.0/24" port protocol="tcp" port="6379" accept"
7 `6 I3 m/ H; O9 Efirewall-cmd --reload
 楼主| 发表于 2023-3-8 10:00:05 | 显示全部楼层
部署 JumpServer 01 节点⚓︎) n, H1 G& I# c
1 准备工作⚓︎& B* N$ G% u1 X* Z& e6 Y. F9 \2 W9 I
1.1 环境信息⚓︎
4 m+ ?, z5 s3 I* _% RJumpServer_Node_01 服务器信息如下:
- a/ i: S5 G  k" U
1 W5 a2 G! `& O  Z192.168.10.21
9 L/ p4 e9 D! Y0 ^' y* \2 配置 NFS⚓︎
3 M- ~7 @' @: F3 s8 F6 a2.1 安装 NFS 依赖包⚓︎
0 ~6 b, y$ Y# Q" g
' z' R2 x- w) [3 wyum -y install nfs-utils* I. ~2 U6 y" X2 x' ?: k) n
showmount -e 192.168.10.11
- ]( d* g  A/ ~2.2 挂载 NFS 目录⚓︎
2 G# f' |& i8 M1 ^$ o5 _) X0 \& V# j  ^; K! I# Y. l* w* m
# 将 Core 持久化目录挂载到 NFS, 默认 /opt/jumpserver/core/data, 请根据实际情况修改
. N3 z; I5 ]" J4 \2 D# JumpServer 持久化目录定义相关参数为 VOLUME_DIR, 在安装 JumpServer 过程中会提示/ L" X6 F5 E6 U/ f# G% P
mkdir /opt/jumpserver/core/data
! D  b6 q  g% e6 [% Nmount -t nfs 192.168.10.11:/data /opt/jumpserver/core/data
) ?4 n* F3 q6 f; A$ f2.3 配置 NFS 共享目录开机自动挂载⚓︎
8 U1 H# ~) Y  G% C0 N& p2 l; F# V+ f. |8 M
# 可以写入到 /etc/fstab, 重启自动挂载. 注意: 设置后如果 nfs 损坏或者无法连接该服务器将无法启动# X; l3 a) N  V6 I
echo "192.168.10.11:/data /opt/jumpserver/core/data nfs defaults 0 0" >> /etc/fstab
, ?3 s8 Y( W7 X3 安装 JumpServer⚓︎
. u! N, E5 a! C! S. E4 E* w& F9 O3.1 下载 jumpserver-install 软件包⚓︎, H& J1 X( Q, i+ X. D
4 B" U; @. O; B* O4 T& i
cd /opt! P. c' ^5 b4 k, @* N. E
yum -y install wget! p. V& d! |! h4 w+ J
wget https://github.com/jumpserver/in ... aller-v3.0.3.tar.gz
+ s7 S$ T4 w( U1 F! etar -xf jumpserver-installer-v3.0.3.tar.gz
, w4 _; r0 q, R! w, h8 kcd jumpserver-installer-v3.0.3
) {$ b/ M1 @3 ^9 v2 z0 Y; A3.2 修改临时配置文件⚓︎& K! T& k* f! y4 M
! k) B5 a7 H. d. g2 X& R
vi config-example.txt( B  @8 u8 W5 d2 h

4 _3 W& K9 @1 A, N- g# 修改下面选项, 其他保持默认, 请勿直接复制此处内容+ U/ \" @+ P; R
### 注意: SECRET_KEY 和要其他 JumpServer 服务器一致, 加密的数据将无法解密  w  v/ H5 w* V. J

& J/ B4 p3 M% @) I. M! h/ p- I# 安装配置
: ~9 C7 |/ {% x9 F  Z4 a### 注意持久化目录 VOLUME_DIR, 如果上面 NFS 挂载其他目录, 此处也要修改. 如: NFS 挂载到 /data/jumpserver/core/data, 则 VOLUME_DIR=/data/jumpserver
6 n" u3 w3 n" e7 D& l. ^VOLUME_DIR=/opt/jumpserver
0 m$ @% q% I! {( {
7 }/ j4 g- y( P7 F
. `. e" [7 o$ ?$ C- q# Core 配置' q" }! I# F! |2 X( t6 Q9 D
### 启动后不能再修改,否则密码等等信息无法解密, 请勿直接复制下面的字符串) ?; P9 y' a0 K9 `+ N: F" e0 v' l
SECRET_KEY=kWQdmdCQKjaWlHYpPhkNQDkfaRulM6YnHctsHLlSPs8287o2kW    # 要其他 JumpServer 服务器一致 (*)% c* b- i$ L; H4 U
BOOTSTRAP_TOKEN=KXOeyNgDeTdpeu9q                                 # 要其他 JumpServer 服务器一致 (*)
# ?3 J9 Q5 B/ h, G; J6 l$ @LOG_LEVEL=ERROR                                                  # 日志等级
8 u: b" y3 y# n  t# A# SESSION_COOKIE_AGE=86400, q& v$ q; |% q& U9 L' b0 E' l0 O' u
SESSION_EXPIRE_AT_BROWSER_CLOSE=True                             # 关闭浏览器 session 过期
; `  L4 I  B* Z  u9 |  F) R# J7 w0 Z
6 d2 g$ Q+ ~, a6 R; ^+ `+ ^3 G# MySQL 配置
; e. C$ o, ^6 t2 g# \5 k, x7 l
* p8 S% n/ Y! I% V- q2 E" \2 fDB_HOST=192.168.10.11
4 V/ W. w& q0 A3 O! q* mDB_PORT=3306" \2 P6 |& K( x9 D+ \
DB_USER=jumpserver! T4 t9 J/ A3 H  H# R& B# l
DB_PASSWORD=KXOeyNgDeTdpeu9q
& B! z5 g" b% Z8 TDB_NAME=jumpserver. O* Y1 P! _/ `+ V. ^% ^
& K2 E- l$ p; o3 i, C, @
# Redis 配置
9 I6 B% Z; h2 U% \$ K9 p
: r: o4 y  ]7 }& pREDIS_HOST=192.168.10.11
2 o' h# @2 N' A2 g8 }7 |REDIS_PORT=6379  k: F8 f0 v" k7 J$ N  D" Q% O0 i
REDIS_PASSWORD=KXOeyNgDeTdpeu9q$ p6 O6 n3 O- o: u' v' M' s
) z7 t& N" N9 R8 F
# KoKo Lion 配置
! Q$ n  j- R* y$ F0 PSHARE_ROOM_TYPE=redis                                            # KoKo Lion 使用 redis 共享3 o3 B9 H3 \9 s! t6 `) P& `1 x2 Y
REUSE_CONNECTION=False                                           # Koko 禁用连接复用" P  @' n! `2 ]& k! X/ O
3.3 执行脚本安装 JumpServer 服务⚓︎
5 z& A9 M8 M. I' j7 S/ O3 M8 W0 m+ w& C) A) s& j/ R+ S* @7 r! L
./jmsctl.sh install) Z8 s, D% y& O' \# |0 b
/ G- t# x4 O9 b" O4 k3 A3 y9 [
       ██╗██╗   ██╗███╗   ███╗██████╗ ███████╗███████╗██████╗ ██╗   ██╗███████╗██████╗
2 H2 i, [0 o* I       ██║██║   ██║████╗ ████║██╔══██╗██╔════╝██╔════╝██╔══██╗██║   ██║██╔════╝██╔══██╗$ P4 s% M' {. ]# P, Y7 Y2 K  j* j
       ██║██║   ██║██╔████╔██║██████╔╝███████╗█████╗  ██████╔╝██║   ██║█████╗  ██████╔╝+ g" M, H4 S( w! F; `7 a( ?$ o
  ██   ██║██║   ██║██║╚██╔╝██║██╔═══╝ ╚════██║██╔══╝  ██╔══██╗╚██╗ ██╔╝██╔══╝  ██╔══██╗
- p  l8 B! f& H; d' ?9 ^$ ^# J2 F8 K  ╚█████╔╝╚██████╔╝██║ ╚═╝ ██║██║     ███████║███████╗██║  ██║ ╚████╔╝ ███████╗██║  ██║$ h' B  c$ G. H8 n
   ╚════╝  ╚═════╝ ╚═╝     ╚═╝╚═╝     ╚══════╝╚══════╝╚═╝  ╚═╝  ╚═══╝  ╚══════╝╚═╝  ╚═╝
8 l. ~/ h" ]# i; u* J
, e- h, Z- Q) K" f% o# p# z/ h                                                                     Version:  v3.0.3; I* `- Z; p& m4 Y5 q

* a- A) ^8 `: t) N; z2 I  n% X, Q2 |" w- b2 [
1. 检查配置文件; \& N( Q  E3 J- g2 c0 F
配置文件位置: /opt/jumpserver/config  Z5 S* d$ X2 l& H% }- a
/opt/jumpserver/config/config.txt  [ √ ]
# D8 U# c: s0 v; g1 Z/opt/jumpserver/config/nginx/lb_rdp_server.conf  [ √ ]! p& X6 N0 v! d# _
/opt/jumpserver/config/nginx/lb_ssh_server.conf  [ √ ]
! j0 H1 X1 v! S* n& R6 |/opt/jumpserver/config/nginx/cert/server.crt  [ √ ]% U) E4 m9 O  m) E
/opt/jumpserver/config/nginx/cert/server.key  [ √ ]
; M8 B5 f1 h8 u完成& e! g! s# b% I) T+ W4 _
1 M0 F3 N7 n# I6 B4 W
2. 备份配置文件
/ E! J9 e( W: A备份至 /opt/jumpserver/config/backup/config.txt.2021-07-15_22-26-13
+ g4 U- L5 W* F2 V完成
  `* W; e' j9 O6 O' c$ ^
: p" z5 Q; A; @! H/ j>>> 安装配置 Docker
8 `, ^9 a. d9 S( H5 V1. 安装 Docker. k" h9 y* X2 c$ J# P
开始下载 Docker 程序 ...
# x. h7 M4 u- e# U  @# o6 M开始下载 Docker Compose 程序 ...+ D; A- o! Y8 L. y1 v
完成2 {. @2 j* N5 O" @' a. y
: b9 Y$ }3 @8 I& w+ z
2. 配置 Docker7 X8 I0 s, ~. ]( m; H
是否需要自定义 docker 存储目录, 默认将使用目录 /var/lib/docker? (y/n)  (默认为 n): n( u% M4 m$ c' g2 C* X5 T
完成% c$ r7 E+ a: m, t
3 D8 A/ z- l  b+ ]" o' R  d9 m
3. 启动 Docker
# }0 N1 D- E7 i) }+ S4 tCreated symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /etc/systemd/system/docker.service.3 z4 D# ~$ s! |* T' S
完成
7 w  @9 j- Q& r4 `$ i1 k& _" i" ~; m6 Q! j# a$ M! F2 m/ q/ e
>>> 加载 Docker 镜像
/ i/ a* b" F, D6 X3 u% X; QDocker: Pulling from jumpserver/core:v3.0.3         [ OK ]4 n, X* X- _5 a8 ]' R
Docker: Pulling from jumpserver/koko:v3.0.3         [ OK ]
2 l' d$ X1 @* o0 d* W7 ZDocker: Pulling from jumpserver/web:v3.0.3      [ OK ]
8 p! B/ H# ?4 m$ g6 MDocker: Pulling from jumpserver/redis:6-alpine      [ OK ]
: u! f; D, ^% {, I# UDocker: Pulling from jumpserver/mysql:5             [ OK ]
; ]4 z: W1 x6 p; [Docker: Pulling from jumpserver/lion:v3.0.3         [ OK ]
  S" T0 o1 T2 O1 n  f& [
. Y/ A' H9 J& i>>> 安装配置 JumpServer+ L% `9 h/ }. d& s
1. 配置网络, b7 u; N* Y0 j# L& k. P1 I
是否需要支持 IPv6? (y/n)  (默认为 n): n
# ^6 g6 F2 ^7 Y" B; o完成
9 j' q+ P: u  \1 M: y4 R2 u4 u+ H9 f* g( }: }( ^1 q& z
2. 配置加密密钥* C* x0 y7 f1 Z4 f0 P
SECRETE_KEY:     YTE2YTVkMTMtMGE3MS00YzI5LWFlOWEtMTc2OWJlMmIyMDE2- X2 }3 T) p0 }0 A
BOOTSTRAP_TOKEN: YTE2YTVkMTMtMGE3
$ L+ q* f; q" q+ d, _5 x+ W完成9 X  x* A( f/ a1 A
' C% E% }2 B0 W8 m6 q, H
3. 配置持久化目录6 x+ L/ g) |* J1 q
是否需要自定义持久化存储, 默认将使用目录 /opt/jumpserver? (y/n)  (默认为 n): n
  B+ r$ E* p/ `7 q# V$ v- @# p) p完成
3 ^' U% y) r2 \! |  y* m) d+ ^8 c& X8 {3 n0 F8 q; v) [6 [7 s" ?
4. 配置 MySQL" l  a$ [+ t' b  u
是否使用外部 MySQL? (y/n)  (默认为 n): y
0 i1 P- C( `( H; @) h) F! T请输入 MySQL 的主机地址 (无默认值): 192.168.10.118 e. ^1 B; X8 H9 e8 I3 S
请输入 MySQL 的端口 (默认为3306): 3306
9 s! q' P, g* u; O0 g请输入 MySQL 的数据库(事先做好授权) (默认为jumpserver): jumpserver) E1 b$ O9 T2 f% _" N
请输入 MySQL 的用户名 (无默认值): jumpserver  l. N7 }' t9 H6 p
请输入 MySQL 的密码 (无默认值): KXOeyNgDeTdpeu9q
" r2 i2 i+ z! z% N1 t8 I, i0 F完成
8 C, ^% X; j" z$ o+ w9 d( `
; m3 t* ^- q4 P5. 配置 Redis
# w. I  S- j9 m* N2 A; `是否使用外部 Redis? (y/n)  (默认为 n): y3 O# U2 Q& D  c  C2 W' s
请输入 Redis 的主机地址 (无默认值): 192.168.10.11. Q% U( Q. M, ^3 l2 w% h
请输入 Redis 的端口 (默认为6379): 6379
5 x6 u; v( R1 v1 n: U  S请输入 Redis 的密码 (无默认值): KXOeyNgDeTdpeu9q
' F% ~1 l; c' h( H: ^, |; e完成$ F' `5 i' s! W& `' t

4 f: v) ?( h% }: A6. 配置对外端口
3 w% b6 s: j- e' Z6 K& S/ ^  T8 S7 T, l是否需要配置 JumpServer 对外访问端口? (y/n)  (默认为 n): n
$ x) k. g3 x! y' n; t! r, B; c完成" ^3 ]' C2 k0 h: p
. _0 Q! M, v' Z/ s
7. 初始化数据库
6 L- r% \6 R9 }6 J9 \' M/ mCreating network "jms_net" with driver "bridge"
8 S3 ]$ N+ [/ g$ d7 rCreating jms_redis ... done& w1 G) |" U, k: c
2021-07-15 22:39:52 Collect static files
; n( i0 t2 n' R) h6 J2021-07-15 22:39:52 Collect static files done( R0 J; {& |- y6 r: o
2021-07-15 22:39:52 Check database structure change ...
6 h( R. J1 G6 O2021-07-15 22:39:52 Migrate model change to database ...1 g3 Q3 `. Z; O; k8 t" k% ^

0 s+ @8 v* b6 j/ [4 L4 F6 K475 static files copied to '/opt/jumpserver/data/static'.. N" H: D4 b" ^; @2 U+ o! [
Operations to perform:/ {& O; s/ d+ `/ y
  Apply all migrations: acls, admin, applications, assets, audits, auth, authentication, captcha, common, contenttypes, django_cas_ng, django_celery_beat, jms_oidc_rp, notifications, ops, orgs, perms, sessions, settings, terminal, tickets, users
9 b4 W4 @- I+ A2 X7 s: [  @% [" ARunning migrations:0 m& M6 X4 w. |+ K
  Applying contenttypes.0001_initial... OK7 s8 |, f7 F2 k/ }9 T
  Applying contenttypes.0002_remove_content_type_name... OK+ {( x4 B7 A. B" U5 ^3 Z2 Q: R+ D% Q
  Applying auth.0001_initial... OK) `* E8 U  e8 j
  Applying auth.0002_alter_permission_name_max_length... OK
1 K5 ~. ^: M- M: L! }  Applying auth.0003_alter_user_email_max_length... OK5 K; f! w: S' h: d. p
  Applying auth.0004_alter_user_username_opts... OK
% c. a0 I# z8 v; v7 u7 X  Applying auth.0005_alter_user_last_login_null... OK3 E, f8 O) i+ c3 B+ A. p
  Applying auth.0006_require_contenttypes_0002... OK
, l, c( g4 Y4 j  Applying auth.0007_alter_validators_add_error_messages... OK  z% q9 G' q( m9 N' s. @5 d4 B$ x- D0 }
  Applying auth.0008_alter_user_username_max_length... OK1 S& u4 b5 ?! v+ x  C! D% H' {; L
  ...+ u3 D( l: x) {5 s
  Applying sessions.0001_initial... OK( _) r# c/ D0 E
  Applying terminal.0032_auto_20210302_1853... OK. Q: f9 P9 q8 M, t1 ]1 [  w1 ]5 c
  Applying terminal.0033_auto_20210324_1008... OK
1 y+ Q; W% t6 U+ n2 Z$ H) ]" T  Applying terminal.0034_auto_20210406_1434... OK
1 `* Y) U9 i' J9 |  Applying terminal.0035_auto_20210517_1448... OK
7 g) i5 Z" g/ M5 \8 W; ~  Applying terminal.0036_auto_20210604_1124... OK
: m3 n: t) {3 a7 |. J  Applying terminal.0037_auto_20210623_1748... OK. L6 V4 m: v6 t: Z+ |
  Applying tickets.0008_auto_20210311_1113... OK
" d8 @4 K9 H4 \( K  Q  G1 w: y  Applying tickets.0009_auto_20210426_1720... OK
* T: e0 D+ n% p- z) U/ w
3 o/ v5 x' l1 G1 r+ P' j>>> 安装完成了3 t8 O; g& b5 w. i. c
1. 可以使用如下命令启动, 然后访问1 ]  t' c) E+ e. Q  [+ ]$ V
cd /root/jumpserver-installer-v3.0.34 y! a' d/ O& z! v$ V5 V1 e: ?# E
./jmsctl.sh start
6 \* q, W' y- r2 R* W
( E9 S# S; p! p1 C2. 其它一些管理命令
' Q0 s0 `! p: T./jmsctl.sh stop, m9 w: E, D& Q6 c# |6 B
./jmsctl.sh restart% z, q* [2 E7 Y3 z8 C  c
./jmsctl.sh backup
9 a. g- r4 V6 D. v./jmsctl.sh upgrade
  R' h& I  Q  V6 q* d' i0 e, P更多还有一些命令, 你可以 ./jmsctl.sh --help 来了解" `' X! R7 h) k: [  h: v+ M  ^4 L" v
6 M1 Z$ h; H7 Z. Y5 [
3. Web 访问3 l8 ~# }6 o* j8 A
http://192.168.10.212:80
- f& P  A7 o  @& d% R默认用户: admin  默认密码: admin
: J+ v8 {/ M: n8 ^! y9 S7 x+ Y( M+ ?, e$ k' x/ r8 p
4. SSH/SFTP 访问
! _- w, r  O$ _( jssh -p2222 admin@192.168.10.212
: q7 v4 x3 ?) ^9 Osftp -P2222 admin@192.168.10.212
5 j; {. ^8 b( R# x7 p0 R
( Q3 X" u" B  h  B7 W5. 更多信息
! X$ H5 O6 `" f我们的官网: https://www.jumpserver.org/2 e( e4 I; L; C: Z
我们的文档: https://docs.jumpserver.org/
( D' G% J" R0 G: {+ E3.4 启动 JumpServer 服务⚓︎
; \! p, Y; q3 O
8 I* |3 O1 L( r* w* e1 c./jmsctl.sh start
" R3 K4 O% O$ D, J
0 l1 T  Q9 Z+ ]3 \8 T2 T0 e% ICreating network "jms_net" with driver "bridge"
" l" F# U9 c4 g5 G1 S9 WCreating jms_core      ... done7 c5 d* S7 w/ |: F" Q8 Y4 \
Creating jms_celery    ... done
2 S# k2 q* a$ q1 k. GCreating jms_lion      ... done; B) p- ^- [0 X7 B1 T& d
Creating jms_koko      ... done' ]" H6 g( U9 v1 @$ r
Creating jms_magnus    ... done
3 J) q/ ~+ Q- s* `' yCreating jms_web       ... done' m- H$ F# {( G6 f; G( _

9 x( ~3 X; J$ e# E+ h  i
 楼主| 发表于 2023-3-8 10:00:06 | 显示全部楼层
部署 JumpServer 02 节点⚓︎: e! ~1 j4 ?3 z' m1 v* U
1 准备工作⚓︎
; z) W4 K- \6 h& A6 C% Y: l8 R" Z1.1 环境信息⚓︎
4 W% n# v& v+ E. @1 l; k* }7 fJumpServer_Node_02 服务器信息如下:
" Y; v7 b/ A5 r8 N. B! j9 t# T; `
192.168.10.22
, ~' [5 O# v+ j2 配置 NFS⚓︎
$ M7 ]  o& m+ [& \3 E. c+ `2.1 安装 NFS 依赖包⚓︎# g- G' v1 i4 R: [! z4 ?
7 D& ?4 g: q( S3 r6 \9 k, Y. [
yum -y install nfs-utils  a4 q9 |8 a2 L# ?2 U- O
showmount -e 192.168.10.11
% ^. G+ X9 f; \$ G1 o/ _2.2 挂载 NFS 目录⚓︎6 O2 l" E! [' O* c$ X  g7 g
" i& v' w' v, H& p* i
# 将 Core 持久化目录挂载到 NFS, 默认 /opt/jumpserver/core/data, 请根据实际情况修改
: n9 ^; v% o- P# JumpServer 持久化目录定义相关参数为 VOLUME_DIR, 在安装 JumpServer 过程中会提示! Z2 N5 k* S/ |& x, N$ V  Q/ [
mkdir /opt/jumpserver/core/data
! `* n8 E! C( C/ n4 T, ^mount -t nfs 192.168.10.11:/data /opt/jumpserver/core/data
+ }2 N) ^1 J4 E+ j3 k, ]: m2.3 配置 NFS 共享目录开机自动挂载⚓︎
# f5 O+ |1 H8 ~! c! X! p+ n5 O- r3 y' }. O7 h" j' C- v
# 可以写入到 /etc/fstab, 重启自动挂载. 注意: 设置后如果 nfs 损坏或者无法连接该服务器将无法启动
! t% o  I2 t/ @- K3 f" x( m, iecho "192.168.10.11:/data /opt/jumpserver/core/data nfs defaults 0 0" >> /etc/fstab/ ~2 q$ X1 l8 ?- z  T
3 安装 JumpServer⚓︎
! |8 k; e  `( k$ ]8 @3.1 下载 jumpserver-install 软件包⚓︎! ^$ G+ M5 a4 e3 g
$ z. W& O( _9 W6 m2 h
cd /opt
1 l( \0 M1 P+ }6 I+ M1 Eyum -y install wget
( n3 `: D6 k; U$ g+ j- @5 Nwget https://github.com/jumpserver/in ... aller-v3.0.3.tar.gz
$ |% g( Z- s9 h5 h1 y3 F9 ctar -xf jumpserver-installer-v3.0.3.tar.gz
0 U: O. M0 a1 C) gcd jumpserver-installer-v3.0.3
$ g; B# b4 v) ^$ h/ ~( p2 M3.2 修改临时配置文件⚓︎' i5 W) y$ \' N% r/ Q
1 y. f5 q# `5 M+ c4 ^5 Q& [3 Z5 H
vi config-example.txt# O4 R! ]; z; Q& z5 l# A  ~: a

! F. [2 _/ k5 ]8 A# 修改下面选项, 其他保持默认, 请勿直接复制此处内容2 A) u7 d6 ]' E. R9 w& T
### 注意: SECRET_KEY 和要其他 JumpServer 服务器一致, 加密的数据将无法解密" W* Z5 ^& m) D& e/ ?

9 W0 H! B/ E6 e9 q# ]# 安装配置
- @  A: B" _6 i. L: d### 注意持久化目录 VOLUME_DIR, 如果上面 NFS 挂载其他目录, 此处也要修改. 如: NFS 挂载到 /data/jumpserver/core/data, 则 VOLUME_DIR=/data/jumpserver
1 D& \0 l* \+ @7 AVOLUME_DIR=/opt/jumpserver
( E4 |$ a* w) a& b/ k1 j; l) d: A
+ x  i: s0 c1 A, O- j: v! Z! ]6 M: G% v& \
# Core 配置5 j$ [' r. A: l0 J2 s& _- R
### 启动后不能再修改,否则密码等等信息无法解密, 请勿直接复制下面的字符串; z, r+ X" o, U* D7 K6 J2 e6 K+ H
SECRET_KEY=kWQdmdCQKjaWlHYpPhkNQDkfaRulM6YnHctsHLlSPs8287o2kW    # 要其他 JumpServer 服务器一致 (*)1 B! N& X4 L" z, v1 S8 j0 s
BOOTSTRAP_TOKEN=KXOeyNgDeTdpeu9q                                 # 要其他 JumpServer 服务器一致 (*)
4 S3 M- G0 n: L/ f/ aLOG_LEVEL=ERROR                                                  # 日志等级
2 D/ z; R8 x: K# E, j( C# D# SESSION_COOKIE_AGE=86400' D( _5 W. H3 t2 i( }2 x
SESSION_EXPIRE_AT_BROWSER_CLOSE=True                             # 关闭浏览器 session 过期
4 K+ ?( \+ j! }3 x8 R# K) j! |) Y0 U0 D1 P( O( W
# MySQL 配置  B/ b, x4 [3 Q8 u0 m

5 m& ^& U# w3 r- X: nDB_HOST=192.168.10.11. v" T& ^  C1 }5 x9 O) l
DB_PORT=3306
7 }, i6 N! F: c8 g* {DB_USER=jumpserver
) E* A( }* _1 ^. gDB_PASSWORD=KXOeyNgDeTdpeu9q' w+ A( k; r$ I7 a
DB_NAME=jumpserver% C$ D* A! R. S; Y. D0 F% D# w

1 \: n7 A3 s1 T# Redis 配置
2 e) m) ~. Z9 ]' N3 W- Z: @# M) e; j; V* U1 g# l
REDIS_HOST=192.168.10.11
0 E8 q* K& D7 HREDIS_PORT=6379
8 Z" J( C- q3 G6 P' rREDIS_PASSWORD=KXOeyNgDeTdpeu9q
' Q3 ]) E  w% ]  l+ R+ x
; }5 a( u4 k! x! c1 S# KoKo Lion 配置
: s4 S" Y; a- k1 i0 zSHARE_ROOM_TYPE=redis                                            # KoKo Lion 使用 redis 共享
$ C- {) b& {: PREUSE_CONNECTION=False                                           # Koko 禁用连接复用
3 \, E1 j- ~+ b7 w9 A3.3 执行脚本安装 JumpServer 服务⚓︎' [0 Z5 J, E' w1 z

; C4 p+ Z2 F, R2 i' b./jmsctl.sh install
: y5 c' V' q4 f# }3.4 启动 JumpServer 服务⚓︎, m/ `+ R' x+ a( Y# b
$ `4 w$ m1 H; f4 G
./jmsctl.sh start! I& s7 e6 f4 L0 z, h, ?

$ ^: _  d% q, c4 W5 e5 u: KCreating network "jms_net" with driver "bridge"
+ Q) M" n+ m9 K5 ?" G+ t( rCreating jms_core      ... done
/ s( e4 k7 r& D& G) X( aCreating jms_celery    ... done
8 f& j/ l5 w; v) D8 W) O- |* |Creating jms_lion      ... done1 M9 F  Q" z4 v/ Z
Creating jms_koko      ... done
7 H- D7 G5 o" qCreating jms_magnus    ... done
0 k; J" M+ B9 K3 i' sCreating jms_web       ... done
4 f) R5 b8 B  O; W, c9 W2 `7 d5 Z9 B/ c, m
 楼主| 发表于 2023-3-8 10:00:07 | 显示全部楼层
部署 JumpServer 03 节点⚓︎
+ m1 g/ P0 o9 w9 A% i1 准备工作⚓︎: x5 g' x! j' A% Y) V, Y  U4 G
1.1 环境信息⚓︎4 B% M3 {7 [/ j/ |6 J/ }
JumpServer_Node_03 服务器信息如下:
  U( J- M7 f: s  X& ]$ Z$ \5 F, B; _9 y- v$ L) K- i$ i
192.168.10.23. Q& [3 V' {4 g. o: o
2 配置 NFS⚓︎" Y" B' g9 l3 v) u! y
2.1 安装 NFS 依赖包⚓︎
  ]6 _9 H7 D' d, P" p' E  o6 w( O3 r% z9 _( ]
yum -y install nfs-utils# i8 k) Z( q: x3 I/ f
showmount -e 192.168.10.11
2 X/ n2 M* A$ J- @+ ]2.2 挂载 NFS 目录⚓︎/ @; \$ v, h  v+ P+ K5 j
; B; H5 C8 g0 S& i; H) p% j; B
# 将 Core 持久化目录挂载到 NFS, 默认 /opt/jumpserver/core/data, 请根据实际情况修改
3 s0 U, E' z3 R/ j2 E. }  E# JumpServer 持久化目录定义相关参数为 VOLUME_DIR, 在安装 JumpServer 过程中会提示
, t0 {4 Y# z; Tmkdir /opt/jumpserver/core/data
# l3 o% q+ p0 \4 b$ Xmount -t nfs 192.168.10.11:/data /opt/jumpserver/core/data
5 o/ |2 K& K( O( I4 Y6 X2.3 配置 NFS 共享目录开机自动挂载⚓︎
' }/ O& S9 A( S8 Y. N
. c* y/ b; |! F# 可以写入到 /etc/fstab, 重启自动挂载. 注意: 设置后如果 nfs 损坏或者无法连接该服务器将无法启动
* `- l2 }" R2 u+ z, Iecho "192.168.10.11:/data /opt/jumpserver/core/data nfs defaults 0 0" >> /etc/fstab$ m/ P$ l% }5 m; y) g8 W
3 安装 JumpServer⚓︎
1 x& j, v* r3 T* `/ b2 c# j3.1 下载 jumpserver-install 软件包⚓︎  g* v7 \+ I( Z" Y- s  d
6 O3 G% u( _# F) s8 o" L4 b2 D) ^
cd /opt- u- |& d; Z1 d* J& Y- t
yum -y install wget. f+ _5 y! ?  _! ]6 H
wget https://github.com/jumpserver/in ... aller-v3.0.3.tar.gz
# m$ t7 t7 T3 Q* `, O6 ^tar -xf jumpserver-installer-v3.0.3.tar.gz
8 O& e  n* E+ D' o3 Pcd jumpserver-installer-v3.0.3
8 V5 T* Y* ^& Q5 Z7 T3.2 修改临时配置文件⚓︎
4 q0 H1 f' b& `- Q' k
2 Y$ v) p6 w" A, B7 n5 ovi config-example.txt9 g$ R' w0 E, s5 Q$ k
: O' V4 i6 |2 a9 Q9 v1 A  z
# 修改下面选项, 其他保持默认, 请勿直接复制此处内容4 A% u9 ]9 x' P# X' x& B
### 注意: SECRET_KEY 和要其他 JumpServer 服务器一致, 加密的数据将无法解密
' a, @& A. M. W, C* l1 _( r+ ]9 [+ ]
# B& J0 z; z9 s1 P# 安装配置
; O4 I9 N9 o; v: H### 注意持久化目录 VOLUME_DIR, 如果上面 NFS 挂载其他目录, 此处也要修改. 如: NFS 挂载到 /data/jumpserver/core/data, 则 VOLUME_DIR=/data/jumpserver7 S/ B# `" U# b
VOLUME_DIR=/opt/jumpserver' L, h) ~# j" S; _5 ~) F& }

  r9 _- C. r9 p; C$ Q4 G+ o
0 P8 ~5 O3 M" V$ y# Core 配置
$ Y8 u  F! C  Q7 i$ S0 R### 启动后不能再修改,否则密码等等信息无法解密, 请勿直接复制下面的字符串) j% U% f: L# V! A% h. c  \- z
SECRET_KEY=kWQdmdCQKjaWlHYpPhkNQDkfaRulM6YnHctsHLlSPs8287o2kW    # 要其他 JumpServer 服务器一致 (*)- U4 v( T/ B$ m
BOOTSTRAP_TOKEN=KXOeyNgDeTdpeu9q                                 # 要其他 JumpServer 服务器一致 (*)8 v8 m6 ~7 U- S4 W9 G$ Y; J9 u
LOG_LEVEL=ERROR                                                  # 日志等级+ M% m/ X- {& P% B4 l
# SESSION_COOKIE_AGE=86400
+ n$ K9 O% S7 s3 D$ k/ C, GSESSION_EXPIRE_AT_BROWSER_CLOSE=True                             # 关闭浏览器 session 过期; M* {9 X1 ?" @
9 {4 J& h1 u4 {) ~
# MySQL 配置3 l- k$ k: y3 R- V

/ _, w" H2 X# b8 v( ?8 DDB_HOST=192.168.10.117 v2 Y* G1 t) g& i2 b
DB_PORT=3306
9 d# R0 H$ Z9 e& ~7 uDB_USER=jumpserver6 X( ?4 l5 Q: t$ y/ X! B
DB_PASSWORD=KXOeyNgDeTdpeu9q
/ @9 u' o! Y7 [" w; C1 XDB_NAME=jumpserver
! ~3 b9 z/ n) c8 c9 B2 \% j) W0 n
! `. p, B2 n: n/ D& z# Redis 配置2 `6 J9 i2 o# ]
$ [$ N8 ~) D0 \# b: r8 \' c
REDIS_HOST=192.168.10.11
  \/ l9 ^! Z/ f' hREDIS_PORT=63791 i" O. {7 Q1 `5 w7 @
REDIS_PASSWORD=KXOeyNgDeTdpeu9q
$ x( @  B( K5 Z' N$ z7 l. W1 s# l4 p  M* y0 {
# KoKo Lion 配置7 P- F) ?! @0 B( D
SHARE_ROOM_TYPE=redis                                            # KoKo Lion 使用 redis 共享
) r1 g$ P& M) h3 b6 }9 d0 ~3 _7 D5 hREUSE_CONNECTION=False                                           # Koko 禁用连接复用2 ~2 `  J+ [1 F# V4 S" z# w6 F
3.3 执行脚本安装 JumpServer 服务⚓︎" z. V2 u- y* ]3 n$ S1 D4 ]
1 u+ }2 m. ?* q6 V5 z+ a1 j' U! _
./jmsctl.sh install
3 E! S- g' \) K0 M3.4 启动 JumpServer 服务⚓︎
, I( j, \* I- e- x
4 q4 @$ a0 G1 H; e/ m) L  d; P./jmsctl.sh start0 A$ L" R1 j& @9 O9 @
+ E/ W; q( f9 @& z4 v) Q9 n
Creating network "jms_net" with driver "bridge"
% f, F+ t; ]% X7 H2 C# I% KCreating jms_core      ... done% }0 X3 B0 g! S+ |
Creating jms_celery    ... done7 L- f- ^# p/ g4 d
Creating jms_lion      ... done# O: m) [' C; A; D5 b( h
Creating jms_koko      ... done
- z$ E+ W  e  m( m; SCreating jms_magnus    ... done5 x  k6 d* @/ q: ]3 K0 F" n
Creating jms_web       ... done3 e" P* A2 I# ~$ p% ^: ?0 k

# o" f* ~! y( i7 A
 楼主| 发表于 2023-3-8 10:00:08 | 显示全部楼层
部署 JumpServer 04 节点⚓︎, m/ b# J- g/ C8 f4 E
1 准备工作⚓︎
: O. A- W  `& u# i. P( N/ \1 u1.1 环境信息⚓︎2 Y5 \& A$ t- R: j
JumpServer_Node_04 服务器信息如下:
0 H& m7 A2 i: G7 A/ u
" {0 `/ x6 \( P% S$ ^+ L$ a9 }192.168.10.24
- o! q& q9 M+ ]" u1 e( `2 E2 f) Y+ A2 配置 NFS⚓︎4 i8 B* N- A; ]; d* \& O+ v" c
2.1 安装 NFS 依赖包⚓︎
  l4 R3 D% z. s$ _. }7 k! {# D2 _$ k4 M& i7 v. e% \, Y7 D
yum -y install nfs-utils
# K# ?/ Q+ \2 N" Kshowmount -e 192.168.10.11
  ~; P0 x! Q5 s: M& G7 ?2.2 挂载 NFS 目录⚓︎
, l/ ^: E6 s# R" y3 m2 I
' y4 K' e$ Q! I- k# 将 Core 持久化目录挂载到 NFS, 默认 /opt/jumpserver/core/data, 请根据实际情况修改
2 ~- `0 u! W1 N- @# JumpServer 持久化目录定义相关参数为 VOLUME_DIR, 在安装 JumpServer 过程中会提示. r: O8 S  D* t) a; A! R
mkdir /opt/jumpserver/core/data
. T9 y/ T& m  a( l0 Xmount -t nfs 192.168.10.11:/data /opt/jumpserver/core/data
6 I% z4 p' v6 V# c0 s2 m2.3 配置 NFS 共享目录开机自动挂载⚓︎# T4 ^1 s& L/ X4 z" {  u
/ k% ^1 N( S: v5 z0 A  _
# 可以写入到 /etc/fstab, 重启自动挂载. 注意: 设置后如果 nfs 损坏或者无法连接该服务器将无法启动
: Y6 S) k/ i- e: jecho "192.168.10.11:/data /opt/jumpserver/core/data nfs defaults 0 0" >> /etc/fstab
- O% d; d2 f/ k& h, t1 j: k3 安装 JumpServer⚓︎! |, Y( `* Q+ e  L; b1 V9 o
3.1 下载 jumpserver-install 软件包⚓︎6 l5 o* z  n1 J: p0 g) P

8 h- o. o/ W! Gcd /opt
2 j" d7 A) J& j, I! fyum -y install wget
: ^) `, e' D  @) G5 Ywget https://github.com/jumpserver/in ... aller-v3.0.3.tar.gz
/ l$ v, I: j$ `8 q$ a3 ~* Jtar -xf jumpserver-installer-v3.0.3.tar.gz
$ w( Z5 v" _) t* K# Ecd jumpserver-installer-v3.0.3
+ O+ ~3 r3 C+ F3 X3.2 修改临时配置文件⚓︎
' U% |5 I' |) Q( Q0 m9 B. w0 L8 F+ E  M; g
vi config-example.txt% h- u8 }8 M3 ~& W4 V) O  ~. {
. |2 i9 y1 {3 V4 x5 |
# 修改下面选项, 其他保持默认, 请勿直接复制此处内容4 O, F! t4 y5 X. N9 s9 I4 T8 M
### 注意: SECRET_KEY 和要其他 JumpServer 服务器一致, 加密的数据将无法解密4 o. u" a1 K8 N5 q. J

; o7 B4 m/ e7 e7 V5 o( c1 @/ h3 M# 安装配置! Y7 N7 }2 b  g* p
### 注意持久化目录 VOLUME_DIR, 如果上面 NFS 挂载其他目录, 此处也要修改. 如: NFS 挂载到 /data/jumpserver/core/data, 则 VOLUME_DIR=/data/jumpserver) C2 m5 ]  t% n1 ?& j& q* V
VOLUME_DIR=/opt/jumpserver) P  n/ N1 x7 P( t
( B3 Z# m5 d- u6 d# I* w1 Q$ o
) r4 }) t' G; M  p/ ^
# Core 配置: e6 J8 N' y) W
### 启动后不能再修改,否则密码等等信息无法解密, 请勿直接复制下面的字符串) _3 W; f: G7 T( o3 n6 I3 e
SECRET_KEY=kWQdmdCQKjaWlHYpPhkNQDkfaRulM6YnHctsHLlSPs8287o2kW    # 要其他 JumpServer 服务器一致 (*)
& U9 N) v, g0 w" s: ^' N* L) ?BOOTSTRAP_TOKEN=KXOeyNgDeTdpeu9q                                 # 要其他 JumpServer 服务器一致 (*)
3 P! O2 M4 \. h; h& C# V4 cLOG_LEVEL=ERROR                                                  # 日志等级
" n" z" r% ?# V. r# SESSION_COOKIE_AGE=86400+ r9 @  O+ B& s  s' l
SESSION_EXPIRE_AT_BROWSER_CLOSE=True                             # 关闭浏览器 session 过期
3 D* e8 T: W  x( R( Q0 b- h6 _  k  O5 b* p
# MySQL 配置: |2 [* C: K4 w6 v. N% y. ~

$ j0 n# r* Z! C7 oDB_HOST=192.168.10.11# k$ G2 ^: `8 z' t; U6 z
DB_PORT=3306
* e4 W' C/ B0 `. n9 ]4 aDB_USER=jumpserver
7 x4 N, P4 z  {1 n7 H/ |DB_PASSWORD=KXOeyNgDeTdpeu9q3 P0 y! S$ b9 _: z6 g
DB_NAME=jumpserver
0 {. k! Z# `" [$ ]0 k1 h* p. {3 U& O- ]
# Redis 配置
' C9 A! [- O1 d/ F/ q$ @* E$ p
2 j" @0 R; N* Q, O* pREDIS_HOST=192.168.10.11
+ w' [/ S0 u) {9 T7 AREDIS_PORT=6379: t6 V( E" |) \* d9 O8 h
REDIS_PASSWORD=KXOeyNgDeTdpeu9q4 L  Z; G" U4 D( I. P% d0 `

1 Y" U' g. K8 {7 L$ }' D. Q# g# KoKo Lion 配置
/ J! w% E' r  p! A, VSHARE_ROOM_TYPE=redis                                            # KoKo Lion 使用 redis 共享
$ s( a& d6 ~; ?2 U5 d; qREUSE_CONNECTION=False                                           # Koko 禁用连接复用
, ]3 g( ]6 G. a1 C+ @; }3 z! w3.3 执行脚本安装 JumpServer 服务⚓︎
/ [. A- m! h9 g2 K5 B. g( I
! ~3 m) c0 q0 M& J9 k3 e./jmsctl.sh install# U( j0 U$ ]! x- _. f8 J/ w4 S
3.4 启动 JumpServer 服务⚓︎0 w3 L$ J" `0 o2 B

" c( _' N, M5 S( ~( n./jmsctl.sh start' L7 u- X5 }' m

* C3 ~9 f7 D9 R9 u4 HCreating network "jms_net" with driver "bridge"
8 ^* S+ E/ g, W% ICreating jms_core      ... done
, r& d* c  }2 s- `  DCreating jms_celery    ... done3 }) I7 v: Y6 g7 g8 o3 Y
Creating jms_lion      ... done0 R0 f2 |5 n/ P; ?; s9 v& ]; b
Creating jms_koko      ... done6 ^9 [; I; i/ L' v4 }  k4 F. ?
Creating jms_magnus    ... done1 q0 g% X/ @: x7 L4 p5 ~
Creating jms_web       ... done3 L4 `  M) t; f5 e* U2 V3 j$ b
* o$ N# |$ {0 [1 T; k
 楼主| 发表于 2023-3-8 10:00:09 | 显示全部楼层
部署 HAProxy 服务⚓︎
$ }# M3 f  M( O' D; ^1 准备工作⚓︎
: K; K* s3 x4 ~6 G8 t1.1 环境信息⚓︎- w& _+ N! f9 j; F3 k
HAProxy 服务器信息如下:6 ^/ U  K6 e3 t  k$ s" D+ N: M

$ i6 ?; r0 O' b0 ]) j192.168.10.100" ~. O- ~. {8 |2 P: u- G3 d! o5 k
1.2 安装依赖⚓︎* d" R* \! _  e4 e/ N

9 X* @9 g) S7 m$ h5 ]7 [% Hyum -y install epel-release
- a9 V- B/ x6 l- R2 安装配置 HAProxy⚓︎
$ E- X2 K3 [. h% x; }% d9 Y4 n2.1 安装 HAProxy⚓︎
+ q8 B) T. |% g/ ]% R5 L& p) M# @. W
yum install -y haproxy
* l% D6 \% N& G3 D2 n1 G  o2.2 配置 HAProxy⚓︎8 P% \. [9 L9 r8 s# D
4 `7 M2 `9 A+ z. n; Q4 Z
# 打开 HAProxy 的配置文件
: ?) }, K) |, |4 x, j- {vi /etc/haproxy/haproxy.cfg/ L) q* T1 J; L/ Z. ~

$ c: U0 f: T4 f) G  y2 uglobal2 a9 C9 f' `# A  v% K& G
    # to have these messages end up in /var/log/haproxy.log you will
5 L0 x1 O. @" |/ G+ D) h    # need to:
8 I1 }+ ]9 U0 T. X    #2 _1 T, s: Y0 e) k" z4 ?5 g  m
    # 1) configure syslog to accept network log events.  This is done+ b# P7 g' h3 E& Y6 `+ [* C6 A6 G
    #    by adding the '-r' option to the SYSLOGD_OPTIONS in
6 f- Y1 @0 W  J9 l    #    /etc/sysconfig/syslog- k. b1 ~; z8 j: [6 h
    #8 K+ V. ?- V/ _# x+ P$ n* @. g9 f' V
    # 2) configure local2 events to go to the /var/log/haproxy.log; ^. y3 `& [& y
    #   file. A line like the following can be added to
3 i) K4 K  g( s; Z2 }" b    #   /etc/sysconfig/syslog/ p9 x' e& V7 ]! ~: m
    #6 M" J3 b* \8 U: F/ W7 F  R, _
    #    local2.*                       /var/log/haproxy.log6 v+ r3 z* V/ R
    #! m) w* k; Y& |$ z- D5 ^" H
    log         127.0.0.1 local27 K0 ]4 ]: J, L0 r( G( F5 F

* _  Q  g  ^5 n5 h    chroot      /var/lib/haproxy
& X  T1 c: ]. m2 T' `; c* ?    pidfile     /var/run/haproxy.pid% q# z9 V4 u+ k9 ~# M. |
    maxconn     4000
9 G8 h; b3 q* j" P, k0 D+ F    user        haproxy
( ~: U( ~0 S2 H8 N    group       haproxy
5 `4 \! c* ~+ r% l2 m+ W    daemon/ a2 M+ A& F/ h: H

4 _- {  b/ @4 r) l& F7 ^% W  Q    # turn on stats unix socket5 p$ X7 }- {: d4 T
    stats socket /var/lib/haproxy/stats
2 F  S) \+ b& k
  i# i( c$ F8 x5 S#---------------------------------------------------------------------7 G% K2 C- Y( _# M
# common defaults that all the 'listen' and 'backend' sections will
& i/ p! [$ f9 G5 r+ d# use if not designated in their block/ i- q/ Z( y% j/ L0 u( z$ g. b1 i
#---------------------------------------------------------------------
, C8 F+ c1 A5 ~( T0 N- H1 k% a2 v9 gdefaults- }4 m/ f$ L8 D' a6 ]
    log                     global- N) N  m0 y* `5 J7 G: w$ \( P
    option                  dontlognull
: k- c% T+ ~0 z    option                  redispatch
% Q0 s& c8 c& r( e    retries                 3
# L# F5 @  s0 l+ w/ O2 ~( J* U    timeout http-request    10s# I9 [. _0 u7 Y$ w2 v" t' M
    timeout queue           1m
7 D; [2 [: _0 C    timeout connect         10s
: x7 \) \; U  X* ^3 `  I4 p    timeout client          1m
  O+ F' i: ]4 G/ O5 ~7 N+ l    timeout server          1m
6 t' }% S% G3 N+ _) C0 s    timeout http-keep-alive 10s
: n: @" o/ w! f) y4 M    timeout check           10s
% N$ r' U, `! w1 ~5 q    maxconn                 3000: k; z/ l. ~) m) P! }

9 ~5 _4 Q! y$ m' hlisten stats0 O6 o( h1 I, @7 S: Y$ m. \
    bind *:8080
8 r' x$ \+ y7 s+ b    mode http  J& `: J% M! d1 b$ g$ E( S) g
    stats enable
! U" [. q9 y- P5 P( J    stats uri /haproxy                      # 监控页面, 请自行修改. 访问地址为 http://192.168.10.100:8080/haproxy" F& o. ?$ W# I" s6 J
    stats refresh 5s
" J& `  m  k# |% K/ B) i    stats realm haproxy-status
2 w7 N4 }% Y& {* Z    stats auth admin:KXOeyNgDeTdpeu9q       # 账户密码, 请自行修改. 访问 http://192.168.10.100:8080/haproxy 会要求输入
8 _, _0 D7 [3 Z' }. j5 T+ w2 P1 q1 z1 Y) \6 H
#---------------------------------------------------------------------
) n$ Z2 }7 Y) J# check  检活参数说明
9 N* y2 m7 Y- {$ U3 w/ C, \# inter  间隔时间, 单位: 毫秒
) R: @9 b7 Q7 }# rise   连续成功的次数, 单位: 次
& p* \0 E/ I. o1 G5 `# fall   连续失败的次数, 单位: 次
# s! e- u$ U, c8 h6 A# 例: inter 2s rise 2 fall 3
  R" j* b. v& u6 A/ z6 W. [7 F( N# 表示 2 秒检查一次状态, 连续成功 2 次服务正常, 连续失败 3 次服务异常
' Q* u; ]- ]' }( L# p#9 t% V: s' L+ i
# server 服务参数说明
+ |+ L: X$ ^: e, f# server 192.168.10.21 192.168.10.21:80 weight 1 cookie web01
9 Y6 o/ g: M) c: ^% b4 w5 n  u5 B# 第一个 192.168.10.21 做为页面展示的标识, 可以修改为其他任意字符串
- u  v5 k4 Q7 B# 第二个 192.168.10.21:80 是实际的后端服务端口5 {3 S$ z2 _& {& ?
# weight 为权重, 多节点时安装权重进行负载均衡% H% e. I4 Z+ ]1 p) n3 M
# cookie 用户侧的 cookie 会包含此标识, 便于区分当前访问的后端节点: U$ H% B6 p. @# o6 [: S7 p
# 例: server db01 192.168.10.21:3306 weight 1 cookie db_01
# }& z2 R& M4 Q#---------------------------------------------------------------------3 y/ @6 h' y$ {/ w. X

  @) w# e( R% v1 l6 Ilisten jms-web
1 D% c- h! I) R: G' b: M) q6 P    bind *:80                               # 监听 80 端口
& m% V! g4 b7 X; U/ y" }    mode http! [2 S( P, S4 s
& y6 U& [0 q: D  Q2 o
    # redirect scheme https if !{ ssl_fc }  # 重定向到 https
( D7 x" s9 @; e2 p) ?    # bind *:443 ssl crt /opt/ssl.pem       # https 设置
7 ^3 K" J, c5 r4 A) d) }) w6 r: x4 m( r
    option httpclose
! g5 Q1 ]1 ]' ]6 Z0 k; \    option forwardfor( ^. [: G8 _! d" K8 O
    option httpchk GET /api/health/         # Core 检活接口: c7 ^. t& `( C% g; W

2 x8 B* V+ j5 k) l' m" S# P  p( A    cookie SERVERID insert indirect
  W! N$ ?6 E/ w5 i! V    hash-type consistent9 H8 c/ Z1 }$ L: R1 I1 v9 s9 N2 a
    fullconn 500: }( Y2 e2 {4 }7 u: b6 X/ R
    balance leastconn; s/ \2 h" Z, n& U; u
    server 192.168.10.21 192.168.10.21:80 weight 1 cookie web01 check inter 2s rise 2 fall 3  # JumpServer 服务器
9 S! V3 \! ?/ w: B    server 192.168.10.22 192.168.10.22:80 weight 1 cookie web02 check inter 2s rise 2 fall 3
: |! v& ]% ?/ v+ |# ?& B+ N+ {    server 192.168.10.23 192.168.10.23:80 weight 1 cookie web03 check inter 2s rise 2 fall 3' a! Z5 p/ f# V& ~+ n
    server 192.168.10.24 192.168.10.24:80 weight 1 cookie web03 check inter 2s rise 2 fall 3! R( R  n4 _; w- y
" P) ~( x! R% z* Z) j. }5 A% G
listen jms-ssh/ Q; U' T+ |2 [. u
    bind *:2222  U3 X0 |. v' [2 [
    mode tcp) ^8 A: D2 n, n6 L; X  @* K8 \

( [3 s6 k2 F( L4 b+ Z: d    option tcp-check
) E3 k! T# G0 ?
+ @3 V' h& ?' L8 Y  T    fullconn 500
& }- p  [  a( y/ s8 ?! F+ a4 J    balance source
" z4 n5 u! l4 C  s    server 192.168.10.21 192.168.10.21:2222 weight 1 check inter 2s rise 2 fall 3 send-proxy
& B( r* c; n5 z" s# @( H4 M4 M0 ^/ `    server 192.168.10.22 192.168.10.22:2222 weight 1 check inter 2s rise 2 fall 3 send-proxy5 \; U' `0 O! E0 O4 w1 y
    server 192.168.10.23 192.168.10.23:2222 weight 1 check inter 2s rise 2 fall 3 send-proxy
( P4 b$ Y& Q3 a2 J4 p8 X1 \; \& s0 J4 g    server 192.168.10.24 192.168.10.24:2222 weight 1 check inter 2s rise 2 fall 3 send-proxy) m" B: K, a% F' ?4 j
8 k$ f: M  c7 O) o' u# s
listen jms-koko; N* {! f  d$ [7 B* c
    mode http
; [/ X  D5 M7 i/ |" Q/ v' V& z; w, y. G, B  Z' }- D2 X4 U+ n
    option httpclose
3 r% i) c& `- x3 A3 r' b    option forwardfor
9 K$ X7 u3 Q4 T+ e- P- _7 V    option httpchk GET /koko/health/ HTTP/1.1\r\nHost:\ 192.168.100.100  # KoKo 检活接口, host 填写 HAProxy 的 ip 地址: X' ]  w1 u& y# f  c

' ?" q/ F2 l: R  _+ S! P. U    cookie SERVERID insert indirect
- y- y9 g6 `4 O* E    hash-type consistent
2 `5 ~' q. O% W% |8 z7 d    fullconn 5006 a3 \% v& f. m
    balance leastconn
+ x5 p# _& g. M# v" l! f    server 192.168.10.21 192.168.10.21:80 weight 1 cookie web01 check inter 2s rise 2 fall 3- g* @7 J) d/ |/ x+ B2 U
    server 192.168.10.22 192.168.10.22:80 weight 1 cookie web02 check inter 2s rise 2 fall 3+ N+ W% |0 @' J! x) i& j
    server 192.168.10.23 192.168.10.23:80 weight 1 cookie web03 check inter 2s rise 2 fall 3
% `# c7 N' a$ R" [    server 192.168.10.24 192.168.10.24:80 weight 1 cookie web03 check inter 2s rise 2 fall 3$ t! v$ e: A4 R0 q  d. `
% u  G4 @0 o" |, D# Z
listen jms-lion9 z# J" R& m; L$ ]% r8 w) ?, ^5 m
    mode http$ \1 J& A4 Q5 p; e7 F: p6 X  ^" c/ b
+ y( ~& i5 W4 b# P% y
    option httpclose+ \' [9 v7 E1 g0 j: u4 T. \
    option forwardfor
2 h" p2 k) p+ T$ x' ~+ g$ V    option httpchk GET /lion/health/ HTTP/1.1\r\nHost:\ 192.168.10.100  # Lion 检活接口, host 填写 HAProxy 的 ip 地址
9 d) v% z/ o$ c# K% ]2 z0 H% D+ E: d6 v3 Y) ~; K9 K; w* X
    cookie SERVERID insert indirect+ }; K) c6 y) ^6 O
    hash-type consistent. z4 k3 l5 C; W# Q- x* r
    fullconn 500
7 S" |' M6 u0 Z! \) H+ m( o    balance leastconn
& E7 A% u: F" I' p( t" F    server 192.168.10.21 192.168.10.21:80 weight 1 cookie web01 check inter 2s rise 2 fall 3
1 p  t9 N- @& r& ]% E) G" G+ \    server 192.168.10.22 192.168.10.22:80 weight 1 cookie web02 check inter 2s rise 2 fall 3. K7 n' Z8 y. L$ y7 [2 P
    server 192.168.10.23 192.168.10.23:80 weight 1 cookie web03 check inter 2s rise 2 fall 3
% a9 k0 O% O  q) Q! b2 l5 h    server 192.168.10.24 192.168.10.24:80 weight 1 cookie web03 check inter 2s rise 2 fall 3
' b2 C5 D- b3 G, x) ^& ~# R1 X* w2 B: O: O. S- b) b5 q' D/ q
listen jms-magnus9 ?  j6 v' c7 |) u
    bind *:30000  s3 b' p# i/ c8 `
    mode tcp) k/ I0 }3 }/ x, F) C5 X

0 P  E' T- }& ?    option tcp-check: X- i7 A: N/ h1 @1 P. y

- Y: W- r& g: x) J* f& k    fullconn 500+ P1 i) P) _( f. r! y2 S' `
    balance source
* S$ S  j/ G0 J: ~$ S# f8 b/ x: f    server 192.168.10.21 192.168.10.21:30000 weight 1 check inter 2s rise 2 fall 3 send-proxy
5 d9 m% ]  |6 O# |# |    server 192.168.10.22 192.168.10.22:30000 weight 1 check inter 2s rise 2 fall 3 send-proxy7 J: s* M) ^6 n% e1 o# A8 h! h/ r
    server 192.168.10.23 192.168.10.23:30000 weight 1 check inter 2s rise 2 fall 3 send-proxy) c( m% k  d2 V1 a9 R% M# k
    server 192.168.10.24 192.168.10.24:30000 weight 1 check inter 2s rise 2 fall 3 send-proxy' |% Q  m/ s% h1 R' a3 o- t
2.3 配置 SELinux⚓︎
: r$ f6 [( V' `9 C1 r( ^9 V0 U' U" k$ K$ Y+ x3 `; p  s8 U
setsebool -P haproxy_connect_any 1: f$ c1 Y. J, a3 p3 |
2.4 启动 HAProxy⚓︎
% |0 f0 y! T4 E
4 k& d4 m: b2 A5 f1 G1 wsystemctl enable haproxy
- Q, s2 x, n& m, |* {: Zsystemctl start haproxy. O9 \3 I2 Z% W+ l( A
3 配置防火墙⚓︎8 B% {; h9 |) J8 K2 P
( w5 [) x4 T. z' q4 a! }7 z
firewall-cmd --permanent --zone=public --add-port=80/tcp
% I& t2 M* x( Ufirewall-cmd --permanent --zone=public --add-port=443/tcp
& K6 e' m1 y& k+ N$ A& `+ Xfirewall-cmd --permanent --zone=public --add-port=2222/tcp
5 t* m, R3 w/ D# F& ]. U# }firewall-cmd --permanent --zone=public --add-port=33060/tcp3 O& g- ?9 i$ B8 x9 G+ ^
firewall-cmd --permanent --zone=public --add-port=33061/tcp
* J! `1 r6 s# F: yfirewall-cmd --reload8 C& w0 h1 J) _# g

- f, u$ T! z' p% _( v; S
 楼主| 发表于 2023-3-8 10:00:10 | 显示全部楼层
部署 MinIO 服务⚓︎
! N" j: I; X$ Z, H; k提示* a5 y% _3 U% a  K
& d* h; z1 b4 |" c
集群部署请参考 (http://docs.minio.org.cn/docs/ma ... de-quickstart-guide)
7 d/ A' P. P4 R+ X& ~1 准备工作⚓︎
3 L! ?3 H& c5 d3 M; `1 G1.1 环境信息⚓︎* X/ A) S$ |0 a6 |6 {
MinIO 服务器信息如下:
  g4 g# s1 p1 E& k: x0 P# t# f1 q' y$ O0 ~4 B1 [7 @' v% ~9 r5 {
192.168.10.41  ~/ y( l( e3 a. C$ B. u
2 安装配置 Docker 环境⚓︎
$ Z- B) r7 D8 `# s+ j2.1 安装 Docker⚓︎9 J3 N% h7 [: H

+ {4 y! m- T7 w3 Z$ |yum install -y yum-utils device-mapper-persistent-data lvm2
. f0 s( W) d+ ^2 r+ qyum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo! I" ~; i# ]9 w+ |' e" I3 H* Z7 q
sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
. J* f, w! T9 c0 q% E3 D$ vyum makecache fast
, o; v5 W- ?& q5 kyum -y install docker-ce
: G5 `2 P) E! ?* ?3 j2.2 配置 Docker⚓︎
( B: ^8 f. \0 g* ]
/ o; u! E) X  {( T4 `  b2 I3 |- q% `mkdir /etc/docker/
$ Q: h- e7 v( j* T( f! `vi /etc/docker/daemon.json# J' y: ^7 v0 c
% ~, n. A6 S7 C" f2 p
{4 P% }& a1 k, [, o  `
  "live-restore": true,
$ V; o9 `; e! v/ U! C9 P* b  "registry-mirrors": ["https://hub-mirror.c.163.com", "https://bmtrgdvx.mirror.aliyuncs.com", "http://f1361db2.m.daocloud.io"],2 U$ j: ]# x  m+ D6 F4 r( {
  "log-driver": "json-file",
# p! t( ?# ~% q+ h+ V  \$ G* j  "log-opts": {"max-file": "3", "max-size": "10m"}
& [1 F! u' K. X8 K. q8 _# l1 _* [}" @6 R# a4 v/ d9 d4 F
2.3 启动 Docker⚓︎
# c1 _4 {8 Q) |1 L# A) L+ Z, v! Y' X. j3 J4 p5 D& l
systemctl enable docker
! X1 L" @) e+ O* s: B- V1 osystemctl start docker2 E2 b+ V9 A+ u
3 安装配置 MinIO⚓︎
0 R: S% m1 E, n3.1 下载 MinIO 镜像⚓︎
) V: L  A: ^, L' E' S
1 ^& ^! O+ A' m3 D  Cdocker pull minio/minio:latest
6 p" R, ?, E+ g8 Z% [& x5 V$ ~- ?0 d" n! w
latest: Pulling from minio/minio
& \1 Z! M1 Z1 l9 a, ba591faa84ab0: Pull complete9 B1 W3 q) u7 g9 `+ n! c, i
76b9354adec6: Pull complete+ e' l/ W! C6 N- j& C7 R
f9d8746550a4: Pull complete
% s# G) t+ B: O4 D890b1dd95baa: Pull complete/ q2 E& i* ]3 w" h7 ~! w
3a8518c890dc: Pull complete
/ A. g  P* v* S) _8053f0501aed: Pull complete
8 J2 H5 \6 n  ], ]506c41cb8532: Pull complete
2 U+ Y3 h# I% W* }Digest: sha256:e7a725edb521dd2af07879dad88ee1dfebd359e57ad8d98104359ccfbdb92024
0 N, Z* K8 o. E/ t8 g) z! k; oStatus: Downloaded newer image for minio/minio:latest
, q% J, P' m. C  i  N3 Ndocker.io/minio/minio:latest
: `8 P; |) ?5 M, F7 E3.2 MinIO 持久化数据目录创建⚓︎0 m" x: d- a( H2 k
2 p# w5 [% E5 [! M7 n' w( |) m
mkdir -p /opt/jumpserver/minio/data /opt/jumpserver/minio/config4 u3 \7 p. O5 }; }
3.3 启动 MinIO 服务⚓︎
4 O. w9 [- ]0 a7 C, X0 f
# l) F3 p: @4 d0 _## 请自行修改账号密码并牢记,丢失后可以删掉容器后重新用新密码创建,数据不会丢失
- M5 _& ?0 `+ J$ r7 [+ \( K# 9000                                  # api     访问端口$ {6 Y  _/ b" t. l  m# N% g
# 9001                                  # console 访问端口
/ q2 x' ?8 F; m: {  Q9 X7 J$ H. Z# MINIO_ROOT_USER=minio                 # minio 账号0 ~5 x, p, G- h. I4 t- j! h; x
# MINIO_ROOT_PASSWORD=KXOeyNgDeTdpeu9q  # minio 密码
$ w( c- P8 y5 r( _0 y( |8 x$ _) [+ \) A: e' Q
docker run --name jms_minio -d -p 9000:9000 -p 9001:9001 -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 --console-address ":9001". C+ S* N; f2 l+ D$ C1 ^  Y
3.5 在 MinIO 中创建 Buckets⚓︎1 X4 q* x- b; e* a5 q% Z$ c
访问 http://192.168.10.41:9000,输入刚才设置的 MinIO 账号密码登录。$ {' \# P" Q0 h: R
点击左侧菜单的 Buckets,选择 Create Bucket 创建桶,Bucket Name 输入 jumpserver,然后点击 Save 保存。
- D8 R7 b, E- J/ S: `% |' P3.6 在 JumpServer 中配置 MinIO⚓︎7 ~2 N& g( q" L1 o3 \: K
访问 JumpServer Web 页面并使用管理员账号进行登录。9 F; j: @- {+ ?1 \3 ~7 I
点击左侧菜单栏的 [终端管理],在页面的上方选择 [存储配置],在 [录像存储] 下方选择 [创建] 选择 [Ceph]
& v. e* _: c9 W# X6 }- R8 e1 M根据下方的说明进行填写,保存后在 [终端管理] 页面对所有组件进行 [更新],录像存储选择 [jms-mino],提交。
: h  O* {6 D, K  q' R6 O2 W( h选项        参考值        说明
/ d- K4 U# E  w! g  C8 k4 \9 R名称 (Name)        jms-minio        标识, 不可重复
0 ~8 |5 n+ h/ n/ a类型 (Type)        Ceph        固定, 不可更改1 Y& k  u% ], P* x+ }2 P
桶名称 (Bucket)        jumpserver        Bucket Name
" |* g& [& |) i4 O$ w. UAccess key        minio        MINIO_ROOT_USER6 g7 o* W+ w, w+ R: V3 c
Secret key        KXOeyNgDeTdpeu9q        MINIO_ROOT_PASSWORD$ m$ A' f! `) \- w3 ^2 Y
端点 (Endpoint)        http://192.168.10.41:9000        minio 服务访问地址* S' m0 X8 g+ K
默认存储                新组件将自动使用该存储, [  b2 ?9 K, y' o

' W* L% j" u# k& e7 V8 r
 楼主| 发表于 2023-3-8 10:00:11 | 显示全部楼层
部署 Elasticsearch 服务⚓︎. `+ c" r9 C, T; F( X
提示
2 q0 k% H! k8 o9 G) E* @8 G+ P, \8 S% K+ ]2 Y
集群部署请参考 (https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html)% A. C# B- P. T+ s6 N
1 准备工作⚓︎
. }! c4 @0 A0 j( x- x4 o  i1.1 环境信息⚓︎4 ?" G& [: L2 b  P
Elasticsearch 服务器信息如下:
4 J0 O2 L( q2 T- G( d
: c& f8 a, q4 a192.168.10.51
7 o1 i: v/ D& }1 U; E1 t" A' v2 安装配置 Docker 环境⚓︎
9 O) h- t4 r% [3 I8 ?2.1 安装 Docker⚓︎
7 x- Y* ]8 h  j- ~, C- j3 B( h4 G
9 z& P$ [# k& cyum install -y yum-utils device-mapper-persistent-data lvm2' ]/ X' v7 M9 _0 l
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
( y7 i. w! j+ d- Y; W4 Ysed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
8 R: U0 k  S+ O6 d4 J, m, A+ syum makecache fast( V; c9 X# R# A: B9 _
yum -y install docker-ce
: b' l& h: D0 Z) _% [+ o2.2 配置 Docker⚓︎4 e8 i4 [" X" h, c- P" w7 V

/ R4 M% u6 x. J. J% A! Fmkdir /etc/docker/
" {6 X0 e) v$ ~/ tvi /etc/docker/daemon.json
* E1 {9 K+ u* u5 p: Q
  d# O  f( t7 g. d. N{
- b& V8 U0 w: `, l( l( }. _  "live-restore": true,7 S2 p/ h+ n0 {0 }* H# e
  "registry-mirrors": ["https://hub-mirror.c.163.com", "https://bmtrgdvx.mirror.aliyuncs.com", "http://f1361db2.m.daocloud.io"],
( X8 e5 v) b. Q3 [  "log-driver": "json-file",
6 {: R) j& w6 c8 V( j4 f4 B  "log-opts": {"max-file": "3", "max-size": "10m"}- Q* J* ]1 U0 d5 \% @8 `, u/ A3 r
}' B7 F' E6 Z. x5 k3 d. f
2.3 启动 Docker⚓︎& q7 K/ ^1 S1 a

& S7 [0 l0 k  Vsystemctl enable docker
8 v+ r9 W- Y' ]. x" Dsystemctl start docker& V- t$ k% c; Y$ q4 W, |
3 安装配置 Elasticsearch⚓︎
0 l5 R) d, c9 C. ~3.1 下载 Elasticsearch 镜像⚓︎7 Y/ o3 K% e" s) x' j3 S& I' u7 o

! N# x( Y: N) M7 \/ wdocker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.6$ \) l, {5 M& t; L, _
" L& T- \5 Z1 e" ~
7a0437f04f83: Pull complete
) i) b% G: ^5 ]' O. ~7718d2f58c47: Pull complete
; ~6 J0 |. C. B( w* ?cc5c16bd8bb9: Pull complete/ {# f' d: b- J: p$ U$ g1 R" U
e3d829b4b297: Pull complete# N( T4 |8 X5 a, u
1ad944c92c79: Pull complete. x! P: V& F8 m
373fb8fbaf74: Pull complete( l! v' Q" l# J3 f; n- c
5908d3eb2989: Pull complete
0 X& [- {$ @/ S1 c* y4 `; |Digest: sha256:81c126e4eddbc5576285670cb3e23d7ef7892ee5e757d6d9ba870b6fe99f1219+ {* q- c9 A# M
Status: Downloaded newer image for docker.elastic.co/elasticsearch/elasticsearch:7.17.6  v# c9 r7 k( N
docker.elastic.co/elasticsearch/elasticsearch:7.17.6
6 B9 j6 k+ h& z" J9 Y/ O
& l3 n5 p; y0 w$ n/ h; e3.2 Elasticsearch 持久化数据目录创建⚓︎$ M4 ^' v, n4 D* W
+ q- u$ i0 N2 m  Q" ~9 p
mkdir -p /opt/jumpserver/elasticsearch/data /opt/jumpserver/elasticsearch/logs
4 }. [) U" ~7 ]; ?3.3 启动 Elasticsearch 服务⚓︎
" }6 M! r# e* }9 c7 M
, T/ @6 W4 J7 D9 P$ Y, C. n## 请自行修改账号密码并牢记,丢失后可以删掉容器后重新用新密码创建,数据不会丢失' q+ j+ I; y6 P& s! W0 F6 m, D; R& m
# 9200                                  # Web 访问端口
; ^$ C7 {7 y: Q; |1 [2 C# 9300                                  # 集群通信
7 |% E& \: ]7 C' }+ L# discovery.type=single-node            # 单节点8 }- V! A2 c: q, x: S0 i6 @8 ^9 T$ v
# bootstrap.memory_lock="true"          # 锁定物理内存, 不使用 swap! V2 f" E( ~+ e* y. P: @
# xpack.security.enabled="true"         # 开启安全模块
8 P* o4 Z1 Z3 e" N4 t. c3 J: m# TAKE_FILE_OWNERSHIP="true"            # 自动修改挂载文件夹的所属用户
6 s. F7 ~' y5 f# ES_JAVA_OPTS="-Xms512m -Xmx512m"      # JVM 内存大小, 推荐设置为主机内存的一半
2 B2 A5 ^  x3 E+ d+ R# elastic                               # Elasticsearch 账号
) h& o/ J* B. z' e1 `. `: T% y1 _# ELASTIC_PASSWORD=KXOeyNgDeTdpeu9q     # Elasticsearch 密码3 _; q: T+ b- s! b; @, P% U* @; X

4 T/ g) `2 G! c1 Ddocker run --name jms_es -d -p 9200:9200 -p 9300:9300 -e cluster.name=docker-cluster -e discovery.type=single-node -e network.host=0.0.0.0 -e bootstrap.memory_lock="true" -e xpack.security.enabled="true" -e TAKE_FILE_OWNERSHIP="true" -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -e ELASTIC_PASSWORD=KXOeyNgDeTdpeu9q -v /opt/jumpserver/elasticsearch/data:/usr/share/elasticsearch/data -v /opt/jumpserver/elasticsearch/logs:/usr/share/elasticsearch/logs --restart=always docker.elastic.co/elasticsearch/elasticsearch:7.17.6. C+ r+ g/ }0 g! `
3.4 在 JumpServer 中配置 Elasticsearch⚓︎
# |: G3 a& P# A$ E& m访问 JumpServer Web 页面并使用管理员账号进行登录。8 U( B2 f/ _2 x5 _/ z& l
点击左侧菜单栏的 [终端管理],在页面的上方选择 [存储配置],在 [命令存储] 下方选择 [创建] 选择 [Elasticsearch]
- I2 W  c& }7 k9 [1 Z, v根据下方的说明进行填写,保存后在 [终端管理] 页面对所有组件进行 [更新],命令存储选择 [jms-es],提交。
+ u' v# w7 K2 ~' l8 U, q; B) E2 P选项
5 C+ T% z" C: D5 E  [
 楼主| 发表于 2023-3-8 10:00:12 | 显示全部楼层
注意事项⚓︎! M) Z0 M% _- _9 P% ~2 T! _# ~7 j
1 关于集群模式的环境升级⚓︎0 a- M9 ?! @) C0 @: B) W4 v/ o6 G
更新前请一定要做好备份工作/ o5 A2 ^7 b5 B5 ~
; ^9 U; _* |, {2 `- h  e
升级前请关闭所有 JumpServer 节点。. `, z9 a! N# _/ ]( `8 ?$ O
在任意一个 JumpServer 节点按照升级文档完成升级操作。
7 L8 W; u) P# S6 E; b2 j$ G仔细检查该节点升级过程确保无异常。
6 z; m5 I  E  t然后按照升级文档对其他 JumpServer 节点升级即可。$ j, b% h! v* s; @1 c
从飞致云社区 下载最新的 linux/amd64 离线包, 并上传到部署服务器的 /opt 目录。
* n& n! h: U* |$ r7 u
" ~3 q# f6 T7 ^1 c4 tcd /opt6 u: v8 @( t( ~- D' A
tar -xf jumpserver-offline-installer-v3.0.3-amd64-246.tar.gz  [+ K: R# T$ g: F$ V
cd jumpserver-offline-installer-v3.0.3-amd64-246* m% e& j& Y+ ~8 Y$ c/ [

* y2 W. K7 _  u4 m, D( c/ w" c/ Y# 额外节点可以设置 SKIP_BACKUP_DB=1 跳过数据库备份, 第一个升级节点不要跳过备份3 D. m; o. Z* Q7 }5 T( |, l) d
export SKIP_BACKUP_DB=1# R. {( Y' }% A" i
./jmsctl.sh upgrade1 m+ L- c: X: y1 {. M+ N# n
./jmsctl.sh start0 b! o9 H3 i$ ^( W9 n& ]0 b
 楼主| 发表于 2023-3-8 10:00:13 | 显示全部楼层
在线安装⚓︎8 U7 J" u# Q* a- c' O7 c7 S5 p6 T2 }
1 环境要求⚓︎; Y; p1 ^* ~. o% x' D7 P$ M: q
Kubernetes 1.20+' s: e/ _0 G7 N
Helm 3.04 `* }8 q1 D. G# z- j. i* Y
2 安装部署⚓︎1 e/ ^, M7 F5 U" e# q5 ?" n
2.1 添加 JumpServer 的 Helm 源地址⚓︎
! i, ?% F3 F/ J1 k6 t; b. a, N: @, t4 t( E. @* k1 x; A4 V- `- x
helm repo add jumpserver https://jumpserver.github.io/helm-charts
4 q- C9 d$ U* r, m8 Chelm repo list
0 F( B2 K5 G' g; Z4 M, P: S9 w* o2.2 编辑 JumpServer values.yaml 文件⚓︎
. B9 Q# x& D* j# W6 x' {3 x/ ]  a& d& k$ ?" p8 D( E6 s# b
vi values.yaml5 f0 j* m9 ~% t* k; |
$ ^, g; O) g( d
# 模板 https://github.com/jumpserver/he ... pserver/values.yaml3 s. y" D  Z9 V" l
# Default values for jumpserver.
2 g. I7 C, b+ d8 c7 x7 J# This is a YAML-formatted file.7 H# t9 M) I8 n2 O! |0 o6 d
# Declare variables to be passed into your templates.
* ]$ k! W! H# }& H5 k, ~
( i9 C# l& t% F9 R# pnameOverride: ""
! T9 k  @8 y/ v6 O+ _/ k8 C4 E* `fullnameOverride: ""
$ }+ g4 W3 ?7 [
' c0 C/ d- q& J# P* D1 g## @param global.imageRegistry Global Docker image registry
9 }, M! `% Q/ y7 A## @param global.imagePullSecrets Global Docker registry secret names as an array: Q; u0 J$ Y2 o0 D4 I9 M- d
## @param global.storageClass Global StorageClass for Persistent Volume(s)
$ o+ _9 _: l3 z7 M7 J6 K) B0 r/ \0 ]' {## @param global.redis.password Global Redis™ password (overrides `auth.password`)
8 g  ~2 N8 A9 R9 j( B8 ~) Y##
0 O% T* d* e9 {  [global:; J( G& U8 Z& @1 ~  S
  imageRegistry: "docker.io"    # 国内可以使用华为云加速( N% d& \/ ]$ C) ?0 H
  imageTag: v3.0.3             # 版本号: w5 r, r' w4 y" j5 a3 y3 q
  ## E.g.& G3 y. o. E" _0 o3 z6 ^* A* E
  #  imagePullSecrets:" {8 l7 i+ n* a! l( ~, x
  #    - name: harborsecret
. e- Y. I; e/ {% o, J4 W  #; x: I6 B8 T9 Q* a1 O7 K
  #  storageClass: "jumpserver-data") }/ v6 Y( C' U: q1 h& H
  ##
4 M9 ]% y0 o3 a- u4 ]7 h  imagePullSecrets: []
5 g% [% M1 g4 ]% Z  Z    # - name: yourSecretKey/ k' E4 a9 o- {( y- J; M$ @
  storageClass: ""              # (*必填) NFS SC$ h2 j9 l+ |' _
' ?  M8 |2 u% V! M' Y, S
## Please configure your MySQL server first
% _% Z" h, V7 Y0 Y' c6 P' V, @7 o## Jumpserver will not start the external MySQL server.
- l6 Q# p% x0 e  X8 S6 e3 o" V### c5 }5 R6 x( R' I! V* x# P
externalDatabase:               #  (*必填) 数据库相关设置# D; J6 _$ s$ b+ z. B6 M
  engine: mysql
2 \3 P3 m( Y% x  w/ }% e9 X  host: localhost$ ?3 ]' c7 z  `5 k3 Y  k% q
  port: 3306
" ^) W# r% U+ ^! t' e  user: root
- R# t7 ~  R- Q, e  password: ""
' F5 |* ]2 F3 Q4 s( M) ?7 u  l  database: jumpserver0 m) j: u! C0 L: Z3 E
+ @8 y) _/ n. l) v
## Please configure your Redis server first
5 K# ^) k+ G! \- j## Jumpserver will not start the external Redis server.) y8 n* O6 q% C9 w# ~2 w
##
1 Z. x, {& w) ]. yexternalRedis:                  #  (*必填) Redis 设置3 v- n1 F2 g* F- w3 e5 b2 F' C6 e
  host: localhost' U  t# u6 Q& h8 ~7 ?/ U1 C1 I
  port: 6379
1 `4 E2 e/ w9 @  password: ""; F' t) ?' x3 i0 w8 F7 p# A

/ f) c* c2 p) r8 [; w" Q9 pserviceAccount:
8 `1 O! c% ?9 o1 e0 E  # Specifies whether a service account should be created* n  a  p+ H: \2 P* {
  create: false
1 H' R: I5 M3 ?! H9 j1 R  # The name of the service account to use." y7 G0 T$ |- x
  # If not set and create is true, a name is generated using the fullname template
. M$ i/ Y8 v7 k& v  r+ B  name:
" Y) S! d$ i! }5 e
6 h% ]5 S6 r; hingress:- L$ I3 B. u# a( A' J
  enabled: true                             # 不使用 ingress 可以关闭- Y$ D( l. P0 S1 ]
  annotations:8 w( \5 z; S) q. j8 U
    # kubernetes.io/tls-acme: "true"3 w- T/ a4 _+ y' f) N( t3 W
    compute-full-forwarded-for: "true": V! H, C4 x5 a& F/ `9 P
    use-forwarded-headers: "true"
& |9 U0 i& c& Z4 I    kubernetes.io/ingress.class: nginx
  I) J: m; Z! @  j6 k: n% T    nginx.ingress.kubernetes.io/configuration-snippet: |: x( H  @& j* O8 {: {+ A
       proxy_set_header Upgrade "websocket";5 {$ m6 |7 G# P; B6 i3 v. u% A& t
       proxy_set_header Connection "Upgrade";: n2 W: q, q+ x
  hosts:  C( X  g8 H& v" a; C! l  J5 W. u2 ^
    - "test.jumpserver.org"                 # 对外域名  R% Y# [: {' I6 S
  tls: []4 f. d  d- M$ X; {! j
  #  - secretName: chart-example-tls
7 v: n( X. }* n3 u  L  #    hosts:
1 {6 p' c' F3 G+ K  #      - chart-example.local5 m$ A! E# p7 u% I# y

" s: q% P# @% ^. f" Zcore:$ S4 D$ P& D! N5 e3 A
  enabled: true
- q, Q  Z' j/ n, T- H; p) _& K
( p$ u. z( r# l, q  labels:
5 f7 t5 n$ E8 J2 V* O: ~/ J    app.jumpserver.org/name: jms-core$ F; O+ T9 A, D& D) R7 R+ v0 l+ n2 l
- ?: D4 ^! A+ M& m
  config:: v. o+ w6 G2 R5 h% C4 j+ a! W
    # Generate a new random secret key by execute `cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`
  L& ]1 g* T" b3 A9 a# L# `    # secretKey: "B3f2w8P2PfxIAS7s4URrD9YmSbtqX4vXdPUL217kL9XPUOWrmy"; G( y( Q; r8 E* |0 l" z- I
    secretKey: ""                            #  (*必填) 加密敏感信息的 secret_key, 长度推荐大于 50 位, x' V- Z' d6 S
    # Generate a new random bootstrap token by execute `cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`
5 F' f9 [! U- W' H    # bootstrapToken: "7Q11Vz6R2J6BLAdO"
7 P+ Y8 G0 W3 `" L* N' N& Z    bootstrapToken: ""                       #  (*必填) 组件认证使用的 token, 长度推荐大于 24 位9 H) Y. g% e2 x9 y' \& t
    # Enabled it for debug
, Y2 T# D5 J: }; ?' \; i& }7 k5 U4 Y    debug: false
4 x9 b( h3 `! M6 H- \3 ]6 q& ~. r    log:9 r$ n- }. b2 @) c3 P
      level: ERROR
3 n, ~6 L7 Z% N) j: L4 o
; H) A" Q- m0 y6 M5 a7 `  replicaCount: 1
& e' `3 N* R1 K& b) g- c4 H& o+ F
" i9 }2 |. q) |* j$ K  image:
# f* h# n' g" P; U# q- M& ^) j, z- j8 `    registry: docker.io
) }% ?! q! F$ i5 q, V2 h) g    repository: jumpserver/core- }) w1 F: y5 k. x
    tag: v3.0.35 Q8 H& E8 n. ?2 {
    pullPolicy: IfNotPresent) z: w* W, H0 r1 G) ]
8 S) M; x6 ?/ K8 L/ z
  command: []! s" t1 G+ r9 y# ]; j0 @3 c

' {7 k) ?+ t; C: m6 A  env:" S, z- Q/ R7 i. d3 F6 W
    # See: https://docs.jumpserver.org/zh/master/admin-guide/env/#core# k+ \5 m7 D6 y5 k* I) U
    SESSION_EXPIRE_AT_BROWSER_CLOSE: true5 y1 \& T; I: ]" w/ B7 u; x
    # SESSION_COOKIE_AGE: 864008 q* b0 d3 A. z. r9 i
    # SECURITY_VIEW_AUTH_NEED_MFA: true
/ Q) k. F0 ?( V  w% i
) l; ]: @* b$ o& d; }  livenessProbe:5 L! m3 [! O9 l/ ~+ s
    failureThreshold: 309 J5 O, Z8 r8 B9 k
    httpGet:
- v3 F' k# E5 Z; T0 g" p( O4 }      path: /api/health/4 V1 K/ P! ?* q! U' ]
      port: web
% z- {' u  X" w3 P+ X0 ?! S! z2 B/ K3 A/ y! s2 g/ n
  readinessProbe:' b! f4 L3 S" r
    failureThreshold: 30
4 ]/ D. V$ ~( V2 \9 n9 ~6 M    httpGet:0 `% C% [, h5 V" {$ S( q
      path: /api/health/% _6 z: ?6 ?  `% Q: \  w
      port: web
+ R8 P; }' y2 p! l. @* N' }7 [4 z8 B( W( w% ]
  podSecurityContext: {}
4 a4 o& ^& b; f9 T/ `! f    # fsGroup: 2000; `! c; z$ D% Y: d
* k9 A  P6 n+ Q4 }
  securityContext: {}% ~+ v$ n% ~* n6 V# U* w
    # capabilities:
# m( l5 l* i0 y# Q8 s! e$ U    #   drop:: j: L1 A! i. I- |* d! y5 E3 P1 j
    #   - ALL$ F9 C' p# N5 Q9 D
    # readOnlyRootFilesystem: true* w2 R6 A" J* P% m" b7 G# i- G
    # runAsNonRoot: true
1 ^9 A8 I5 O% @" n! F5 y8 Y# L    # runAsUser: 1000
, }4 S1 o3 \0 G" L& ?! ?
0 n0 l% U' J+ w8 ^  service:, M- s$ w4 L* i
    type: ClusterIP0 E2 ]: E5 h- w
    web:
, I# T! S/ S- j+ E# U      port: 8080
; B! A5 l+ L8 m* e- n7 T8 L6 }
6 i3 N2 e  d7 `! z2 f+ M1 [  resources: {}
2 ?( \1 g' u" m$ o! ?6 U    # We usually recommend not to specify default resources and to leave this as a conscious- n4 A4 P* S) d
    # choice for the user. This also increases chances charts run on environments with little, r3 B3 A' B, \2 X# c/ P
    # resources, such as Minikube. If you do want to specify resources, uncomment the following
& F. |5 U8 {; b! @9 [2 X    # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
% A+ x. E* D- y    # limits:
1 l% S1 a. E7 e    #   cpu: 1000m
. e: Q9 S- N* K) Q. z+ t  r    #   memory: 2048Mi
7 r$ O9 x- w/ @    # requests:
$ b( v* |6 P# M$ o) w    #   cpu: 500m
, T/ k# d" p- }# i+ K0 x0 Z    #   memory: 1024Mi
8 O4 }: K, V' a8 |& E' n" L# s9 h1 [% R( C  {- r3 {1 v. v# V8 H
  persistence:
. b& `7 E$ w% ]    storageClassName: jumpserver-data
& |) M* P# l# Y- h& A    accessModes:3 f) I0 p* u4 Y" _$ w
      - ReadWriteMany
- ~& q, }( D# U- }( R, F( H& k$ M* u    size: 100Gi
/ w1 U  P1 S: C5 z8 n7 }    # annotations: {}
% @: m* i9 E& m% L& e    finalizers:$ \  i7 K) t5 ]' a& r
      - kubernetes.io/pvc-protection7 Z5 C4 s9 h) |0 r; c
    # subPath: ""* [! z) u8 f- Q6 K2 V6 g1 y  F& C. A
    # existingClaim:. D: d( b" e+ _5 x- o6 @% u# u

5 H5 a. \# N1 m  volumeMounts: []+ i! R3 x5 v" J. J
* R8 V2 w' _1 F" A; G
  volumes: []
4 J( p; o5 m, I6 g' U
$ g7 Z, a) D/ C  r* G  D* {( Z  nodeSelector: {}9 r+ m5 z) x; g

% l1 K: s- y! `% ~% w+ v8 n  tolerations: []$ W% w9 y- Z" w* A' k

! A% U; O# _8 M  n! b7 X5 m  affinity: {}* o. f0 ]0 {& @! k) e# @! N3 \
6 r' e+ m1 s6 n" N
koko:8 B; o. ?' V3 @/ b: F5 s
  enabled: true
' U7 a1 |' g1 t4 A+ u' B
$ U* |2 }6 p% t' o# b" h  labels:# |6 _; p- k5 }4 u% v( C" C
    app.jumpserver.org/name: jms-koko9 n0 Q9 ]; j* m3 R; A4 V- K% W

5 g5 \0 n  z9 K! j4 u  config:  }' s+ i0 ~: r, i1 ]
    log:
7 n% n, B0 X; j, U3 F! v. K; q, }      level: ERROR6 r; s" U" J3 `# J" X5 x2 r
, F3 }$ |# i3 d+ k+ Z% u/ D
  replicaCount: 1
( H0 D) y+ B5 `& d3 }7 W% X: F
3 b6 H- G/ ]: C$ T/ d  image:
4 ^) Q' j* l( Q* e# g9 R    registry: docker.io. u. {6 S" Q6 z0 S/ @
    repository: jumpserver/koko6 Z: o) X- f. U7 e8 x3 q
    tag: v3.0.3
/ l  e) D; N8 w7 H! F% i" {' s    pullPolicy: IfNotPresent, g$ f. e$ S2 g% N) t9 D
: B- @+ `  F6 {: V, e/ }# v, H1 D1 `
  command: []# ]1 Q. {9 H. _. F7 G' `; ]3 `
0 t( {6 J- k7 D$ \5 ^5 S
  env: []
5 m2 U* v. @( ^    # See: https://docs.jumpserver.org/zh/master/admin-guide/env/#koko
: T( B- S2 R: M    # LANGUAGE_CODE: zh) o7 W- Q2 T" q0 Z  m
    # REUSE_CONNECTION: true
1 U3 |% @2 a: g    # ENABLE_LOCAL_PORT_FORWARD: true
: j& q# G' i5 c* L    # ENABLE_VSCODE_SUPPORT: true+ w( {3 |) H, a6 p" Z7 x6 r7 s  i

7 |' |9 g" Y- n2 B  i  livenessProbe:
& Y" {/ ~  p* b; W4 r, }( b    failureThreshold: 30) Y' I( ^0 f& n8 W
    httpGet:
* c' }( r' G+ ^2 Z/ t      path: /koko/health/0 t: w8 T: ?; S! l: W. A
      port: web
7 ]: a! d) }8 h5 D9 k& E- P1 G$ T6 }! M5 W( v
  readinessProbe:" d4 K) Y5 \2 k; ^8 d
    failureThreshold: 30( U' w2 C. z, y; A- {
    httpGet:6 Y4 \6 Z# a- f! i+ l4 A
      path: /koko/health/' v4 F9 b: s9 \: [0 N
      port: web
* ?" O, P% g$ i/ e2 h  U
; J9 J5 K. X* P/ U  podSecurityContext: {}
4 A3 `4 c/ n6 ^: m6 h+ y2 @    # fsGroup: 20004 h  j# Z+ y% c
. N6 B: V) J# y
  securityContext:8 j4 r6 |# D5 Y1 O& q+ \
    privileged: true
2 K( P  s5 k$ D; I- J. R  W) W    # capabilities:
( _4 n% I$ F& Z) m    #   drop:
4 |& w2 m( k- L7 k7 I+ T/ l    #   - ALL
* ]  g9 N) T/ O! d4 k6 l    # readOnlyRootFilesystem: true% P3 r& q; e9 t" C
    # runAsNonRoot: true3 W8 k, }2 ~) J& X* {6 Y
    # runAsUser: 10008 K6 j1 T9 B9 x. H4 `7 r

2 y5 M# {. j$ i: |  service:
. {+ Q  D5 ~2 l5 t    type: ClusterIP
0 n; m- n, x9 w6 p9 P! c5 s6 F# ~    web:) K3 s' V" S  b
      port: 5000
" |+ x$ o! `8 x; r1 N/ X; I+ I9 }    ssh:
6 b" `( ]+ ]6 m9 t7 R      port: 2222
; |2 W5 k- K: ?; p: t2 J6 f
, r6 W) P( ]8 \2 e  Z) [3 D+ m  resources: {}
3 H4 {& n, w1 |+ l+ ]- z; K# w1 X    # We usually recommend not to specify default resources and to leave this as a conscious- h( e" m# I0 P, g8 ?9 G- X$ ]
    # choice for the user. This also increases chances charts run on environments with little% i# s6 j- x6 x/ w* i% s
    # resources, such as Minikube. If you do want to specify resources, uncomment the following+ H7 {5 h7 I" v
    # lines, adjust them as necessary, and remove the curly braces after 'resources:'.1 k: `1 |. @1 S7 p6 C, d2 ~4 P) p
    # limits:7 ]6 ?, d$ _- i! `
    #   cpu: 100m
# }  s2 `, \8 z! M    #   memory: 128Mi: k5 k# ?/ n$ Z/ y9 D
    # requests:: d9 ?7 V' J8 J
    #   cpu: 100m7 e# l9 O6 b5 F% U
    #   memory: 128Mi
' v. `7 l" Z8 \. {" i& P- U3 l
' P( y9 G: @9 ^" Z  persistence:( h& Z# [0 B# O* y
    storageClassName: jumpserver-data
& ?) P* n7 Q7 B, h. d    accessModes:. x4 p9 v' p: ]5 ?, S
      - ReadWriteMany# L* P( E* {! _" w5 S' r
    size: 10Gi9 }1 A( B  W2 D: X+ V: u
    # annotations: {}
3 ~1 K. U, q' u0 W; V    finalizers:
5 Z2 N9 t' _" F# |' |      - kubernetes.io/pvc-protection! W* s' L4 R/ V# A# f
" ]- D7 H& ~" z. K7 R
  volumeMounts: []  A; ?3 W' [# o# N) V# m8 h2 f% e( T

; P% ~/ {( B* Y" y6 v& g+ [  volumes: []9 e) F5 Y+ a" S) s+ Y! \7 R' `' I7 E

  X* S+ j  E3 A2 P0 g  nodeSelector: {}
8 B6 g& I' R+ Q6 C  k4 w( w  q. `0 u8 r
  tolerations: []
% r) u  k! b, b' g2 X1 N8 D& e: D' T0 N& {1 B6 z+ u) D5 B
  affinity: {}
6 J) c9 u% ^7 b/ O2 g( H* i2 G  Z& O( U, ?' h  B9 s0 t* K) z
lion:; ^; r4 w* o$ D0 K
  enabled: true
8 k2 K1 g4 B5 n
6 R) v1 O( \5 {7 O  labels:: H) O  G& Z, p6 i2 X
    app.jumpserver.org/name: jms-lion
& J& E2 R/ \% V+ w. {- q. T7 c7 V" b7 L( e$ r! _
  config:
. }. S7 J9 Y; Q. X( k    log:
6 [' M( ^$ R: B  f/ \7 k" m8 p2 F      level: ERROR+ R3 p9 O! ^- R9 y( k. P, j

( X# h) d" s" B7 g! X7 i; p  replicaCount: 1
! D6 `0 `0 Y" w& ^% g6 E9 p/ a
: d+ ^* R) x* ~8 H, @2 b0 e% d" I  image:
& y7 u+ }5 d* b+ V7 Y: W+ R    registry: docker.io. l1 H( Q: `, ?/ w! ^# I+ U
    repository: jumpserver/lion
$ {2 K  s2 _  Y1 e9 Z    tag: v3.0.3
- X9 o# |& v: ^5 X: |$ `5 ?5 q    pullPolicy: IfNotPresent$ R! h1 O/ F2 @: @* \+ s; ^( G+ `  R

' R% X& r9 S$ S  command: []7 f$ j% N( n3 i7 ?8 ^9 C8 L

+ q8 ^+ {- t; b9 g# [* t- [  env:
! D9 u* G: G/ u8 x. k) x1 @1 `    # See: https://docs.jumpserver.org/zh/master/admin-guide/env/#lion
! X" X& x- d% c    JUMPSERVER_ENABLE_FONT_SMOOTHING: true
' E$ B# }4 A6 S' R! Q    # JUMPSERVER_COLOR_DEPTH: 32. i5 B2 `) R1 V1 a7 u1 P# D
    # JUMPSERVER_ENABLE_WALLPAPER: true2 Q3 k  k6 t2 X( n1 L
    # JUMPSERVER_ENABLE_THEMING: true
+ ?3 i# v; q! m$ K5 N3 @    # JUMPSERVER_ENABLE_FULL_WINDOW_DRAG: true
6 d) ]" P  _" u7 K5 Z8 ^+ ]" l    # JUMPSERVER_ENABLE_DESKTOP_COMPOSITION: true, u/ H) o5 B: n. e# _9 q+ Q$ L
    # JUMPSERVER_ENABLE_MENU_ANIMATIONS: true0 {$ |6 w6 x6 E" P5 v% \8 u( G$ L- C
% m- w4 g$ X! w& e7 `
  livenessProbe:
+ a  I: D7 H0 F" U) B1 B& Q/ t    failureThreshold: 30% b: R/ R' I5 o7 b2 K$ s2 D2 V4 u
    httpGet:
5 d4 h  j  f% b8 J      path: /lion/health/
' K; ]5 i3 w4 Q      port: web
& K) ~0 t/ O  `: k% d) T
7 y6 Q+ f+ d9 C8 o  B- P5 C  readinessProbe:
) ?. y. b+ I/ h# x8 a6 \    failureThreshold: 30
0 ~% J' E  n: ^* j5 P3 Z' P/ @. G    httpGet:: e, R. |$ Q& ^) A6 U) _. |1 N
      path: /lion/health/
0 _  g7 y% @% t' p      port: web; F' R2 A7 n/ i/ R& ^

, |% O- v2 S1 L3 f' A7 `  podSecurityContext: {}
& r* w; k' |. c& ^/ S! S  U1 O7 S    # fsGroup: 2000& w1 ^/ P5 T' Y
% C; G$ ]5 W; m: Q( }1 k% _  i" `
  securityContext: {}& ?* c2 ^8 I% r" E5 l9 |( ~
    # capabilities:
; x0 \* Q" i0 g( T4 A* I( ~    #   drop:
7 j# B6 L8 j) z. }7 K, v    #   - ALL
' H' {5 F0 Q6 x8 N0 \: ~  _    # readOnlyRootFilesystem: true
5 U+ N1 |9 w, q6 i    # runAsNonRoot: true
0 `: ^9 |4 d7 x- x: e7 S5 w8 R    # runAsUser: 1000  _! {1 I& h" P( S: Q
" e0 s# P5 D9 K: r2 h  R1 w
  service:
# X) q" r7 u1 Q$ L  N) m    type: ClusterIP2 T% c* H5 [  \2 ?: ?) S2 D
    web:7 q( }4 _+ L0 {1 o
      port: 8081
# w2 ^: ^" ~  Y# L5 u5 s, C
6 G( z6 N+ i* H* [! x5 @1 e- k  resources: {}3 d6 Y3 Q; h% O; O" c2 l$ h! u
    # We usually recommend not to specify default resources and to leave this as a conscious- A( G8 ]9 @  H! j* r: \0 _
    # choice for the user. This also increases chances charts run on environments with little
* f# ?0 m% D) o4 f3 {" a    # resources, such as Minikube. If you do want to specify resources, uncomment the following* A5 g5 K, N. {
    # lines, adjust them as necessary, and remove the curly braces after 'resources:'.6 z! u1 q) F3 d+ s* f. w
    # limits:
* K9 n7 g0 F) J! r    #   cpu: 100m
- o1 y0 _8 @7 r    #   memory: 512Mi; J! Q, b# e. p8 G
    # requests:
! ^. K8 W9 @! z" B/ V    #   cpu: 100m
8 L7 {' z# x) c) p$ M    #   memory: 512Mi' B; m0 l' _( [
$ }( `( x0 \8 z, w" W3 q4 y  y
  persistence:$ H8 ]* b% I* H$ C
    storageClassName: jumpserver-data+ c8 k* I  Q  e6 }7 I) c( C; i
    accessModes:
% ?" U6 F1 i/ [, O+ r6 i+ U; G      - ReadWriteMany# X3 y3 q) O" ~6 e! T: ]3 R9 j
    size: 50Gi
8 T, R0 |9 C0 o$ }: ^5 N1 r    # annotations: {}
. O, E2 N7 q, ]* f$ O4 B6 J% M    finalizers:" l! W- q1 B/ y( M7 O6 Y
      - kubernetes.io/pvc-protection" |* N, N& \- s) w* O

8 d5 `3 [3 a8 A  volumeMounts: []
6 p) J5 w- K- `1 f' x3 y
6 a- {  T! ]' |4 X  volumes: []2 Y: O, P7 u. I+ k* g6 t
9 V! c0 A; G+ p  f0 ~4 U- w3 t
  nodeSelector: {}
' x3 ?0 F; @! n3 E
( G4 X' U  G5 i  tolerations: []! L9 P1 \1 M5 e" ^! Y$ H

) E! j2 t. e5 Q8 b  affinity: {}1 p) e9 Z& G& D: D/ e
* n8 [) {& o* k# a  Q; o4 T6 X
magnus:
" ]/ ~, q$ E& \/ ^4 P& x. f" t  enabled: true
  B; e! y# Z2 b6 p5 j+ w7 k0 S# I
  labels:
" j4 A$ P& j4 j, O( m8 T5 r* L    app.jumpserver.org/name: jms-magnus' J" ^! `  ?& [2 V- U& a4 x8 m. [
, W8 ]/ K# ?$ ]9 B# I3 e
  config:' I: ^+ N* x2 n. l; I+ S9 P2 x% r
    log:
1 a( i2 e0 V" H+ b6 ^      level: ERROR( c" Y  @8 \2 g- v5 s8 x$ z" E
6 ]# ~% d, Z6 L, F
  replicaCount: 1* [5 P! e  x% ]5 j) m1 {+ ]

8 O+ u" e' [, J: P  image:6 d  y6 u. f& j' W+ }( K0 M7 E9 _4 _. H
    registry: docker.io
* }) F; b9 U" e- ?, J$ m    repository: jumpserver/magnus
6 @7 C; E+ I2 R    tag: v3.0.3
$ {2 v( B3 i7 ?3 ~    pullPolicy: IfNotPresent. {+ J5 D, ^) J1 z
$ D" L5 \: y( J+ T1 _) t6 F1 u% D
  command: []+ m' B+ T3 [7 I5 \" F

$ ^# F/ S/ f. s( e8 n0 L/ W& d  env: []
7 U. o, n; h) {/ C: I: a7 K
# r6 V2 w/ j. X* A0 b  livenessProbe:! B: U+ ?/ O  t3 h' e
    failureThreshold: 30
# }4 p2 Q+ _$ [: L    tcpSocket:
% B9 [# T0 \" n3 q      port: 9090
& H$ J2 C5 T9 v  r; V6 P" P2 H- N- Z5 C
  readinessProbe:
3 ]+ R" y! T6 Z! U$ H* u  y+ O% x    failureThreshold: 30* U% H$ q. T+ b* c
    tcpSocket:
7 ?& n$ L2 l) I      port: 90903 o6 K) Q4 U* G+ Q3 l7 O5 y. f
2 V, M; R, I  O$ Z* q
  podSecurityContext: {}
8 ]! M  I0 K$ I    # fsGroup: 2000+ O0 O/ R1 j, n

$ k8 r0 |6 t$ E2 r" Y- A  securityContext: {}* }+ N; }; I( h; m1 k. o
    # capabilities:
: L% J3 q+ r) `8 N6 j4 i  x0 d/ O    #   drop:5 `5 Z& q# l2 A% T5 O" M' J2 e
    #   - ALL* c/ w; d! V1 a  @3 K% {/ x
    # readOnlyRootFilesystem: true
1 ^; q) l; v) d6 f    # runAsNonRoot: true3 Q- `" V. @% c' l* R- v! Z
    # runAsUser: 1000* }- d: b1 w  ~5 o  [# u
2 {2 p4 b3 }6 Z. K) Z0 B
  service:4 G9 U# X0 x5 V4 N9 |$ H5 ]' g( s. k4 q
    type: ClusterIP7 |3 F% S. v. n# C. e* c& |3 a
    mysql:
% O/ Y6 ?  d0 n0 Q# b8 i      port: 33061
- K7 z2 Q3 g! N) H: ^0 \    mariadb:
8 {6 P! M5 a& e! V      port: 33062
/ n( M& ?  z2 g/ P& v    redis:
3 p: c4 v! x* r      port: 63790
7 M# u" t( E# C& L# F    postgresql:, Y8 P' ^# ]1 H1 D* J  B
      port: 54320
0 z; E2 E/ q( d, r1 _4 s# F2 a) c    oracle:
% O: B- z) e+ o) u3 c      ports: 30000-30100. D% l# H+ ?! i/ h% V

- R' L* g  y9 M7 i0 T$ I  resources: {}
: B& T4 l+ G; P# M7 I    # We usually recommend not to specify default resources and to leave this as a conscious4 f! J0 s  V; s2 k% e7 g' O: _
    # choice for the user. This also increases chances charts run on environments with little) ?& n  ~" L5 z/ A; a. L) L6 e
    # resources, such as Minikube. If you do want to specify resources, uncomment the following
) j: V; K) K, L    # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
7 l1 D7 s& \9 b7 t- w    # limits:! e" \5 B! U9 L0 k: X
    #   cpu: 100m
; W! s, q; a- C# y    #   memory: 512Mi
: U1 M3 S# Q+ @( g    # requests:
" t) k! e; }9 h0 I3 N& f    #   cpu: 100m% b: n$ f8 J9 o& c
    #   memory: 512Mi! `1 ]! E0 i6 {9 q" U) Y4 n  K

0 @1 e' [$ N# W9 ^/ D1 T4 n  persistence:. \- x. E# A* W: a; P8 Q
    storageClassName: jumpserver-data, {2 p& A1 }7 |: i6 N, p, G
    accessModes:
& ]) Q& g3 }1 L$ v7 m. J6 H      - ReadWriteMany  M" c, o! Z, }2 l
    size: 10Gi; x. u0 {; W8 L" {3 ^8 {
    # annotations: {}2 x- A" ?: I- k8 F
    finalizers:( c% |! l& c# W  h+ j8 m
      - kubernetes.io/pvc-protection
9 \. D# c9 U$ j, r
$ a9 \7 }9 V7 J" U5 @% a4 H  volumeMounts: []
# o- A3 A, K7 L! q9 P, ?
0 {9 |$ v( V5 D& c  volumes: []
2 x+ x: D+ A) _0 X. i: w
$ |$ S* X: s2 n8 c9 r  nodeSelector: {}4 j+ t0 P% Q) |: y% Y

' q% u, ]& R, c  tolerations: []
# U( ?- e. U0 {0 y4 e2 I9 P
% E. h4 @  Y% F, m  affinity: {}
6 G% X+ I' D' ?+ Y+ M6 K- R5 |6 M& E3 ?. j# D3 X/ _
xpack:$ e4 {. Y: x4 C) J! S- l
  enabled: false      # 企业版本打开此选项: s8 T- X& O6 E0 r# h

9 u6 U1 s! L8 i# b/ F6 Domnidb:: ?- o8 e3 @/ ^  |
  labels:
& c; V+ r) K4 M    app.jumpserver.org/name: jms-omnidb
3 X! i8 `# F7 i) Y8 m  W+ D5 V1 b/ E9 I
  config:
7 ~& l; L) ~( D3 Z6 l    log:
- ~# I) F- O. t7 L+ x0 p! Y      level: ERROR
0 \$ S- k3 s  U+ B+ P! |7 U
6 z& k0 T' c! M& E  replicaCount: 18 M% H4 B$ G# o; g; Z( ^

/ V1 }* ]! X) o0 t  image:
: Q) e! N9 K* ~! o# x    registry: registry.fit2cloud.com
2 ~) F0 A1 b. G  H    repository: jumpserver/omnidb# Q8 D6 c3 I" G& R
    tag: v3.0.37 N7 L3 H) ?% @0 |
    pullPolicy: IfNotPresent# ]$ A( S2 V/ s. _+ S1 W: G
9 i8 R8 N" r% k; V  O7 F
  command: []
! n. J& ^' c' c* ]& Y3 G3 C# v$ p
1 @. o8 p1 M9 a+ ~7 M' {- u# C  env: []
5 |! W! e2 |; u/ \/ U' L, m5 Z8 L" j
  livenessProbe:! z7 C8 C$ w) _* a% g
    failureThreshold: 30: k5 |" U$ M0 ~) u4 D
    tcpSocket:
1 [& v# ?: I9 ]& a, z  q5 \, t      port: web& Q+ N0 ~$ `/ o# M

+ t( n, r2 a2 T5 g  readinessProbe:
# h9 w* o* d$ I    failureThreshold: 30* C1 g! L$ A- m
    tcpSocket:) c8 r  U2 }2 q5 X; _  h& S
      port: web' e) n/ ]/ ^; j

5 D8 |, V7 H' C/ f  podSecurityContext: {}& F  B' ^7 ]  h9 X
    # fsGroup: 2000
4 s4 e1 j5 S& d2 A. H' j4 e( }* a4 w/ b' I4 \
  securityContext: {}, ^, T' Z9 ^7 ]4 i$ e
    # capabilities:0 H. j6 E9 \* B, b' Y( e
    #   drop:
& h. d3 V* W) u6 @    #   - ALL
/ N+ c6 x+ @. \+ ^$ s    # readOnlyRootFilesystem: true% K4 x: c4 d$ P3 g) [4 Y9 X
    # runAsNonRoot: true4 l& O8 b. f$ N' ?& V
    # runAsUser: 1000
7 u+ W! N% w, c9 s/ g
9 z) b$ _5 i6 p" @  service:
0 M, b! ]0 k9 }2 T& R: A    type: ClusterIP
4 M( w; ^4 c/ w) g    web:9 ~- E3 r/ H* h, `
      port: 80822 _0 h/ p8 K0 `! k8 a# d
5 \7 {& V3 i; e4 x. [$ O2 J) v: P9 g
  resources: {}- b0 E5 ]2 \, _$ p/ s+ w8 L
    # We usually recommend not to specify default resources and to leave this as a conscious/ y1 G' L; P3 |1 m6 o# d; b0 ~. B) e! ]
    # choice for the user. This also increases chances charts run on environments with little  y) U* h. c+ v! V/ C
    # resources, such as Minikube. If you do want to specify resources, uncomment the following- \  h  B/ S% [
    # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
" V$ Z/ c) }# k    # limits:+ X9 t# D) f  L+ l8 _8 ?* X' v; B) q4 D/ T
    #   cpu: 100m
- Y7 x' D' b! u    #   memory: 128Mi
( `& H$ I: {) e    # requests:+ j. W2 N" X: F1 R0 s  I
    #   cpu: 100m
) O0 h) k& H7 N+ @4 p    #   memory: 128Mi# i8 J2 H4 d; f* Q
) w4 J& ~# o1 B5 y& U2 c
  persistence:
; G% F0 D! b7 N/ r  A0 d  L    storageClassName: jumpserver-data0 S5 t* p% [1 b0 Y' {
    accessModes:
7 B/ z) S' x/ V$ u5 B- ]& A      - ReadWriteMany
$ x) @6 o2 W: J2 f4 ~    size: 10Gi2 A) ]& l4 S0 R, _5 M9 n0 B- O
    # annotations: {}; G2 V8 ?9 ]/ `
    finalizers:0 J  p+ @/ u5 m' d" t) |+ Q' p! F
      - kubernetes.io/pvc-protection
2 g' s' U' |" m3 x) z, R( V3 R7 Z. g8 J5 h
  volumeMounts: [], L- j: v0 E: I" T
/ a7 i) D6 g, B
  volumes: []
' l. g0 O+ G1 J$ k
. m& T! M8 F/ i8 ]- u1 x& A- Z6 J  nodeSelector: {}
8 y( Y( V  n/ v0 _0 x2 m
( h( F2 O4 h% a* N+ q  tolerations: []7 h3 {2 q+ Z) b6 v% H1 ~. D5 y

& a7 w& h& P# d: ]* m  affinity: {}  P2 f) q2 a! A# c
, D/ `# Y: m7 ~  Y. M7 F- M& b
razor:* s5 {( M1 R& t! e8 B: H
  labels:: K7 K& p6 L# \" N9 C0 c
    app.jumpserver.org/name: jms-razor
7 b" e9 w( c$ a2 M6 f% [4 b
! n* o9 t& w( w, [& r0 q  config:+ h% c: a5 }+ q) e
    log:
4 F* b7 B6 U  N" w5 O. Z      level: ERROR: C6 k7 v4 f: K& L

9 g6 G0 W, J* Q  [3 O; ^  replicaCount: 1, B& J- V1 A( z
% F. Z- u4 d3 e2 D3 Q9 E
  image:# S( F# W- m2 i. ]' E4 a
    registry: registry.fit2cloud.com* J7 ~( c# R, v3 H: C
    repository: jumpserver/razor
7 z& J9 w3 m( {) ~. P5 o) ?    tag: v2.28.6
$ p& S1 W6 e6 B) w& J    pullPolicy: IfNotPresent& I2 [/ K1 b7 l6 G! [0 R

3 K3 R& d" F# D- H& g: s  command: []
# g' q% u2 l* P
# b8 O1 C  H8 l* F1 c  env: []+ j8 z8 O8 r8 \* g
* R6 G* {# u) v
  livenessProbe:8 \1 U$ v$ V! @$ v
    failureThreshold: 30( p, T; M5 l. C1 Y$ n& |- }
    tcpSocket:4 g7 K& S7 J, h7 I  G; _
      port: rdp
- M, E/ |. y7 L3 d; W( }  Q9 C! u, y8 E# z" Z/ y4 C
  readinessProbe:
+ \" U6 ^3 d  m5 J1 ^' a5 `    failureThreshold: 30
9 H! d, N$ H" H" `    tcpSocket:( f4 Z# n: P8 ?: D# ^
      port: rdp9 `' ~6 g% P- h
6 E0 x( D; D9 R
  podSecurityContext: {}
/ j) ^, l9 X& K: H: w, L( e6 @    # fsGroup: 2000/ W% O( {' [$ e

. @( ~, S1 X% _" E" G4 T! Q  securityContext: {}
( ~* w9 U& J& P- W2 n( ^' ^    # capabilities:7 T) {' N7 A8 S1 y
    #   drop:9 ~1 k' B0 Q/ j+ @% ]; u
    #   - ALL
6 C( C8 I4 E1 ?- h3 [7 X1 Q    # readOnlyRootFilesystem: true) R6 z* p; J! x. D  z( i
    # runAsNonRoot: true2 {8 K0 M( M+ {9 p2 i3 l1 u& F! x
    # runAsUser: 1000
; \; l  F: L3 x, l
* N* [; W# q6 ~  service:
, A# _3 v! I, F    type: ClusterIP
7 ~8 U) P$ X5 v$ g    rdp:
$ {! v8 V+ J$ o4 c1 l      port: 3389
* k$ Y6 n) R3 Z) [) l6 b0 y' \1 x: @& K( J" J
  resources: {}; w/ G  W% I  G. z1 X7 M
    # We usually recommend not to specify default resources and to leave this as a conscious
8 i) q2 e* y  ^4 ]/ S    # choice for the user. This also increases chances charts run on environments with little
  K6 v4 R% S+ c. D& u: T, H    # resources, such as Minikube. If you do want to specify resources, uncomment the following
& `: I/ l$ y$ @) e% J3 H    # lines, adjust them as necessary, and remove the curly braces after 'resources:'.. y# d1 }$ O# h" f4 x3 O7 X3 z
    # limits:+ s; G9 f. g3 @0 A$ g: i
    #   cpu: 100m
7 y8 P" L2 z, `' ~" N/ k    #   memory: 128Mi) v: r4 k+ B8 y! P, i( v
    # requests:
" Z, R. w5 E  P9 T# Z    #   cpu: 100m4 _5 ?/ N9 E" g1 M
    #   memory: 128Mi
  z9 v, }1 I1 ?" ~6 M
# j$ o# g, R# H* t7 _  persistence:  n8 c4 `$ x7 d" G3 K2 N
    storageClassName: jumpserver-data& m, C: ~! ^3 x' [- T6 r/ F
    accessModes:
0 L' c0 J$ U) a7 x8 K      - ReadWriteMany
5 L- A" @. q" K; x0 C; G. \    size: 50Gi$ ]  I5 K" F4 L8 l; S0 i
    # annotations: {}
2 ^5 |: Q0 C* L" i8 ^    finalizers:
$ E2 N  ]$ J1 @' }* g      - kubernetes.io/pvc-protection6 E, s0 |, G+ F5 G2 B: G# X. M* _

' F1 [# G; G( B; ?  volumeMounts: []2 h5 I0 I$ l" e' i" J' {0 s6 ?

" Y- d* ^  ?+ Q! g; u  volumes: []
$ b; o. Z5 Q7 ^# |* H. g: w5 P7 j6 e
  nodeSelector: {}
" N, f" v6 {" k/ s- S& `7 p& m3 C4 p
  tolerations: []- [2 e1 Z  x. X0 Z9 V
( t/ ?0 B) h8 f8 \' G& T
  affinity: {}2 J* w5 n; X+ d
+ n/ ~' G6 p% l$ K6 d% T5 q" K& e
web:
3 r4 ]6 h" t& P. P# w) m  enabled: true% |. V5 ^( X* }' J1 y0 S7 ^" K

0 Z6 f3 u# T/ x- r" c% l  labels:
' u  }% n. ~& r2 E  h( `6 [* p    app.jumpserver.org/name: jms-web
0 c! S* g2 l; @0 W! Q
! _/ E$ O6 G2 U6 d% B) F  replicaCount: 1
& O7 d1 s3 U/ c! v4 U1 j9 x0 y4 O$ @, m. e3 _
  image:! `- N; ]' ?* w
    registry: docker.io# b* i6 S# q3 S. r
    repository: jumpserver/web2 k* C0 n; c1 w& X; E( b
    tag: v3.0.33 f9 D, \' s. `$ p- Z
    pullPolicy: IfNotPresent
0 R  ^9 F  K, S8 g: z/ N
, _$ \4 j! F2 c- H, n  command: []
7 _7 X6 W$ P  U8 q; u( {# K: `* _6 Y  R( U$ P: S; w
  env: []
7 Q2 ]- Z3 [8 F    # nginx client_max_body_size, default 4G
- q% d( I7 J$ n4 e7 d    # CLIENT_MAX_BODY_SIZE: 4096m; T6 |2 N7 Q+ }% H7 J! I

# ?9 i  Z  v$ r2 d6 c, _  livenessProbe:
' Y4 Y+ [' n: Y- J    failureThreshold: 30
) _2 D" Z5 ?; L" H* Y: q6 O5 U" G    httpGet:: t& g. T4 V3 B% Y6 D
      path: /api/health/
. U/ b0 N; \1 z0 U: `3 e! Q1 z% t      port: web2 R: k5 T* U9 s0 ?

( z- `' @' I% I) b7 |& V( Z' x  readinessProbe:
8 I9 I- E+ E) g% [/ ^+ ~7 c' L    failureThreshold: 30& f+ N' c, Y) Q$ a; y
    httpGet:
4 h0 {2 S1 p( X8 Q      path: /api/health/
. h$ V4 f  i, j7 t" p* H: k) f! m      port: web
- K& Q& N) @/ Y% @$ Q
1 ]$ R" G) `. y$ R  podSecurityContext: {}% W) n; P; D1 y  B6 L
    # fsGroup: 2000. ]3 |1 N; I5 x& @

/ H5 M8 Z3 c8 n. G% Q! j  securityContext: {}
- G% I' _9 j/ t! L' J2 I  h    # capabilities:$ J& _3 L  \/ N. Q
    #   drop:
' n4 J  R6 D3 }4 g2 V    #   - ALL
, x9 T( O8 G5 u% R    # readOnlyRootFilesystem: true
6 ]# p  ]$ `, B6 W7 c; ^9 p    # runAsNonRoot: true
4 {% ^4 R% n, x    # runAsUser: 10006 J+ H* S- F; s# ~" B0 h; W

" n  b; ?2 u' T, }! Y) ?  service:5 R3 b2 q# M( u, u! S1 [; a' q
    type: ClusterIP
( I9 ]5 h+ Y+ Z  t    web:* i+ K) e$ Z) F4 B
      port: 80
. y- i# x: q6 i8 Z9 C4 Y; S& s9 z1 [/ H, W
  resources: {}
' N$ v8 K* w" i0 f2 D/ m) \' @    # We usually recommend not to specify default resources and to leave this as a conscious
! ~; [9 V4 n. C! e' N5 U    # choice for the user. This also increases chances charts run on environments with little
+ B# x  q9 g5 ?" [' O! D    # resources, such as Minikube. If you do want to specify resources, uncomment the following
6 ^& s- P8 K5 Z7 l  }6 f! L    # lines, adjust them as necessary, and remove the curly braces after 'resources:'.% ~+ R- p6 `/ t' a, b5 e- F. z7 E
    # limits:, a: ]: K7 }- ?# \9 W
    #   cpu: 100m
/ S& O) R) j7 f( o5 W- o    #   memory: 128Mi
, ~% u" h( C8 L% _$ x1 d0 |, }& Z    # requests:, Y7 b. C) Y. ]0 v& |, K
    #   cpu: 100m
! ~% y0 A- [% ^7 Z0 b( q7 `    #   memory: 128Mi2 B4 C' {' {) X) j
: f: b! ]9 S' \. Y2 V5 ~, ]
  persistence:0 i- P$ {* O$ R% |" ~
    storageClassName: jumpserver-data& C- U& C) {* l% }; I
    accessModes:& [% W1 }2 s4 ~: J
      - ReadWriteMany
8 h0 F0 x1 Y& N5 O    size: 1Gi
$ H  s) k2 P  X4 E9 w9 W    # annotations: {}2 ^: h% _9 y' N: b( r# C8 _
    finalizers:0 \/ S& |1 v, v& q) S/ I# L
      - kubernetes.io/pvc-protection4 H$ q  L; ]: U( V* {

; ^, ?" ^% ]1 E4 ]7 L8 a  volumeMounts: []
& |0 s* ^( j6 p( B; K
6 S( _3 l* U( k4 A6 Y8 R  volumes: []
5 C1 U+ y, K: G& ^
, |; D+ O! X" \( y  \3 y  nodeSelector: {}$ A; H/ ?/ p6 e. b; {( Y
7 Y/ D9 O  [$ c. [& J
  tolerations: []
# O: C; z; T3 A6 m6 V
7 o$ C! O9 y; s1 Y" a+ K0 H+ M& o  affinity: {}
' [* L6 x/ m9 Q3 p: ~* g2.3 安装 JumpServer⚓︎, ]1 \- y( c8 J: Q7 }) [5 L

  Y# O: w1 T! N) R( \9 m6 @4 s( Ahelm install jms-k8s jumpserver/jumpserver -n default -f values.yaml5 N0 w: s7 d* H
2.4 卸载 JumpServer⚓︎5 ~( {. |7 L! k8 V" k
4 [+ c+ @) f1 x& I4 o: s6 o- C
helm uninstall jms-k8s -n default
 楼主| 发表于 2023-3-8 10:00:14 | 显示全部楼层
远程应用⚓︎
. M6 S5 w) P. K3 U4 p* G) i2 u6 a注:社区版只支持 Website 方式。: U1 L& }% z) E3 \* J
" L) s5 F- T) w  D5 b% L
1 功能简述⚓︎1 Z8 t5 H: M9 w& r1 c
远程应用(RemoteApp)功能是微软在 Windows Server 2008之后,在其系统中集成的一项服务功能,使用户可以通过远程桌面访问远端的桌面与程序,客户端本机无须安装系统与应用程序的情况下也能正常使用远端发布的各种的桌面与应用。8 ?7 ~5 F) E/ S. V( ~, f: h
remoteapp032 @" K: j2 y( r6 W( y! O8 [

7 K5 X& g& U/ {) J) }  G2 [9 m( x7 F2 应用发布机⚓︎8 v3 q+ g$ L: t, u6 C; ^
RemoteApp 功能需准备应用发布机环境来进行支持。
) u0 [* X$ }0 |# r应用发布机是用来运行 Web 页面资产或者使用远程应用 Navicat 连接数据的程序运行主体。
$ \5 s( c! {  e+ W; W# m2.1 版本要求⚓︎
: o) T' ~1 {$ T; p) f4 n应用发布机为 Windows Server 服务器,具体版本要求如下:! O" ], X$ j1 v
Windows Server 2016         Windows Server 2019         Windows Server 2022' R# a/ m* t" `" M% {0 o1 E
2.2 安装 OpenSSH⚓︎! Z& ^# i& s' k" ^! v" |  t0 |
部署应用发布机前需要安装 OpenSSH 协议,可在 JumpServer 页面 - Web终端 - 帮助 - 下载 页面找到 OpenSSH 安装包。( r0 W* i9 |4 g+ ~
remoteapp01
- t" N  I2 X, w. ]/ z) P3 {# l/ ~+ }1 i3 l+ P
OpenSSH 安装包传到应用发布机桌面后,双击进行安装。1 |: D3 S% O8 l; o) L
remoteapp02/ v3 ~1 }% b5 \5 N4 a1 K
% H3 f$ `# H$ K6 A- ]* P/ O
2.3 创建应用发布机⚓︎
0 |. w; m! g/ W7 d- U( R9 p点击应用发布机页面的创建按钮即新建一个应用发布机。
4 C0 {5 q1 F) X8 c( |" Iremoteapp04
0 B( c3 o( {. C% v" {) i0 {" |/ G4 F5 r2 C, ?6 e, b" N1 b
详细参数说明:$ I9 C! `& x# {7 g0 i
参数        说明
# R" U8 d0 I+ j; W) o% W名称        远程应用发布机的名称,识别信息。
0 l# V4 K6 H. B5 X  O* AIP/主机        远程应用发布机的IP信息。
: I( E! s) i5 {& |( F" f) F" U协议组        远程应用发布机支持的协议族以及协议组的端口。
( l" J/ g# B' R, r账号列表        远程应用发布机的连接账号信息。
$ O2 x& m/ L. h/ N* _API 服务        远程应用发布机的 Agent 与 JumpServer 后端 Core 组件服务的通信地址。, E# Y4 ^- m# i" n
RDS 许可证        RDS 许可证启用选项。
+ H8 X( D$ [' M6 `$ LRDS 许可服务器        RDS 许可服务器信息。5 Y3 ^- i/ k$ o" G5 D  r- S/ V0 |4 G' _
RDS 授权模式        选择"设备"或"用户"设置授权模式。
1 s2 u+ Y7 ^; g7 A& v9 gA.设备:允许一台设备(任何用户使用的)连接到远程应用发布机。
5 c+ ~4 _# ~. d% MB.用户:授予一个用户从无限数目的客户端计算机或设备访问远程应用发布机。; e2 \: l# T! x8 @7 Q
RDS 单用户单会话        选择"禁用"或"启用"设置单用户单会话模式。
( L4 J! M# [- i. z- r8 s3 m6 IA.禁用:允许每个用户可以同时多台客户端电脑连接服务器远程桌面。/ f" J/ z7 l/ I+ V/ A
B.启用:禁止每个用户可以同时多台客户端电脑连接服务器远程桌面。
& I4 q3 Q1 W% G' n* A7 \RDS 最大断开时间        如果某个会话连接达到了此最大时间,连接即断开。
# l# E. [6 V  N4 ?RDS 远程应用注销时间限制        远程应用会话断开后的注销时间。
. q+ j9 i% v) ^- ~2.4 部署应用发布机⚓︎  J9 A. z( U& E  k7 E/ f
创建应用发布机后需手动执行应用发布机部署,安装 Python、Chrome、Navicat、DBeaver 或自定义远程应用。
* u# Y* ?% b% [; K点击应用发布机名称按钮进入应用发布机详情页中,选择发布机部署页签,点击快速更新模块的初始化部署按钮,初始化应用发布机。
% x2 f3 ^! P6 r0 e/ Qremoteapp05, E) F* t8 w- h5 `9 G* |8 E# o8 W
: @% w0 E+ [- d9 k
2.5 查看应用发布机详情⚓︎* r  I$ p) u- A/ ^+ o. |& Q  F
点击应用发布机名称按钮进入应用发布机详情页中。
& B- h' j4 g" a( j此页面包含应用发布机详情信息,包括:远程应用发布机帐号列表、远程应用、发布机部署记录等。7 K6 [# o6 b, e! r3 a& r
remoteapp068 W) t  k' }6 p" c6 o0 h' }( b0 I
8 \' R: g( l) f; T' C  C* Z
详细参数说明:
7 S- `6 Z' Q: Z, D) b1 H6 z模块        说明
$ \* ^/ l: Z& r1 Z' M, C1 T- Z详情        该模块主要包含远程应用发布机的基本信息以及简单的自动化任务,更新硬件信息、测试可连接性等。
$ |$ T& D- w7 Q0 }/ b( o账号列表        该模块主要操作远程应用发布机的账号,默认创建初 JumpServer 会创建100个系统用户支持远程应用会话。+ o- R, P2 I7 V1 K5 t3 W" m
远程应用        该模块中包含默认的远程应用与自建的远程应用信息,在该模块可直接对远程应用进行部署。' U" f5 B$ }/ \0 `4 M
发布机部署        该模块中主要用于远程应用发布机的初始化部署,以及部署日志的查看。0 k0 u9 u0 q1 U
活动记录        该模块中记录了远程应用发布机的活动记录信息,点击可查看活动详情。1 D+ I  M- C9 l+ c
3 远程应用⚓︎
8 v0 j0 Y5 r: M! T+ t创建远程应用资源,实现远程访问目标资源,并实现密码代替功能。1 E5 G! I- W* J) D! m
当前举例访问 JumpServer 页面过程(实现密码代填)
8 V& L/ Z: Q2 G( p& M# i! F3.1 创建 Website 资产⚓︎5 S! r  ]; H) E& S4 A
点击切换至控制台视图资产管理 - 资产列表 页面中。; @" _3 U9 r. E& S, o
选中 Web 页签,点击创建 Website 资产。& S- |* m+ w. Y9 L
remoteapp08
. O" F) n3 K& d5 B* g2 H# l. x! G' {: Y& }# f* }) F$ y
其中 选择器 参数,需要根据目标 Url 页面中的代码参数中获取。1 E9 ?" C' e2 T, |1 P- ]  w" ~; i1 X
我们通过 F12 打开目标 Url 的开发者工具页面,步骤如下图:
0 E* ?" m! l+ s. D2 s/ B8 ~remoteapp09
( I8 N" s: L: }4 ^+ T7 o
: u) l  r7 o- a把获取到的参数填写至创建的目标 Website 资产,参考当前页面3.1 标题第一张图片。0 I. p( o+ u( h$ `; O+ d# t
3.2 创建资产授权规则⚓︎9 d0 F+ @; W( f# H, N8 P) U) Z6 ^
点击切换至权限管理 - 资产授权 页面中。( Q9 }- j' }8 `: Z
创建新的授权规则,如下图:
3 o# b+ i/ w, J5 |  Q& R7 ?7 L/ B5 oremoteapp103 N2 j1 L* s6 A% ~. s+ C3 N
) N! E: E4 I$ }% R3 I$ N
3.3 访问 Website 资产⚓︎- v9 O( |8 H# J! l7 Q2 I
通过 Web终端 选中目标 Website 资产访问。
4 L( o# R/ K" r1 n" i1 h访问 Website 资产需要本地客户端安装 JumpServer 客户端程序,可在 JumpServer 页面 - Web终端 - 帮助 - 下载 页面找到安装包。$ a! u# w* U9 F' R* o8 _
remoteapp11- G7 A- `; S. t  i; u/ I% r; k
. \5 o( i0 H5 _" i
3.4 页面效果⚓︎
% I/ w; U# ~0 Q当前为远程应用页面访问效果图:
1 D# V( W* @( ~. `remoteapp06
, |0 L+ T& u$ O: p! C; n  M6 p8 k5 L* ^8 `, M1 J9 @6 ]
4 自定义 Applet⚓︎' k- L& ^! W) X. G
4.1 Applet 介绍⚓︎# ~1 T) R0 R9 d- Y
Applet 是一个包含 Python 脚本的目录,必须至少包含以下文件:
+ Z/ r* E' z; n/ b! M- M) G' Z' l4 {" u7 i# |8 k2 w
├── i18n.yml
$ N( m9 e* @; l! Q  b0 S. g9 z$ R├── icon.png
, Z% H9 e2 @, h5 P8 O├── main.py
, B* u0 z! O! Y0 t  i├── manifest.yml
- Z0 R) c+ x6 r' ?* u' Z  b1 p└── setup.yml
- y! T) P* o  D* p1 B9 T2 G2 l8 x文件名称作用说明:$ X- J' k( j8 F/ \
文件名称        说明
2 w3 n4 T+ E4 Dmain.py        Python 代填的执行脚本。# q  K/ ?& m/ X7 G) X8 g
icon.png        Applet 的图标- ?: H$ [, S" C
manifest.yml        Applet 的元数据。) L2 T* R" Y& O  ^& ^/ O6 a- r
setup.yml        拉起程序的安装描述。0 D2 _5 U+ j+ r8 c$ s4 ^
i18n.yml        对 manifest.yml 的国际化文件。8 F2 t3 E( k& @% h: b
4.2 元数据 manifest.yml⚓︎
* H) x; |3 U8 @& U! Imanifes.yml 定义了 Applet 的元数据,如名称、作者、版本、支持的协议。
3 w5 V  H' {1 P7 _0 V; p
' S) m3 B: s# ?( w" ?- xname: mysql_workbench8 (required)7 @) v8 k, G& l: [' W
display_name: MySQL Workbench88 m* e, [9 k6 [4 w6 ~
comment: A tool for working with MySQL, to execute SQL and design tables (required)0 }' j3 P! _+ X0 z( H! F( w6 `
version: 0.1 (required)
2 i2 Y3 f. \. \! u7 ^exec_type: python (reserved,暂未使用); I. t7 X( ~2 j+ l2 M
author: Eric (required)+ |8 i3 A2 t/ L, c
type: general (required)
, ]! T8 ]  e9 C7 Qupdate_policy: none (暂未使用)) Q5 A5 G3 l5 z; b0 x6 e0 f
tags: (required)& H! N0 q$ P/ Q
  - database
: f8 U  q  o# `2 {1 k4 U0 h3 Yprotocols: (required)
7 y- N( u, p( q  - mysql5 i  G* n! g) a3 y
详细字段说明:
) D! B- Q" \8 C0 a5 v字段        说明: q' r$ o1 f( z6 h/ @9 o
name        名称最好是字母数字,不要包含特殊字符。
& N5 R* T3 N2 i+ Hprotocols        此 Applet 脚本支持的协议。$ ?- @& @, z; t5 W& p
tags        一些标签。0 i- [, y6 X  E0 D- g! p
type        主要是 General 或 Web。
* p' Y+ e& ]: c0 e7 V: u" c3 {i18n.yml        对 manifest.yml 的国际化文件。
& N  s7 y6 |, ?  ]) W6 Y3 L1 b4 K4.3 安装条件 setup.yml⚓︎. a1 M8 }4 Q5 F& L) A' A, R
setup.yml 定义了 Applet 拉起程序的安装方式。
+ m1 g/ X6 h' q  j$ G6 Y% C+ ?
: t  X# i- m! G, G* S0 xtype: msi # exe, zip, manual( |8 v! K  |1 B1 Z' V2 O
source: https://jms-pkg.oss-cn-beijing.a ... y-8.0.31-winx64.msi; i0 ^( _+ d( v
arguments:; Z3 V9 T5 ~9 Q
  - /qn
- y6 E) r* ?9 s7 ]4 D/ P+ l- r  - /norestart, ?: H* x1 [2 j; Y
destination: C:\Program Files\MySQL\MySQL Workbench 8.0 CE4 i( D$ y% e. g& J& l& |( ^8 m
program: C:\Program Files\MySQL\MySQL Workbench 8.0 CE\MySQLWorkbench.exe9 j# [, f! z! R$ H% R  z
md5: d628190252133c06dad399657666974a6 h* I, D& P( y9 k6 r# ^' B
详细字段说明:
' b( O( F2 z/ d0 x字段        说明) y( r; _* H# a: @) F
type        是软件安装的方式。
& Q& C; Q- q2 mmsi:安装软件。2 B5 Y  w& s8 r1 }* }. X
exe:安装软件。( n/ H4 g2 Y8 y. t  I
zip:解压安装方式。
/ g8 Y7 J, S% {manual:手动安装方式。% l9 p1 }0 ~( t6 m2 f# m
source        软件下载地址。' T; K  A  j3 n8 y& l# d
arguments        msi 或者 exe 安装程序需要的参数,使用静默安装。
0 s- h/ N1 ]8 x# x3 Z( Udestination        程序安装目录地址。+ V5 x: `( `( f. E( f0 {
program        具体的软件地址。0 u1 P6 @: _6 e5 w% m
md5        program 软件的 md5 值,主要用于校验安装是否成功。9 O8 Z" ]) h! T$ J/ c
如果选择 manual 的方式,source 等保持为空,可不校验 MD5 值,需要手动登录 Applet host(应用发布机)上安装软件。
$ h( S' A: I! h. [9 @9 ~4.4 脚本执行 main.py⚓︎/ _" z% h/ }2 b- q* n3 v  O2 R
main.py 是 Python 脚本主程序。
, O; O% U- S9 n  u( tJumpServer 的 Remoteapp 程序 tinker 将通过调用 python main.py base64_json_data 的方式执行。
/ T5 x* E# B9 D  {1 G4 R! Nbase64_json_data 是 JSON 数据进行 base64 之后的字符串,包含资产、账号等认证信息。数据格式大致如下,依据 api 变化做相应调整:+ ~4 w/ M9 y! @5 U" r+ k9 O
2 z/ \1 D+ N+ T  G0 H
{
4 s# X" _8 T5 s  "app_name": "mysql_workbench8",
) E' U9 U- B( P3 i% H  "protocol": "mysql",$ z: a6 y, B1 M6 D8 ^4 S
  "user": {* |+ ?$ ?1 i; ~* v0 J& k( U
    "id": "2647CA35-5CAD-4DDF-8A88-6BD88F39BB30",
; O5 k" V  N5 R    "name": "Administrator",
/ {! }( y/ u. m+ |    "username": "admin"0 v$ U: B1 L5 m# I0 k! h: s, [
  },
' }2 ]6 `0 H- K1 O! C& F* y& h  "asset": {$ w* Z5 K+ J- o$ ?  N8 M
    "asset_id": "46EE5F50-F1C1-468C-97EE-560E3436754C",9 v; D: M! k; R" w
    "asset_name": "test_mysql",
  [1 G* E6 G9 ?% y! e1 o/ _    "address": "192.168.1.1",
+ M. N' u2 C7 w; o9 F. m* P: B    "protocols": [
$ @" h  M! l7 e! `5 D6 S' F      {
8 g; e6 i5 {3 X. y% B        "id": 2,9 q0 F* q+ P, a: ^* K+ y8 ]! ~$ O
        "name": "mysql",
7 O' q2 U" X9 X! a% K0 \        "port": 3306) U( F3 K! [/ B) O4 z- r6 M. E
      }
9 @* N! e* X2 \, o" {0 e    ]
, O+ z0 ?% I( K3 ^, i5 ~" [% B  },
4 |/ e. b! R& H9 H( l2 a! M' `  "account": {
7 m0 H, {9 ?- @, }- d6 r% \    "account_id": "9D5585DE-5132-458C-AABE-89A83C112A83",
# ?& a1 W! G7 @: Q$ ]7 ^# C    "username": "root",
* k7 T7 |3 C! C/ e0 Z- B    "secret": "test"4 J8 f- \4 J7 I+ `8 X
  },
$ F% I; a+ T. P6 \3 X/ Z, ?& Z# d4 v  "platform": {
1 O% a2 Y* J/ t) B, |    "charset": "UTF-8"1 a9 [2 M- x1 e- N
  }2 Q, w, G' y5 y, }& j( U# |
}
% Y+ G) b& K: b$ j& J2 m( y1 |; L' m0 N' g0 k+ y. R
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

北京云银创陇科技有限公司以云计算运维,代码开发

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )点击这里给我发消息

GMT+8, 2026-4-8 21:37 , Processed in 0.060784 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

快速回复 返回顶部 返回列表