找回密码
 注册
查看: 753|回复: 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 {& U8 }5 c5 G* c* E! Y! g. X) B#( V7 C0 U3 \: x; s# ]

! e( a; F: O6 K$ wVERSION=v3.0.3/ G- A8 e9 x8 }9 I
DOWNLOAD_URL=https://resource.fit2cloud.com
8 v9 a- `& p1 I, N1 W" f1 I; p0 t1 ^3 u6 \/ A$ F
function install_soft() {& l3 {3 C# s. ~  j% Y  Q
    if command -v dnf > /dev/null; then# E% m  j$ H7 O5 v" e
      dnf -q -y install "$1"2 r9 x- [; ]7 q2 j) @' N
    elif command -v yum > /dev/null; then
$ u3 k' f' f: i2 m* d0 L      yum -q -y install "$1"" e/ j( \& B" h1 q
    elif command -v apt > /dev/null; then
! T5 b, ?, Y8 R- r9 Y& S: m      apt-get -qqy install "$1"
1 ?( d8 y, {. L! _% N    elif command -v zypper > /dev/null; then9 ?4 d. E0 k# [8 V1 p
      zypper -q -n install "$1"
& @( y/ v) [4 J5 C    elif command -v apk > /dev/null; then
7 L# S; L3 X  ?1 _  W3 J) ]3 i2 K7 _+ Q      apk add -q "$1"
" L5 c6 W; ^1 G. Q" b2 S' b      command -v gettext >/dev/null || {
4 v! U. T. E! {4 b1 H! M" q( F      apk add -q gettext-dev python3
4 G- ?: Q" p: d5 O( `    }7 l" c" v" J, e
    else
- a/ B0 o& W& M( ~/ G2 ?      echo -e "[\033[31m ERROR \033[0m] $1 command not found, Please install it first"
4 e! ^, [' M$ _- G/ [% Q4 e      exit 1
( @, N% ^2 i' l# w! F, F( m: g    fi
% M" D1 i. t- ^( r- G; q}5 R/ s4 Q6 P1 H0 C/ F
  n2 h8 A; j) G) Y# M
function prepare_install() {
! _9 m; p+ E: P3 Z2 _: |  for i in curl wget tar iptables; do2 G) A/ F6 K9 m( W) n
    command -v $i &>/dev/null || install_soft $i
8 E% O& A1 S) l2 {: _  done8 t- Y8 N+ _7 ]
}' b) e1 B$ {# ]/ }+ h! r+ ?* f9 E7 [) e3 t
: _+ ], z' f+ e. M* I
function get_installer() {  l" \* g% @0 [9 v
  echo "download install script to /opt/jumpserver-installer-${VERSION}"
* z/ a9 {3 M) v, {7 t. O1 \/ a  cd /opt || exit 1
2 p" d$ X3 {! g& N/ L2 Y  T  if [ ! -d "/opt/jumpserver-installer-${VERSION}" ]; then5 F% A4 z$ }. f; }/ I% {7 h
    timeout 60 wget -qO jumpserver-installer-${VERSION}.tar.gz ${DOWNLOAD_URL}/jumpserver/installer/releases/download/${VERSION}/jumpserver-installer-${VERSION}.tar.gz || {# Q5 T7 a. l% d5 I# z
      rm -f /opt/jumpserver-installer-${VERSION}.tar.gz
* E' F4 U/ I5 p: C& n2 c* K& u      echo -e "[\033[31m ERROR \033[0m] Failed to download jumpserver-installer-${VERSION}"- t$ U- l# i8 Y) M7 {, g( Q# g$ `3 o  E
      exit 1- i# R5 i, E3 G7 o. T) B* Z$ P# }0 A* |
    }
* i8 Y, C1 U1 k) A1 n4 V' a    tar -xf /opt/jumpserver-installer-${VERSION}.tar.gz -C /opt || {% k8 i0 d" _! y2 h
      rm -rf /opt/jumpserver-installer-${VERSION}% s4 m0 f. b* K& m
      echo -e "[\033[31m ERROR \033[0m] Failed to unzip jumpserver-installer-${VERSION}"
" N: g/ X4 r- |, B' y- P  Q2 z      exit 1
: c1 t* `8 C/ x4 S6 b( _. n% o$ }    }# x4 P: H& K# J. L
    rm -f /opt/jumpserver-installer-${VERSION}.tar.gz5 \+ j, S0 X$ K& `
  fi$ @9 W9 I: Y: n$ t. j* ?4 t2 G
}& F$ w+ A  U0 y9 Z9 a# p& o; ^

7 Y+ e8 G8 z) s3 Z2 c& \function config_installer() {
- n, P5 S2 ~% o3 m2 v( v2 z% N1 w( |  cd /opt/jumpserver-installer-${VERSION} || exit 1  `! l% M; f2 e9 J
  sed -i "s/VERSION=.*/VERSION=${VERSION}/g" /opt/jumpserver-installer-${VERSION}/static.env) ?+ b) G6 Q. B0 j' e7 g
  sed -i "s/# DOCKER_IMAGE_MIRROR=1/DOCKER_IMAGE_MIRROR=1/g" /opt/jumpserver-installer-${VERSION}/config-example.txt
7 o% f/ o+ @6 R# h: Z; H  ./jmsctl.sh install$ R: m* h8 I" C/ O' d  E3 W
  ./jmsctl.sh start
: w' }8 D8 j/ m/ N}
( Z/ d  D5 a$ i1 }
5 K% _+ p0 i  T: D7 z7 x9 L, V& |$ dfunction main(){
9 f' g* ~! ~7 n/ x) ?  if [[ "${OS}" == 'Darwin' ]]; then, g6 k0 o& r+ C5 I( w! P
    echo
+ C4 z. {  o4 O+ `    echo "Unsupported Operating System Error"/ x  {: _+ Q8 Y" Y& f" K
    exit 13 P' L4 E0 v) E
  fi7 w5 N, w2 Q$ Y6 T2 I. U) P$ ]% I/ ]
  prepare_install
; u$ _1 I% \3 S  get_installer
. u7 n: h% C" r: n  config_installer4 y; v  o0 \7 k7 J. q
}! {6 m6 \$ s+ V. w" R1 P
# y! R' x( e( l
main
8 j! z/ \( o% q' P* c$ A; U( I. Q2 R- t3 P8 s, X# _, [, x1 o

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2023-3-7 14:50:18 | 显示全部楼层
cd /opt
  B7 k! O: i! {+ \$ s/ hwget https://resource.fit2cloud.com/j ... aller-v3.0.3.tar.gz
8 X6 J$ @6 J! k8 m0 v! ^
( E* u: W/ z, N/ S4 u9 t$ x; z5 @
https://resource.fit2cloud.com/jumpserver/installer/releases/download/v3.0.3/jumpserver-installer-v3.0.3.tar.gz
0 L( w$ s1 t! n9 `3 Xtar -xf jumpserver-installer-v3.0.3.tar.gz
" q8 ^& A* r* `3 |3 e( zcd jumpserver-installer-v3.0.3' O: ~+ N- M' P9 C; f

) q; t/ J8 h7 V2 H8 C0 T1 U. M# c) Q, N# w/ C8 V0 J* a& e: |: g
./jmsctl.sh upgrade
% O3 C* Q; q6 y, g' N  `) W2 D  L
) |- k+ ?1 ^  N0 @- c* ~& b& E# 启动 JumpServer 服务# ?( J+ g9 ?1 a+ l2 I/ [
./jmsctl.sh start
) W' D# m) I2 ?5 l. `8 X; R2 x  T1 ]; w2 S9 X

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2023-3-7 14:53:50 | 显示全部楼层
[root@jumpserver3 jumpserver-installer-v3.0.3]# ./jmsctl.sh upgrade
3 O+ {$ n0 _4 ]& h7 }Are you sure you want to update the current version to v3.0.3 ? (y/n)  (default y): y0 @: S# O$ e5 h9 x4 S

0 N- B% G/ W7 c% _4 |1. Check Configuration File
2 t$ c/ l9 ]4 d7 t# g; SPath to Configuration file: /opt/jumpserver/config! b, T7 w3 ?" w, G# X- y3 g, [% t; o
/opt/jumpserver/config/config.txt        [ √ ]
8 x; e$ T0 J9 o% R1 p/opt/jumpserver/config/core/config.yml   [ √ ]
8 m- T6 V+ U; J* i/opt/jumpserver/config/koko/config.yml   [ √ ]9 `8 b! }, s+ O6 ], _: |6 h7 g
/opt/jumpserver/config/mariadb/mariadb.cnf       [ √ ]
) E2 t+ T1 U6 [6 e4 v, L/opt/jumpserver/config/mysql/my.cnf      [ √ ]; q  E/ b* t- }3 [3 d$ c  c
/opt/jumpserver/config/nginx/lb_http_server.conf         [ √ ]
0 b, s# a" i+ z1 Y7 m% T& o, g/opt/jumpserver/config/redis/redis.conf          [ √ ]
/ P* z2 r7 V# l7 E/opt/jumpserver/config/nginx/cert/server.crt     [ √ ]
9 d& y8 z% o& |$ f5 M/opt/jumpserver/config/nginx/cert/server.key     [ √ ]
  D" C; ]* x: {" bcomplete
5 l. C& E! f0 T" o% m. ]7 L# y2 W) S6 @2 _! d
2. Loading Docker Image
+ t/ p, H" P& w! d9 M) m) j  _[jumpserver/redis:6.2]$ G! E2 F" P( Y6 @5 N
6.2: Pulling from jumpserver/redis* g9 V; t2 F9 ]% k2 X; G
Digest: sha256:7a9547085a1e837ec83d7452dd1c18e2e25beae9f25719aabeb4deaaa9a68609
. K# @$ U9 Z; f- ?( W* t" `1 UStatus: Downloaded newer image for swr.cn-north-1.myhuaweicloud.com/jumpserver/redis:6.2. C0 k# d+ t/ e+ f0 C1 }
swr.cn-north-1.myhuaweicloud.com/jumpserver/redis:6.2
! C8 J' \  x* ]) H3 p( QUntagged: swr.cn-north-1.myhuaweicloud.com/jumpserver/redis:6.2! s8 Q0 G0 y: s9 ~3 b. @  e
Untagged: swr.cn-north-1.myhuaweicloud.com/jumpserver/redis@sha256:7a9547085a1e837ec83d7452dd1c18e2e25beae9f25719aabeb4deaaa9a68609% ^% [- c4 C+ {6 ]. A/ V& }

2 W9 r4 _9 P/ `! f& L3 [% J; b[jumpserver/mariadb:10.6]3 t1 F: `& S3 U7 i' E% q# ?
10.6: Pulling from jumpserver/mariadb
% M9 l  D# ~- A" h) TDigest: sha256:1a80e751a3b22919f9ccd94fa8a30782e495ee1326e3a35d943b2a54dff3e89b
7 u4 c& s; m) K: w7 `6 vStatus: Downloaded newer image for swr.cn-north-1.myhuaweicloud.com/jumpserver/mariadb:10.6
" d0 `" P3 L1 Q0 \swr.cn-north-1.myhuaweicloud.com/jumpserver/mariadb:10.6
+ a2 W  V* Q$ g$ L2 |Untagged: swr.cn-north-1.myhuaweicloud.com/jumpserver/mariadb:10.6, ^& v" r5 X2 S: {2 z
Untagged: swr.cn-north-1.myhuaweicloud.com/jumpserver/mariadb@sha256:1a80e751a3b22919f9ccd94fa8a30782e495ee1326e3a35d943b2a54dff3e89b- O( F2 ~: e# e4 |& F: b- e4 p
7 A  B( V' u" N& {1 o1 P
[jumpserver/core:v3.0.3]
' V! A4 c6 l' xv3.0.3: Pulling from jumpserver/core
( V% k/ ?- q' E$ p) XDigest: sha256:dab22df110432bc0fe95d0ebaefcf9fda4e46a14d4507991341d5e72c613ad74
( ]  c- s# {7 }! z) k" @3 \Status: Downloaded newer image for swr.cn-north-1.myhuaweicloud.com/jumpserver/core:v3.0.3
- ^4 j% \* l3 A5 @5 Y& L" wswr.cn-north-1.myhuaweicloud.com/jumpserver/core:v3.0.3
+ t" a; u) f1 \3 P1 ~Untagged: swr.cn-north-1.myhuaweicloud.com/jumpserver/core:v3.0.3( H$ `- i  E: O
Untagged: swr.cn-north-1.myhuaweicloud.com/jumpserver/core@sha256:dab22df110432bc0fe95d0ebaefcf9fda4e46a14d4507991341d5e72c613ad74$ p. Z+ G/ S* ?+ w( d

; h3 c( b+ ]* y[jumpserver/koko:v3.0.3]
9 `% f3 k6 T( N0 l& f" e) bv3.0.3: Pulling from jumpserver/koko
3 \; Z+ Y+ u0 |* T; r* s. V3 i; b: gDigest: sha256:c8724426c635b06b060f139ec1a89225ba76168b91f4c744a6b6219db66925f1
$ s. y' E4 `& X4 T5 Y* P& e$ XStatus: Downloaded newer image for swr.cn-north-1.myhuaweicloud.com/jumpserver/koko:v3.0.3
4 R! t# o! {5 ~! ?' ?/ l* f5 sswr.cn-north-1.myhuaweicloud.com/jumpserver/koko:v3.0.37 o) e0 u1 ?# f+ k% ?
Untagged: swr.cn-north-1.myhuaweicloud.com/jumpserver/koko:v3.0.3  y* g' `5 J( P+ H
Untagged: swr.cn-north-1.myhuaweicloud.com/jumpserver/koko@sha256:c8724426c635b06b060f139ec1a89225ba76168b91f4c744a6b6219db66925f1. P- I4 K1 X5 ?& j

7 j6 B" C" b4 x1 E- |- D# z$ Z. f6 `[jumpserver/lion:v3.0.3]  U, u2 ?1 u1 ~" t9 b7 |9 F6 }( Y% e
v3.0.3: Pulling from jumpserver/lion
- ]2 |5 P' j3 XDigest: sha256:5bdbef13a426a2ba00ddb304eb2a8763cbb75cdcd6ea7a5f1301225c4c0b8e9c
* \5 u5 V) @# y# e) }Status: Downloaded newer image for swr.cn-north-1.myhuaweicloud.com/jumpserver/lion:v3.0.3
/ P: N  }( L: W1 @: }6 z* {swr.cn-north-1.myhuaweicloud.com/jumpserver/lion:v3.0.30 g5 A$ e8 ?( H" L( S# D
Untagged: swr.cn-north-1.myhuaweicloud.com/jumpserver/lion:v3.0.3
# R8 j; n# o& w; _Untagged: swr.cn-north-1.myhuaweicloud.com/jumpserver/lion@sha256:5bdbef13a426a2ba00ddb304eb2a8763cbb75cdcd6ea7a5f1301225c4c0b8e9c
9 B) `- U  s9 |, O8 _/ I' q4 L  w* S
[jumpserver/magnus:v3.0.3]8 p8 `) N: [; Q4 y- J+ _
v3.0.3: Pulling from jumpserver/magnus
3 r% E- M) I' F% {" \Digest: sha256:5f04be4dd5d20711939662c03474db0e218900a84ebd2f771716f6601e4e80e7
, Y7 o7 q, b+ `! b; D/ z1 OStatus: Downloaded newer image for swr.cn-north-1.myhuaweicloud.com/jumpserver/magnus:v3.0.3# a  e) ]* d% I0 [4 L2 h
swr.cn-north-1.myhuaweicloud.com/jumpserver/magnus:v3.0.3) ?) j! j* W/ m1 \0 B# M
Untagged: swr.cn-north-1.myhuaweicloud.com/jumpserver/magnus:v3.0.3& G) j0 J& d# Z2 p
Untagged: swr.cn-north-1.myhuaweicloud.com/jumpserver/magnus@sha256:5f04be4dd5d20711939662c03474db0e218900a84ebd2f771716f6601e4e80e7
: K# U; B6 H! D$ y
" Q6 c7 N) R' {6 e[jumpserver/web:v3.0.3]
) W1 E4 S3 X% J# M$ S: Iv3.0.3: Pulling from jumpserver/web% g* A2 ]5 K  Y
Digest: sha256:9d6fa5942a8cccd40f4eb62087bb1dd551c24e7ee350c7fd6c7c22932b405e43
; r  p2 A  s3 c6 Z! p9 NStatus: Downloaded newer image for swr.cn-north-1.myhuaweicloud.com/jumpserver/web:v3.0.3
; E* p- s! W3 X* ~7 n& j- Xswr.cn-north-1.myhuaweicloud.com/jumpserver/web:v3.0.3
" `( |4 z* ]+ P, p$ EUntagged: swr.cn-north-1.myhuaweicloud.com/jumpserver/web:v3.0.3' R5 X+ @; q- @7 l( M, I
Untagged: swr.cn-north-1.myhuaweicloud.com/jumpserver/web@sha256:9d6fa5942a8cccd40f4eb62087bb1dd551c24e7ee350c7fd6c7c22932b405e43
; b2 B4 F. }9 s9 o0 U
- j' x# d/ H1 n2 a1 F- L" fcomplete/ D0 s  P8 ?3 T8 }- M- a% e
9 ]2 ]$ M. x# R* q. s0 t8 r- d
3. Backup database
7 ]7 v6 F3 n8 O6 u" p& LBacking up...
; {- e! {2 [" m7 w$ A[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
% L, f9 J: h3 \7 R  r
8 m" y5 G6 }6 P) ?5 e4. Backup Configuration File+ H  `8 o! y9 G" z6 `0 J
Back up to /data/jumpserver/db_backup/config-v3.0.3-2023-03-07_14:51:19.conf, x3 m, [" N  b7 m

2 I. b* J# n6 e. b* I' [: M5. Apply database changes
: ?: B4 c" W( `5 `$ n; _7 W6 DChanging database schema may take a while, please wait patiently
2 r" @( f+ R4 H' C4 VDetected that the JumpServer container is running. Do you want to close the container and continue to upgrade? (y/n)  (default y): y# {* q) Y* w: C! e# Y+ k7 p& p

- I7 B' \1 w1 z8 h4 Y% z" ^[+] Running 1/17 A, h+ l. T2 l" h! n
⠿ Container jms_core  Stopped                                                                                                                                 0.5s
4 K! p0 C) c# k, F5 r[+] Running 1/1  K+ p4 k. B& T
⠿ Container jms_koko  Stopped                                                                                                                                13.7s) t, t1 L9 u0 I" e1 V* ~
[+] Running 1/1  g1 ?- K; q# }
⠿ Container jms_lion  Stopped                                                                                                                                10.4s
' r5 V* ~! x! Y. S+ @- `[+] Running 1/1
" P% S1 r- L- ^( P ⠿ Container jms_magnus  Stopped                                                                                                                              10.5s
' @: m% ~# I, n% G  L[+] Running 1/1. |' C3 i$ w6 n$ I" H+ }' ]4 q
⠿ Container jms_web  Stopped                                                                                                                                  0.4s' w. R3 L  M5 e( d2 u5 }
[+] Running 1/1
: m. X: u$ k9 E5 I6 N: A ⠿ Container jms_celery  Stopped                                                                                                                               0.6s; D- e. o) t* Z* l( r  l
[+] Running 1/1
& Q; z9 w0 \" h* ^9 h ⠿ Container jms_core  Removed 0.2ss
  B; |5 M) U: k+ L  h5 ]7 g) D[+] Running 1/0, u: z# Q/ S0 t, h
⠿ Container jms_koko  Removed 0.1s
8 E0 L6 R' c- T, E7 ?9 I- r3 f/ x( T[+] Running 1/01 V5 o. J8 M0 g3 K: N) }
⠿ Container jms_lion  Removed 0.0s8 u& V) @9 g3 z- u$ f" Z7 w
[+] Running 1/0
$ F/ Y4 \# J+ f% @9 p% { ⠿ Container jms_magnus  Removed 0.0s8 _& I8 @  a& W
[+] Running 1/0
3 s4 y9 t+ u0 r3 N8 s9 [1 J ⠿ Container jms_web  Removed 0.0s
7 ~4 ~4 s9 A, Q% ~1 f2 i! r! c# {: _[+] Running 1/1
; n9 @5 b* R$ |0 g ⠿ Container jms_celery  Removed 0.5ss
7 r( N5 I) L) A. S$ x8 k8 b; e( s4 o  R2 ^5 i% ~
[+] Running 3/3
9 S& Q# d2 ]( p' n+ F ⠿ Container jms_redis  Healthy                                                                                                                                0.8s- w- X" V$ O' N0 R6 k# F+ q
⠿ Container jms_mysql  Healthy                                                                                                                                0.8s
' r! ^, h, o; A% s& b/ _" E% _ ⠿ Container jms_core   Started                                                                                                                                1.4s
) u7 E- H! I6 `( q2023-03-07 14:52:12 Collect static files
# o, k  g. `2 M+ W: ^7 K3 x2023-03-07 14:52:13 Collect static files done
+ t# o' O2 Y/ k1 E  H2023-03-07 14:52:13 Check database structure change ...
1 w$ p7 s+ ~1 [8 }/ i2023-03-07 14:52:13 Migrate model change to database ...3 N/ u2 w. H- L9 M3 X
Operations to perform:; _( k+ j9 M2 t+ g. y% y3 o
  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, users! Q4 r' K6 m0 \, V
Running migrations:
9 z. O0 Y6 ~  G" T9 r" I$ a4 P  No migrations to apply.
, C  A) ^# S! p/ u* w$ u3 }1 O& G" ]2 G. O# A
After migration, update builtin role permissions
- r% E: O5 R* x% r' i" k  - Update builtin roles8 Y' @! ?( B1 j" W* {, m& ^
" P, L$ j) T0 c' `3 f1 C
6. Cleanup Image
. s/ D+ ^8 S1 p: u* v  m; C
' G; V# k' {, C3 W, S' [7. Upgrade Docker
' j' H% {* j2 _; B- K  f! i: W
! @, n& Z1 ?% L' y0 V8. Upgrade successfully. You can now restart the program; V( Z7 J' }% [$ N. j' l
cd /usr/src/jumpserver-installer-v3.0.3
! L# @4 [% t' N7 H' ~+ N./jmsctl.sh start
0 W! W8 ~" V0 e) i
, M* N3 f8 k# I, u
6 }7 T: V4 }" q8 _; s3 h% E[root@jumpserver3 jumpserver-installer-v3.0.3]# ./jmsctl.sh start
# p1 D# D6 Y/ _0 s! e[+] Running 8/8' Z1 j  V8 L8 m9 t2 P
⠿ Container jms_mysql   Healthy                                                                                                                               0.9s
9 d# _) ~- B) q/ r$ s# y1 D6 D ⠿ Container jms_redis   Healthy                                                                                                                               0.9s
/ y( {. r$ V! s" P$ e$ v ⠿ Container jms_core    Healthy                                                                                                                              37.0s8 g  U, r) m  P& P
⠿ Container jms_web     Started                                                                                                                              38.9s
+ I1 s) Q/ P; k0 d$ @0 U$ i6 g9 R ⠿ Container jms_koko    Started                                                                                                                              38.8s2 ^% f" ~' v0 w: T
⠿ Container jms_lion    Started                                                                                                                              38.8s( |* s/ w7 x5 Q! J; P4 p
⠿ Container jms_celery  Started                                                                                                                              38.6s
- U/ g$ ~: s$ k. u ⠿ Container jms_magnus  Started                                                                                                                              38.5s
( C: X9 [, S+ u' {' U[root@jumpserver3 jumpserver-installer-v3.0.3]#  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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