易陆发现互联网技术论坛

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

jumpserver集群模式部署

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

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

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

x
准备工作⚓︎
1 J& L0 p$ L2 J. r2 S1 整体部署说明⚓︎
7 P: K5 p" _8 r8 p) `6 V环境说明
, j  G8 t7 n. P4 t  v. P# }9 ^5 s3 S
9 k4 ?4 }" n" {除 JumpServer 自身组件外,其他组件的高可用请参考对应的官方文档进行部署。8 G9 ~5 H. H- H! i. U2 u; E$ t
按照此方式部署后,后续只需要根据需要扩容 JumpServer 节点然后添加节点到 HAProxy 即可。
: o7 v9 D9 a9 m" f% ~- R. t- [如果已经有 HLB 或者 SLB 可以跳过 HAProxy 部署,第三方 LB 要注意 session 和 websocket 问题。! Z! j; i+ y  h( c/ N2 H8 C
如果已经有 云存储 (S3/Ceph/Swift/OSS/Azure) 可以跳过 MinIO 部署,MySQL、Redis 也一样。
5 o2 U3 `8 e. [生产环境中,应该使用 Ceph 等替代 NFS,或者部署高可用的 NFS 防止单点故障。
& I3 u  K, a# x  U. k* o& n1.1 数据库要求⚓︎3 ~/ {2 l% A# T  j$ e
名称        版本        默认字符集        默认字符编码        TLS/SSL
: ~4 O! Y8 k4 B8 F! L5 _0 ^& rMySQL        >= 5.7        utf8        utf8_general_ci        + Y) ^  i3 b: b2 O6 ~$ ?' Q; Q: ?
MariaDB        >= 10.2        utf8mb3        utf8mb3_general_ci       
# g. m0 U0 d+ NName        Version        Sentinel        Cluster        TLS/SSL' x/ u+ H7 Z4 J3 c; W
Redis        >= 6.0                       
6 \+ g6 Z- y' T" t1.2 服务器要求⚓︎7 t9 r: |9 {$ v. o" ^( f& [
服务名称        IP 地址        端口        使用涉及组件/服务        最小化硬件配置        标准化硬件配置) ]- s# T5 p4 N( l( M
NFS        192.168.10.11        -        Core        2Core/8GB RAM/100G HDD        4Core/16GB RAM/1T SSD' I) q  Z  l% n% h/ ^7 C$ T
MySQL        192.168.10.11        3306        Core        2Core/8GB RAM/90G HDD        4Core/16GB RAM/1T SSD! g" u3 g* ^# H5 C' Y8 o+ K
Redis        192.168.10.11        6379        Core, Koko, Lion        2Core/8GB RAM/90G HDD        4Core/16GB RAM/1T SSD- k( u" \' j: G7 i
HAProxy        192.168.10.100        80,443,2222,33060,33061        All        2Core/4GB RAM/60G HDD        4Core/8GB RAM/60G SSD
4 X; r# S% b- z5 RJumpServer 01        192.168.10.21        80,2222,33060,33061        HAProxy        2Core/8GB RAM/60G HDD        4Core/8GB RAM/90G SSD
: @! f6 p  }' [2 `: K9 w8 M% LJumpServer 02        192.168.10.22        80,2222,33060,33061        HAProxy        2Core/8GB RAM/60G HDD        4Core/8GB RAM/90G SSD
3 N7 Z. M( I5 X; t5 ]JumpServer 03        192.168.10.23        80,2222,33060,33061        HAProxy        2Core/8GB RAM/60G HDD        4Core/8GB RAM/90G SSD7 Z0 J( v: _0 g6 m
JumpServer 04        192.168.10.24        80,2222,33060,33061        HAProxy        2Core/8GB RAM/60G HDD        4Core/8GB RAM/90G SSD7 e9 }$ |- ^5 g! P$ g. R
MinIO        192.168.10.41        9000,9001        Core, KoKo, Lion        2Core/4GB RAM/100G HDD        4Core/8GB RAM/1T SSD$ `7 N, W( h* e7 g3 A4 K- n4 e
Elasticsearch        192.168.10.51        9200,9300        Core, KoKo        2Core/4GB RAM/100G HDD        4Core/8GB RAM/1T SSD
4 E* Y# l, T+ l' A1.3 组件容器健康检查⚓︎
1 {) l5 i: ^2 F服务名称        健康检查        实例
3 l7 @# l3 Z, G9 c1 C4 b3 a6 ^# `Core        http://core:8080/api/health/        https://demo.jumpserver.org/api/health/
/ W5 w3 Y" G6 K, v9 rKoKo        http://koko:5000/koko/health/        https://demo.jumpserver.org/koko/health/! n4 h# L: V) n4 k7 f& \
Lion        http://lion:8081/lion/health/        https://demo.jumpserver.org/lion/health/
: k; T: j8 Z! A( [# ^" [2 部署顺序⚓︎2 `9 _9 ^0 B1 z# ]2 W! a! p
1.部署 NFS 服务
3 J  t9 ~$ x* v1 Y$ D5 M' _- o! E. v
2.部署 MySQL 服务
6 R; N* y. U8 Q( q2 t7 W' Y# l
# b/ h" w3 J4 z. C% ^) H5 J% |) o3.部署 Redis 服务
( s" M2 z8 V6 M  o9 [2 c1 g0 t8 y: Z6 Z( t& X4 h) ?
4.部署 JumpServer 01 节点
3 b! [4 `' q" K
# ~4 `, q; m6 _4 V/ T5.部署 JumpServer 02 节点
, H. ~+ I' _! w) _, ?$ [+ j9 t; G( s4 m( H2 |1 R
6.部署 JumpServer 03 节点
) M- f9 U+ J$ R- }  [# O. m0 ^! m
: J( b" [5 J3 \: a7.部署 JumpServer 04 节点$ @% P5 |. r- m! ?

( j5 `- d; G9 [8.部署 HAProxy 服务
& N4 I  h5 I+ [/ [
9 \3 Z* M( T& \( K2 g) d  K3 ?: m9.部署 MinIO 服务
6 @) k" K; Q! {# M0 @' C# V' k* q5 ^& U! M/ i! N7 @
10.部署 Elasticsearch 服务
# Z( f  [, [8 T* c. v
 楼主| 发表于 2023-3-8 10:00:02 | 显示全部楼层
部署 NFS 服务⚓︎
) J* T$ a5 ^4 @# B- U8 K- q1 NFS 服务器端安装与配置⚓︎  `8 N4 l3 y, M, ?9 g0 s, x
1.1 环境信息⚓︎3 C1 R7 G7 `7 o1 m$ r' [, N4 Z/ G
NFS 服务器信息如下:' F2 E5 V$ g; J
6 A% X- ^: a: n  s3 j9 W/ @
192.168.10.11
  q, q  l  N7 `/ u% N4 N1.2 安装依赖⚓︎- C7 O1 b4 D% H
5 Q) P% {/ p4 l. g, j2 Z8 W# x0 _
yum -y install epel-release$ x1 V- {9 v6 r
1.3 安装 NFS 依赖包⚓︎" Y; L. P, D0 R' F" G; }

; F$ P) z, A% C- @1 U7 tyum -y install nfs-utils rpcbind
. c5 U1 D. s% H. q1.4 启动 NFS⚓︎
' d# l; h$ g# @4 c: _, R6 a* t- u0 P2 |2 _0 l) y
systemctl enable rpcbind nfs-server nfs-lock nfs-idmap
9 x. `/ ~# n! y1 t9 Lsystemctl start rpcbind nfs-server nfs-lock nfs-idmap
' }% O" X$ Y# b! ~4 K! q* T, q, F1.5 配置防火墙⚓︎2 \- k- }$ L& c# w- M

6 Q) `" z( h  i( P% |( E: O' a; Zfirewall-cmd --add-service=nfs --permanent --zone=public2 G1 j% r3 v" H0 U- ~* [9 s
firewall-cmd --add-service=mountd --permanent --zone=public
( J. e, ?9 ?- H/ G9 V: H+ Cfirewall-cmd --add-service=rpc-bind --permanent --zone=public6 B4 q6 Q% x5 T3 t7 |5 r( j' a
firewall-cmd --reload
. w# `$ N: S/ w8 g6 v( L* o: B1.6 配置 NFS⚓︎3 x1 r0 O  q1 c
2 H5 g4 [9 `- B: C
mkdir /data. h  [" p  i4 g8 b. k% @7 E
chmod 755 -R /data
. w" n. i! R* O/ f5 ]
! E* O2 e- S' g) h* b( Rvi /etc/exports7 ~9 C1 c1 i/ N" S) F6 @" W, k! b
" ^5 m/ c7 x. I- {' k: U% _
# 设置 NFS 访问权限, /data 是刚才创建的将被共享的目录, 192.168.10.* 表示整个 192.168.10.* 的资产都有括号里面的权限
( {. Y% r6 v  z& \8 {  e' c# 也可以写具体的授权对象 /data 192.168.10.30(rw,sync,no_root_squash) 192.168.10.31(rw,sync,no_root_squash)6 P% ?% {; f( i
" z- v3 v; h; v2 |8 \: U
/data 192.168.10.*(rw,sync,all_squash,anonuid=0,anongid=0)
! U8 Z" U. Q" P6 L9 g! \% E
) G" X, v; P# l9 A( Q9 k# v- Z; J, O3 \* l! |
1.7 让 exports 配置生效⚓︎9 y0 S+ n1 l# C$ ~

0 [, H  v* q+ texportfs -a2 I* m! l2 V4 Q" d
 楼主| 发表于 2023-3-8 10:00:03 | 显示全部楼层
部署 MySQL 服务⚓︎
. s$ k) r) }, d- S1 准备工作⚓︎3 A5 M; A3 S6 W+ j: @, [4 x
1.1 环境信息⚓︎) s# T! l1 U8 Z+ j( V0 a
MySQL 服务器信息如下:' a% ]0 Y' H$ R$ n
9 H7 S; A$ _9 N  ?& f6 z
192.168.10.11
& [& K4 l: E% R5 o# i0 i1.2 设置 Repo⚓︎* j: E9 X1 q. k, M% |$ W% w9 k

7 O' b6 B$ C# o  H: U4 ryum -y localinstall http://mirrors.ustc.edu.cn/mysql ... ity-release-el7.rpm4 @3 z; m9 g( V$ O' y% G2 }  i: j
2 安装配置 MySQL⚓︎$ J  g6 \, x: G' A6 r# |
2.1 Yum 方式安装 MySQL⚓︎0 C3 g. r% c2 z6 |
5 e( G! Z) M, A6 n: U! l
yum install -y mysql-community-server9 W( X' q' ]# n6 O; P
2.1 配置 MySQL⚓︎) I- |7 O6 H7 `- D; r

$ m$ x; y* M- U, gif [ ! "$(cat /usr/bin/mysqld_systemd | grep -v ^\# | grep initialize-insecure )" ]; then
% a/ E6 ^# F+ d+ W0 V3 x    sed -i "s@--initialize @--initialize-insecure @g" /usr/bin/mysqld_systemd% P8 r( l+ g3 e9 |! f+ d
fi$ K" b( z! p1 i( d
2.2 启动 MySQL⚓︎: g6 K) @, H8 R* H, J
0 v5 U0 G3 Z+ f  _
systemctl enable mysqld0 `" N1 W7 S! d0 L
systemctl start mysqld7 H, K% p- f$ B/ L- U
2.3 配置数据库授权⚓︎# f% E0 p4 T# B, M5 Z

$ s% ]/ D; ~+ T* Q* b, G$ \mysql -uroot
# \; r" |; I( j; g% H6 D1 f  C6 D4 y* h. C8 H
Welcome to the MySQL monitor.  Commands end with ; or \g.
" z9 |/ K8 l$ VYour MySQL connection id is 2
8 @9 B$ n7 A: [3 o  W- p% J4 L: F* aServer version: 5.7.32 MySQL Community Server (GPL); m* [) q' u7 q% N
" }$ w+ W; [0 K8 m8 m  ]5 w
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.' @; o: I( n% q. l% G

& j8 n9 _" n- o, g1 {4 M; z' ~Oracle is a registered trademark of Oracle Corporation and/or its. q) Q, D" x0 W8 `
affiliates. Other names may be trademarks of their respective
$ E7 ?. o0 k2 q9 v. Zowners.5 d4 o& A5 ~5 h! B- y# j& N' y
/ F$ }; F! U  D* S1 V2 I
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.) t7 m7 }6 r: r/ V3 r1 ~9 S& I) f
4 ~+ x3 w7 T; D2 ]$ _; ?4 X
mysql> create database jumpserver default charset 'utf8';
1 g; b7 R" S; XQuery OK, 1 row affected (0.00 sec)& e' M2 H3 e: t
0 [' X. a8 z$ ]: i! w+ U/ T3 Q- {
mysql> set global validate_password_policy=LOW;% t3 p# m% O" F
Query OK, 0 rows affected (0.00 sec)
* B. C' `! P" z9 j' E1 _
6 c# ~3 ~. Z  d# f# q% Lmysql> create user 'jumpserver'@'%' identified by 'KXOeyNgDeTdpeu9q';+ M7 A7 x# m1 }4 c
Query OK, 0 rows affected (0.00 sec)
" G0 {9 m8 a6 t; W/ g1 ~& M# [! }3 W4 o: H, X: x
mysql> grant all on jumpserver.* to 'jumpserver'@'%';9 s5 Q+ C" s# u* _. `$ Y
Query OK, 0 rows affected, 1 warning (0.00 sec)
% G! P) Z+ x% L! {. a
( w6 G' D5 Y( }% [( u1 N& z, Fmysql> flush privileges;
4 }  ]( N  c4 U% `; @* z) CQuery OK, 0 rows affected (0.00 sec)* t* w- g" c0 K6 Y! k* }

# Y; w4 p3 m6 i: Q6 V% Hmysql> exit4 H$ A! P) \9 _8 W: ~% |) L: G' P5 L
Bye
/ S; {1 Z( I2 ]3 _  J3 配置防火墙⚓︎" W3 s# P4 M! E

7 F- Q( b  p# i. e( qfirewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.10.0/24" port protocol="tcp" port="3306" accept"3 ]* w1 K" [  p: u( R# u
firewall-cmd --reload/ _- }3 G& w$ |# Z0 |# u1 W* A( y
9 U1 F& c5 O8 F1 W4 K* X. J
 楼主| 发表于 2023-3-8 10:00:04 | 显示全部楼层
部署 Redis 服务⚓︎
" I1 ^  Q% z0 C6 ~& X1 d# O1 准备工作⚓︎
" }9 ~5 q( j1 a- h# T( {, E! d1.1 环境信息⚓︎& n! U4 F7 A$ ~
Redis 服务器信息如下:0 z: z4 V3 E# [7 j

0 G& r( n6 v# R! `( f9 C" V; ?192.168.10.11
& ^- a# A, r9 u1.2 设置 Repo⚓︎
- J/ |' h1 F5 A
6 s9 d2 W0 m' Tyum -y install epel-release https://repo.ius.io/ius-release-el7.rpm
5 ]- ^% `6 i8 X5 @. S1 I7 _2 安装配置 Redis⚓︎8 s2 s8 s% y* z8 D1 x' l
2.1 Yum 方式安装 Redis⚓︎/ ?5 `% D5 D; w* M9 G5 e
7 z) v# @, Z- U) m8 w( \9 p
yum install -y redis6
3 O: p2 U+ l" H  k* l! h+ e" s2.2 配置 Redis⚓︎7 A+ e7 M6 A- E/ [
6 S! G3 y& b9 h" O( M+ C# i5 H2 n; `
sed -i "s/bind 127.0.0.1/bind 0.0.0.0/g" /etc/redis.conf+ u/ M. s& y) k6 R0 d7 b% [
sed -i "561i maxmemory-policy allkeys-lru" /etc/redis.conf' S# l! O2 J+ P! X  ]
sed -i "481i requirepass KXOeyNgDeTdpeu9q" /etc/redis.conf6 R4 J6 ^1 y* k' v
2.3 启动 Redis⚓︎
/ l6 \+ M& q6 ?# v3 T  {: l" y4 ~& {% k
systemctl enable redis
. }$ R% x. S( Dsystemctl start redis
, _. f  y6 h6 B) |# _8 `' E, _3 配置防火墙⚓︎( M- e- s) k- ^

& R# {" T/ Q6 M" Mfirewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.10.0/24" port protocol="tcp" port="6379" accept"
6 x- t) ^! O' b  A: n) u& rfirewall-cmd --reload
 楼主| 发表于 2023-3-8 10:00:05 | 显示全部楼层
部署 JumpServer 01 节点⚓︎
3 z/ Q+ n9 V$ T1 准备工作⚓︎4 n- m0 d6 W) ?0 E
1.1 环境信息⚓︎) ^% j4 v$ H" b# S
JumpServer_Node_01 服务器信息如下:
# x/ ]1 O7 I( j$ c% R& T, R1 D  ?5 s1 g+ i4 x8 b+ G* h, @
192.168.10.21/ A( R2 J  Q* L$ g
2 配置 NFS⚓︎
6 k$ Z$ {8 G  _3 O( A2.1 安装 NFS 依赖包⚓︎
* s. ]7 o; }+ t% d2 {0 ?& O3 C
. I( I, y5 c, K1 L6 Y' W6 E' Jyum -y install nfs-utils
8 N0 c8 u# _3 k7 oshowmount -e 192.168.10.117 I: ?2 K) i9 p; X7 o
2.2 挂载 NFS 目录⚓︎1 W+ c3 X% n' M! Z* {

, D1 t7 B; _3 Q6 w) r- i# 将 Core 持久化目录挂载到 NFS, 默认 /opt/jumpserver/core/data, 请根据实际情况修改. f! ^( `% H2 y8 Q1 A0 m! T9 E
# JumpServer 持久化目录定义相关参数为 VOLUME_DIR, 在安装 JumpServer 过程中会提示
1 u, [# g9 t! H) K% ~mkdir /opt/jumpserver/core/data+ D( C$ Q$ J1 w' J; h6 b
mount -t nfs 192.168.10.11:/data /opt/jumpserver/core/data9 N! v  d" R  S$ i6 r* u/ I) e
2.3 配置 NFS 共享目录开机自动挂载⚓︎
. H0 g* H4 T4 `. }$ ~9 }. v$ x/ R2 ^; X4 D. l5 ~
# 可以写入到 /etc/fstab, 重启自动挂载. 注意: 设置后如果 nfs 损坏或者无法连接该服务器将无法启动! t' L& u6 ]5 _+ ^; e1 ~
echo "192.168.10.11:/data /opt/jumpserver/core/data nfs defaults 0 0" >> /etc/fstab
7 G2 h5 o3 A* n) O# \( n/ o$ t" ^3 安装 JumpServer⚓︎
- B. x4 E( f# ~" ]1 H$ g3.1 下载 jumpserver-install 软件包⚓︎7 g8 b& L3 y+ b; A1 L
# ~( m! {: N/ g; A, E+ M
cd /opt1 @* N  M* p; R& U' q( L7 _
yum -y install wget
2 D) L9 p3 Q! K: fwget https://github.com/jumpserver/in ... aller-v3.0.3.tar.gz
8 j& Z" o9 n9 J1 u* m9 y6 m- atar -xf jumpserver-installer-v3.0.3.tar.gz5 \, M3 t: p4 X( a5 U9 K
cd jumpserver-installer-v3.0.3
& o3 Y; ?/ \4 }! T3.2 修改临时配置文件⚓︎& p! M3 J( d  ?6 r
5 Q7 G" l: g; W( T" d; Z2 u7 h: r
vi config-example.txt
3 J1 F/ \8 D3 |8 W! ?/ Y
6 _  |( }8 w. |& J+ x4 P  c# 修改下面选项, 其他保持默认, 请勿直接复制此处内容* C: y! i$ I% C- }2 r4 ]8 P
### 注意: SECRET_KEY 和要其他 JumpServer 服务器一致, 加密的数据将无法解密
. C( d% K3 N6 G" U. O. Z+ x! O2 k, q  i( Q3 L7 _* m
# 安装配置. I9 T, w( r/ b4 |
### 注意持久化目录 VOLUME_DIR, 如果上面 NFS 挂载其他目录, 此处也要修改. 如: NFS 挂载到 /data/jumpserver/core/data, 则 VOLUME_DIR=/data/jumpserver
9 ~+ r3 u. K0 B, B' x) Q# `VOLUME_DIR=/opt/jumpserver
; g" Z* `) L  I/ Y& b% @  C5 J# U% c& I; J

9 l+ d; C- u- `' G# Core 配置
/ [" ]; d. E7 V* F### 启动后不能再修改,否则密码等等信息无法解密, 请勿直接复制下面的字符串- }/ U1 A, ^4 M3 Y' L$ Z
SECRET_KEY=kWQdmdCQKjaWlHYpPhkNQDkfaRulM6YnHctsHLlSPs8287o2kW    # 要其他 JumpServer 服务器一致 (*)# u  v9 Q  U8 N) ^
BOOTSTRAP_TOKEN=KXOeyNgDeTdpeu9q                                 # 要其他 JumpServer 服务器一致 (*), `: v& W! s) N- `2 Y
LOG_LEVEL=ERROR                                                  # 日志等级
; z4 V7 T8 a0 ^. r2 R  _7 _# SESSION_COOKIE_AGE=86400  J/ L* X: c) h- n6 W
SESSION_EXPIRE_AT_BROWSER_CLOSE=True                             # 关闭浏览器 session 过期
2 x7 B7 u$ P$ r9 X1 F+ [& {8 y3 L8 d) X0 M1 Z% ]% `
# MySQL 配置( _* L, X; ]% S! [) }
# V( Q, l9 {; a. i# @9 v' X
DB_HOST=192.168.10.11! w2 N+ \$ y* z$ \! y
DB_PORT=33060 e" Y. T9 E6 U+ T* g; {
DB_USER=jumpserver& f' z! p1 }9 F) \
DB_PASSWORD=KXOeyNgDeTdpeu9q2 t) e8 n2 [: T% F, ?2 `% o) Y
DB_NAME=jumpserver! D9 y+ P: P; L

" R3 Q: d* Q) a2 T9 Y6 u3 y# ~# Redis 配置
4 |2 y" v0 Z0 w" L& t0 u. W' p6 k" H* ]5 \' c6 c
REDIS_HOST=192.168.10.11
. x8 z0 @) s3 A- z6 PREDIS_PORT=6379; u' u+ ^; H2 |5 r
REDIS_PASSWORD=KXOeyNgDeTdpeu9q
! P: }' m! M3 J4 [: V
& t3 L& f& I2 K! l* \# KoKo Lion 配置# [: ^) D% Q! r+ n1 _7 i; n
SHARE_ROOM_TYPE=redis                                            # KoKo Lion 使用 redis 共享  m: ~  \' ^: s$ o. O
REUSE_CONNECTION=False                                           # Koko 禁用连接复用+ b$ j0 {7 ]: U
3.3 执行脚本安装 JumpServer 服务⚓︎
, E% F3 E7 Y* G& i9 C9 _  k. w  x3 M3 x5 e+ t! D
./jmsctl.sh install
: \- f2 ^1 @' _/ s: e4 o" K
' r' S" a0 d$ c  f       ██╗██╗   ██╗███╗   ███╗██████╗ ███████╗███████╗██████╗ ██╗   ██╗███████╗██████╗) K0 F) K; X( U. d( }# h
       ██║██║   ██║████╗ ████║██╔══██╗██╔════╝██╔════╝██╔══██╗██║   ██║██╔════╝██╔══██╗
9 ^7 @# Q* I: ]       ██║██║   ██║██╔████╔██║██████╔╝███████╗█████╗  ██████╔╝██║   ██║█████╗  ██████╔╝
  \( A- z# K/ G6 C2 c& M8 l! k7 O  ██   ██║██║   ██║██║╚██╔╝██║██╔═══╝ ╚════██║██╔══╝  ██╔══██╗╚██╗ ██╔╝██╔══╝  ██╔══██╗
. a- @! q; ]9 ]  ╚█████╔╝╚██████╔╝██║ ╚═╝ ██║██║     ███████║███████╗██║  ██║ ╚████╔╝ ███████╗██║  ██║
& t* _& |$ d$ L' y   ╚════╝  ╚═════╝ ╚═╝     ╚═╝╚═╝     ╚══════╝╚══════╝╚═╝  ╚═╝  ╚═══╝  ╚══════╝╚═╝  ╚═╝- C# I: S+ a& ^( A6 \9 Y" x
1 u1 V8 o4 K  v2 h0 O- |
                                                                     Version:  v3.0.3" f3 V4 d1 B0 r2 [, j. l6 A0 E3 ]
2 ^9 f. V! ]! \4 v$ D" K) Q
3 q6 E  ]. `, ~2 B: R! a1 h
1. 检查配置文件$ x" W  a9 l$ b; L6 e
配置文件位置: /opt/jumpserver/config  W# G+ W3 J: A
/opt/jumpserver/config/config.txt  [ √ ]
* u: c) o3 H( S* o& U/opt/jumpserver/config/nginx/lb_rdp_server.conf  [ √ ]1 {3 ?3 j# l. M! D3 ]. b
/opt/jumpserver/config/nginx/lb_ssh_server.conf  [ √ ]
: }  _. B9 x6 J& D% A4 v/ z8 k$ r/opt/jumpserver/config/nginx/cert/server.crt  [ √ ]
0 ~. F( v1 S9 B4 ?9 L/opt/jumpserver/config/nginx/cert/server.key  [ √ ]! ^- C4 |4 z6 j# y
完成/ Q3 O3 q7 a/ z5 y# s' I2 _9 ^5 f
$ z3 ]  j* |  f/ U4 j% W
2. 备份配置文件
0 [1 G! J. M" ^+ Q/ p& K( H2 J备份至 /opt/jumpserver/config/backup/config.txt.2021-07-15_22-26-13
" L! r3 l' _6 b- U完成( n( J8 c- a2 w' O" }

" C/ G8 F7 |( I5 o. J0 [>>> 安装配置 Docker
" y# \+ V& h) h; d. W1. 安装 Docker
3 A4 ?4 F: a3 m: X4 ~' X开始下载 Docker 程序 ...0 I$ _- K) Q! j" Y+ [" @
开始下载 Docker Compose 程序 ...# K, {; G9 w) W5 D4 V+ i+ j9 g
完成
9 y6 ^' N3 k/ X& _5 H& T# _* F
% X6 s! \8 L* u  t! Y0 l2. 配置 Docker
  O5 X5 H. R& y" M; X, _是否需要自定义 docker 存储目录, 默认将使用目录 /var/lib/docker? (y/n)  (默认为 n): n& G% S/ Z( S: M* a" t
完成
- U" o* Z2 |: e; s
2 K: M2 d; Y* ~6 M+ w% e3. 启动 Docker4 O* P' l$ z, l+ w# N# h* o
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /etc/systemd/system/docker.service.
' b' H! T  l, y完成
! j, n0 y' ]! s  Y9 i4 d% q9 l. ^6 f' T( d
>>> 加载 Docker 镜像$ c+ M' _# G+ B/ W' z* P# h
Docker: Pulling from jumpserver/core:v3.0.3         [ OK ]( d- d1 y% `* z9 F& Q
Docker: Pulling from jumpserver/koko:v3.0.3         [ OK ]
* M- Q4 {. w6 a& R$ ~Docker: Pulling from jumpserver/web:v3.0.3      [ OK ]
% w; w  W" a3 iDocker: Pulling from jumpserver/redis:6-alpine      [ OK ]
1 G# S! H9 i  U) D8 PDocker: Pulling from jumpserver/mysql:5             [ OK ]5 k; F) L( D* n  E! G' g# j! z
Docker: Pulling from jumpserver/lion:v3.0.3         [ OK ]
) ~- n2 b, E9 X  S5 I5 S8 J- n8 m
>>> 安装配置 JumpServer
5 \) W% p4 d: H, |. B6 E1. 配置网络4 S) V+ r4 o1 A9 X; z& R1 U6 M5 y
是否需要支持 IPv6? (y/n)  (默认为 n): n" \  b2 r* F* o0 q% G- c
完成
9 l1 e/ I6 Q9 x: `% o4 a/ A
3 t  \8 E/ d7 w5 U2. 配置加密密钥
" N1 u9 o+ o5 e: m% B4 F: {0 K: WSECRETE_KEY:     YTE2YTVkMTMtMGE3MS00YzI5LWFlOWEtMTc2OWJlMmIyMDE24 C# T7 R" c. y3 Z4 o" i8 Z
BOOTSTRAP_TOKEN: YTE2YTVkMTMtMGE31 W; z* ?( A3 Q$ b/ Q) h
完成
% [' \# ]" ]  C1 X/ x! c$ b( r: y& H) H- `& {
3. 配置持久化目录
4 N& @: S" b% f. k0 u- d: G是否需要自定义持久化存储, 默认将使用目录 /opt/jumpserver? (y/n)  (默认为 n): n
+ k0 ?1 n/ f; E: H完成
/ [! Z0 }3 Z, Z7 k4 m% s5 G
+ X/ g  k  S3 ?8 V, J, X. {4. 配置 MySQL2 y( ?4 y' M" b( e" o
是否使用外部 MySQL? (y/n)  (默认为 n): y
- l( d/ @% E$ H) E请输入 MySQL 的主机地址 (无默认值): 192.168.10.11
, r. O9 L: K) p  K# E请输入 MySQL 的端口 (默认为3306): 3306
" B: [( ^' P% e3 Y. f0 L4 n  d- A' w请输入 MySQL 的数据库(事先做好授权) (默认为jumpserver): jumpserver
( o7 L% T$ M8 _+ E! I  k请输入 MySQL 的用户名 (无默认值): jumpserver5 ~7 A# l3 u9 B& ]
请输入 MySQL 的密码 (无默认值): KXOeyNgDeTdpeu9q& R4 p' x2 G$ K1 i4 k1 I& {
完成$ ^- _7 j, P! {$ _- ^) o  U

/ Z7 }- X" C' X, X: j9 l/ |& I4 x2 F5. 配置 Redis) j- X6 M2 k; d1 d/ s$ F, E
是否使用外部 Redis? (y/n)  (默认为 n): y
% t9 g) o( |, n- e( y# o$ O请输入 Redis 的主机地址 (无默认值): 192.168.10.115 `9 Y- @& \' [" M
请输入 Redis 的端口 (默认为6379): 63799 N! r+ F2 \# r, t
请输入 Redis 的密码 (无默认值): KXOeyNgDeTdpeu9q4 l; g4 J& R5 H! j
完成
: N. r4 E3 [, C: u0 R6 |, E2 k2 |0 B7 s: B8 T% Y# O8 D
6. 配置对外端口
8 t5 H: \1 R1 B6 Y$ Y$ `是否需要配置 JumpServer 对外访问端口? (y/n)  (默认为 n): n
/ i( g6 z0 R" V- ^/ V. N  y. @  @完成3 F: u) w- h+ m# [2 @% g

/ q" ?1 c$ K3 }. ?7. 初始化数据库" J; O+ z! Q0 b! Y7 W+ q2 Q+ m
Creating network "jms_net" with driver "bridge"
2 F1 p* ^1 ]; O: \; B3 E% m. ACreating jms_redis ... done  z! `0 D8 p, q
2021-07-15 22:39:52 Collect static files! p4 k' s9 ~: b; Q+ a
2021-07-15 22:39:52 Collect static files done
  O; H6 L5 S% w: H6 N' F2021-07-15 22:39:52 Check database structure change ...$ [) C1 a* J( ^! m
2021-07-15 22:39:52 Migrate model change to database ...4 g) L, e5 e/ v0 \/ v( T

! N) T# ]2 f# _475 static files copied to '/opt/jumpserver/data/static'.8 g" Q  u: Q# E# ]
Operations to perform:
6 R) d  @) _% C. u. |: a8 q  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, users3 @6 O/ i+ Z6 P. }
Running migrations:
( t; P4 `8 o7 d% X' a8 e: H  Applying contenttypes.0001_initial... OK5 q, X& ~( X' m/ w1 X0 D
  Applying contenttypes.0002_remove_content_type_name... OK/ A4 X% I$ @2 A5 c  _$ h1 B9 z
  Applying auth.0001_initial... OK
" w: x! ^7 S7 H: v2 i& L  Applying auth.0002_alter_permission_name_max_length... OK$ n* Z  @' N. D+ m6 ~
  Applying auth.0003_alter_user_email_max_length... OK
3 @  M8 e! d  A5 o  Applying auth.0004_alter_user_username_opts... OK
! R! N8 m) H4 o  R* \2 G3 \  Applying auth.0005_alter_user_last_login_null... OK; M. `% ?- u% D! D7 S
  Applying auth.0006_require_contenttypes_0002... OK
4 N4 ?: A9 u1 u1 h3 L  Applying auth.0007_alter_validators_add_error_messages... OK
+ s; t9 i1 g- z& v" n  Applying auth.0008_alter_user_username_max_length... OK
& o1 A! l9 j* F  V7 b- w  ..., N7 ~# f. A( v7 \0 v2 b  h
  Applying sessions.0001_initial... OK
7 x+ h$ R7 A& H  Applying terminal.0032_auto_20210302_1853... OK
/ [1 s: ?+ @8 i! Z8 W  Applying terminal.0033_auto_20210324_1008... OK' V. {5 T% H: s( t
  Applying terminal.0034_auto_20210406_1434... OK$ P$ m0 p# a- t8 w  n( t7 e
  Applying terminal.0035_auto_20210517_1448... OK8 v# D  {$ A8 R+ r3 C
  Applying terminal.0036_auto_20210604_1124... OK
3 w7 g- E7 b6 M# _' N  Applying terminal.0037_auto_20210623_1748... OK2 Q2 \6 x8 S5 g
  Applying tickets.0008_auto_20210311_1113... OK
) S: J' B2 h" C+ G  Applying tickets.0009_auto_20210426_1720... OK$ D6 X5 K. j3 M5 p- N3 \

. O+ Y+ B2 F+ z+ _2 C% x  z0 a>>> 安装完成了+ I8 z9 M+ ]- s  ~: {2 S
1. 可以使用如下命令启动, 然后访问1 l" H3 F9 G0 w/ X+ k; I  D$ l
cd /root/jumpserver-installer-v3.0.3
& i7 m- s# q9 Y( F- \( w) S./jmsctl.sh start0 \+ w0 |& B) |" g  U8 p( \2 W+ Q4 q
  M5 H7 d, x: z( [, p# T3 b/ z
2. 其它一些管理命令9 n. L  Q, \5 K
./jmsctl.sh stop
; `) R) X3 [, K5 D. f% e, U# g./jmsctl.sh restart
8 U' @, c9 ?* o- i./jmsctl.sh backup- M# D/ c* p5 q! K2 m
./jmsctl.sh upgrade
" Z3 V+ E/ e# f% g$ J5 i; b* ]更多还有一些命令, 你可以 ./jmsctl.sh --help 来了解
0 T. L: @/ \$ K7 R5 k& R( ]% ]  \; U8 N
3. Web 访问
- @. a+ J- g& b% [/ Shttp://192.168.10.212:802 q" [5 V* R) g: \) E1 Q1 u
默认用户: admin  默认密码: admin
  ~2 t, F* M* }; w7 Q
2 G. X4 _* u- r1 c6 N4. SSH/SFTP 访问
+ c/ F  _8 z5 J, d  M( Y7 ?- cssh -p2222 admin@192.168.10.212
( {* U. ]- k( `" _sftp -P2222 admin@192.168.10.212& Q; l% y5 n9 K( D4 e

8 p( U: a6 X! L2 h$ `( p5. 更多信息. H9 G/ a  G- p1 F; F
我们的官网: https://www.jumpserver.org// ]5 l; ^- H- O
我们的文档: https://docs.jumpserver.org/
$ O* z$ c) m0 Q2 i' j3.4 启动 JumpServer 服务⚓︎
! o8 _9 Z+ p: a! W) k. }2 ?7 }" B9 k& [
./jmsctl.sh start- `3 n* a. J; K3 q) |& }; }

9 p" K- f0 _- M; S% @! m& E. hCreating network "jms_net" with driver "bridge"
, s# T; @" L% h2 t* C5 S' PCreating jms_core      ... done  [$ d8 i/ Z" O' M. R8 R: p
Creating jms_celery    ... done
, P' Q4 q9 ~8 j8 T: |  E( M& LCreating jms_lion      ... done
' I3 p  S1 r& Z) N5 gCreating jms_koko      ... done/ Q& @# n" s) B9 J5 f" r
Creating jms_magnus    ... done$ z/ ]* K0 W8 J3 L3 O" A
Creating jms_web       ... done% \" ^2 J* M7 t3 a/ u
4 Q5 h3 z3 Q( b- r' _& P
 楼主| 发表于 2023-3-8 10:00:06 | 显示全部楼层
部署 JumpServer 02 节点⚓︎6 r7 _, E1 y3 B" P
1 准备工作⚓︎0 }: O2 E) R7 H5 M' Z& Q
1.1 环境信息⚓︎
8 Y8 ]4 M$ s$ x. u6 O7 P; z0 kJumpServer_Node_02 服务器信息如下:
( Z4 j9 E. ~; k0 N+ @% l# ^) @7 V; r
192.168.10.22/ Z" b  E2 e8 }) s. P2 a
2 配置 NFS⚓︎
3 t# y  K5 u, ~  h. O. P& M2.1 安装 NFS 依赖包⚓︎+ ?- s% D4 w$ M; y/ ]

/ ^7 Z+ P1 s2 T* eyum -y install nfs-utils
9 u+ I: q9 r& N( A  A( F: P/ p' Nshowmount -e 192.168.10.11
& X! A' G. h; r1 h2.2 挂载 NFS 目录⚓︎
) G+ {* q" }7 b% c
( z% A0 ]: k/ x3 M! x! [# 将 Core 持久化目录挂载到 NFS, 默认 /opt/jumpserver/core/data, 请根据实际情况修改1 w# r% l, T* ]& q) [8 a+ l
# JumpServer 持久化目录定义相关参数为 VOLUME_DIR, 在安装 JumpServer 过程中会提示$ ~5 s7 K7 A8 Z
mkdir /opt/jumpserver/core/data4 v2 M6 D8 \6 K7 u$ p) L
mount -t nfs 192.168.10.11:/data /opt/jumpserver/core/data+ j5 T" ^! g# q% y) [0 X
2.3 配置 NFS 共享目录开机自动挂载⚓︎* h1 W8 Q: a2 }2 }
1 X/ E, f; Z- a: I# u' h, |
# 可以写入到 /etc/fstab, 重启自动挂载. 注意: 设置后如果 nfs 损坏或者无法连接该服务器将无法启动& a2 e5 U1 s3 n4 @: J
echo "192.168.10.11:/data /opt/jumpserver/core/data nfs defaults 0 0" >> /etc/fstab
1 ~' j0 L) \$ _) |" L/ Z3 安装 JumpServer⚓︎! R" l. s% q- ?; Y  [* i! }9 u
3.1 下载 jumpserver-install 软件包⚓︎' K) L* T6 }: D
- W5 d( A6 K# g9 ^
cd /opt, u/ ~9 r4 y4 ^
yum -y install wget
9 }; N, `/ f1 H6 g& F0 mwget https://github.com/jumpserver/in ... aller-v3.0.3.tar.gz
( s6 b: B+ |& @8 u3 Ztar -xf jumpserver-installer-v3.0.3.tar.gz
6 Z7 ~( b2 F/ Z! {4 o+ rcd jumpserver-installer-v3.0.35 s3 q- y" w3 ^& J5 ]/ A
3.2 修改临时配置文件⚓︎
1 o; a; c& x/ T* D  w8 u& o9 C- F1 {! J5 f3 A' y
vi config-example.txt( }) }! s& l9 u* X, F+ K
. @6 r1 C9 o1 A) i5 k) m0 N- ?
# 修改下面选项, 其他保持默认, 请勿直接复制此处内容7 |* v6 n7 b  m/ b
### 注意: SECRET_KEY 和要其他 JumpServer 服务器一致, 加密的数据将无法解密
" L1 p: z5 u. `6 q$ ~: z6 M( M- K: O# j% P1 Z* \
# 安装配置6 a0 W1 V8 k1 U/ ?
### 注意持久化目录 VOLUME_DIR, 如果上面 NFS 挂载其他目录, 此处也要修改. 如: NFS 挂载到 /data/jumpserver/core/data, 则 VOLUME_DIR=/data/jumpserver
) q" k$ O5 }7 i% b& ZVOLUME_DIR=/opt/jumpserver
" r4 J8 e7 K6 X  j
/ G/ {2 E0 D. M9 ]$ k7 V" s
: C) Q5 ], p$ `+ K# Core 配置
0 N& H1 `# A& ^7 X### 启动后不能再修改,否则密码等等信息无法解密, 请勿直接复制下面的字符串3 ^% p! L9 S  v3 y
SECRET_KEY=kWQdmdCQKjaWlHYpPhkNQDkfaRulM6YnHctsHLlSPs8287o2kW    # 要其他 JumpServer 服务器一致 (*)- s. j& u4 g8 i  J* f7 I- W: A1 l
BOOTSTRAP_TOKEN=KXOeyNgDeTdpeu9q                                 # 要其他 JumpServer 服务器一致 (*)1 t1 h: A+ ]6 c# @
LOG_LEVEL=ERROR                                                  # 日志等级
& k  V0 v9 b4 C) F2 v! {" u# SESSION_COOKIE_AGE=86400
8 R, G" @7 S# w2 w) Z# xSESSION_EXPIRE_AT_BROWSER_CLOSE=True                             # 关闭浏览器 session 过期
1 U: ]- ~) @$ g8 q7 T/ b  @5 z4 ]8 B. `5 M
# MySQL 配置
" I6 p2 z2 N4 q9 G" }5 j8 J6 o# ]& ]9 I: }" D/ n
DB_HOST=192.168.10.11" M  u) ~  z( t5 U
DB_PORT=3306
, X2 {/ _: W, a! J: l/ j. vDB_USER=jumpserver* K6 e0 W: o, C4 t6 N
DB_PASSWORD=KXOeyNgDeTdpeu9q
/ p# y  K( z, `0 b% PDB_NAME=jumpserver: ~4 a8 |. d' ~" u/ }: J* u

& y) p4 H2 z7 ]: H; \# Redis 配置
6 y4 _, Y* f" T9 }$ y" t9 i7 L2 d: e7 j; r4 k
REDIS_HOST=192.168.10.11
( P7 _. _3 K5 e- C# ]REDIS_PORT=6379( L0 Y  M2 [( Y9 |+ b& [8 v
REDIS_PASSWORD=KXOeyNgDeTdpeu9q1 P3 C9 {6 p8 d: v, l8 c

7 ?0 [" B" ~2 i& R# KoKo Lion 配置* T2 E% j9 O+ U
SHARE_ROOM_TYPE=redis                                            # KoKo Lion 使用 redis 共享
7 N. Q+ Z* e! A5 W. S; N1 f2 |' wREUSE_CONNECTION=False                                           # Koko 禁用连接复用7 H7 b2 q, L3 E" F, L: Z
3.3 执行脚本安装 JumpServer 服务⚓︎! U/ e& J1 E8 e3 {

$ g" U' m1 i; X4 s. F- v0 D./jmsctl.sh install
# [' C- W0 Q& e& b" _6 P4 k0 B3.4 启动 JumpServer 服务⚓︎
& ~. s+ F: ^7 E9 B% H0 ]; S* I, x/ S9 }- h$ Z
./jmsctl.sh start- H( x$ Z$ B; ?9 S" P

' ~' i1 D2 l. A$ hCreating network "jms_net" with driver "bridge", d9 j3 m- u5 D1 k, R
Creating jms_core      ... done* {0 }) J$ t5 d. ?' i! ]
Creating jms_celery    ... done: k* i: b8 T/ X3 l( x: n) w
Creating jms_lion      ... done% ]0 x: f# |0 K
Creating jms_koko      ... done* I  V# r, Q3 v
Creating jms_magnus    ... done0 c, d: q* t6 X
Creating jms_web       ... done8 ?3 ^4 y) f7 K" o# h$ Z6 [
( u2 H1 `" A( K& ~: V+ p. Q
 楼主| 发表于 2023-3-8 10:00:07 | 显示全部楼层
部署 JumpServer 03 节点⚓︎. g: P7 r$ j: }9 A! J  d' ^
1 准备工作⚓︎
3 i9 T) `5 x! a  D1.1 环境信息⚓︎  F5 I0 U/ D/ j+ r; L
JumpServer_Node_03 服务器信息如下:8 T2 s( m8 p- _+ y: H7 @8 r  ?
- p$ s" x5 |! M% K" B5 Y
192.168.10.23
% F5 i( n9 G; P# B7 X* H7 Y; l! |2 配置 NFS⚓︎
6 ~- ^: N3 [3 Z7 l& Z2.1 安装 NFS 依赖包⚓︎
; J) Q5 @& v0 q! q5 d
. V9 Q* {4 A, d& n5 e, ^yum -y install nfs-utils
4 c6 e! v/ t8 W0 ^+ {+ J3 Rshowmount -e 192.168.10.11& I$ U5 ~) n1 D6 K0 a
2.2 挂载 NFS 目录⚓︎
# M+ d; a) I, C
0 X5 x9 S1 S% I! t# 将 Core 持久化目录挂载到 NFS, 默认 /opt/jumpserver/core/data, 请根据实际情况修改
9 |- A% K# `3 ~; p) h+ A/ {; x$ V+ |# JumpServer 持久化目录定义相关参数为 VOLUME_DIR, 在安装 JumpServer 过程中会提示
! r8 Q  p* o- g/ k# G) C: P% k0 Omkdir /opt/jumpserver/core/data
) Y4 V6 k9 C* u* Smount -t nfs 192.168.10.11:/data /opt/jumpserver/core/data
2 W# F: ^: E7 ?2.3 配置 NFS 共享目录开机自动挂载⚓︎
0 D2 g( u4 j$ t4 ~# e! p' U! |& |3 U2 i0 M; E' X4 F5 _% o0 v4 `
# 可以写入到 /etc/fstab, 重启自动挂载. 注意: 设置后如果 nfs 损坏或者无法连接该服务器将无法启动+ \7 x% D. T6 E1 ~
echo "192.168.10.11:/data /opt/jumpserver/core/data nfs defaults 0 0" >> /etc/fstab) G% D* p, E; \
3 安装 JumpServer⚓︎
8 K) a2 X4 `5 r  y3 W% Z3.1 下载 jumpserver-install 软件包⚓︎
1 T' B# F2 L8 c$ n9 D3 C6 |8 b( E) W4 L/ i) W$ e
cd /opt/ ]' t: y- C8 y& ?
yum -y install wget
. p  F; P, \5 F% C& E- J) mwget https://github.com/jumpserver/in ... aller-v3.0.3.tar.gz
$ [% R. s& K& U- {" d1 ~) q! ktar -xf jumpserver-installer-v3.0.3.tar.gz: R$ s2 Y  A. d
cd jumpserver-installer-v3.0.37 J2 C) {; D$ u
3.2 修改临时配置文件⚓︎
3 k, o2 C! D* z3 _' }
: \* e; R1 l' D' Xvi config-example.txt
5 a8 m. _' Z' W% s, }
( o" G0 K- k# b2 i3 S# g# D# 修改下面选项, 其他保持默认, 请勿直接复制此处内容- h7 t. q& Y7 y' \) r  \
### 注意: SECRET_KEY 和要其他 JumpServer 服务器一致, 加密的数据将无法解密
3 d& q) R% H% a6 ~# s9 _" ]  x2 ]2 N5 \! G; M" @
# 安装配置
0 M# f1 S+ z" f6 x2 o* W+ u### 注意持久化目录 VOLUME_DIR, 如果上面 NFS 挂载其他目录, 此处也要修改. 如: NFS 挂载到 /data/jumpserver/core/data, 则 VOLUME_DIR=/data/jumpserver: J) B) C! P# \9 Z$ r
VOLUME_DIR=/opt/jumpserver
6 W# I* U% ]% q6 Q" K1 t0 F8 `0 ?* Z. ^9 n0 O4 j
7 I- _' F; F) a+ H+ S
# Core 配置( p9 U3 u* ]1 ?, K  e/ I5 ?7 Q
### 启动后不能再修改,否则密码等等信息无法解密, 请勿直接复制下面的字符串2 h" G& D. u/ p7 i
SECRET_KEY=kWQdmdCQKjaWlHYpPhkNQDkfaRulM6YnHctsHLlSPs8287o2kW    # 要其他 JumpServer 服务器一致 (*)
2 o3 t( W! Y; iBOOTSTRAP_TOKEN=KXOeyNgDeTdpeu9q                                 # 要其他 JumpServer 服务器一致 (*)* @4 p$ `- H' P8 e# A5 D) O- w
LOG_LEVEL=ERROR                                                  # 日志等级
& |8 g. K* k1 C2 S" l3 ~0 U# SESSION_COOKIE_AGE=86400
$ @3 B. P: h( t* s) a( vSESSION_EXPIRE_AT_BROWSER_CLOSE=True                             # 关闭浏览器 session 过期
# [( i  x, \: s0 y  W: C! `+ Z6 c/ |9 X9 K: v, K6 [
# MySQL 配置
& z$ x% M9 L8 d: _) q4 X
1 P4 M) u+ s) ^, GDB_HOST=192.168.10.118 @& Y2 l3 u* B
DB_PORT=3306* ]6 f% Y7 W, ]2 `& Y" y7 d8 V8 M
DB_USER=jumpserver
1 j" S1 d' Z1 {1 ]/ N. pDB_PASSWORD=KXOeyNgDeTdpeu9q
6 M4 t$ Q0 b+ iDB_NAME=jumpserver
0 L. {4 ]+ K/ j7 y! T" W! J5 l- P0 \& g! {" ]
# Redis 配置9 D' |$ R9 r5 c+ k; d" u- q
" b6 v1 l! @% c+ s% ]
REDIS_HOST=192.168.10.11
0 J. O2 i4 s# P. g. \2 ~$ BREDIS_PORT=6379
; ^! k# m' h5 d6 \- U' e; |REDIS_PASSWORD=KXOeyNgDeTdpeu9q
: f  W" s' w; x
0 ?! Z2 f: y, A, S. B( p# KoKo Lion 配置% s% h6 a% g0 x% V8 G9 a' a
SHARE_ROOM_TYPE=redis                                            # KoKo Lion 使用 redis 共享
* A. ?  |' [, a1 NREUSE_CONNECTION=False                                           # Koko 禁用连接复用
- c, \! B* Y! W3.3 执行脚本安装 JumpServer 服务⚓︎( u9 l; G7 T& {7 I4 o8 n& p
( W8 _/ D5 ~- x7 t. y6 y
./jmsctl.sh install
  R+ Q0 b& k* m/ n. i5 i2 {" r7 Y& Y3.4 启动 JumpServer 服务⚓︎3 B& }+ }, {+ \

0 s" i* z  M! Q% B./jmsctl.sh start% ^( N+ l( z0 \4 ?( K% G' j% I3 P
% y9 [' n4 k/ F+ H9 B9 c. X
Creating network "jms_net" with driver "bridge"+ W1 }5 ~* H5 a' x3 a, U) H( h9 W
Creating jms_core      ... done) `. n  S5 E( Q
Creating jms_celery    ... done- M4 N. h9 O3 n6 U- R* R
Creating jms_lion      ... done8 s) @: ]2 z3 L+ ~# N
Creating jms_koko      ... done# j$ C' J1 K& |$ \" k4 C1 V6 a
Creating jms_magnus    ... done
6 }3 l. d4 e/ {8 [! cCreating jms_web       ... done
6 `9 O4 G# f1 z; k* C* L5 m! H' b/ `6 E$ T: Q$ E" x  W( X8 W
 楼主| 发表于 2023-3-8 10:00:08 | 显示全部楼层
部署 JumpServer 04 节点⚓︎
! {, N: h) {. q1 准备工作⚓︎0 j& b1 \+ t1 w
1.1 环境信息⚓︎
  j) m% e2 p0 c+ iJumpServer_Node_04 服务器信息如下:
- K2 S- V0 e* X3 e& n- o. y
; w+ R; T- W" F. u! u192.168.10.24
# i' p8 g$ T* x. q6 z% ~2 配置 NFS⚓︎" Q8 v4 L9 c: q& v
2.1 安装 NFS 依赖包⚓︎
% w% p* n8 O9 r8 o7 ~3 U$ p" ?. Z# ^- W
yum -y install nfs-utils
: i; r9 ~/ f" C6 [2 l; i5 @showmount -e 192.168.10.11. ^/ g2 F" W' ]7 {
2.2 挂载 NFS 目录⚓︎& {! Y, \; s& O4 l* a: `! x1 X  k

) B* M5 P. k' U; \% V# 将 Core 持久化目录挂载到 NFS, 默认 /opt/jumpserver/core/data, 请根据实际情况修改1 ?5 c8 C2 D( V# F& i
# JumpServer 持久化目录定义相关参数为 VOLUME_DIR, 在安装 JumpServer 过程中会提示- o% w4 s( H' Z: t
mkdir /opt/jumpserver/core/data  f2 O# `  G% w! y+ Z$ ~/ V
mount -t nfs 192.168.10.11:/data /opt/jumpserver/core/data
% d3 J3 A! q) g7 i, h6 f- O4 q2.3 配置 NFS 共享目录开机自动挂载⚓︎: \5 e7 M8 d' N2 v
' R: u! O7 x( f& x8 ]0 R$ ^7 x
# 可以写入到 /etc/fstab, 重启自动挂载. 注意: 设置后如果 nfs 损坏或者无法连接该服务器将无法启动
- R2 H/ L5 y4 U; ^echo "192.168.10.11:/data /opt/jumpserver/core/data nfs defaults 0 0" >> /etc/fstab
# Y; q  M( b: X) z3 安装 JumpServer⚓︎, |+ m. E0 {* K; ^, c) L
3.1 下载 jumpserver-install 软件包⚓︎
9 i( G3 F, q2 i3 Q7 L0 z6 N9 B$ q4 r
cd /opt
6 Y0 S# L6 V/ z  nyum -y install wget
  O; V1 V6 a) u; \& b, H# jwget https://github.com/jumpserver/in ... aller-v3.0.3.tar.gz
5 r. ^$ M+ N$ q4 `: R) Ptar -xf jumpserver-installer-v3.0.3.tar.gz4 U" X% I$ T8 G* Z
cd jumpserver-installer-v3.0.3
3 p9 `+ w+ _  C2 R5 W. Z  P3.2 修改临时配置文件⚓︎
2 D) A  h. @1 F) t! ^$ r' z9 N* o: d' n7 p
vi config-example.txt
7 M& J: ?6 A9 p, G/ Z
- K# N& \" R* S# ~. n# 修改下面选项, 其他保持默认, 请勿直接复制此处内容- \+ Y: C1 P; A4 \- z
### 注意: SECRET_KEY 和要其他 JumpServer 服务器一致, 加密的数据将无法解密
* z. N! z/ G- r% a  n* D) Q2 d5 m8 w" J: L+ W0 }
# 安装配置* O: P, F" }4 |, [, D
### 注意持久化目录 VOLUME_DIR, 如果上面 NFS 挂载其他目录, 此处也要修改. 如: NFS 挂载到 /data/jumpserver/core/data, 则 VOLUME_DIR=/data/jumpserver6 K$ N7 @9 Q# x& k1 g. }9 \/ O" u
VOLUME_DIR=/opt/jumpserver: K9 ~, A4 W- b4 y
  X/ S: l+ q) ^% |& T  c" Y* ~
" g" m  V. ^$ z
# Core 配置9 X8 l1 t- X& A/ l
### 启动后不能再修改,否则密码等等信息无法解密, 请勿直接复制下面的字符串
9 _3 M& L* }$ U8 [4 |SECRET_KEY=kWQdmdCQKjaWlHYpPhkNQDkfaRulM6YnHctsHLlSPs8287o2kW    # 要其他 JumpServer 服务器一致 (*)+ }/ j1 C* T" x8 d' b
BOOTSTRAP_TOKEN=KXOeyNgDeTdpeu9q                                 # 要其他 JumpServer 服务器一致 (*)# ]' r) H/ [9 u3 W" t% L
LOG_LEVEL=ERROR                                                  # 日志等级& v6 Y% Z  ^2 y: r0 Q1 k
# SESSION_COOKIE_AGE=864002 y0 w+ V& f. Y  z+ q; h2 R
SESSION_EXPIRE_AT_BROWSER_CLOSE=True                             # 关闭浏览器 session 过期
0 C( R* O4 b/ S- U" x4 a; t5 J; M6 F5 P4 x9 C
# MySQL 配置: ~; o$ _1 S/ q2 N9 V' P
1 N* \' k5 H7 d" ~! a" Y4 X
DB_HOST=192.168.10.11
. \  ~1 y+ D( L& k1 LDB_PORT=3306* d4 e/ J3 r6 m' ?6 r; }( k  b9 O& g
DB_USER=jumpserver& o1 B& Y. T% Y3 u
DB_PASSWORD=KXOeyNgDeTdpeu9q) ^8 D# P( Y: \) I! v/ f. ?+ }
DB_NAME=jumpserver" |8 ]/ x: S$ {$ @

4 B5 E' q* Q- y% g8 ?2 F# Redis 配置1 x  \$ Z  U' N2 J3 i

  p. P* T) h0 X4 tREDIS_HOST=192.168.10.11) A+ p0 S7 y+ b# @
REDIS_PORT=63799 s# u5 i& d2 i% W- j7 A2 A& K6 |
REDIS_PASSWORD=KXOeyNgDeTdpeu9q
8 ]3 H, ]8 r, f
9 v/ p% M  W( p' R% X# KoKo Lion 配置
( w6 W! R0 J3 ~; P8 I9 ^+ MSHARE_ROOM_TYPE=redis                                            # KoKo Lion 使用 redis 共享3 D- T; U" X8 |' I
REUSE_CONNECTION=False                                           # Koko 禁用连接复用7 Y1 O6 \* g6 S" \- C
3.3 执行脚本安装 JumpServer 服务⚓︎
! v- v7 t9 k2 C) v; w; n
0 j4 d% p' w' r3 o0 X+ E./jmsctl.sh install9 K! Y" L9 k+ k2 s# i
3.4 启动 JumpServer 服务⚓︎4 u% u+ @' I- Y8 y" o

% i! y" n6 q# n' Z: X  A3 D./jmsctl.sh start
$ _2 T0 {8 f/ O+ w9 h) Q. o8 q# u0 a8 e3 W+ D/ x! @
Creating network "jms_net" with driver "bridge"6 {% ?4 j) C/ m9 i, h- b- g/ t  M
Creating jms_core      ... done
0 m  M/ s; {5 E7 I% `Creating jms_celery    ... done
1 k! M- p1 P7 D. A% [  d" E+ cCreating jms_lion      ... done
+ g9 I$ l3 ^; V+ i# R( G, Q5 fCreating jms_koko      ... done4 T3 V1 L1 F3 Q
Creating jms_magnus    ... done# E; x; h+ }$ n# A
Creating jms_web       ... done- B+ s* `1 }- ~/ I+ `% t. f

3 I* t5 o) H9 t7 s5 h. [
 楼主| 发表于 2023-3-8 10:00:09 | 显示全部楼层
部署 HAProxy 服务⚓︎
7 C" X$ h2 j. h' K/ A( G1 准备工作⚓︎( ?4 W: X  [: T
1.1 环境信息⚓︎$ o9 O  c- K' ]8 }: @
HAProxy 服务器信息如下:# h# x) Y! O  F. `: T: M4 Z

) G( X+ {, \% E+ U192.168.10.100$ a1 n, q$ ~, a3 s# ]8 m( `
1.2 安装依赖⚓︎. }: n5 h0 J# E/ ^1 d3 l4 B
3 R, `/ e& A* p; i" }0 K* S
yum -y install epel-release7 t" f- D  S8 p' c6 g; S" }1 b
2 安装配置 HAProxy⚓︎6 N$ E& ?+ \; E! B
2.1 安装 HAProxy⚓︎* |; _* h* O* ^5 u% P
# e# F7 a9 S; }4 W- O3 t" u+ f
yum install -y haproxy
: Q& T$ S7 F, Q+ ]; S2.2 配置 HAProxy⚓︎
+ ?0 l8 N( o9 ]# o9 M$ I6 d. j. n4 h0 ]7 p+ F" k
# 打开 HAProxy 的配置文件4 [8 T" n) v& o+ p$ `' W- Q
vi /etc/haproxy/haproxy.cfg( q, ?1 \2 ?( r! L/ {& o* Q

4 a6 v5 Q" V. I6 {# c, m: Xglobal1 f9 X# ], n8 l4 H$ |
    # to have these messages end up in /var/log/haproxy.log you will. @' {3 b/ ^' w( J( O
    # need to:; }3 G. j1 F; j1 n8 O! [
    #
& t' o3 F5 G6 L! t) r& W    # 1) configure syslog to accept network log events.  This is done: R9 z. q( X/ T- @$ I
    #    by adding the '-r' option to the SYSLOGD_OPTIONS in
% u6 ~. X: p2 |  V$ A    #    /etc/sysconfig/syslog
9 T5 ~( W% G! _4 w6 C    #6 n( }5 V( Z( @( Y1 m; H0 Y
    # 2) configure local2 events to go to the /var/log/haproxy.log; u7 }; B1 S1 @6 b5 y
    #   file. A line like the following can be added to+ k; ?; \& C0 ?. u! x% M- b
    #   /etc/sysconfig/syslog4 f$ F" T; O& |
    #$ }) s4 h8 B' y" o
    #    local2.*                       /var/log/haproxy.log) i  M7 C5 |. p, N6 m0 ^" I6 l
    #
$ N. L7 S5 j; [3 V    log         127.0.0.1 local2
5 }$ ]  S8 I" L$ ]: T
  C+ @: s* o! W8 {& e    chroot      /var/lib/haproxy$ L7 K4 Z- \. S. ~* v
    pidfile     /var/run/haproxy.pid- A. s" |  W7 F: U4 u$ a3 R
    maxconn     4000/ s6 T2 H! `. z& @
    user        haproxy1 h4 y; l- @/ Z6 C2 Z% B5 D
    group       haproxy
, b" x$ t! d  J: X, @( N" x    daemon1 F7 T. T; j/ E2 \
( k6 F0 H0 D; l3 ]+ P& x3 [& A" e
    # turn on stats unix socket
" f: a( r4 y5 U5 G& ?    stats socket /var/lib/haproxy/stats8 f! I/ X2 o; K/ {) X2 X7 w

. x" d( R* ~$ G#---------------------------------------------------------------------
5 @+ \& s! ], v9 n# x# common defaults that all the 'listen' and 'backend' sections will! T( ~9 q1 B, V8 g  g' b
# use if not designated in their block; C$ R0 v% O! e; `" }
#---------------------------------------------------------------------
- L) u3 s9 E; ^2 zdefaults0 z; c' b) Y1 @* v
    log                     global; w; S* ?5 C+ B; n4 g, l: c, \
    option                  dontlognull
' w9 I) U. ]9 T* v% k, L    option                  redispatch
* y& t2 e" Z# Y/ w$ d    retries                 3$ e' c4 P4 b4 {; I
    timeout http-request    10s
( v! k. D# ^) f: L    timeout queue           1m
  w% Q8 f0 K/ t4 M6 d' e    timeout connect         10s7 X" j8 H6 l4 h6 \
    timeout client          1m9 W  d$ `6 T/ c; h3 }, D  U( u1 R
    timeout server          1m/ {- D1 k: @! r7 @7 h+ |% d
    timeout http-keep-alive 10s
2 A- u4 m% M- d, k+ Q    timeout check           10s. Y* Z. D3 \0 r' Y/ z
    maxconn                 3000, B% t5 d6 {& h6 P! O6 J5 h5 A

  |9 ?; o! S  d3 o( [) o, Flisten stats
2 W/ E2 [4 `* s# ^5 F  a    bind *:8080  [8 I9 ^6 B4 E- X2 T
    mode http
& e8 D% `0 X0 W    stats enable
0 p5 c* ~  t8 ^" z- R    stats uri /haproxy                      # 监控页面, 请自行修改. 访问地址为 http://192.168.10.100:8080/haproxy
) d( v5 U% y7 z8 x! F    stats refresh 5s
: X% g8 Z+ u7 Y* d* t    stats realm haproxy-status
! r/ E' R& ~/ G: q( s    stats auth admin:KXOeyNgDeTdpeu9q       # 账户密码, 请自行修改. 访问 http://192.168.10.100:8080/haproxy 会要求输入. S$ k' C; V$ H

" [) h$ n( w3 K# ~; Q#---------------------------------------------------------------------; v! N4 I" B, _6 G2 Y( e( d
# check  检活参数说明3 O9 l7 ~, C. I; r7 ~5 X3 s& s
# inter  间隔时间, 单位: 毫秒. l7 W) O5 F& T
# rise   连续成功的次数, 单位: 次; ]2 Q/ b5 f6 n2 S4 M0 S
# fall   连续失败的次数, 单位: 次+ C& Q7 j# R& y6 V( z9 x3 H1 J
# 例: inter 2s rise 2 fall 3
' y0 ?  c/ s) |1 J1 P! G! d+ B# 表示 2 秒检查一次状态, 连续成功 2 次服务正常, 连续失败 3 次服务异常& w& b" [' B) l" Y
#
! d* g+ J$ h- q/ D8 l# server 服务参数说明8 Y& ~- G& ^" L# c1 f
# server 192.168.10.21 192.168.10.21:80 weight 1 cookie web01
# s& V, S  f4 k$ `) P7 W% o4 r# 第一个 192.168.10.21 做为页面展示的标识, 可以修改为其他任意字符串
; L" v" Q, ~2 ?4 x5 ?/ h" n4 v# 第二个 192.168.10.21:80 是实际的后端服务端口. V4 ]$ }: u- Z; O; q7 `+ Z
# weight 为权重, 多节点时安装权重进行负载均衡
  C. s) @* S7 N8 ]! m4 i8 ~6 ]# cookie 用户侧的 cookie 会包含此标识, 便于区分当前访问的后端节点. A( ^, ^" {" k4 v1 [6 _
# 例: server db01 192.168.10.21:3306 weight 1 cookie db_012 f. ?) b2 B5 }8 A! o* h7 i" O
#---------------------------------------------------------------------
$ N# s! E6 M" J- S8 n
2 z8 z/ b& |/ slisten jms-web" L; J0 O- i( o5 N7 f
    bind *:80                               # 监听 80 端口1 E2 e" {- N9 I/ U4 U3 T
    mode http% R) [% e3 Y6 r* @* V8 R9 q5 N; e# s
4 {! x* Y5 q4 w8 ]
    # redirect scheme https if !{ ssl_fc }  # 重定向到 https! F% c+ Q: F$ a; u" M5 \, D. F' f  w+ s
    # bind *:443 ssl crt /opt/ssl.pem       # https 设置
: ~6 [5 o& K7 p, k( Q
$ r2 Q  k' N6 G- g) t# h    option httpclose
& e7 _+ T+ ~! Z! Z    option forwardfor
8 `' o7 {7 _; k3 a6 \    option httpchk GET /api/health/         # Core 检活接口0 d8 M2 i) @7 e. r

3 j" e! m: r$ u2 t. l" j    cookie SERVERID insert indirect
! G3 ~1 G. W1 l) m1 `# C1 }    hash-type consistent; C* x. |) a- b" g1 H) w
    fullconn 500: @' h$ i* d# n% k/ c7 H
    balance leastconn
/ m( F4 H, J! \# w/ e    server 192.168.10.21 192.168.10.21:80 weight 1 cookie web01 check inter 2s rise 2 fall 3  # JumpServer 服务器, k5 d  T1 g; V% L$ Y
    server 192.168.10.22 192.168.10.22:80 weight 1 cookie web02 check inter 2s rise 2 fall 3
! v& U+ x6 S, Z7 {( t: ~8 [% Z    server 192.168.10.23 192.168.10.23:80 weight 1 cookie web03 check inter 2s rise 2 fall 3
3 U8 z3 ^6 y! P  X7 ?0 w    server 192.168.10.24 192.168.10.24:80 weight 1 cookie web03 check inter 2s rise 2 fall 3
( t# W) I# O: }* t5 g
$ W3 a  {% I/ ?0 x1 U" ^2 `listen jms-ssh
! ^3 {7 }- S/ R    bind *:2222
9 M" d" K( G5 N. Z, d4 x# v    mode tcp
9 L. z9 X& B1 K# f
! ~6 J) w1 _4 B8 r  t    option tcp-check
& Z5 O& s5 d2 H
$ {* ^$ K4 D, W/ S    fullconn 500$ t0 A4 }5 Z$ r1 C+ A
    balance source9 W) j$ L- u( n' ?8 a) N1 C
    server 192.168.10.21 192.168.10.21:2222 weight 1 check inter 2s rise 2 fall 3 send-proxy
$ Z, H: j6 l! T0 V- \    server 192.168.10.22 192.168.10.22:2222 weight 1 check inter 2s rise 2 fall 3 send-proxy: a' k( k, d2 O3 _! y6 v
    server 192.168.10.23 192.168.10.23:2222 weight 1 check inter 2s rise 2 fall 3 send-proxy
0 E4 [" ]; L% W* b' K9 \, |1 o* _    server 192.168.10.24 192.168.10.24:2222 weight 1 check inter 2s rise 2 fall 3 send-proxy' L5 O/ M4 `, c7 w/ a

1 t& V( c& b$ X6 g/ U# olisten jms-koko
5 E  p) Y+ i& C: p8 G: ~# K    mode http
" j# F5 K, H8 {8 v
4 T0 ^4 A" \& D! C$ F6 N    option httpclose
# s/ q& h' v) C8 Y& D    option forwardfor  c2 O: c7 D1 x9 y1 w2 V+ y; z2 ^7 S  R
    option httpchk GET /koko/health/ HTTP/1.1\r\nHost:\ 192.168.100.100  # KoKo 检活接口, host 填写 HAProxy 的 ip 地址
/ E1 d; a  Z$ M  q* F  u$ l) \8 b/ C
  b3 a* m9 I2 m! M' n7 J    cookie SERVERID insert indirect
4 z+ a7 u1 T% j% F1 a& Q$ @- V7 ]    hash-type consistent% G& \2 i( s0 I4 f
    fullconn 500' g5 b2 P+ q4 w
    balance leastconn$ c: b. z6 W9 S' E. A
    server 192.168.10.21 192.168.10.21:80 weight 1 cookie web01 check inter 2s rise 2 fall 3) B" [# Q3 R& q0 X; A6 X
    server 192.168.10.22 192.168.10.22:80 weight 1 cookie web02 check inter 2s rise 2 fall 3
1 v3 [8 T! O( A2 b3 y% h    server 192.168.10.23 192.168.10.23:80 weight 1 cookie web03 check inter 2s rise 2 fall 3- q# J/ z& Y# F# J4 ~
    server 192.168.10.24 192.168.10.24:80 weight 1 cookie web03 check inter 2s rise 2 fall 3
- L' V2 Q" w# ]+ K
- G4 y3 O" W0 ]) Slisten jms-lion
1 {$ C, ]  J2 X3 k9 I    mode http) R3 O# i$ L1 U: ~' {! r# S
4 W; B6 ^1 v  u' A6 T* r3 l
    option httpclose) z$ I% \% H- S0 w2 Y: b7 X
    option forwardfor
% x$ P- p8 k6 s' A- |4 F5 F    option httpchk GET /lion/health/ HTTP/1.1\r\nHost:\ 192.168.10.100  # Lion 检活接口, host 填写 HAProxy 的 ip 地址
, i' F! e, s- V' K' k3 J4 G9 Z2 d& R0 U$ k8 S/ X/ I# B
    cookie SERVERID insert indirect# \; q) v% }3 k. B, u- N
    hash-type consistent7 M7 R/ M) H# v& ?( T
    fullconn 500
$ P+ ~3 {8 J! U# Y# g# Z. P    balance leastconn
* D5 N2 w/ {' o" g  u8 S3 H% F& W: G    server 192.168.10.21 192.168.10.21:80 weight 1 cookie web01 check inter 2s rise 2 fall 3
7 g, h% S" P) m1 X    server 192.168.10.22 192.168.10.22:80 weight 1 cookie web02 check inter 2s rise 2 fall 3  f7 S! g: D4 y8 V
    server 192.168.10.23 192.168.10.23:80 weight 1 cookie web03 check inter 2s rise 2 fall 3
( ?. F' b! k0 o& N' i  N0 U    server 192.168.10.24 192.168.10.24:80 weight 1 cookie web03 check inter 2s rise 2 fall 3% K$ Y/ W8 d9 k' N( p" F" V- h+ N
' u) z; R: J! a6 u# B
listen jms-magnus
1 z  L3 F8 Z& `% n1 `: _: |    bind *:30000
3 s( [8 A1 ?; L" R+ W1 G6 V0 F    mode tcp. _1 {. ?3 Y" F% h; v- m  E
& A9 \5 j9 e' a6 w$ }5 N4 h& B# H
    option tcp-check
# n* |0 c  d+ d$ _* w0 Z8 z' o. I
9 k$ M) N3 j3 X! H. A+ @    fullconn 500
( _# ~) C# Q$ Q    balance source8 r. x$ @4 g  y4 P7 ^) k' F6 G
    server 192.168.10.21 192.168.10.21:30000 weight 1 check inter 2s rise 2 fall 3 send-proxy
! t5 J( P" K4 }; k" T2 w3 l/ W+ d4 o    server 192.168.10.22 192.168.10.22:30000 weight 1 check inter 2s rise 2 fall 3 send-proxy( B7 M. R# N" M6 O( j" p
    server 192.168.10.23 192.168.10.23:30000 weight 1 check inter 2s rise 2 fall 3 send-proxy1 T0 q8 A7 G! Z
    server 192.168.10.24 192.168.10.24:30000 weight 1 check inter 2s rise 2 fall 3 send-proxy
! ?& G  [' K: b2.3 配置 SELinux⚓︎
5 G& e  ]( D5 Y8 q; V8 x& h
# }9 Z) `2 E! M" w4 n6 F# J9 Asetsebool -P haproxy_connect_any 1
3 Y2 f# b8 i. f( p9 {2.4 启动 HAProxy⚓︎+ b1 U2 E# l$ I5 F

; {- F# }) A$ u" f& T8 t; esystemctl enable haproxy
, k0 x: k8 P. d) B$ d# Fsystemctl start haproxy
! [. Z; q7 r% E9 J3 配置防火墙⚓︎
' t3 r3 v* f7 F  _* x$ v, e
4 i# B  E+ x  G1 A5 i- _$ Kfirewall-cmd --permanent --zone=public --add-port=80/tcp
6 v0 w6 L3 t0 V2 Zfirewall-cmd --permanent --zone=public --add-port=443/tcp: E4 C0 S. _' R0 T2 p5 _6 o
firewall-cmd --permanent --zone=public --add-port=2222/tcp. o0 ^- S; {# `
firewall-cmd --permanent --zone=public --add-port=33060/tcp4 V* ~3 ]+ M  d1 Y* ~
firewall-cmd --permanent --zone=public --add-port=33061/tcp8 @  T. M9 V: N4 [9 ^8 P& n
firewall-cmd --reload
5 Y% v" N" S, {. [+ U0 y8 A3 {% H; V
 楼主| 发表于 2023-3-8 10:00:10 | 显示全部楼层
部署 MinIO 服务⚓︎
+ w) y4 M0 E3 {5 H6 y6 I: E提示1 L( `# T3 @5 U2 z

  l# j# ^& y) K( q; S0 m7 h集群部署请参考 (http://docs.minio.org.cn/docs/ma ... de-quickstart-guide)
( U# W9 X+ P3 K3 A3 V9 M: n+ m1 准备工作⚓︎
: [( H  p2 j1 M9 J! i$ r* y1.1 环境信息⚓︎
1 m& d- G* Z% @! cMinIO 服务器信息如下:
' ~3 C& @& p# K. A
# S3 h7 p1 h" J1 s" p0 |; ~192.168.10.41
! e) X* K5 P, u4 s* J2 安装配置 Docker 环境⚓︎
5 T* e  k5 R! W2.1 安装 Docker⚓︎
3 Z8 S+ t, ]( F$ L: M) l
" v$ u, U4 f8 x4 \8 Lyum install -y yum-utils device-mapper-persistent-data lvm25 I$ m$ w! N$ r# ?+ V
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo) M4 E, V  Q$ \# O' L" x1 |6 x
sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
/ c" j: O+ A% y) wyum makecache fast2 r- m9 }  B4 n4 U- {' h) [7 K8 C
yum -y install docker-ce
5 @) x8 }$ U6 }5 ~8 k) M: B2.2 配置 Docker⚓︎
# ^- h3 [2 x" b1 c) b/ J% B/ R/ N
mkdir /etc/docker/+ m7 S& I, Y: i3 s) K* `9 F- p
vi /etc/docker/daemon.json
3 @" b6 ?$ @3 Y
8 i' W/ c3 _) w# T{: {* w0 G7 a3 W3 o$ E, M% E
  "live-restore": true,, h' e. @) t( a# ?# C
  "registry-mirrors": ["https://hub-mirror.c.163.com", "https://bmtrgdvx.mirror.aliyuncs.com", "http://f1361db2.m.daocloud.io"],1 }9 _$ z. U9 V  H* S" T1 M" E
  "log-driver": "json-file",) s8 X5 @+ ?- _( T
  "log-opts": {"max-file": "3", "max-size": "10m"}( t+ ^& f) h0 f4 O& N; j- _
}7 {* q( z2 N+ Z7 b
2.3 启动 Docker⚓︎
# Z& A! F, ?) `! Y1 M* H7 u. G+ r8 f& r! z8 T! h7 X- F
systemctl enable docker2 v% E. A" ^  V4 K% w7 P: y, h6 @
systemctl start docker* Z2 I( L* v# n" c+ w& }# t9 W
3 安装配置 MinIO⚓︎1 C  w- U3 K: i5 X$ m# V
3.1 下载 MinIO 镜像⚓︎9 k- A8 S  d  ^' h1 ?
' D. j- U2 z! [& g* `
docker pull minio/minio:latest! v$ @/ K+ i! u! _. q

% ], [; }! I) R. ]latest: Pulling from minio/minio
# X% k3 K( n5 p9 r7 d( E1 U# A; R' Ja591faa84ab0: Pull complete0 N4 E7 O; X  m; R6 }& w. r/ Q
76b9354adec6: Pull complete7 S3 l+ X% H' t
f9d8746550a4: Pull complete
$ m5 [' U4 O( `; s) j- {6 E8 a890b1dd95baa: Pull complete
; B3 ^, O+ F( c3a8518c890dc: Pull complete+ q# R+ R: \) V3 \' a7 q! J
8053f0501aed: Pull complete* b, d* q6 p+ t1 y* z5 ~7 @% h! P8 V+ F
506c41cb8532: Pull complete$ y% A0 x5 L& D* F" ?7 O% ~
Digest: sha256:e7a725edb521dd2af07879dad88ee1dfebd359e57ad8d98104359ccfbdb92024
  ^# ]7 y( i" D' L4 P+ t4 aStatus: Downloaded newer image for minio/minio:latest8 \) q, b$ q/ p' T% K5 P
docker.io/minio/minio:latest
& C4 p- Z) L3 L  E% R3.2 MinIO 持久化数据目录创建⚓︎; D/ ~+ }8 F0 U& F
8 Q$ u" ?+ e& h" J+ [' h! l
mkdir -p /opt/jumpserver/minio/data /opt/jumpserver/minio/config9 X6 z  i6 \' Y7 n
3.3 启动 MinIO 服务⚓︎1 M! X: _" ]: F7 v

. h' ]% M) s" K& n4 B3 ~## 请自行修改账号密码并牢记,丢失后可以删掉容器后重新用新密码创建,数据不会丢失
0 l1 ?0 v; B. E5 {+ R; l# 9000                                  # api     访问端口+ l2 k! R2 y, b0 _
# 9001                                  # console 访问端口+ l# V  t8 w' k; C7 i
# MINIO_ROOT_USER=minio                 # minio 账号% ?) b2 `3 i2 w0 i
# MINIO_ROOT_PASSWORD=KXOeyNgDeTdpeu9q  # minio 密码
$ M9 A# \+ D* x0 P
5 C4 R7 v4 O$ Ddocker 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"- ~0 N) V1 T" l6 X: f
3.5 在 MinIO 中创建 Buckets⚓︎
9 K- X0 H& E- n访问 http://192.168.10.41:9000,输入刚才设置的 MinIO 账号密码登录。2 k+ N2 M& A( z' B" x2 o
点击左侧菜单的 Buckets,选择 Create Bucket 创建桶,Bucket Name 输入 jumpserver,然后点击 Save 保存。
1 d; V- t0 Q- T% `3 _1 y! I" Q5 p3.6 在 JumpServer 中配置 MinIO⚓︎
6 @/ |5 }( n8 h: q" A访问 JumpServer Web 页面并使用管理员账号进行登录。5 Z$ ]0 [7 v* O" K$ I4 f4 k6 x# q
点击左侧菜单栏的 [终端管理],在页面的上方选择 [存储配置],在 [录像存储] 下方选择 [创建] 选择 [Ceph]
9 H5 |3 q- K( V8 x' N根据下方的说明进行填写,保存后在 [终端管理] 页面对所有组件进行 [更新],录像存储选择 [jms-mino],提交。* _5 h3 z3 O( |; V( B: V  M: f
选项        参考值        说明1 i3 l4 M% N& z) P. V+ A+ H) v
名称 (Name)        jms-minio        标识, 不可重复1 R! ^- K* X' T) ?9 S: v
类型 (Type)        Ceph        固定, 不可更改
5 a! ~- P. [7 S+ @9 I( Y4 ?! F0 v桶名称 (Bucket)        jumpserver        Bucket Name9 }' Z, r: f. R. g$ x# p# X6 ^. r
Access key        minio        MINIO_ROOT_USER: t1 L) |4 l/ n1 z" h
Secret key        KXOeyNgDeTdpeu9q        MINIO_ROOT_PASSWORD
  ?8 r) \5 K+ ~0 }7 A端点 (Endpoint)        http://192.168.10.41:9000        minio 服务访问地址& r' H5 M/ i+ U; W; f2 _- n% C" d' T
默认存储                新组件将自动使用该存储
3 Y* O9 c) t. e$ ]: G/ d. D/ D: r2 h: ~# T+ a$ q/ X
 楼主| 发表于 2023-3-8 10:00:11 | 显示全部楼层
部署 Elasticsearch 服务⚓︎: N! L! q2 B/ b4 c9 X0 d9 H5 {. N
提示) \; s. x6 }  J
7 [; f1 y. J7 k) [: k1 r" ~
集群部署请参考 (https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html)
4 |$ o, ^' p; n6 K' c2 _  j. z1 准备工作⚓︎
& p' ~  i! b* ]( \8 K: p7 |! x, T1.1 环境信息⚓︎
  j4 T# T) |- b, N# NElasticsearch 服务器信息如下:8 c1 u' ~+ k: |5 @6 z7 f- N, i+ M

+ r; R! C# d4 P6 U192.168.10.51) [% e# [/ b% V2 ~0 D5 J9 E
2 安装配置 Docker 环境⚓︎8 U0 k" E7 o9 r2 H" E* h% y0 p
2.1 安装 Docker⚓︎
7 R- O* Q  w# P# I
) S& X  {6 R( l. k  s* ?, Gyum install -y yum-utils device-mapper-persistent-data lvm2; u/ Y0 g0 N' z7 z! ~6 o' a* P
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo5 p9 o( U" ^; @$ m/ F
sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo& @; I/ A1 {& x. g/ d
yum makecache fast
0 u. g5 G# G, X7 i2 L" h1 nyum -y install docker-ce3 b7 D5 O/ N7 O, c' z
2.2 配置 Docker⚓︎
( {3 T" q) L( t2 \
1 F7 q5 G3 @) A9 O0 r! mmkdir /etc/docker/
6 v$ y+ P- f5 Y; {vi /etc/docker/daemon.json7 p$ g6 K6 p* e4 H" D+ D

8 K! ~- Q( ~" q: m. |6 r{
+ I; h6 |) ]2 q  v$ C  Y  "live-restore": true,
: R8 [* Y& M7 G/ ~  "registry-mirrors": ["https://hub-mirror.c.163.com", "https://bmtrgdvx.mirror.aliyuncs.com", "http://f1361db2.m.daocloud.io"],
3 k. c7 g- s5 c7 H$ q% e8 x. E  "log-driver": "json-file",: s& I  |* _9 z1 p- q* z$ b
  "log-opts": {"max-file": "3", "max-size": "10m"}6 d7 s: G# Q' }0 I4 `* @" I
}, J  U2 T  T& K1 _& j4 v7 f# u5 m
2.3 启动 Docker⚓︎
7 N4 U7 |) y% c4 k; B; y; q2 S. D( D5 H, @+ ?! u
systemctl enable docker
+ a* B0 f3 U/ P! [3 D" g1 j6 ysystemctl start docker  D' i& g: a. c; V  o
3 安装配置 Elasticsearch⚓︎( n/ l" n+ T% N3 {/ O, R
3.1 下载 Elasticsearch 镜像⚓︎& L, ]1 S( {; {0 j6 t0 ~

2 }  r6 f( g* u# B. f  t  [$ Idocker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.6& t+ g! U' N2 ]. ~4 Q3 E# A) n
1 o. h8 L3 v+ R) {
7a0437f04f83: Pull complete
  d# w  }4 q9 I: y" F8 N7718d2f58c47: Pull complete
3 _9 _3 i$ w- \7 pcc5c16bd8bb9: Pull complete+ W' C# p3 f+ v5 c- K5 D+ P
e3d829b4b297: Pull complete4 }# m3 J; B& l4 c* T4 H  S
1ad944c92c79: Pull complete" z1 x& Y" X' X8 o$ H5 K  g
373fb8fbaf74: Pull complete
8 o3 K/ G3 g5 f/ q0 h7 S! |5908d3eb2989: Pull complete. J6 e  f) v! g, |: A
Digest: sha256:81c126e4eddbc5576285670cb3e23d7ef7892ee5e757d6d9ba870b6fe99f12194 P' q' `5 s8 P; \( _
Status: Downloaded newer image for docker.elastic.co/elasticsearch/elasticsearch:7.17.6, Z. x) k( M8 A7 J9 L
docker.elastic.co/elasticsearch/elasticsearch:7.17.67 P2 Z. Y! e, t& J  A

# {9 H3 G2 ?8 O/ M# e3.2 Elasticsearch 持久化数据目录创建⚓︎3 B8 w5 L* Q/ t% o6 K

7 P, ?& v5 Z6 f3 B9 ]" dmkdir -p /opt/jumpserver/elasticsearch/data /opt/jumpserver/elasticsearch/logs
2 A/ b. Q, B/ f3.3 启动 Elasticsearch 服务⚓︎9 {8 f# a2 E8 [6 l! U3 U& [

6 K, T* F/ K2 L+ v## 请自行修改账号密码并牢记,丢失后可以删掉容器后重新用新密码创建,数据不会丢失7 l$ [* f7 ^3 W+ U7 V$ d) h
# 9200                                  # Web 访问端口5 q) }! L9 {0 o% _1 U
# 9300                                  # 集群通信* A  B) V0 q5 a$ m, W. L4 B! G
# discovery.type=single-node            # 单节点
( j  W2 @; j# \/ F! f" ]# ~# bootstrap.memory_lock="true"          # 锁定物理内存, 不使用 swap
" X5 r) ^$ I+ x7 _# xpack.security.enabled="true"         # 开启安全模块- S( b+ T+ h+ ?/ c) v' S  f! A
# TAKE_FILE_OWNERSHIP="true"            # 自动修改挂载文件夹的所属用户
; M9 S% m- L8 W/ N# ES_JAVA_OPTS="-Xms512m -Xmx512m"      # JVM 内存大小, 推荐设置为主机内存的一半  m6 f0 a! Z, g; |: I% b8 I1 X
# elastic                               # Elasticsearch 账号
4 E- C8 V7 F# k: g! C; O# ELASTIC_PASSWORD=KXOeyNgDeTdpeu9q     # Elasticsearch 密码
2 w% @" S" D3 a
7 B2 x; e! b0 o% g, K+ K8 f6 `docker 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.60 s! l0 l' J. F8 ^7 Y, u, Y
3.4 在 JumpServer 中配置 Elasticsearch⚓︎' {# a- G, a1 B9 ]  A, u2 l
访问 JumpServer Web 页面并使用管理员账号进行登录。) O! c$ r2 I/ i( ^- `
点击左侧菜单栏的 [终端管理],在页面的上方选择 [存储配置],在 [命令存储] 下方选择 [创建] 选择 [Elasticsearch]6 I! |; c6 d! f" ~( S* d1 q  D+ ~
根据下方的说明进行填写,保存后在 [终端管理] 页面对所有组件进行 [更新],命令存储选择 [jms-es],提交。
& k  }  R9 G+ f0 u- y选项* L* _2 p" }0 G" c- Q* F: \3 g) x
 楼主| 发表于 2023-3-8 10:00:12 | 显示全部楼层
注意事项⚓︎
" u1 h1 N% s+ G2 ~8 Y# V/ n: h, y1 关于集群模式的环境升级⚓︎/ u# Q0 h: L6 l
更新前请一定要做好备份工作) u+ q+ A* M( e4 {" r9 f7 h3 J% f: Y
: I* l/ y3 K' Y. X7 L
升级前请关闭所有 JumpServer 节点。
3 ]8 @2 I( V5 k# t在任意一个 JumpServer 节点按照升级文档完成升级操作。
6 }9 h7 P  l0 p0 Y  V2 `+ Q仔细检查该节点升级过程确保无异常。
. F- v: ?- H, u" r然后按照升级文档对其他 JumpServer 节点升级即可。) s8 c3 [7 a8 }# E: F
从飞致云社区 下载最新的 linux/amd64 离线包, 并上传到部署服务器的 /opt 目录。/ m) x0 }7 C/ e* h

7 e. Z" @# d2 z) h) bcd /opt9 G+ v5 H1 {* v+ o2 i
tar -xf jumpserver-offline-installer-v3.0.3-amd64-246.tar.gz$ C  n% m9 |4 x$ G3 N9 a
cd jumpserver-offline-installer-v3.0.3-amd64-246
) ~4 j, w" F1 m% L+ m+ _' ?
/ V4 @" B! }/ ^  m# 额外节点可以设置 SKIP_BACKUP_DB=1 跳过数据库备份, 第一个升级节点不要跳过备份
( Q% ~7 A$ n) Y  Lexport SKIP_BACKUP_DB=19 i/ J- N9 ]- ]' W3 G
./jmsctl.sh upgrade) o+ i  ?6 Y6 |
./jmsctl.sh start& V6 M; m- Z1 V, f+ n% p
 楼主| 发表于 2023-3-8 10:00:13 | 显示全部楼层
在线安装⚓︎# a3 [* U3 F0 r
1 环境要求⚓︎& F2 U: g+ {( j* f$ u
Kubernetes 1.20+( F) A2 k+ A& N( W! b
Helm 3.0' |% ]- k# z' m- y, U8 _
2 安装部署⚓︎
6 b0 i; W6 j# O; f$ k2.1 添加 JumpServer 的 Helm 源地址⚓︎
6 q$ H$ }# e) G/ S* u8 Z
% _1 M9 j. H/ J3 y+ J" k- t1 Phelm repo add jumpserver https://jumpserver.github.io/helm-charts
3 ~9 t! E0 `) H3 n, c- e' s9 M$ Ohelm repo list
$ n3 S# V& ~# c* ]' I6 U" V7 m2.2 编辑 JumpServer values.yaml 文件⚓︎) O' C* }+ I+ Z3 f
8 `9 ]6 n" c+ H
vi values.yaml( k" O6 W* a+ r5 H; L
! @5 l+ \3 g2 }: t8 P) N2 O6 E
# 模板 https://github.com/jumpserver/he ... pserver/values.yaml
" H; m# o* b/ `. }( v7 n# Default values for jumpserver.
# _7 e" @- A3 g8 t/ I0 V. t# This is a YAML-formatted file.7 g9 }8 [  O/ k0 `  R( y+ q& Q* Y- [
# Declare variables to be passed into your templates.
! ?* I5 w* ~$ B/ R$ P( ^" q2 A. @  a6 n9 r$ Z
nameOverride: ""
; f# h5 B( \7 |/ b' ifullnameOverride: ""
( L9 k3 A/ C6 g$ L# O/ d9 `
; F6 M5 S+ ?8 ]## @param global.imageRegistry Global Docker image registry) ?# f; w+ ]$ ^; Z
## @param global.imagePullSecrets Global Docker registry secret names as an array$ ]1 r" z( b- {/ ~
## @param global.storageClass Global StorageClass for Persistent Volume(s)
. a) h& K* l! ]- U. J## @param global.redis.password Global Redis™ password (overrides `auth.password`), H9 m, g0 Y# Z# D
##( g) P8 r" Z. K% u
global:+ T" H- z! S' H' T' l, ^  u
  imageRegistry: "docker.io"    # 国内可以使用华为云加速
; `  x' [$ O& @  {4 z4 K3 V& G9 C  imageTag: v3.0.3             # 版本号
0 O1 Z$ T1 p: M1 @8 ?$ T8 ~( A  ## E.g., d( [9 Q1 y( E0 @% _7 S/ Q7 H
  #  imagePullSecrets:
; x* N0 |1 {9 N( {$ Y  #    - name: harborsecret. e0 S6 ~8 G: W- q
  #
  A# l; K2 g0 M# ~/ I  #  storageClass: "jumpserver-data"
! y3 h4 V" S# g1 r/ T  ##
. a% h5 Q$ R+ Z  imagePullSecrets: []2 a2 ^0 B; s/ _( Y% G
    # - name: yourSecretKey
, C* T9 t: i8 l7 v! H* e' d  storageClass: ""              # (*必填) NFS SC
& H) d9 L& j& n* O9 D# c3 L* U! n3 P! l& j7 H
## Please configure your MySQL server first3 F4 J5 J1 T8 R( t5 I6 |
## Jumpserver will not start the external MySQL server.! `; E0 x7 L7 g, g: h( t
##
$ i( N# G0 [) Q+ \& TexternalDatabase:               #  (*必填) 数据库相关设置6 I: `4 v7 E" @( W! B
  engine: mysql
1 D8 Z# A) |3 ~3 L. K2 O  host: localhost- ]( H  U% m5 r4 R" {  U) F
  port: 3306" k' V- y1 ]+ y+ x% c% f
  user: root( T4 a8 Q$ q4 @5 n
  password: ""
) C2 K  G# U* _- G3 r& m1 t) d  I$ {  database: jumpserver
6 ~9 T0 Y3 t+ W' S# v" o( K" @: x1 w
## Please configure your Redis server first# X6 j/ j& {+ [7 @7 W, E' @% m
## Jumpserver will not start the external Redis server.6 P. Z/ k; J) t$ y# r) S
##3 {6 X; J/ ^4 G; s
externalRedis:                  #  (*必填) Redis 设置6 X& E) x8 r$ H5 \' ]( B, e
  host: localhost
2 F+ F* @8 O0 n5 ~  port: 6379
. c* I- H8 {5 ?6 @5 X  password: ""% a% J. ]' J* I, F( |- A9 b
1 C, ]+ V, ?. A- {* }, \, B2 o" q
serviceAccount:% T& g% L' H- d# u8 H0 l: \
  # Specifies whether a service account should be created
2 L7 @, ]. }9 {  ]+ a) t# v  create: false/ m2 X) T0 y1 A8 J* n0 b0 Y
  # The name of the service account to use.
. e- m* a9 P  x  # If not set and create is true, a name is generated using the fullname template( g3 n! \5 O) P" }3 W
  name:/ h( }' P  I% Q5 Z* K
) A! I- h# t1 B9 a
ingress:6 f/ x3 B5 K, @! c& J7 j6 ?. k
  enabled: true                             # 不使用 ingress 可以关闭
6 o# n) I  P3 C6 V  annotations:7 G5 Y  f# A, [- {; h' K; O! [' r
    # kubernetes.io/tls-acme: "true"/ U% `/ m8 u/ {7 Q0 B
    compute-full-forwarded-for: "true"; }4 `2 x0 M. o+ ^( _+ H
    use-forwarded-headers: "true"+ v4 h0 }- V& y% C) s  i  _
    kubernetes.io/ingress.class: nginx9 X. I0 r9 f6 F/ S) y
    nginx.ingress.kubernetes.io/configuration-snippet: |
; I/ b& z/ M# A7 G. J       proxy_set_header Upgrade "websocket";
4 X2 ?+ d9 v8 S5 X       proxy_set_header Connection "Upgrade";8 t( x6 {- b0 j; H. j0 b$ q
  hosts:8 X3 \7 C- P. G6 U' W% b+ m
    - "test.jumpserver.org"                 # 对外域名
6 e1 }! H, U7 Q. K# [$ Z  tls: []0 D- O# L- F' k/ v
  #  - secretName: chart-example-tls  t3 M1 ]/ I# d- J& j
  #    hosts:! J) Y. e: N0 i9 P
  #      - chart-example.local$ g" p9 T3 k  A: Y4 w
+ v9 l( v, H9 I% K& c- k
core:1 A  T5 o' w( @/ C
  enabled: true
. J$ D% h1 V( y6 L) a+ p+ q' Z7 n* b/ a3 K) G
  labels:
7 e; E, D1 F  j3 {) C; h* {    app.jumpserver.org/name: jms-core
! t' Y* c' N6 C; e) e; d  c  i+ L4 t; m$ z( o/ z
  config:: p, U( W3 \  D9 @7 t
    # Generate a new random secret key by execute `cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`$ A, `7 @# {0 c3 P8 W
    # secretKey: "B3f2w8P2PfxIAS7s4URrD9YmSbtqX4vXdPUL217kL9XPUOWrmy"+ \6 e0 r& }: x. w9 ]# i
    secretKey: ""                            #  (*必填) 加密敏感信息的 secret_key, 长度推荐大于 50 位% @( e- p' j4 G" Y+ O. P' g
    # Generate a new random bootstrap token by execute `cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`, B, V8 }; |3 K1 T: N9 J8 o
    # bootstrapToken: "7Q11Vz6R2J6BLAdO"" ~, j( `! ^; ^8 T; }
    bootstrapToken: ""                       #  (*必填) 组件认证使用的 token, 长度推荐大于 24 位
9 Y$ h8 U$ B* k  f    # Enabled it for debug
8 ?: O' C  s8 |2 Y: D8 h    debug: false
' [9 j# e- _4 t0 m2 Y    log:
# F; L( ?5 j( G  L7 d( O- v      level: ERROR% y$ z. _( W  f" f. [

# a8 L- K8 P: N9 S; r3 s  replicaCount: 1
3 L9 j1 Z7 s! O  `2 P( C6 U( X1 M1 \* W
  image:
% E8 G  B" Z, X3 B5 {    registry: docker.io" j5 k3 ?, [4 h& b2 I7 V2 R/ G
    repository: jumpserver/core
+ {& |: R) Q- l& l# K    tag: v3.0.30 x6 b! {: n! x
    pullPolicy: IfNotPresent
) H0 Q+ m% e/ `" T* a
  h) D7 N1 c7 L  ]  command: []
# Q( z% c1 g# N
' K; J5 m: O% D% w+ x. u  }  env:+ [2 @' X3 x. o* A4 J
    # See: https://docs.jumpserver.org/zh/master/admin-guide/env/#core
1 x! ?+ b' f4 u) @    SESSION_EXPIRE_AT_BROWSER_CLOSE: true1 W8 I8 G( B$ v
    # SESSION_COOKIE_AGE: 86400
& s( N5 V, J6 \) m& u) |    # SECURITY_VIEW_AUTH_NEED_MFA: true
# R- n; S% ~" L9 b
+ }: E  `+ N+ Q# Z' s2 V  livenessProbe:6 T+ W5 d7 x% f# F& K: _
    failureThreshold: 30
' W4 G- D! j$ r8 I    httpGet:
. I, P9 ^5 x! q* g      path: /api/health/
0 B& d3 o" A. f$ j8 [& _  v5 ?      port: web
" X0 p' s0 _$ {* J) [2 y/ t) j7 Y- s4 ]% C& M6 {( A
  readinessProbe:# J, o0 ?$ D. F' y; Q+ I2 ], j- {$ @
    failureThreshold: 30( x9 \. E" G" J2 ~
    httpGet:
& E2 b* a2 J. i. T2 k) a      path: /api/health/' c; O5 e+ R6 l' w3 T& d
      port: web8 _5 I0 F( ?3 p  q
% p! w7 z* n# _/ q# U* X6 N& V" r
  podSecurityContext: {}+ Q4 a# {$ j4 E- F. j
    # fsGroup: 2000
& _) u4 O5 ?& [, J3 c( d; ?; ?# v5 ?! v* r" z% f5 o1 H# Q$ _
  securityContext: {}
% E& _! ?, N) y+ J' x8 t    # capabilities:
% y% M4 E( v- b6 B% X    #   drop:  f0 r' V& v# y0 l( l
    #   - ALL. V$ u; L( _; ^5 T, M
    # readOnlyRootFilesystem: true$ x6 U4 _8 }7 m9 A7 j/ G
    # runAsNonRoot: true* v5 h# `: `# L
    # runAsUser: 10008 O' n, `& v0 w  S4 }' l

" r+ h; z" T7 h  service:
8 u6 `- `# h3 Q    type: ClusterIP
5 f1 H4 u+ H6 m4 N8 m    web:
( K0 w$ ?( A3 C& D      port: 8080
' J9 h) T+ I; b0 W: _; ~5 h) ^% G& J2 B: B) r& s* T
  resources: {}
' j( l3 a  U# |) r    # We usually recommend not to specify default resources and to leave this as a conscious
) p" Y1 N; \, I  |# X- Z    # choice for the user. This also increases chances charts run on environments with little, r% Z3 d0 e- x( Z5 o& G' I1 C
    # resources, such as Minikube. If you do want to specify resources, uncomment the following: p/ C, B7 x0 v3 V
    # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
# h4 ~+ R9 n. _: z* D    # limits:
. W' s( }: b- P( J$ `. Z    #   cpu: 1000m
% p* u3 _/ @3 @% M, [  c% ~8 R    #   memory: 2048Mi, H, r; O0 v0 A
    # requests:
1 b. Q$ z! ?) W2 m: D7 @! [    #   cpu: 500m
) U9 _' ?4 t8 u0 l    #   memory: 1024Mi
1 m, f- h0 ]# A$ R5 W" s- }
* S+ a1 o* }1 Y# @& S  persistence:" ]+ o% h' x  o6 ]: T- M
    storageClassName: jumpserver-data
- Y; W) Q2 D0 _' f    accessModes:
! [" q9 O5 Y! X      - ReadWriteMany
  t# e7 Y8 z; H) ?9 q    size: 100Gi
1 P; K; z1 E9 b( ?3 f8 T    # annotations: {}
0 @" o; J7 V0 ?1 c5 o  D    finalizers:( w9 h( ]$ {6 K' }6 h
      - kubernetes.io/pvc-protection! Z. ^* ?6 m7 i+ O2 g% a
    # subPath: ""% V* q  ~$ H& Q8 ^5 P+ b) H" e
    # existingClaim:% R: }0 h  X& p8 E5 T* y

8 _" g: G8 s$ Q! T* u  ]' T  volumeMounts: []( U# B$ r' j& m( H9 h8 g) f

1 |0 ], D/ g# X7 _8 ^) h7 V9 Q  volumes: []. C( u5 d" I5 G& s. H6 }& W

- w" d) O" r% o6 j% E; J1 ^  nodeSelector: {}
7 m0 Z3 Y( S1 C. c; x* Z; ?0 [3 W* Z3 S
  tolerations: []
+ M" `$ t9 d2 E  h1 ~! r
: _* h7 ~: ]3 r: @' }" _2 d! \  affinity: {}# G. Z& y! i' o8 Q, Z/ @3 B
& l0 M8 J* P8 ^, I! R% {! P
koko:
: f* _; W  P1 }' H# o  enabled: true, O1 @& J1 X, W, R! g' h
+ Z7 F/ K+ }% x- S( D( w5 k
  labels:
: b9 r9 ^% F6 {* f+ G; Q; O    app.jumpserver.org/name: jms-koko; d$ M, B2 y; m) S3 c
) X0 @$ W0 H$ n- J* h7 S, a% r
  config:6 ^8 p8 w/ {% M
    log:8 Y* i8 H$ F- }6 w  O7 L) E- A; D
      level: ERROR# G, w3 H) H0 c$ g# n8 o

# }! j8 w$ }- B( H  replicaCount: 1
7 v( s8 k2 c( E
: Z; A. n; `, a  image:
; J8 G- s# u4 w( |! i3 e5 p4 q7 g+ E    registry: docker.io$ n  {# y7 V  b. ~
    repository: jumpserver/koko2 D$ j, k6 w! Q% q; e9 M
    tag: v3.0.3% _; J7 {8 S0 [! N0 ]: u
    pullPolicy: IfNotPresent( c+ M6 [5 D& t5 E# T

' c+ H$ d% K, o5 B. c6 R  command: []
5 z1 F+ ^3 {  c5 |4 ~( B; U3 o; v
; G. R/ x0 f1 k# J, C  @7 v  env: []/ `5 G: j% W; t+ E$ W
    # See: https://docs.jumpserver.org/zh/master/admin-guide/env/#koko( \* L/ z/ h6 h0 ?
    # LANGUAGE_CODE: zh& F; z, y, O4 o' N7 w
    # REUSE_CONNECTION: true/ c: Z6 M* f/ _' J
    # ENABLE_LOCAL_PORT_FORWARD: true
1 t. Q! J2 s9 a. j( A* t    # ENABLE_VSCODE_SUPPORT: true
. l+ k; `" R& D# c/ J7 ]( Q( H4 F
% g+ n+ `- v6 e; \' t  w  livenessProbe:
) I3 j* s9 Q2 o7 U% r7 G6 E    failureThreshold: 30  `' \! K% G$ }8 U8 A1 F
    httpGet:
- n- k7 X# R( s  f! d4 n$ X# G. {      path: /koko/health/
3 k: Y& t- P! D9 s5 y( Z' U8 |. I      port: web
! P7 c  ]2 \4 S, p, M0 ?* G& t
5 B) O7 {* p9 |8 X3 L  readinessProbe:
' G6 J0 Q& [% j$ X    failureThreshold: 30
) V6 h9 a6 U( ]+ w5 S+ H    httpGet:
6 _  R+ C7 l+ {' |) T" n0 {      path: /koko/health/
% l& Z0 @4 }  F+ ~+ y      port: web
4 o" B" ]& c  ~: y% @2 O4 {3 `8 T* i' M! F( v
  podSecurityContext: {}+ U8 t/ S  W- b# K9 q% P
    # fsGroup: 2000+ C: O: ]! G- E" f0 S
1 ^) W, S6 i, O( w' j
  securityContext:, W8 ^/ v) p: O3 b4 x/ Y
    privileged: true% o- e$ e; ]5 U5 l6 b; n
    # capabilities:
; G2 s( ]7 a6 [+ F    #   drop:
- I) u. M: D1 d' ?$ Y    #   - ALL
  R/ _& v6 }2 R( K0 [    # readOnlyRootFilesystem: true
) n! T% U1 h% w2 m- Z    # runAsNonRoot: true" n/ f) f& t" c6 k' x/ X
    # runAsUser: 10001 T$ c# D. N. H1 W# n$ |

0 q0 O1 U$ x9 F2 l* `" q6 h" t  service:
3 l4 S6 e% e8 c3 c% |    type: ClusterIP+ ]1 b* H3 s0 D" _- ^: {# S
    web:* M% ?+ l( [* M( K4 B9 H3 w
      port: 5000
" h7 B, v6 D6 W- H5 P2 W9 W    ssh:
' D3 s' F/ M% Y2 H+ `; W0 o2 ^      port: 2222
5 j, _: o! N. ~  o3 A# N# Z$ G+ c4 s5 m
# K) z6 u6 W3 |2 `  resources: {}* Y1 f% v5 z! T2 D+ s  X
    # We usually recommend not to specify default resources and to leave this as a conscious
  o# T; `: F. R  H    # choice for the user. This also increases chances charts run on environments with little
( c, r% @" O$ l$ U; V# D    # resources, such as Minikube. If you do want to specify resources, uncomment the following6 C1 [' X) \6 K% \9 V
    # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
- x$ f" L  M+ O' I0 X  T3 N    # limits:
5 P8 D/ d# ]& @& J6 t% O    #   cpu: 100m2 w! x; S) r. P8 {7 E
    #   memory: 128Mi
& j8 j8 o  F+ V& @    # requests:
% \0 t& v& y0 ^    #   cpu: 100m
( i/ d! V5 ~. ?: L7 {! C2 u0 x    #   memory: 128Mi
1 \; q+ B* `' F0 \9 ?' O
/ i0 @0 y& C" D# s: X; {  persistence:
8 r, |2 |0 h( w, M    storageClassName: jumpserver-data
4 u' S0 i2 |* A, n    accessModes:3 r1 ?) Q, z/ j8 D
      - ReadWriteMany7 [% H' v' f/ s$ C. c2 h) P6 {
    size: 10Gi) O0 d2 L& [* f
    # annotations: {}) b. ?3 I9 [: H5 r+ _
    finalizers:" p1 A& T# X$ }4 j. e
      - kubernetes.io/pvc-protection1 A1 ~* u9 c0 H8 ^( X9 m7 q$ e
' i6 }4 E" K2 s, ?3 n& ]- ^
  volumeMounts: []
% q! @- N4 F% O9 o( K3 f+ L; h" N5 G! \- j% f0 Z! M! K, B. \
  volumes: []/ v; u% T) D+ S: M3 x
+ ^2 I9 F. M8 p2 q8 j* x  l4 }* D
  nodeSelector: {}
' M- ^5 Q6 B. r  K1 ^. h+ ]
2 P: T, `) P5 W+ @$ g  tolerations: []3 |9 c. z: `# s+ U
0 s9 R1 h0 k1 z
  affinity: {}
: n3 P" S# K% w, o$ Y& u. S: |3 f  d% J4 k/ j; b
lion:
2 d- v+ `0 h" ~6 E; _  enabled: true
+ ^# a. {! W# u% Y0 [" f- u4 j0 g' q6 S. i9 \3 Y
  labels:0 ?9 f6 V# n7 c) _
    app.jumpserver.org/name: jms-lion
7 F4 Y! ]" L5 U0 N& D3 b4 j: i4 y5 `; E  i
  config:
9 T' L. V5 V1 p$ S  `3 C4 B    log:% w; y/ r! B# i6 h
      level: ERROR0 M1 M9 ^  G( e9 W# p

" P* B3 b3 l' O  replicaCount: 1
# @( H; y6 @: ?7 K: |$ i
' R; x. x) G( ^& m1 I  image:
4 ?! V1 I5 z: Y& J    registry: docker.io
; v9 S6 R6 \  e2 H* d    repository: jumpserver/lion4 x5 w; [# F1 \1 b6 Q) T1 B
    tag: v3.0.3
3 X5 s5 ^/ S$ r- ^' [5 ]% r    pullPolicy: IfNotPresent: s! d0 r7 Z4 i; c
0 H1 a% l- h  `% x4 k
  command: []  y7 H# q& |. W  M& Z$ h4 v9 d$ [+ {
) {' N, m6 d/ q. V& |
  env:
9 ?- Q& l) Z- [4 R9 m* ]    # See: https://docs.jumpserver.org/zh/master/admin-guide/env/#lion) [. @; z8 N2 \; {8 v+ q
    JUMPSERVER_ENABLE_FONT_SMOOTHING: true' D( K2 y: h( a: t& i% b( b% W8 R
    # JUMPSERVER_COLOR_DEPTH: 32; @+ \. m$ W: v+ [4 N* I9 ]" J2 m
    # JUMPSERVER_ENABLE_WALLPAPER: true
5 r' g% _# {; @- ]) z. G# \( |    # JUMPSERVER_ENABLE_THEMING: true' G% X! x8 k" D! o2 S; u' F
    # JUMPSERVER_ENABLE_FULL_WINDOW_DRAG: true% h( _0 p, K" c4 G: z: q
    # JUMPSERVER_ENABLE_DESKTOP_COMPOSITION: true# A4 V2 B* y8 T  ]# K4 u# K6 ^0 C
    # JUMPSERVER_ENABLE_MENU_ANIMATIONS: true+ r  N/ l3 m6 w2 O( ]4 a

( n$ `% \6 H, S7 b/ L0 S  livenessProbe:
& ]% T, j2 l7 S1 c    failureThreshold: 30. n; d6 N+ y& _/ L2 W
    httpGet:
6 @' W' p( Z% t      path: /lion/health/. h: x$ L( R7 d0 P9 g4 }
      port: web4 O* q0 l) K# x1 o% G$ O
4 R, [7 q; I' o! D1 T& B6 k
  readinessProbe:: ~' E- Q9 Q! ~# w# b, ^- q
    failureThreshold: 30
! m$ e) B" H* `  O5 e    httpGet:! O6 }, {- r& B! x! Z
      path: /lion/health/; ]4 N5 R- M/ T% H+ m; y
      port: web/ N, r2 w' p: B0 T4 I$ k

, O! X3 r  D) X* ?7 P9 q  podSecurityContext: {}, d% g: Y$ o) v: m% g
    # fsGroup: 2000
8 }* n: A+ R9 a  K7 V% y: B: p/ v- v& z2 a! _- j
  securityContext: {}
0 t, e4 U* b9 H, k! T    # capabilities:
+ ?1 ]* i2 u' O! H" s4 z5 J    #   drop:8 S+ J6 Z" I" y; @3 @" }
    #   - ALL
' U, z0 W- b+ O  Q, n- Y  X% C0 P    # readOnlyRootFilesystem: true; f8 @2 H0 v4 d* S& t8 Z  D
    # runAsNonRoot: true+ J3 n; O8 I# t# o8 @9 a9 u/ ]' A
    # runAsUser: 10002 R( {( W% e7 l: V

- m( b; R8 p# l# b' }  service:
/ f: [. e9 k4 a2 D5 V, C' @2 x. a8 a    type: ClusterIP! c( {6 K+ v- I' o0 m3 ?/ e
    web:
, Z* u' t9 I' i6 b7 \2 R7 K4 p      port: 8081* i% K% @5 a; U% x; L- D
0 t7 V8 ]5 P2 ^0 A1 v
  resources: {}
" B& p5 l9 p; f$ k1 [    # We usually recommend not to specify default resources and to leave this as a conscious
4 \" G; v8 d+ _    # choice for the user. This also increases chances charts run on environments with little
8 f' }+ ~3 j) I5 |9 i( x    # resources, such as Minikube. If you do want to specify resources, uncomment the following
$ z0 }: y; g" Z3 S# {    # lines, adjust them as necessary, and remove the curly braces after 'resources:'.: R1 R- Q' E& z# K/ g. y
    # limits:0 q$ a- d$ C* J0 s
    #   cpu: 100m
, T4 Y4 j9 J+ Z1 v    #   memory: 512Mi$ ~. @3 v1 e# ?
    # requests:$ D, }% N  H, K
    #   cpu: 100m
' f* R3 c/ _5 A3 o; C    #   memory: 512Mi
. q2 o( P9 N. d) R) i; S& F& G9 x0 ?$ s
  persistence:! ~5 K/ t) b" g* v
    storageClassName: jumpserver-data
% G8 j, n' X9 C9 o    accessModes:
2 {. [0 w* C3 O      - ReadWriteMany
5 |/ _$ X: p4 A6 @& }  e. o    size: 50Gi
) m2 _  x# L/ Q6 D0 Z4 J; r    # annotations: {}5 x. V# t8 ]+ W, P, l; j- `! V
    finalizers:* f0 |- \5 t* }( }9 {
      - kubernetes.io/pvc-protection
8 J: l8 |2 ^! Q( s9 r; r/ t, W( W( Y
% X. m9 e& t' N/ i- Y  volumeMounts: []
5 @8 c0 Q4 r1 S0 U+ d! J- Q% Y3 m7 R$ m
  volumes: []6 H  S# m) ~5 U2 o1 N9 R

  S3 K9 h" }; ]2 M7 {6 F  nodeSelector: {}
$ L) j8 ~/ k3 ?$ e$ w
3 n8 ~$ B6 \/ E% g& Z  tolerations: []0 U' b8 D5 \- R! ^0 t3 ^7 K6 z

  v4 E1 s* L; d: L" p) R! K# E  affinity: {}( F2 q2 J2 N. t5 b

$ n) s( s0 j. ~magnus:
; X1 E$ t' Y7 f& U& O8 O6 H0 x  enabled: true  ?4 _# a4 V3 Z( [2 m/ v; ^
! ?. H4 m- ~1 {% m" K& a" K
  labels:
8 D: V3 d( h( O3 ^* o    app.jumpserver.org/name: jms-magnus* Y% q8 T' q4 S# O% Q! s! ]

2 K5 {+ @' y" H3 m6 e5 f  config:* m  Z* z4 I& D/ A( z1 V
    log:
$ t% [0 g- m+ ?8 o      level: ERROR( ^6 x! d7 O$ d7 @' H; M- O
( T' U& G) C# [; Q- ^- W7 K4 c# t" D
  replicaCount: 1  R; X9 D, y8 o: g0 S
! n7 \2 I1 i$ N- d& ^* G
  image:8 z, k( Y6 p4 L' L# ~
    registry: docker.io
/ B, d: s! o3 e" l. D    repository: jumpserver/magnus
6 p6 Z0 g5 I- O+ W3 m    tag: v3.0.34 g3 Q' g4 f; g' s4 [( x, X
    pullPolicy: IfNotPresent+ |9 J# `3 l2 C
+ M0 ~9 V4 n. f' F9 K2 Y6 D. K
  command: []' j3 R0 W( G# B: Q

' c: n! c- n; v2 R" `  env: []
! e! j) \/ L+ \& c
3 @. T# v% K+ Z  livenessProbe:
/ [, N5 \0 a) V) V2 e    failureThreshold: 30) V/ M* }. x! ~+ Y& n
    tcpSocket:
4 C3 b2 z+ q( C* `      port: 9090
$ e3 g' F' ~& ~  D2 p: \! M7 G# ~) q( I/ e& X' O
  readinessProbe:2 G/ y7 e$ G# s* s" z
    failureThreshold: 30
2 |6 {5 k  d' y3 Y) A6 z, B6 W    tcpSocket:$ v3 t+ V4 O. @0 Z8 J: B( j( [
      port: 9090
! u. i  G% D: F: x* y4 V& b4 o* k: w1 p5 N9 f, R0 D( c
  podSecurityContext: {}
7 j/ m: _, K. B. i- W1 b    # fsGroup: 20004 m" ~- k6 V  o8 p/ i. y2 ^( |
" b1 j; X: q; A: R. ]7 Y6 f
  securityContext: {}
1 z+ l2 r. U! j5 S: b- X0 J    # capabilities:: g4 v# d  \/ x& j) v
    #   drop:
  S5 n3 r8 ?, J! h    #   - ALL
! R4 B7 \- J9 F* [    # readOnlyRootFilesystem: true, _/ |4 t. w  ?# V1 e
    # runAsNonRoot: true
* b& _6 |- K. T+ o3 u/ ~8 E% k    # runAsUser: 1000
3 K( N0 e1 I4 _1 h/ k# a# x2 }  _# _: a$ B3 M; [, N# @0 D
  service:8 a8 |% t- K& {( M; f
    type: ClusterIP
7 q+ d, |9 f% l% v6 }3 T    mysql:. F# B7 I. P) ]0 P/ g! H
      port: 33061  D0 @3 I6 j. N
    mariadb:
. B  {' F; Y3 x: ^5 c      port: 33062
% g; c0 ]+ n0 q4 \+ @    redis:
+ `- e! A( _& Z6 j- w; p* M! |      port: 63790
2 Y  |$ G- Q& Z/ D1 Y0 O* p0 I' B! @    postgresql:( W; k$ |# x: ~( H
      port: 54320
& n; p( i& N' S2 t; @. ~# K3 w! `4 \    oracle:
, x0 z# a; i4 Z: n7 Y      ports: 30000-30100! D9 [) o6 S  d+ p' T6 Z+ z
! g9 ^% R% U3 n* q6 s5 u
  resources: {}+ v4 l6 i/ C1 P& \; p- y" q9 ]) T
    # We usually recommend not to specify default resources and to leave this as a conscious0 c$ q$ x6 L% l. ?: Q
    # choice for the user. This also increases chances charts run on environments with little
9 T5 {2 a' i2 ^1 L- i; x/ e- R    # resources, such as Minikube. If you do want to specify resources, uncomment the following, U- H( N# y# o7 r
    # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
) B) m" j( _4 k  t4 [% P" b( }0 V    # limits:. h; [4 W! d) S" ~! G
    #   cpu: 100m$ R3 h% b1 ]- Q* b- p
    #   memory: 512Mi
1 h* l7 g/ q# K& i* D3 L    # requests:, E: c9 g% G7 g3 M+ |, f0 Y! m
    #   cpu: 100m* y+ ^* y9 m* s3 k1 s
    #   memory: 512Mi
9 w; S: h; S2 H+ k# A: j* V+ w* q% ^* N( L' `9 a; r0 V8 E" G
  persistence:
$ k' G/ f! W7 K5 P    storageClassName: jumpserver-data7 ]6 j5 T3 d8 [9 Q8 j  [' C
    accessModes:
$ }* m' f  a& G, c  h3 p: o7 L6 f      - ReadWriteMany
2 c3 F! b$ u0 I. I1 `' O. ~    size: 10Gi- P0 M$ P* J! A& F) h% T
    # annotations: {}
% x5 X0 @8 ]. M# c7 U1 L4 L1 P    finalizers:
% Q2 ?' A. D% f. K9 Z1 ~+ R6 z: Y      - kubernetes.io/pvc-protection
/ j* \+ \/ z' Z0 S4 \1 P
9 \% ]' A9 c& C6 p4 A3 k  volumeMounts: []5 M: M' N* |. K* ]0 c% j; g1 Q8 r+ j

- ], I& @0 g; V- t5 f, a  volumes: []# i& _8 j. v7 x- b- B
, U; {8 G* {2 _  S1 o
  nodeSelector: {}4 O8 [( M1 V# G6 s1 V
  w' |- D% Y' Q( }8 X
  tolerations: []
' t6 v; x3 }( h6 e8 k; w1 _" Y% h$ r# F: y
  affinity: {}
' |" [: b4 q5 ?) R6 C6 O- ?4 [2 y+ I, L: ?/ b' u
xpack:: x1 L  t2 [9 ]. j# G
  enabled: false      # 企业版本打开此选项
" `3 A, x, j/ H# z# H" t- i2 u
7 T! n$ k$ u" }% v  }- vomnidb:# }8 K  X/ K- j  {% ~0 y6 C
  labels:! K1 d8 Z; b; h4 D, @
    app.jumpserver.org/name: jms-omnidb/ @1 I- s! B: H8 V: Y
7 |% p9 T9 X, F5 V
  config:
# Z# u+ X3 D+ {1 G+ ^7 c/ f    log:& \4 Q2 c6 o) r( t* F
      level: ERROR, q- |5 v3 |4 G

8 K( f8 o# Q* u  replicaCount: 1( X, i1 X) P3 p. P

9 b  j: J8 Y5 b5 v9 v: _2 k, v# O4 h  image:( c6 F  R$ b! L* `: @4 [- k, q
    registry: registry.fit2cloud.com
% \2 a4 t6 `9 z" N4 B    repository: jumpserver/omnidb% ~9 [3 p- M* v
    tag: v3.0.3
) d' k# s, V+ V7 [    pullPolicy: IfNotPresent
* p/ @8 L2 R5 @% @
) S) y8 F7 p' E  d  command: []! v( n/ w/ a( B% E/ g( V
! Z5 [* j- `# Z4 X& v+ e) N
  env: []
" D$ B5 a& I0 u! w
4 w3 z. F, t0 ^  J' I! U  livenessProbe:
* ~$ m0 m; T) x    failureThreshold: 309 h% y" W$ G! {( m, p8 l
    tcpSocket:, D: B* ]* y3 w% \
      port: web
/ D, ~. d  q( S2 q7 O: f; M# _4 F7 s$ D& N3 D' O- |5 K5 h" [
  readinessProbe:
" k! H8 i5 w6 K* |8 j) o" Q( E, s    failureThreshold: 303 J, Y- [5 E* p8 ~" {( r  x
    tcpSocket:& o  I3 l' q8 T- ~0 v' a4 |$ L
      port: web
$ y* V& @: S( x5 |6 c, v0 X3 a% r
! T% j! j5 `  y( P; L  podSecurityContext: {}
2 L7 g1 q7 E0 h& F0 ^    # fsGroup: 2000$ o3 Y: O9 H$ T( H3 f# @

; ~" l& T# ^: t  t6 n& ~" y( h  securityContext: {}( v* Q8 N0 \) N1 C. D4 m% X& k9 T
    # capabilities:
- m& u6 F4 y# X: H: J    #   drop:- E) r# \3 ~* u; W! y6 A
    #   - ALL
# G4 P; E: H9 ~/ c6 A! ?    # readOnlyRootFilesystem: true! L6 G# y/ P9 Z, v% J
    # runAsNonRoot: true. x0 C/ e5 c* r2 i
    # runAsUser: 1000
* J) u- l  C  P) S; H, b/ o! |/ j$ w; m  i2 d5 r9 A7 M
  service:# r5 _' Y/ ]0 K  H
    type: ClusterIP( l& j6 z1 U" I5 z% F
    web:
1 t8 D( N( R4 B% ~' {      port: 8082
+ m$ J" T5 k4 I9 f( q1 L
" x0 Q* E5 m; W! k& |& o  resources: {}& x' K& G1 Q$ X& u
    # We usually recommend not to specify default resources and to leave this as a conscious& `) l0 x- N% |
    # choice for the user. This also increases chances charts run on environments with little
, l+ I- k4 ^5 `& d8 b    # resources, such as Minikube. If you do want to specify resources, uncomment the following
0 i! z" |9 b! h. B* x2 ?    # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
3 f; d) A% i) ], D3 u; a5 s3 N    # limits:# ?9 I7 B- q, r$ t5 {1 Q! Q* c2 i$ H
    #   cpu: 100m7 l' g& l; w+ I- v4 ~- J: x
    #   memory: 128Mi
! m7 R  i9 ?: l8 O  ^3 [8 M    # requests:- d, T, G! {9 C$ v& |
    #   cpu: 100m
0 U7 G7 Z$ [9 ^# E* _3 U    #   memory: 128Mi
0 Z1 f6 x5 v! f2 S! t' I$ C4 h" E# B+ D% ^- ^
  persistence:' C1 Z- \# }  m
    storageClassName: jumpserver-data. [% W7 m6 |/ B0 K
    accessModes:
' E1 t) z9 [. \* F      - ReadWriteMany
) V! E0 i1 {( i9 q* [: g    size: 10Gi
0 j) ~  R) S. f  O* O    # annotations: {}% P8 P! t% N0 T
    finalizers:
  O' a- N! @' v0 `; P, N% e      - kubernetes.io/pvc-protection
& e8 y% g9 `! d/ }% Q! ]7 k3 u) r$ \
  volumeMounts: []
  o& ^" q& o7 m( X' Q& d, }6 u$ \' v
  volumes: []" |' i1 W2 R% x% C" \
( C! [, |& H' [5 @% W4 e
  nodeSelector: {}' y* ]8 O3 h$ w- q
$ U! T' A' r1 T, r6 x7 J$ _! R
  tolerations: []
1 P, A, z. d- D1 N1 `. y7 v5 s7 s& E% v, a. T8 A
  affinity: {}
* q$ b' ^5 t, A! M6 e/ B9 m3 \- D. X3 F8 \
razor:  S) ~# M% k0 w4 t
  labels:
' L, o# l, q) {6 @( o+ [$ k    app.jumpserver.org/name: jms-razor+ z8 J! l- G, h

* u# j& Q8 O+ {8 P  config:; c% d1 ~1 R. i  s1 ~% g' L
    log:" o* `8 f7 Q  s) {
      level: ERROR
9 L! N# f4 e* ]7 o2 b* L
5 X9 C! U. i1 P. b$ [! J  replicaCount: 1% S5 g1 [5 c2 G# w' g

  u9 y2 D3 ^: ^+ N3 V  image:
) y5 B6 w6 n- t& |- ^# q' W    registry: registry.fit2cloud.com
( t2 q1 x7 g; U8 b- b, X    repository: jumpserver/razor# L1 ?9 ~# o  {; d0 {: A
    tag: v2.28.6* }/ [; ?! i9 h- z- `7 N, q
    pullPolicy: IfNotPresent7 t) [; W' O/ v& o7 a* f0 W
2 T% e0 e$ {0 r0 m2 b
  command: []
" x: k7 c2 Y& I8 m( w5 {( Y+ w8 ]
  env: []  Q1 B* g6 I- G
; ~% D5 `+ M  X+ L" {
  livenessProbe:
( H: l: m1 d: d; |9 M) _$ O; w    failureThreshold: 30* g- `' l5 D" ]+ T
    tcpSocket:
' K+ a2 `) |# @( G" {0 u# ]      port: rdp% \# `5 r; L" O

* V+ J6 K6 D- U9 Q1 s  readinessProbe:
# a% a6 i  T! J2 O    failureThreshold: 30
( o, Y2 o* ^  k; z    tcpSocket:
6 A. y* |' }0 |+ ?& C# S7 R+ P4 g      port: rdp
4 C3 j0 p7 Z0 ~/ r: R" ^; t, j- H% F4 @& v9 v4 ~1 I. {: e
  podSecurityContext: {}
! E% S" e' H# ?6 {3 b: R$ _    # fsGroup: 20003 u" p) J& `& ]
2 M( q  x2 W2 R) g
  securityContext: {}# ^+ ]7 Y8 A/ I$ J6 E
    # capabilities:
9 S' j4 |' K. _: B6 {9 y0 D    #   drop:; k& {' B; H, @3 ~8 m* y8 A
    #   - ALL6 D' l9 A9 ]) Y- a
    # readOnlyRootFilesystem: true! B5 G5 C! K  }1 e! M& ]3 o
    # runAsNonRoot: true
4 Y+ \, ]- N! O! ~% k8 o    # runAsUser: 1000
  b1 F% p4 f4 n0 |1 m4 P. X2 W0 h# D$ ?7 J8 H  Y
  service:# e( H' w+ d( a2 n% G
    type: ClusterIP0 K9 `0 c# v$ f3 M4 K
    rdp:
9 n+ W9 {: q! s% j% R      port: 3389
8 v3 L7 Q9 R/ D& ?7 {, F$ B$ V# g+ w  |
  resources: {}
. W3 E0 n  K& m    # We usually recommend not to specify default resources and to leave this as a conscious
$ b) a) N* X5 @( r! c    # choice for the user. This also increases chances charts run on environments with little" D( l% R# ]% z7 x
    # resources, such as Minikube. If you do want to specify resources, uncomment the following# R2 [2 y5 X2 ~+ o
    # lines, adjust them as necessary, and remove the curly braces after 'resources:'.
5 D2 I2 R8 |( F8 H* ]    # limits:$ i) U$ F' L6 |7 i" V6 h4 l
    #   cpu: 100m/ O: p2 n) V" Y) Q, L8 B/ ~1 ^
    #   memory: 128Mi
) @9 G( [/ b5 `2 v3 ~6 n" i    # requests:" \( z# c! y1 O+ I$ {
    #   cpu: 100m
8 n2 J1 c, [  T/ g' Z6 W. j0 G    #   memory: 128Mi
$ q. g) h" b, R  E
" b$ L% e6 i' F- a5 a6 g  persistence:3 O; @& \& ~1 V$ X
    storageClassName: jumpserver-data+ e" o4 W7 J3 f9 ]# X+ ?
    accessModes:/ \7 |2 F7 z& D+ I' F
      - ReadWriteMany
9 z6 n  N2 P/ H. V0 h: j% p/ Y    size: 50Gi
& Q7 d% v2 {9 H    # annotations: {}
7 x2 W4 I/ s% e/ Z/ v. G& w6 Z, Z& t    finalizers:
$ a: c& K' M( a9 h+ x      - kubernetes.io/pvc-protection
% ^3 Q, @5 g4 N' @! z$ b0 W8 C/ @: Q3 }6 d6 o( b8 X% ^: `) @1 z
  volumeMounts: []3 {4 W* k! ~' H4 t* H2 X

4 y+ l) {8 U- N# W- L3 X/ x* g5 V" C: ?  volumes: []: [( w4 w* P2 r, {

$ k$ x7 [' B5 ]9 {& q  nodeSelector: {}
2 Q% a. \1 f1 R: E/ f; u% \) h/ f' f) j8 p
  tolerations: []
: ?2 T+ J6 B% a0 L: b
% c% A: @5 x3 g% B) r% ^  affinity: {}3 n7 w7 e/ b; F1 |& U- N4 [
" D: h5 }9 n4 A7 `* j& G1 }% C
web:
3 U3 @0 a( Y4 Z" Q) n& _; h# f! ]  enabled: true
: Y& }0 S5 T6 g* U$ K% T0 S/ [" H( R" z5 h3 K
  labels:
! C- }. A0 u3 z+ K    app.jumpserver.org/name: jms-web
3 u1 u- c( v: l" z/ K$ @
* i2 R- u- j1 y: |( L; N5 j  replicaCount: 14 J- b- g2 ]1 f+ D
! J: X) d' \* ]( x
  image:) m; t+ t& ?5 T! s! I
    registry: docker.io5 d' W6 ^& y' n/ F
    repository: jumpserver/web
( Q: H2 `0 q* @" n    tag: v3.0.3+ ^9 X& e  M  O9 j% R" }6 c4 ?6 g
    pullPolicy: IfNotPresent
) x. z& u( n9 t( Q
: L! t6 \6 g0 W1 m/ s  command: []) M: K8 \0 ~/ i9 g% k" a

) ]( `/ s; ]5 \, U  env: []
) f. m: [- _9 y/ f% {    # nginx client_max_body_size, default 4G
- }; S% r9 x: C- i    # CLIENT_MAX_BODY_SIZE: 4096m
& m9 U! j8 p3 y6 g0 B) t- a& |- r& ]! e
  livenessProbe:
$ l& y# E) X0 d, z' s* P: z    failureThreshold: 30
% i+ d. p; A$ Y: ~+ Z: Z    httpGet:0 g: W' u+ Z2 E
      path: /api/health/
" k( [$ |- R2 r6 D* l" b5 T5 d      port: web
( O4 c( l9 Y/ t/ L/ M% t+ t& N0 D/ U
  readinessProbe:
6 h9 g9 d: r: A* s6 j    failureThreshold: 30
0 |+ C8 r6 b0 Z+ f7 ?9 t5 A    httpGet:& ?, j' H: ?/ G/ ~! J7 V
      path: /api/health/3 C- z4 l* d: n
      port: web
1 ^  R  k6 q7 m& |8 k. o3 m% ]/ u$ k7 B8 v. P& c0 e
  podSecurityContext: {}! d  B6 b# k- b! ^  I/ [
    # fsGroup: 2000( ?- m& q4 U$ C  [

2 E4 {$ u4 m& c- @& s  t3 }! }  securityContext: {}% v8 ~, J9 k5 w5 n! |. {
    # capabilities:
1 N! _$ e0 h+ w$ N# q) d- \    #   drop:
% W: T% ]4 T5 X8 q7 @$ T5 @1 V- q% O    #   - ALL( C3 p; s5 u) Q( E
    # readOnlyRootFilesystem: true; c# M$ V( n# ?' ^
    # runAsNonRoot: true; ~3 e  n, Q$ |1 {! r
    # runAsUser: 1000& u$ B; c+ |, Y% j& E
- k+ H& }' F( x  q. o: K
  service:3 H8 b7 {! g: {- O7 z
    type: ClusterIP; W6 w6 ~# J# N" E% b  {" E  b
    web:
$ p. R: |; m& R2 Z, ?/ K      port: 80( L# b! }4 |7 o/ c) S" m

9 F! }+ K$ P# V( F' y: F( d6 y  resources: {}' I  b5 e# r, I% a" m
    # We usually recommend not to specify default resources and to leave this as a conscious( q9 V1 {$ F4 Q  x6 z, R
    # choice for the user. This also increases chances charts run on environments with little& d. d% Z  e2 c+ W% m  o
    # resources, such as Minikube. If you do want to specify resources, uncomment the following( N0 j. Y- `4 i7 S) T
    # lines, adjust them as necessary, and remove the curly braces after 'resources:'.3 x  P$ Y1 K2 H. X& K/ z) [
    # limits:5 A. U8 Y* s; _' _/ q. S% o: K7 L
    #   cpu: 100m$ t/ h4 d5 l0 Q" u' s2 l* M8 C: J/ |
    #   memory: 128Mi. D/ g: A% ~1 q
    # requests:
5 _1 X/ j- B, @( J. O& \: J; j- h    #   cpu: 100m
+ {' a' t/ T  X: r8 n9 X    #   memory: 128Mi( v' @6 z& ?! ?1 S' ?) M
4 V6 S2 F6 ^$ e6 v# i- @
  persistence:
  A6 y; G  A7 L# ]) @0 |, l    storageClassName: jumpserver-data
0 o7 I0 F) W( r7 _9 v$ D; `. J    accessModes:
+ c' B; ~& j+ |      - ReadWriteMany- G# L9 p" z( z, G& z6 \
    size: 1Gi
! h9 K) p1 B2 |2 X    # annotations: {}7 W8 E2 w4 F* a3 X( f' c8 d0 K
    finalizers:
# q3 V0 ^( r6 ^# k9 _9 d      - kubernetes.io/pvc-protection" N0 L3 k$ g- ?* ]% ]$ n
5 @: j2 M. W' n! q) f- v  ]) G  W; _
  volumeMounts: []% t5 A% q0 y! F$ x6 c6 J# W# b

1 U( ]6 i* C) t  volumes: []* }5 Y# D/ \8 c' W
8 [: x& s# v6 ?: J' m
  nodeSelector: {}6 t# u9 m% x7 K+ e- _

3 h& e7 M2 c: v  tolerations: []% N# w# O5 Y  W8 P' j

" L- m( q( L5 H; F5 A  affinity: {}
( f1 ]( E: ]) x+ Y% T2.3 安装 JumpServer⚓︎; k! j0 T6 l" Q7 I
( b" w0 P. Y8 z& r8 [' i2 s* |
helm install jms-k8s jumpserver/jumpserver -n default -f values.yaml6 L# _1 `7 P$ f- c# f  P
2.4 卸载 JumpServer⚓︎
! Z' Q  u& \9 R3 E- u7 O/ |: A
9 l* i" k# t) p- g* s8 m7 ?" khelm uninstall jms-k8s -n default
 楼主| 发表于 2023-3-8 10:00:14 | 显示全部楼层
远程应用⚓︎) B0 i  _$ K5 Q8 X  V& ]
注:社区版只支持 Website 方式。* F+ F5 C0 L: l7 \
$ v3 [/ }! L! U4 V0 o9 o
1 功能简述⚓︎
0 D( O7 Z5 n5 L8 ]! V! X. A远程应用(RemoteApp)功能是微软在 Windows Server 2008之后,在其系统中集成的一项服务功能,使用户可以通过远程桌面访问远端的桌面与程序,客户端本机无须安装系统与应用程序的情况下也能正常使用远端发布的各种的桌面与应用。  r. P& V: R5 M7 c# i7 r
remoteapp03
, p, `1 y% N2 C8 v
* D# y# z, A9 x2 应用发布机⚓︎
. M4 ~8 B. F9 _' i9 k& ~6 V/ U$ HRemoteApp 功能需准备应用发布机环境来进行支持。
6 `# j5 ]6 W1 m) h1 X3 t0 l1 ^应用发布机是用来运行 Web 页面资产或者使用远程应用 Navicat 连接数据的程序运行主体。% r, K' X$ t% f2 {( ]2 ~' k8 @
2.1 版本要求⚓︎% u; k4 L3 o9 r& y4 |
应用发布机为 Windows Server 服务器,具体版本要求如下:
3 f, B8 A2 g  V. B Windows Server 2016         Windows Server 2019         Windows Server 20228 @! x8 I% R6 l) `
2.2 安装 OpenSSH⚓︎
: j! Z2 L8 D7 o8 Z) V部署应用发布机前需要安装 OpenSSH 协议,可在 JumpServer 页面 - Web终端 - 帮助 - 下载 页面找到 OpenSSH 安装包。
4 }) F/ z5 e8 u9 [0 Uremoteapp01
. o5 E* _' ^* p9 Z  [5 l- e' Z+ ]! n0 B0 q
OpenSSH 安装包传到应用发布机桌面后,双击进行安装。
3 J$ p8 @) Y+ U9 ]$ m6 lremoteapp029 H+ @% `! u% D1 ~: x

2 y$ ~6 r: A0 O% O& O8 u; c# ?& ?" K2.3 创建应用发布机⚓︎
, I, I+ H' ?& P) }# m点击应用发布机页面的创建按钮即新建一个应用发布机。
3 U0 t5 q! t/ \) t) m5 E7 z8 gremoteapp04
* g( I) k. _5 ^) O( ]
3 G: O. m4 {' o% d: r+ d详细参数说明:; r0 x( c& {1 o0 N$ [, b
参数        说明
) ~5 s5 O$ Y( f2 h& B6 t* {3 t名称        远程应用发布机的名称,识别信息。' Y, Y5 w) L4 M4 F) b  U; ^
IP/主机        远程应用发布机的IP信息。
! o) n" q2 L& C$ U协议组        远程应用发布机支持的协议族以及协议组的端口。, Q7 T& @: D# D9 n* \7 }1 ?
账号列表        远程应用发布机的连接账号信息。
9 O+ Z1 w9 R+ O7 A* f0 ZAPI 服务        远程应用发布机的 Agent 与 JumpServer 后端 Core 组件服务的通信地址。6 L+ R& M) ^7 N6 Y! D
RDS 许可证        RDS 许可证启用选项。- t5 `3 a; z% v0 H1 j7 X3 b: F
RDS 许可服务器        RDS 许可服务器信息。
' \/ s2 w  s- k& H$ X% r; B; s1 U! L* PRDS 授权模式        选择"设备"或"用户"设置授权模式。- G& t1 I8 S$ u7 M  |
A.设备:允许一台设备(任何用户使用的)连接到远程应用发布机。8 T( |) C( z; i4 }$ N
B.用户:授予一个用户从无限数目的客户端计算机或设备访问远程应用发布机。
. t+ ?8 m+ D8 eRDS 单用户单会话        选择"禁用"或"启用"设置单用户单会话模式。
0 [5 H& H9 n. h) {6 K! GA.禁用:允许每个用户可以同时多台客户端电脑连接服务器远程桌面。% G; ]' s4 [$ l$ W- @7 ?
B.启用:禁止每个用户可以同时多台客户端电脑连接服务器远程桌面。
( z8 Q8 o" N' R0 _! DRDS 最大断开时间        如果某个会话连接达到了此最大时间,连接即断开。
: b. G& U6 |4 oRDS 远程应用注销时间限制        远程应用会话断开后的注销时间。3 b) d2 k  c$ Y0 P# p, [' y  D" M8 ~0 L
2.4 部署应用发布机⚓︎$ u/ l& @$ L& w7 x0 ~6 i, {6 T& _
创建应用发布机后需手动执行应用发布机部署,安装 Python、Chrome、Navicat、DBeaver 或自定义远程应用。9 Q5 U+ V, J: v5 `# L1 }
点击应用发布机名称按钮进入应用发布机详情页中,选择发布机部署页签,点击快速更新模块的初始化部署按钮,初始化应用发布机。3 o9 o' Y8 `) [8 d: ~7 _# |
remoteapp05
3 L* J4 v8 ?+ Z: h
- O' D6 B7 v/ w0 r3 q' D' \2.5 查看应用发布机详情⚓︎7 F6 z$ w1 t, F+ g2 G
点击应用发布机名称按钮进入应用发布机详情页中。
6 l0 v% D- o- n/ X- t) l1 p此页面包含应用发布机详情信息,包括:远程应用发布机帐号列表、远程应用、发布机部署记录等。
1 a/ \( j( L0 A$ k, ~+ lremoteapp06
: V$ }' J9 G) @) ?6 [9 ~" ^8 G% w/ w# w3 E" H) W
详细参数说明:! k) ?7 E( T1 e. u, i
模块        说明* l3 W! Q! b$ b0 }4 L
详情        该模块主要包含远程应用发布机的基本信息以及简单的自动化任务,更新硬件信息、测试可连接性等。
& [$ ]) t' n2 H- l- |账号列表        该模块主要操作远程应用发布机的账号,默认创建初 JumpServer 会创建100个系统用户支持远程应用会话。3 x5 n" i+ D1 [3 Z: M1 ]% t
远程应用        该模块中包含默认的远程应用与自建的远程应用信息,在该模块可直接对远程应用进行部署。! L7 g, m) S$ `+ X9 q( O* u) F
发布机部署        该模块中主要用于远程应用发布机的初始化部署,以及部署日志的查看。( K$ ~/ a& N9 ^) y: N) U* m
活动记录        该模块中记录了远程应用发布机的活动记录信息,点击可查看活动详情。
5 x& u  H% o8 b3 P- y+ w6 N3 远程应用⚓︎% I/ c( O3 H/ B* ^& H
创建远程应用资源,实现远程访问目标资源,并实现密码代替功能。" k* }  s6 B' |$ |# m
当前举例访问 JumpServer 页面过程(实现密码代填)2 ]( N/ z) p7 t8 I
3.1 创建 Website 资产⚓︎
- w! C- [& `7 C. l8 {2 j点击切换至控制台视图资产管理 - 资产列表 页面中。
" v" g  d! i4 w选中 Web 页签,点击创建 Website 资产。0 R' A7 A' U! X: m
remoteapp08
" a3 v0 }5 s6 m+ c% B, P6 h/ {  b
4 L9 p* V2 K( O8 j. E$ n其中 选择器 参数,需要根据目标 Url 页面中的代码参数中获取。
1 n$ n, K' I; _9 D我们通过 F12 打开目标 Url 的开发者工具页面,步骤如下图:
: `- Y4 D$ o5 O, y% Qremoteapp09
( q! V, Z2 c3 e% X7 ~9 }2 m; b; [4 H8 H- E% W4 E
把获取到的参数填写至创建的目标 Website 资产,参考当前页面3.1 标题第一张图片。
( {: D& h( |3 }7 Q8 C6 t& a. F# C3.2 创建资产授权规则⚓︎/ }+ t1 b8 \$ V# o( K( ^3 s
点击切换至权限管理 - 资产授权 页面中。4 R  l9 ^5 _/ {9 G! k9 b; O. V
创建新的授权规则,如下图:
  f9 ?, w2 s3 B) f, O0 i/ j4 Cremoteapp104 ]& L2 T) L% b4 o
+ I: S" a# ?/ A$ A9 L4 w7 O0 f% w
3.3 访问 Website 资产⚓︎5 U) Z7 `0 e0 g! g
通过 Web终端 选中目标 Website 资产访问。* y& x/ D, L5 M7 x9 P- N/ L8 {
访问 Website 资产需要本地客户端安装 JumpServer 客户端程序,可在 JumpServer 页面 - Web终端 - 帮助 - 下载 页面找到安装包。
6 d) g5 v' c* e" K4 Q! f7 nremoteapp11, s7 z1 z: L4 G' @# Y
7 p( U: q2 P! O8 {  s
3.4 页面效果⚓︎
5 ?% r5 \, o, N当前为远程应用页面访问效果图:# A+ t/ i: k, m) }
remoteapp06
, a' a( a+ V( s. O( w
4 Q. M+ ]8 M- E# l* O1 B4 自定义 Applet⚓︎; H" b1 E7 Z2 p
4.1 Applet 介绍⚓︎
3 U* B( E" i9 y/ |Applet 是一个包含 Python 脚本的目录,必须至少包含以下文件:
/ J1 }' R7 G) @9 F+ {* Z. X- j
7 Z. B/ r; G3 T0 Y8 K$ z├── i18n.yml
! c8 }! P  R. v: ], J0 D├── icon.png
6 m0 B. b% G6 I; P9 W├── main.py
* p' H5 G  {& ]+ G+ {4 l" M0 Z4 v├── manifest.yml) ]8 U: {+ b2 a  W
└── setup.yml9 L. L- t/ n2 I0 k! d8 r
文件名称作用说明:
; w3 D" ?0 j  c+ ?# M+ R  C) ~! `文件名称        说明# C) }" Z4 r; ]
main.py        Python 代填的执行脚本。
4 q) r5 r1 u! ]. @0 P3 Bicon.png        Applet 的图标. a1 b" C. z' S% t/ V% D
manifest.yml        Applet 的元数据。: w# t9 ~: ^* K, U, k( e6 |
setup.yml        拉起程序的安装描述。  Y1 H( @6 I7 n" z$ Z
i18n.yml        对 manifest.yml 的国际化文件。0 v# Q' R6 ^8 J; x
4.2 元数据 manifest.yml⚓︎
, q: t1 A  ]: Q+ D$ n6 ]manifes.yml 定义了 Applet 的元数据,如名称、作者、版本、支持的协议。- o# R3 F: f' _2 j, E. ~3 c% ^
9 X6 M( }! s5 l, N: y- G
name: mysql_workbench8 (required)
6 r+ y+ z. M" G+ b3 adisplay_name: MySQL Workbench80 K( I: t$ {" h. I/ a9 Q( A
comment: A tool for working with MySQL, to execute SQL and design tables (required)
9 R5 x* N# k7 P3 Yversion: 0.1 (required)
4 \* k) W" `2 d* M. F9 \exec_type: python (reserved,暂未使用)
' V) i9 G% ]/ C4 K& m( w& jauthor: Eric (required)  S7 ]( U; ^) A! x1 H
type: general (required)* [: M( S, a; k1 @
update_policy: none (暂未使用)" ~5 w" K) j. [+ [; `  i
tags: (required)
# x$ d+ U5 h( b  - database0 U8 B3 `* f) R$ E+ F( L8 s
protocols: (required)
6 W+ g" u( L" u* r/ s  - mysql3 q; \+ i8 [# M2 `/ W, p+ i
详细字段说明:
6 A4 q3 Z8 U# w  g字段        说明. ~! e. X- g% k5 I
name        名称最好是字母数字,不要包含特殊字符。
5 U1 ^' {- G2 r6 {" Y5 Vprotocols        此 Applet 脚本支持的协议。
/ B" w1 ~3 `# T% Ntags        一些标签。: R& V! h6 Z& O  |2 B4 v* r- W
type        主要是 General 或 Web。
( \6 ?( @0 L9 |2 ?i18n.yml        对 manifest.yml 的国际化文件。5 }2 i- ^! Q1 b6 {% u
4.3 安装条件 setup.yml⚓︎
; p2 ^# M7 V0 T" n# i8 ysetup.yml 定义了 Applet 拉起程序的安装方式。8 U& j9 D7 k" T9 j" v
& t' H# y0 C* B0 H% _; d
type: msi # exe, zip, manual
! X) i! e- B( l! V9 Wsource: https://jms-pkg.oss-cn-beijing.a ... y-8.0.31-winx64.msi
/ |1 y0 O+ L2 D- P: Narguments:
( _  q2 ~( m" r! e  - /qn4 ]4 y" V& w* R2 H3 u
  - /norestart* O+ K- R1 }4 u: y% b- o
destination: C:\Program Files\MySQL\MySQL Workbench 8.0 CE' {# P3 V6 r: H1 T4 {
program: C:\Program Files\MySQL\MySQL Workbench 8.0 CE\MySQLWorkbench.exe" O- i: s* A* N" h1 S* c1 v* m
md5: d628190252133c06dad399657666974a
6 |0 j1 V: ?3 k( l  ~/ ~详细字段说明:
+ i7 W, H; [/ P# a- `字段        说明
, T" b4 d) k( u9 ftype        是软件安装的方式。
* X8 ]$ z1 ^% y; o; Q. k* {  gmsi:安装软件。
) ~0 T( _4 @) e% r) a1 f2 |" rexe:安装软件。
. [" l. K9 G0 ~( ^4 N( Ozip:解压安装方式。& N0 u7 }) T7 y$ j8 X9 \
manual:手动安装方式。
8 ], T: \+ @1 z; ~8 f  J1 Ksource        软件下载地址。8 B% G5 E1 V: J# h. j5 M  r& A
arguments        msi 或者 exe 安装程序需要的参数,使用静默安装。. f: F7 j2 p+ Q6 }; W* L8 J& ]
destination        程序安装目录地址。! S$ E4 c# y2 P3 d. i. T
program        具体的软件地址。
1 y3 s9 L# x! p" b7 \md5        program 软件的 md5 值,主要用于校验安装是否成功。
# Q5 k/ o  Q% B5 T9 }* _0 F如果选择 manual 的方式,source 等保持为空,可不校验 MD5 值,需要手动登录 Applet host(应用发布机)上安装软件。3 O. |$ M) r' ~/ z7 d
4.4 脚本执行 main.py⚓︎  Y7 I4 i6 ~$ i/ {& X5 F
main.py 是 Python 脚本主程序。/ T( @! ]- z% s6 d
JumpServer 的 Remoteapp 程序 tinker 将通过调用 python main.py base64_json_data 的方式执行。, Y: o; y" r1 V1 N* v  _& s
base64_json_data 是 JSON 数据进行 base64 之后的字符串,包含资产、账号等认证信息。数据格式大致如下,依据 api 变化做相应调整:& t' T6 H! `& T& {+ u2 f
- C4 P3 x9 O5 T, ^
{0 g! S9 \1 n- A/ @0 S
  "app_name": "mysql_workbench8",  e# Q4 h+ z: ^9 v
  "protocol": "mysql",
2 y# B% x8 H6 g7 N( j  "user": {3 x# f5 k* t4 b7 a9 ]6 N
    "id": "2647CA35-5CAD-4DDF-8A88-6BD88F39BB30",# B; y1 Q, Z1 Q$ C% O
    "name": "Administrator",+ q/ y: i8 v4 x. k  t5 f
    "username": "admin"
+ o; D: X4 J7 A- M  },! b- B4 b, }2 D
  "asset": {# }7 X! w1 |0 G0 g" y  G
    "asset_id": "46EE5F50-F1C1-468C-97EE-560E3436754C",
) q' h1 _# [( M( O1 F3 e    "asset_name": "test_mysql",
% i7 S; t2 [8 Y& W  C    "address": "192.168.1.1",* z- b- h5 h+ S: h
    "protocols": [$ m2 l& ?' U+ F# j+ {3 {9 \
      {
& F* l+ s3 |: n. k2 ]8 H5 e        "id": 2,
9 W, g6 N2 g9 {; X* R! h        "name": "mysql",
; Y: K/ [5 l9 `, ]0 v        "port": 3306
% n+ ~7 u9 f, R, ^$ m. Z      }
+ O9 k, P9 t8 I$ c/ Z    ]. u2 D' [+ U4 Y
  },
. y0 M3 Q% N6 z# ~! _; e/ {" E; U  "account": {
! y7 y9 ?5 V+ O0 X& {' z2 ?/ h    "account_id": "9D5585DE-5132-458C-AABE-89A83C112A83",/ k( t" p. N: S5 E( c
    "username": "root",0 a5 z, h/ \+ ~. e: B' g
    "secret": "test"
7 P6 g  M, M) {, x/ X& y  },
% v) L2 D% b, n+ [  "platform": {
( Q9 ~2 H& J$ g6 I    "charset": "UTF-8"
/ P! {: s0 z9 i7 L* f  }
8 h3 Q. C* V( Z. o* V7 |' m}
6 O8 o& t3 H( h: S. z
  c: {, Z* a0 F1 @) Z- ]
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

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

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

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

GMT+8, 2026-4-9 00:00 , Processed in 0.095305 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

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