找回密码
 注册
查看: 754|回复: 3

jumpserver安装步骤

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2023-3-1 19:00:05 | 显示全部楼层 |阅读模式
购买主题 本主题需向作者支付 2 金钱 才能浏览

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2023-3-7 14:07:45 | 显示全部楼层
#!/usr/bin/env bash
# [5 l/ Z; f0 ^' c+ g#* s9 ~2 `% x  O3 J. U( q
* ?/ M" J/ o4 ^* T
VERSION=v3.0.33 V/ M- Q# z0 E6 ?% [2 W, @# i
DOWNLOAD_URL=https://resource.fit2cloud.com
) v. f. H1 k- o) u0 a5 n+ H8 [' F* R! F3 j" r8 m
function install_soft() {! ^) x( l9 R' Z; l+ L( I. S9 b
    if command -v dnf > /dev/null; then
" t4 r& w- u; X      dnf -q -y install "$1"
& n; V  ]7 T6 ~# j    elif command -v yum > /dev/null; then
1 D, z. a) ~, z4 P      yum -q -y install "$1"
, ?2 P: ^9 Q# C& `: _' u0 C8 r    elif command -v apt > /dev/null; then
9 Y- @  j9 N$ D      apt-get -qqy install "$1"& U6 i, A/ O; M9 x
    elif command -v zypper > /dev/null; then( E" s  }# a$ ]3 m
      zypper -q -n install "$1"
4 Y3 @1 |& h2 U$ Q& d4 h6 U; U    elif command -v apk > /dev/null; then
4 A6 l3 b4 Z, V, q# U# \5 G. A      apk add -q "$1"8 ~1 N) Q6 H) r
      command -v gettext >/dev/null || {
9 e$ }4 ~! m# d) O7 X      apk add -q gettext-dev python3; L& Q  ^5 K$ N' z5 r: _8 a
    }
6 `& `; [9 {& l) w+ x% d    else0 a1 Q- r, q+ P- {
      echo -e "[\033[31m ERROR \033[0m] $1 command not found, Please install it first"7 o* m( B# j4 [- A1 o- e, m9 @
      exit 1
# A% K4 |6 L5 Q2 q8 I: E( j) n! v    fi
, ~; l, @: A- t1 Z  z}
) `; d7 _* f. B+ f
% U% z& i6 D& C) W6 ifunction prepare_install() {
5 w+ {% b7 Z3 m4 |  for i in curl wget tar iptables; do
6 m  s' |5 e" R: l9 a    command -v $i &>/dev/null || install_soft $i" `+ k! |* W2 b6 L! J- L
  done
3 g& t0 X2 f2 M, U}; l- G) w: C6 O9 D2 X/ Z

# O) T& F& }$ Tfunction get_installer() {
6 s1 z' _: o/ e3 T6 x- t  echo "download install script to /opt/jumpserver-installer-${VERSION}"
" u9 E" @/ Q4 z3 L2 [4 M  cd /opt || exit 1
- \: N6 F7 w0 `5 i6 E: _+ O  if [ ! -d "/opt/jumpserver-installer-${VERSION}" ]; then
$ B' m  M* n% j    timeout 60 wget -qO jumpserver-installer-${VERSION}.tar.gz ${DOWNLOAD_URL}/jumpserver/installer/releases/download/${VERSION}/jumpserver-installer-${VERSION}.tar.gz || {  b/ ?1 m6 d. y3 X4 h0 q
      rm -f /opt/jumpserver-installer-${VERSION}.tar.gz4 m- _$ f4 \/ a' B8 h
      echo -e "[\033[31m ERROR \033[0m] Failed to download jumpserver-installer-${VERSION}"' d  A& S! U5 A3 [) _, _7 Z
      exit 1" \/ \$ Y+ ^. {9 t0 S+ o, K
    }& z  d4 o2 H* h4 A, ^, E6 q
    tar -xf /opt/jumpserver-installer-${VERSION}.tar.gz -C /opt || {2 a/ |+ {: r( S+ a+ F* p) Y7 D
      rm -rf /opt/jumpserver-installer-${VERSION}: m! B" C% U+ {9 h- q: b/ F
      echo -e "[\033[31m ERROR \033[0m] Failed to unzip jumpserver-installer-${VERSION}"* k+ z; v6 y% r0 @& E* o. B
      exit 17 m+ y$ W6 K# q2 _
    }
; Y$ Z7 L: x: G    rm -f /opt/jumpserver-installer-${VERSION}.tar.gz% m3 E1 D5 Q7 G. Z6 I' ?8 P
  fi
9 C8 k$ e0 h* \* w' p, K9 u) B' m}# M+ R8 n5 ?7 Z8 k

3 v; v; q  T6 ^; z; Afunction config_installer() {
: ?1 B" s: ?% X4 ~  cd /opt/jumpserver-installer-${VERSION} || exit 1. M, M1 l, K' z, `+ m+ w6 x( o
  sed -i "s/VERSION=.*/VERSION=${VERSION}/g" /opt/jumpserver-installer-${VERSION}/static.env0 T8 M0 P+ F  {7 Q
  sed -i "s/# DOCKER_IMAGE_MIRROR=1/DOCKER_IMAGE_MIRROR=1/g" /opt/jumpserver-installer-${VERSION}/config-example.txt# X% C1 q# o( c2 K
  ./jmsctl.sh install2 Y$ q+ o. |) N  N2 E. Q
  ./jmsctl.sh start
  |4 r3 |; w3 r% k8 s) ^9 G' e( g}
7 D/ z$ P: `: o4 z4 i0 C% h
0 n$ j" A' X# t  K1 Y) `function main(){/ g1 u0 u/ u$ i0 o' L8 Y/ }! A
  if [[ "${OS}" == 'Darwin' ]]; then! i% T9 Y5 b/ U5 V) ^" b8 m* I: D7 y8 m
    echo
8 u) A, o2 ~% _; i9 ~2 F/ _' M    echo "Unsupported Operating System Error"9 B  i0 {5 s' x
    exit 1
4 |, o8 c9 P, B3 L! E  T) C  fi
8 c; ~9 S3 p6 C2 F; i3 v  prepare_install
9 Y" E( ]$ ?) x: T  get_installer
' j* U6 r1 x, W% ~( F9 e* a  config_installer
8 L; x6 s' n3 A8 ]% |0 z: j& r}
0 x7 r' n* x1 v' B, Q
+ m) v9 D; O4 `, `. d! Q  h5 Nmain' V" M) ?/ |$ m0 ~$ d- s  q

, T6 @6 h2 ^! \7 y; p" }0 J

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2023-3-7 14:50:18 | 显示全部楼层
cd /opt, z- R( f2 F. V" p8 B1 ]1 z! J
wget https://resource.fit2cloud.com/j ... aller-v3.0.3.tar.gz# m5 J5 G6 W! s* f" q

9 W+ u3 T' q: }8 m8 ~https://resource.fit2cloud.com/jumpserver/installer/releases/download/v3.0.3/jumpserver-installer-v3.0.3.tar.gz
% ^: U0 @, D: d+ G/ w; P/ d4 p; dtar -xf jumpserver-installer-v3.0.3.tar.gz0 Q2 K8 e1 M( F7 K' p
cd jumpserver-installer-v3.0.3
1 |( U0 d5 ~0 Y3 O: [: B
* y( q7 j' h1 F  |; u5 d3 c* I) ^& S
7 t- k. y' ~6 \4 h5 m$ i./jmsctl.sh upgrade
' R; ^/ i% `. [: t
# i, y- t% g4 t& [# 启动 JumpServer 服务
0 ?; j: u/ q0 |./jmsctl.sh start
9 U9 Z& E+ A$ N# X% }% j( h$ _5 ^2 }0 L

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2023-3-7 14:53:50 | 显示全部楼层
[root@jumpserver3 jumpserver-installer-v3.0.3]# ./jmsctl.sh upgrade
8 A- _+ N0 S! z8 e; S1 G' B" W& E/ TAre you sure you want to update the current version to v3.0.3 ? (y/n)  (default y): y
& U. w5 L3 N& d: q* E, U; u& [3 `. \
1. Check Configuration File
* z" K& q# Y# N# s9 }Path to Configuration file: /opt/jumpserver/config
& i& D  d: w7 K3 m& l' B$ f/opt/jumpserver/config/config.txt        [ √ ]: g  d0 D0 Z8 s2 x6 w2 W9 b) x
/opt/jumpserver/config/core/config.yml   [ √ ]% Q. a: C& u/ \
/opt/jumpserver/config/koko/config.yml   [ √ ]
, E% T, V9 }8 G4 M5 f/opt/jumpserver/config/mariadb/mariadb.cnf       [ √ ]( |8 q) W% m* o' ~  V
/opt/jumpserver/config/mysql/my.cnf      [ √ ]
- }  f9 n( v' Q' [6 H$ R* h* N( b/opt/jumpserver/config/nginx/lb_http_server.conf         [ √ ]7 t! [: W9 U' O
/opt/jumpserver/config/redis/redis.conf          [ √ ]  A  C6 v7 N2 z% H0 ?8 ?
/opt/jumpserver/config/nginx/cert/server.crt     [ √ ]
0 @! m8 A: K/ f6 F2 n4 c/opt/jumpserver/config/nginx/cert/server.key     [ √ ]
' P6 Y4 I1 d1 I+ `6 I. Jcomplete
& q# l& O6 R: `9 V  [4 O% I+ P% p) ?: j/ y3 i
2. Loading Docker Image
8 ?/ R. T/ @) K7 {- Q[jumpserver/redis:6.2]
5 j. e7 [) J; j+ L6.2: Pulling from jumpserver/redis
8 S) [" G* q( b8 j$ a" MDigest: sha256:7a9547085a1e837ec83d7452dd1c18e2e25beae9f25719aabeb4deaaa9a68609) X% S) h; o+ o; }7 a9 g
Status: Downloaded newer image for swr.cn-north-1.myhuaweicloud.com/jumpserver/redis:6.2# I; d  n' \/ t
swr.cn-north-1.myhuaweicloud.com/jumpserver/redis:6.2) J: P' l! j: Y% R, T/ q3 y5 t
Untagged: swr.cn-north-1.myhuaweicloud.com/jumpserver/redis:6.2
2 O+ ^3 ]6 Z* e7 k! g. DUntagged: swr.cn-north-1.myhuaweicloud.com/jumpserver/redis@sha256:7a9547085a1e837ec83d7452dd1c18e2e25beae9f25719aabeb4deaaa9a68609
; S) R; ]2 K+ e) [3 _% w4 |( [# M$ W7 B1 v  ^
[jumpserver/mariadb:10.6]
% T# c4 _1 e0 T1 G  y! F7 v5 F10.6: Pulling from jumpserver/mariadb
" L2 p9 k5 f1 N9 I6 yDigest: sha256:1a80e751a3b22919f9ccd94fa8a30782e495ee1326e3a35d943b2a54dff3e89b
% x9 \. o7 g  N' G+ i( f, AStatus: Downloaded newer image for swr.cn-north-1.myhuaweicloud.com/jumpserver/mariadb:10.6$ u4 i# y+ J" g5 ?4 ]
swr.cn-north-1.myhuaweicloud.com/jumpserver/mariadb:10.66 ?: @  S  J& F- |  O8 D* s
Untagged: swr.cn-north-1.myhuaweicloud.com/jumpserver/mariadb:10.6
7 }9 e+ i, N% n2 z" L, TUntagged: swr.cn-north-1.myhuaweicloud.com/jumpserver/mariadb@sha256:1a80e751a3b22919f9ccd94fa8a30782e495ee1326e3a35d943b2a54dff3e89b' {9 `$ U' L1 ?
  x; X' y+ Z& x# k; Z+ B8 |9 p/ }
[jumpserver/core:v3.0.3]
% W' X/ ]) o3 H" ~! Wv3.0.3: Pulling from jumpserver/core4 `/ q: d  o8 G0 |& b: U2 r
Digest: sha256:dab22df110432bc0fe95d0ebaefcf9fda4e46a14d4507991341d5e72c613ad74
4 e7 U4 o$ w, vStatus: Downloaded newer image for swr.cn-north-1.myhuaweicloud.com/jumpserver/core:v3.0.3
& d0 E; C6 i% |& T; ?swr.cn-north-1.myhuaweicloud.com/jumpserver/core:v3.0.3
& S& y6 V1 c- a4 `! TUntagged: swr.cn-north-1.myhuaweicloud.com/jumpserver/core:v3.0.3- Z8 m8 @$ I3 ]
Untagged: swr.cn-north-1.myhuaweicloud.com/jumpserver/core@sha256:dab22df110432bc0fe95d0ebaefcf9fda4e46a14d4507991341d5e72c613ad74
, U6 k9 S4 B8 |( v1 b" _) Z# O' I; h( r" i* e' P  K
[jumpserver/koko:v3.0.3]! y/ B' Y0 i1 s, E. J5 E5 _
v3.0.3: Pulling from jumpserver/koko! u' `. c( o* e3 S9 D, h. B- m
Digest: sha256:c8724426c635b06b060f139ec1a89225ba76168b91f4c744a6b6219db66925f1& C- l5 v$ L0 y  X
Status: Downloaded newer image for swr.cn-north-1.myhuaweicloud.com/jumpserver/koko:v3.0.3
) c& D; N, X( _( Eswr.cn-north-1.myhuaweicloud.com/jumpserver/koko:v3.0.3
! N" x7 j$ i9 T1 V. [6 d) ~3 _Untagged: swr.cn-north-1.myhuaweicloud.com/jumpserver/koko:v3.0.3
. S& |" t! C$ [9 I: M6 H: ]Untagged: swr.cn-north-1.myhuaweicloud.com/jumpserver/koko@sha256:c8724426c635b06b060f139ec1a89225ba76168b91f4c744a6b6219db66925f17 D0 M7 P& k+ u# `. N) u
  n$ q+ O7 T5 i3 f6 J
[jumpserver/lion:v3.0.3]
2 ^: Z+ h' m0 X& L/ Kv3.0.3: Pulling from jumpserver/lion/ n2 c# _1 u5 f8 m8 H: A9 @5 M
Digest: sha256:5bdbef13a426a2ba00ddb304eb2a8763cbb75cdcd6ea7a5f1301225c4c0b8e9c- S# c; ^+ [# Z3 J6 P1 H6 a
Status: Downloaded newer image for swr.cn-north-1.myhuaweicloud.com/jumpserver/lion:v3.0.3" S+ I; g1 F) s" V. g; ~7 l0 R' Z
swr.cn-north-1.myhuaweicloud.com/jumpserver/lion:v3.0.38 B" a- e4 i8 i1 t9 d
Untagged: swr.cn-north-1.myhuaweicloud.com/jumpserver/lion:v3.0.3
0 _0 p: X7 x& [9 O9 r/ p0 bUntagged: swr.cn-north-1.myhuaweicloud.com/jumpserver/lion@sha256:5bdbef13a426a2ba00ddb304eb2a8763cbb75cdcd6ea7a5f1301225c4c0b8e9c
& L& R6 v0 {! S4 }2 z5 y& A
2 B; L% f& f$ m3 ~[jumpserver/magnus:v3.0.3]" }$ _4 c/ X: n4 r6 U% B9 |
v3.0.3: Pulling from jumpserver/magnus) t! f9 n1 l8 v% C
Digest: sha256:5f04be4dd5d20711939662c03474db0e218900a84ebd2f771716f6601e4e80e7
8 J* ^3 n* c: H8 k5 N, x/ iStatus: Downloaded newer image for swr.cn-north-1.myhuaweicloud.com/jumpserver/magnus:v3.0.3( x0 q  w3 ]9 p; i% m. [: w
swr.cn-north-1.myhuaweicloud.com/jumpserver/magnus:v3.0.3/ m0 ?4 N! X$ a# L# o1 s7 S
Untagged: swr.cn-north-1.myhuaweicloud.com/jumpserver/magnus:v3.0.3) v  ?' `+ ~' q6 W/ o, [6 ^8 s9 Y
Untagged: swr.cn-north-1.myhuaweicloud.com/jumpserver/magnus@sha256:5f04be4dd5d20711939662c03474db0e218900a84ebd2f771716f6601e4e80e7
8 w3 |4 K& ?" ^. w6 }" J5 a2 Z* V7 l  X: v$ i. D
[jumpserver/web:v3.0.3]
" ~: x& G8 q7 z4 [v3.0.3: Pulling from jumpserver/web
! B8 u8 ?, i  u& O! q6 D  WDigest: sha256:9d6fa5942a8cccd40f4eb62087bb1dd551c24e7ee350c7fd6c7c22932b405e43, r! u' z% L, _" p+ p
Status: Downloaded newer image for swr.cn-north-1.myhuaweicloud.com/jumpserver/web:v3.0.3
/ G' D8 K7 ]$ e9 p: b9 I& `swr.cn-north-1.myhuaweicloud.com/jumpserver/web:v3.0.3! c1 U4 m$ r1 E3 u, w
Untagged: swr.cn-north-1.myhuaweicloud.com/jumpserver/web:v3.0.38 B( _* x+ N# b6 M* r3 u: P
Untagged: swr.cn-north-1.myhuaweicloud.com/jumpserver/web@sha256:9d6fa5942a8cccd40f4eb62087bb1dd551c24e7ee350c7fd6c7c22932b405e43
3 F0 L0 E: L1 N4 k: C' `4 \0 H  v% `) F
complete! M/ \" Q; @" Z

4 M6 ]( ^) T) |' O# ~/ `! b3. Backup database& w: Y7 ?( ~% t  p+ T( `
Backing up...
7 ^, e7 I+ g" }2 V  h6 f4 J) }[SUCCESS] Backup succeeded! The backup file has been saved to: /data/jumpserver/db_backup/jumpserver-v3.0.3-2023-03-07_14:51:17.sql
+ F# z8 v) c/ s, r
  Z- n$ ~/ `6 X" \4 p4. Backup Configuration File+ V* r$ H' b/ H2 J: N
Back up to /data/jumpserver/db_backup/config-v3.0.3-2023-03-07_14:51:19.conf% b5 h( i1 v( e/ _. Z+ s( j" ~
1 A* Z2 {. O. c2 l+ Z( l6 \& |
5. Apply database changes
4 }6 L1 I* x  EChanging database schema may take a while, please wait patiently1 F' p# M/ ]) u2 s2 ~
Detected that the JumpServer container is running. Do you want to close the container and continue to upgrade? (y/n)  (default y): y
' P+ |. C# T) s  F0 o  r
4 W) y: r+ f7 S[+] Running 1/1
; j, G: {8 r# A: D6 r" h& N- k% E ⠿ Container jms_core  Stopped                                                                                                                                 0.5s
0 n- R; E4 [: C* J6 L7 n( U[+] Running 1/1
. b) g# Z( I7 n, `5 [ ⠿ Container jms_koko  Stopped                                                                                                                                13.7s5 }8 {- ^9 B, q/ N
[+] Running 1/1$ K) |( ?8 n7 a0 b
⠿ Container jms_lion  Stopped                                                                                                                                10.4s4 T+ u* I6 `  n! d7 Y
[+] Running 1/1
1 C4 V% p  r% C( g0 M  w* Y ⠿ Container jms_magnus  Stopped                                                                                                                              10.5s
6 X  u) y+ Z8 U" q3 E! c: H[+] Running 1/18 J' D/ d/ u" X( f0 c
⠿ Container jms_web  Stopped                                                                                                                                  0.4s' h$ }' U0 T* A$ Q/ ~
[+] Running 1/1" k  H( r. g  N" z, u) i, H
⠿ Container jms_celery  Stopped                                                                                                                               0.6s
" E! V2 X+ e( I[+] Running 1/1
* e1 k# I8 ^, P! I2 x+ J9 q ⠿ Container jms_core  Removed 0.2ss: T) j5 g7 m& u# h# |( F1 V2 H
[+] Running 1/0
1 l+ F! ?5 l6 {* ]" ] ⠿ Container jms_koko  Removed 0.1s
" T3 N; X. ]3 s0 Q& j( b9 o- @[+] Running 1/0$ w" P# C& p5 J. {
⠿ Container jms_lion  Removed 0.0s7 J2 J/ w" r0 q0 Y8 s4 q0 X2 y( T
[+] Running 1/0$ E) C- B+ o' b$ M
⠿ Container jms_magnus  Removed 0.0s0 o% i) J8 }2 U5 \  j
[+] Running 1/0
  ^6 I: }5 U5 s, @9 f ⠿ Container jms_web  Removed 0.0s
! {2 }6 [% q* I; k9 H$ a4 {# R) B0 `[+] Running 1/1
' L; W# y0 s; H9 R9 ` ⠿ Container jms_celery  Removed 0.5ss
+ j/ E# [. l. Q- O' F* h2 y* F
% \8 a  J" A* w4 r( i9 v% ^[+] Running 3/3* ~  n# k5 [* c( `8 y$ w
⠿ Container jms_redis  Healthy                                                                                                                                0.8s% D. a5 R1 E5 m! K1 z8 v
⠿ Container jms_mysql  Healthy                                                                                                                                0.8s
, K9 b( o3 p8 i% S$ A# o8 x4 J# ? ⠿ Container jms_core   Started                                                                                                                                1.4s
: Z( a. y$ F$ p2023-03-07 14:52:12 Collect static files, f5 _: y3 @: O. j3 o: B5 h
2023-03-07 14:52:13 Collect static files done* D! u' t% r1 v6 k
2023-03-07 14:52:13 Check database structure change ...' o# d8 Y- c( H8 j1 u: C0 O
2023-03-07 14:52:13 Migrate model change to database ...
( E' X1 C0 a6 j7 uOperations to perform:
4 ], y" _4 U# L$ n2 s( z% @  Apply all migrations: accounts, acls, admin, applications, assets, audits, auth, authentication, captcha, common, contenttypes, django_cas_ng, django_celery_beat, jms_oidc_rp, notifications, ops, orgs, perms, rbac, sessions, settings, terminal, tickets, users9 R7 ]8 K' f7 n% i* w: p
Running migrations:" D7 V+ B& g6 }) ~9 ^$ h" u
  No migrations to apply.
3 ]+ s2 s, b8 B8 s; n/ Z& A% A( T" h  u' e+ a
After migration, update builtin role permissions
0 E% a3 V9 A% k  - Update builtin roles
* V4 i2 S# B- W+ f- ~
2 z$ F% t) v. K+ r3 W" r6. Cleanup Image: T" A2 ~( z) h% H2 i' t6 ~
- M' B+ e# {/ I! I8 h1 {
7. Upgrade Docker! o9 V1 L2 S0 W1 B$ Z8 Q
$ ^8 C' a: |5 R" I
8. Upgrade successfully. You can now restart the program  i/ Z# V: {3 W& [! ]
cd /usr/src/jumpserver-installer-v3.0.3+ e" q# v, C$ ?' H2 ^2 W
./jmsctl.sh start
, e8 m+ b1 K& l% d# j: y% ?* P3 z2 t+ a- k
" {- B* b' J9 A4 Q% D9 F; j  y
[root@jumpserver3 jumpserver-installer-v3.0.3]# ./jmsctl.sh start
* N* V, Z2 m% X  {6 _4 G" G[+] Running 8/8
' U( N4 H, V. R5 i. O0 d5 j9 W# I9 J ⠿ Container jms_mysql   Healthy                                                                                                                               0.9s+ Q6 I- ]; u1 N! J+ |
⠿ Container jms_redis   Healthy                                                                                                                               0.9s
+ S- c3 V0 s/ @. I6 [" ]9 a; ` ⠿ Container jms_core    Healthy                                                                                                                              37.0s
- T9 d* G) n$ Y& ? ⠿ Container jms_web     Started                                                                                                                              38.9s9 o6 P& q& b1 K& f) P0 F+ r
⠿ Container jms_koko    Started                                                                                                                              38.8s
% K3 K: `4 F, @" O( k- W7 v ⠿ Container jms_lion    Started                                                                                                                              38.8s  B% ]+ q0 R' i& L8 }* d0 A
⠿ Container jms_celery  Started                                                                                                                              38.6s2 _* r% f% P# L% n0 U0 V# r
⠿ Container jms_magnus  Started                                                                                                                              38.5s
* W4 M; ?% e# z* ~. N2 N/ L: D[root@jumpserver3 jumpserver-installer-v3.0.3]#  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 01:48 , Processed in 0.019311 second(s), 25 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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