30-前后端分离架构
web架构,网站说事。
前端----由HTML、CSS、JS等代码组织成的一个可视化的网页信息,内容
后端
数据库
分离、不分离区别是什么
https://docs.jumpserver.org/zh/v3/installation/source_install/requirements/


架构对比说明
- 前后端不分离架构
- 浏览器直接请求完整 HTML 页面
- Web 服务器负责静态资源和请求分发
- 应用服务器生成动态内容并嵌入 HTML
- 数据库存储应用数据
- 前后端分离架构
- 前端应用通过 API 与后端交互
- API 网关统一处理请求路由和权限控制
- 后端采用微服务架构拆分业务功能
- 每个微服务有独立数据库,可根据需求选择不同技术栈
- 使用缓存提高系统性能
两种架构各有适用场景,前后端分离架构更适合大型项目和复杂业务场景,能够实现前后端团队独立开发和部署。
什么是前后端分离
前端
后端
数据库
前后端分离架构的概念
前后端分离架构是一种在 Web 开发领域被广泛采用的设计模式,它把前端和后端当作两个独立的部分来进行开发、部署和维护。前端主要负责构建用户界面和处理用户交互,后端则专注于处理业务逻辑、管理数据以及提供数据接口。
详细图解及解释

客户端部分
- 用户:使用浏览器(如 Chrome、Firefox 等)或者移动客户端(如手机 APP)来访问应用程序。
- 浏览器/移动客户端:作为前端代码的运行环境,承载前端应用。
- 前端应用:基于 HTML、CSS、JavaScript 构建,利用现代前端框架(如 Vue.js、React.js、Angular 等)来实现丰富的用户界面和交互效果。当前端需要数据时,会通过 HTTP 请求(如使用
fetchAPI 或axios库)向服务器端的 API 网关发送请求。
服务器端部分
- API 网关:作为后端服务的统一入口,负责接收前端的请求,并将请求路由到相应的后端服务。同时,它还可以进行一些通用的处理,如请求验证、限流、日志记录等。
- 后端服务:由多个独立的服务组成,每个服务专注于特定的业务功能,例如用户认证服务、订单处理服务、商品管理服务等。这些服务可以使用不同的编程语言和框架来实现,如 Python 的 Django、Java 的 Spring Boot、Node.js 的 Express 等。
- 数据库:用于存储应用程序的数据,不同的后端服务可能会使用不同的数据库,如关系型数据库(MySQL、Oracle)、非关系型数据库(MongoDB、Redis)等。后端服务会根据业务需求对数据库进行数据的增删改查操作。
交互流程
- 用户在客户端发起操作,触发前端应用发送 HTTP 请求到 API 网关。
- API 网关接收到请求后,将其转发到对应的后端服务。
- 后端服务处理请求,可能会与数据库进行交互以获取或更新数据。
- 后端服务处理完请求后,将处理结果以 JSON 格式返回给 API 网关。
- API 网关将 JSON 数据返回给前端应用。
- 前端应用接收到数据后,使用 JavaScript 动态地将数据渲染到页面上,更新用户界面。
前后端分离架构的优势在图中的体现
- 独立性:前端和后端部分在图中是分开的,清晰地展示了它们可以独立开发、部署和维护。前端开发者可以专注于优化用户界面和交互,而后端开发者可以专注于业务逻辑和数据管理。
- 灵活性:后端服务以多个独立的服务形式存在,方便根据业务需求进行扩展和调整。例如,可以轻松地添加新的后端服务来处理新的业务功能。
- 可扩展性:由于前后端通过 API 进行交互,前端可以方便地对接不同的后端服务,后端服务也可以为不同的前端应用(如 Web 端、移动端)提供数据支持,具有很强的扩展性。
代理
export https_proxy=http://10.0.0.11:7890 http_proxy=http://10.0.0.11:7890 all_proxy=socks5://10.0.0.11:7890
jumpserver
没有代码怎么弄,找开源的项目,码云,github,开源项目,开发模式,
wordpress,纯后端形式,LNMP前端html、php代码在一块
python,flask ,你好世界, 后台启动python app.py ,nginx反向代理
- 前后端分离部署
- 前端程序,进程
- 后端程序,进程
https://docs.jumpserver.org/zh/v3/installation/source_install/requirements/
- 运维业务的,网站系统,最热门vue前端框架、python后端Django框架,数据库,mysql、redis缓存。
- 运维业务的安全堡垒机,堡垒机学习知识点,公司都在用
答疑,远程
离谱
内存大一点,心里能记多少事,脑容量越大,处理信息就越多(同时打开的应用程序很多,吃内存,多开)
CPU,脑子转得快,机器运算的快,(CPU处理程序切换,切换速度,处理速度,多核,核心频率高)
效率,信息多,处理快
练习堡垒机,最少2C 4GB
推荐配置4C 8GB
- 操作系统要求
- 会明确指出支持安装 Jumpserver 的操作系统类型,比如常见的 Linux 发行版(像 CentOS、Ubuntu 等),并且可能会限定具体的版本范围,因为不同版本的操作系统在软件依赖、系统库等方面会有差异。
- 硬件资源要求
- CPU:会给出运行 Jumpserver 所需的最低 CPU 核心数以及推荐的核心数,以确保系统能够流畅处理各种任务,例如管理大量资产、处理用户连接等。
- 内存:明确最低内存需求和推荐内存大小,Jumpserver 在运行过程中需要一定的内存来存储数据、缓存信息等,内存不足可能导致系统性能下降。
- 磁盘空间:告知安装 Jumpserver 及其相关组件所需的磁盘空间,同时会考虑到后续数据存储(如日志文件、用户上传的文件等)的需求。
- 软件依赖要求
- 数据库:会说明 Jumpserver 依赖的数据库类型(如 MySQL、PostgreSQL 等)以及相应的版本要求,同时可能会提供数据库的配置建议。
- Python 环境:指定所需的 Python 版本,因为 Jumpserver 是用 Python 开发的,不同版本的 Python 可能会影响其兼容性和功能。
- 其他依赖包:列举其他必要的系统软件包、Python 库等,例如 Redis 用于缓存、Nginx 用于反向代理等。
- 网络要求
- 端口:列出 Jumpserver 运行时需要开放的端口,如 Web 服务端口、SSH 代理端口等,以确保网络通信正常。
- 网络连接:可能会提及对网络带宽、稳定性的要求,以及是否需要特定的网络配置(如防火墙规则)。
阅读要点
- 仔细核对环境:在准备安装 Jumpserver 之前,务必对照文档检查自己的服务器环境是否满足所有要求,避免在安装过程中出现因环境不兼容导致的问题。
- 关注版本信息:严格按照文档指定的软件版本进行安装,不同版本之间可能存在兼容性问题,随意更换版本可能会导致系统无法正常运行。
- 提前准备依赖:根据文档列出的软件依赖,提前在服务器上安装好相应的软件包和库,确保安装过程顺利进行。
core后端
后端,后端起个名字,xxx系统
1. 安装前准备
- 环境确认
- 再次强调对操作系统、硬件资源、网络等环境的要求,确保安装环境符合预期,避免后续出现兼容性问题。
- 依赖安装
- 详细说明需要安装的各类依赖软件,如 Python 环境、数据库(如 MySQL、PostgreSQL)、Redis 等,会给出具体的安装命令和配置步骤。
2. 源码获取
- 下载地址:提供 Jumpserver 核心组件源码的官方下载地址,一般可以从 GitHub 等代码托管平台获取。
- 下载方式:介绍使用命令行工具(如
git clone)下载源码的具体操作,确保用户能正确获取到最新的源码文件。
3. 配置文件设置
- 数据库配置
- 指导用户修改配置文件以连接到之前安装好的数据库,包括数据库的地址、端口、用户名、密码等信息。
- 其他配置:如 Redis 配置、日志配置、邮件配置等,这些配置会影响 Jumpserver 的功能和性能。
4. 安装过程
- 虚拟环境创建:为了避免 Python 包之间的冲突,通常会指导用户创建并激活虚拟环境。
- 依赖包安装:在虚拟环境中使用
pip等工具安装 Jumpserver 所需的 Python 依赖包。 - 数据库初始化:执行相关命令对数据库进行初始化操作,创建必要的表结构和初始数据。
- 密钥生成:生成用于加密和认证的密钥,保障系统的安全性。
5. 服务启动与验证
- 启动服务:介绍启动 Jumpserver 核心服务的命令,如使用
systemctl或自定义的启动脚本。 - 验证安装:提供验证安装是否成功的方法,如通过访问 Web 界面、检查日志文件等方式确认系统是否正常运行。
6. 常见问题及解决办法
- 列举在安装过程中可能遇到的常见问题,如依赖安装失败、数据库连接错误等,并给出相应的解决办法。
阅读要点
- 严格按步骤操作:安装过程中的步骤通常有先后顺序,务必严格按照文档的指导依次执行,避免因操作顺序错误导致安装失败。
- 记录关键信息:在配置过程中,如数据库密码、密钥等关键信息,要妥善记录,以便后续维护和管理使用。
- 遇到问题善用文档:安装过程中若遇到问题,先查看文档中“常见问题及解决办法”部分,很多问题都能从中找到解决方案。
echo "文本内容" | tee 文件名.txt
cat > install_jumpserver.sh << 'EOF'
#!/bin/bash
cd /opt
mkdir /opt/jumpserver-v3.10.17
wget -O /opt/jumpserver-v3.10.17.tar.gz https://github.com/jumpserver/jumpserver/archive/refs/tags/v3.10.17.tar.gz
tar -xf jumpserver-v3.10.17.tar.gz -C /opt/jumpserver-v3.10.17 --strip-components 1
cd jumpserver-v3.10.17
rm -f apps/common/utils/ip/geoip/GeoLite2-City.mmdb apps/common/utils/ip/ipip/ipipfree.ipdb
wget https://download.jumpserver.org/files/ip/GeoLite2-City.mmdb -O apps/common/utils/ip/geoip/GeoLite2-City.mmdb
wget https://download.jumpserver.org/files/ip/ipipfree.ipdb -O apps/common/utils/ip/ipip/ipipfree.ipdb
EOF
# 执行脚本即可
root@aiops01:~# bash install_jumpserver.sh
# 可能会出现一些网络问题
# 安装基础依赖
root@aiops01:/opt/jumpserver-v3.10.17# ls -l requirements/
total 20
-rw-rw-r-- 1 root root 269 Jan 2 15:30 apk_pkg.sh
-rw-rw-r-- 1 root root 254 Jan 2 15:30 deb_pkg.sh
-rw-rw-r-- 1 root root 567 Jan 2 15:30 issues.txt
-rw-rw-r-- 1 root root 1146 Jan 2 15:30 mac_pkg.sh
-rw-rw-r-- 1 root root 206 Jan 2 15:30 rpm_pkg.sh
root@aiops01:/opt/jumpserver-v3.10.17#
# 安装基础依赖
# 更新基础apt源,配置好阿里云的
# https://developer.aliyun.com/mirror/
(py3) root@bt-panel:/opt/jumpserver-v3.10.17# bash requirements/deb_pkg.sh
# 装完默认的依赖,再装如下依赖
apt-get install -y pkg-config libxmlsec1-dev libpq-dev libffi-dev libxml2 libxslt-dev libldap2-dev libsasl2-dev sshpass mariadb-client bash-completion g++ make sshpass
# 安装py3.11
# 大模型运维,AI运维,火热,python项目部署逻辑
apt-get install -y python3.11 python3.11-dev python3.11-venv
# 虚拟环境,创建解释器的副本,分身
python3.11 -m venv /opt/py3
# 激活,加载py3 虚拟环境的PATH变量,优先找到虚拟环境
# 当前bash环境执行,加载某个脚本,读取脚本的变量
source /opt/py3/bin/activate
# 退出虚拟环境,卸载,恢复PATH变量
deactivate
# 先升级pip包管理器
(py3) root@aiops01:~# which pip3.11
/opt/py3/bin/pip3.11
(py3) root@aiops01:/opt/jumpserver-v3.10.17# pip3.11 install pip -U
# 配置阿里云pip源
#https://developer.aliyun.com/mirror/pypi?spm=a2c6h.13651102.0.0.3e221b11VjCIi4
# 创建配置文件,pip加速器
(py3) root@aiops01:~# mkdir ~/.pip
(py3) root@aiops01:~#
(py3) root@aiops01:~# vim ~/.pip/pip.conf
(py3) root@aiops01:~#
(py3) root@aiops01:~# cat ~/.pip/pip.conf
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
# 查询默认的pip3依赖包
(py3) root@aiops01:/opt/jumpserver-v3.10.17# pip3.11 list
Package Version
---------- -------
pip 25.1.1
setuptools 59.6.0
# poetry工具是py3高级版本特性的工具,替代原本pip去安装模块
pip3.11 install --upgrade poetry
# 用poetry安装core后端所需依赖
(py3) root@aiops01:/opt/jumpserver-v3.10.17#
poetry install
# 大概,会装如下那么多个依赖
(py3) root@aiops01:/opt/jumpserver-v3.10.17# pip list |wc -l
326
# python解释器,java,golang,php
# 开发语言的环境搭建好,需要装的依赖,模块,装上,工具包
# 启动配置文件,定义程序如何运行,变量文件
cp config_example.yml config.yml
vi config.yml
# SECURITY WARNING: keep the secret key used in production secret!
# 加密秘钥 生产环境中请修改为随机字符串,请勿外泄, 可使用命令生成
# $ cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 48;echo
SECRET_KEY: **************** # 必填项, 长度推荐 50 位以上
# SECURITY WARNING: keep the bootstrap token used in production secret!
# 预共享Token koko 和 lion 用来注册服务账号,不在使用原来的注册接受机制
# $ cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 24;echo
BOOTSTRAP_TOKEN: *********** # 必填项, 长度推荐 20 位以上
DB_ENGINE: mysql
DB_HOST: 127.0.0.1
DB_PORT: 3306
DB_USER: jumpserver
DB_PASSWORD: www.yuchaoit.cn
DB_NAME: jumpserver
# 部署redis
# Use Redis as broker for celery and web socket
# Redis配置
REDIS_HOST: 127.0.0.1
REDIS_PORT: 6379
# REDIS_PASSWORD:
# REDIS_DB_CELERY: 3
# REDIS_DB_CACHE: 4
# 启动后端
./jms start
安装mysql
mysql,官方名字,mysql
开源分支,白嫖版,mariadb
驱动名字都不一样。
后端,链接的到底是谁。
#!/bin/bash
apt install \
g++ make iputils-ping default-libmysqlclient-dev libpq-dev \
libffi-dev libldap2-dev libsasl2-dev openssh-client sshpass pkg-config libxml2-dev \
libxmlsec1-dev libxmlsec1-openssl libaio-dev freetds-dev freerdp2-dev
# 单行写
apt install g++ make iputils-ping default-libmysqlclient-dev libpq-dev libffi-dev libldap2-dev libsasl2-dev openssh-client sshpass pkg-config libxml2-dev libxmlsec1-dev libxmlsec1-openssl libaio-dev freetds-dev freerdp2-dev
# 安装mysql-server
apt install mysql-server mysql-common libkrb5-dev -y
# 安装驱动
apt-get install libkrb5-dev
# 务必确保python模块安装完毕
poetry install
(py3) root@bt-panel:/opt/jumpserver-v3.10.17# pip list |grep mysql
mysqlclient 2.2.0
# 修复一些报错,django的翻译文件,编译依赖
# 于超老师,备课,靠谱细心呀,踩坑解决啦
# 看到无数个报错,问AI,处理3天,回答,不知道你的情况
# 老师,于老师,如何教小白,教懂。
# 激活虚拟环境再执行
apt-get install gettext
(py3) root@aiops01:~# poetry run django-admin compilemessages
Poetry could not find a pyproject.toml file in /root or its parents
(py3) root@aiops01:~#
(py3) root@aiops01:~#
(py3) root@aiops01:~# cd /opt/jumpserver-v3.10.17/
(py3) root@aiops01:/opt/jumpserver-v3.10.17#
# 处理国际化问题
# 源码目录下执行
rm -f apps/locale/zh/LC_MESSAGES/django.mo apps/locale/zh/LC_MESSAGES/djangojs.mo
rm -f /opt/jumpserver-v3.10.17/apps/locale/en/LC_MESSAGES/django.mo
python apps/manage.py compilemessages
# 创建数据库信息。
(py3) root@aiops01:/opt/jumpserver-v3.10.17# mysqladmin -uroot -p password www.yuchaoit.cn
Enter password:
(py3) root@aiops01:~#
(py3) root@aiops01:~# deactivate
-- 创建 jumpserver 用户,允许从任何主机连接
mysql> CREATE DATABASE jumpserver;
Query OK, 1 row affected (0.01 sec)
mysql> show create database jumpserver;
#####
/* 创建用户并授权 */
mysql> CREATE USER 'jumpserver'@'localhost' IDENTIFIED BY 'chaoge666';
Query OK, 0 rows affected (0.02 sec)
mysql>
mysql>
mysql> GRANT ALL ON jumpserver.* TO 'jumpserver'@'localhost';
Query OK, 0 rows affected (0.01 sec)
mysql>
mysql>
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
mysql>
/* 删除用户(若存在冲突) */
DROP USER 'jumpserver'@'localhost';
# 确保用jumpserver用户是可以登录数据库的,!!
root@aiops01:~# mysql -ujumpserver -pchaoge666
mysql> use jumpserver;
Database changed
mysql>
mysql>
mysql>
mysql> show tables;
Empty set (0.01 sec)
# 修改堡垒机的config.yml
3 # 使用Mysql作为数据库
34 DB_ENGINE: mysql
35 DB_HOST: 127.0.0.1
36 DB_PORT: 3306
37 DB_USER: jumpserver
38 DB_PASSWORD: chaoge666
39 DB_NAME: jumpserver
redis-server
apt install redis-server -y
root@bt-panel:~# grep ^require /etc/redis/redis.conf
requirepass chaoge777
root@bt-panel:~# systemctl restart redis-server
# 后端填入redis密码
# Use Redis as broker for celery and web socket
# Redis配置
REDIS_HOST: 127.0.0.1
REDIS_PORT: 6379
REDIS_PASSWORD: chaoge777
# REDIS_DB_CELERY: 3
# REDIS_DB_CACHE: 4
# 验证密码
root@aiops01:~# redis-cli
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379> ping
(error) NOAUTH Authentication required.
127.0.0.1:6379>
127.0.0.1:6379>
127.0.0.1:6379> keys *
(error) NOAUTH Authentication required.
127.0.0.1:6379>
127.0.0.1:6379> auth default chaoge777
OK
127.0.0.1:6379>
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> keys *
1) "name"
127.0.0.1:6379> get name
"chaoge"
启动后端
(py3) root@aiops01:/opt/jumpserver-v3.10.17# ./jms start
# mysql > jumpserver > 数据表了,table
# 默认账号密码
amdin
admin > chaoge123
jumpserver
mysql
redis
成功启动
缺前端
Lina组件
# https://nodejs.org/download/release/v16.5.0/
cd /opt
# 于超老师这边是arm64环境
wget https://nodejs.org/download/release/v16.5.0/node-v16.5.0-linux-arm64.tar.gz
# 其他同学win64
wget https://nodejs.org/download/release/v16.5.0/node-v16.5.0-linux-x64.tar.xz
tar -xf node-v16.5.0-linux-x64.tar.xz
mv node-v16.5.0-linux-x64 /usr/local/node
chown -R root:root /usr/local/node
export PATH=/usr/local/node/bin:$PATH
echo 'export PATH=/usr/local/node/bin:$PATH' >> ~/.bashrc
# 正确结果
root@aiops01:/opt# node -v
v16.5.0
root@aiops01:/opt# npm -v
7.19.1
# nodejs 16.5开发环境搭建好了
cd /opt
mkdir /opt/lina-v3.10.17
wget -O /opt/lina-v3.10.17.tar.gz https://github.com/jumpserver/lina/archive/refs/tags/v3.10.17.tar.gz
tar -xf lina-v3.10.17.tar.gz -C /opt/lina-v3.10.17 --strip-components 1
# 源码部署
# python、前端vue、java部署、C程序
# 下载源代码
# 安装编译,解释器环境, gcc python3-dev jdk 开发语言环境
# 安装源码项目,所需的模块驱动,pip3 install、npm install 、yarn install、
# 启动程序,项目,进程
cd /opt/lina-v3.10.17
#
npm install -g yarn
root@aiops01:/opt/lina-v3.10.17# yarn --version
1.22.22
# 前端lina目录下装
root@aiops01:/opt/lina-v3.10.17# yarn install
# 发现版本不合适
root@bt-panel:/opt/lina-v3.10.17# yarn install
yarn install v1.22.22
[1/5] Validating package.json...
[2/5] Resolving packages...
[3/5] Fetching packages...
warning url-loader@1.1.2: Invalid bin field for "url-loader".
error nopt@7.2.0: The engine "node" is incompatible with this module. Expected version "^14.17.0 || ^16.13.0 || >=18.0.0". Got "16.5.0"
error Found incompatible module.
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
# 最终测试,5-24日,实测OK,用这个node版本即可
# 注意,arm64架构
wget https://nodejs.org/download/release/v16.15.0/node-v16.15.0-linux-arm64.tar.gz
# amd64架构,英特尔cpu,x64架构的用这个
https://nodejs.org/download/release/v16.15.0/node-v16.15.0-linux-x64.tar.gz
# 查看新的环境node的
root@aiops01:/opt# npm -v
8.5.5
root@aiops01:/opt#
root@aiops01:/opt# node -v
v16.15.0
# 再次尝试安装
root@aiops01:/opt/lina-v3.10.17# npm install -g yarn
added 1 package, and audited 2 packages in 2s
found 0 vulnerabilities
root@aiops01:/opt/lina-v3.10.17# yarn install
# 修改lina配置文件
root@bt-panel:/opt/lina-v3.10.17# mv .env.development.example .env.development
# 启动lina,前端进程
root@bt-panel:/opt/lina-v3.10.17# yarn serve
# 要求提示如下
App running at:
- Local: http://localhost:9528/ui/
- Network: http://10.0.0.13:9528/ui/
Note that the development build is not optimized.
To create a production build, run yarn build.

访问前端

如果访问报错,临时添加如下配置,core后台修改
(py3) root@aiops01:/opt/jumpserver-v3.10.17# grep -i domain config.yml
DOMAINS: 192.168.0.106:9528
- 前端---9528
- 后端--8080
Luna组件
https://docs.jumpserver.org/zh/v3/installation/source_install/luna_install/
cd /opt
mkdir /opt/luna-v3.10.17
wget -O /opt/luna-v3.10.17.tar.gz https://github.com/jumpserver/luna/archive/refs/tags/v3.10.17.tar.gz
tar -xf luna-v3.10.17.tar.gz -C /opt/luna-v3.10.17 --strip-components 1
cd /opt/luna-v3.10.17
# 安装前端模块
root@aiops01:/opt/luna-v3.10.17# yarn install
sed -i "s@[0-9].[0-9].[0-9]@v3.10.17@g" src/environments/environment.prod.ts
# 前端,填入后端地址的配置文件
vi proxy.conf.json
# 启动前端,框架,启动命令,127.0.0.1
# --host 0.0.0.0
./node_modules/.bin/ng serve
# 编译静态
yarn build
cp -R src/assets/i18n luna/
cp -rf luna luna-v3.10.17
tar -czf luna-v3.10.17.tar.gz luna-v3.10.17
koko
二进制部署
cd /opt
wget https://download.jumpserver.org/public/kubectl-linux-arm64.tar.gz -O kubectl.tar.gz
tar -xzf kubectl.tar.gz
mv kubectl /usr/local/bin/rawkubectl
wget https://download.jumpserver.org/public/helm-v3.9.0-linux-arm64.tar.gz
tar -xf helm-v3.9.0-linux-arm64.tar.gz
mv linux-arm64/helm /usr/local/bin/rawhelm
chmod 755 /usr/local/bin/rawkubectl /usr/local/bin/rawhelm
chown root:root /usr/local/bin/rawkubectl /usr/local/bin/rawhelm
rm -rf linux-arm64
wget https://github.com/jumpserver/koko/releases/download/v3.10.17/koko-v3.10.17-linux-arm64.tar.gz
tar -xf koko-v3.10.17-linux-arm64.tar.gz -C /opt
cd koko-v3.10.17-linux-arm64
mv kubectl /usr/local/bin/kubectl
root@bt-panel:/opt/koko-v3.10.17-linux-arm64# head config.yml
# 项目名称, 会用来向Jumpserver注册, 识别而已, 不能重复
# NAME: {{ Hostname }}
# Jumpserver项目的url, api请求注册会使用
CORE_HOST: http://127.0.0.1:8080
# Bootstrap Token, 预共享秘钥, 用来注册coco使用的service account和terminal
# 请和jumpserver 配置文件中保持一致,注册完成后可以删除
BOOTSTRAP_TOKEN: guXzwqYUZ31iiSefMvwAwkRN
root@bt-panel:/opt/koko-v3.10.17-linux-arm64# ./koko -f config.yml
2025-04-25 12:24:12
KoKo Version v3.10.17, more see https://www.jumpserver.org
Quit the server with CONTROL-C.
ERRO[0000] k8s reverse proxy start failed: open server.crt: no such file or directory
2025/04/25 12:24:12 Load config from env
2025/04/25 12:24:12 Load config from config.yml success
2025/04/25 12:24:12 &{Name:[KoKo]-bt-panel-hDwKRLa CoreHost:http://127.0.0.1:8080 BootstrapToken:guXzwqYUZ31iiSefMvwAwkRN BindHost:0.0.0.0 SSHPort:2222 HTTPPort:5000 SSHTimeout:15 LogLevel:INFO Comment:KOKO LanguageCode:zh UploadFailedReplay:true UploadFailedFTPFile:true AssetLoadPolicy: ZipMaxSize:1024M ZipTmpPath:/tmp ClientAliveInterval:30 RetryAliveCountMax:3 ShowHiddenFile:false ReuseConnection:true ShareRoomType:local RedisHost:127.0.0.1 RedisPort:6379 RedisPassword: RedisDBIndex:0 RedisClusters:[] RedisSentinelPassword: RedisSentinelHosts: RedisUseSSL:false EnableLocalPortForward:false EnableVscodeSupport:false HiddenFields:[] ConnectionTokenReusable:false SshMaxSessions:0 DisableInputAsCommand:false SecretEncryptKey: RootPath:/opt/koko-v3.10.17-linux-arm64 DataFolderPath:/opt/koko-v3.10.17-linux-arm64/data LogDirPath:/opt/koko-v3.10.17-linux-arm64/data/logs KeyFolderPath:/opt/koko-v3.10.17-linux-arm64/data/keys AccessKeyFilePath:/opt/koko-v3.10.17-linux-arm64/data/keys/.access_key ReplayFolderPath:/opt/koko-v3.10.17-linux-arm64/data/replays FTPFileFolderPath:/opt/koko-v3.10.17-linux-arm64/data/ftp_files CertsFolderPath:/opt/koko-v3.10.17-linux-arm64/data/certs}
2025-04-25 12:24:12 [INFO] Exchange share room type: local
2025-04-25 12:24:12 [INFO] Start SSH server at 0.0.0.0:2222
2025-04-25 12:24:12 [INFO] Start HTTP Server at 0.0.0.0:5000
2025-04-25 12:24:12 [INFO] Upload remain replay done
2025-04-25 12:24:12 [INFO] Start ws client success
2025-04-25 12:24:12 [INFO] Upload remain FTP file done
nginx
apt-get install -y curl gnupg2 ca-certificates lsb-release ubuntu-keyring
root@bt-panel:~# apt autoremove
apt-get update
apt-get install -y nginx
vim /etc/nginx/sites-enabled/default
server {
listen 80;
# server_name _;
client_max_body_size 5000m; # 文件大小限制
# Luna 配置
location /luna/ {
# 注意将模板中的组件名称替换为服务实际 ip 地址, 如都在本机部署
# proxy_pass http://127.0.0.1:4200;
proxy_pass http://luna:4200;
}
# Core data 静态资源
location /media/replay/ {
add_header Content-Encoding gzip;
root /opt/jumpserver-v3.10.17/data/;
}
location /static/ {
root /opt/jumpserver-v3.10.17/data/;
}
# KoKo Lion 配置
location /koko/ {
# 注意将模板中的组件名称替换为服务实际 ip 地址, 如都在本机部署
# proxy_pass http://127.0.0.1:5000;
proxy_pass http://koko:5000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_buffering off;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# lion 配置
location /lion/ {
# 注意将模板中的组件名称替换为服务实际 ip 地址, 如都在本机部署
# proxy_pass http://127.0.0.1:8081;
proxy_pass http://lion:8081;
proxy_buffering off;
proxy_request_buffering off;
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_ignore_client_abort on;
proxy_connect_timeout 600;
proxy_send_timeout 600;
proxy_read_timeout 600;
send_timeout 6000;
}
location /ws/ {
# 注意将模板中的组件名称替换为服务实际 ip 地址, 如都在本机部署
# proxy_pass http://127.0.0.1:8080;
proxy_pass http://core:8080;
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location ~ ^/(core|api|media)/ {
# 注意将模板中的组件名称替换为服务实际 ip 地址, 如都在本机部署
# proxy_pass http://127.0.0.1:8080;
proxy_pass http://core:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# 前端 Lina
location /ui/ {
# 注意将模板中的组件名称替换为服务实际 ip 地址, 如都在本机部署
# proxy_pass http://127.0.0.1:9528;
proxy_pass http://lina:9528;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {
rewrite ^/(.*)$ /ui/$1 last;
}
}
echo '127.0.0.1 luna lina koko lion core' >> /etc/hosts
root@bt-panel:~# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
访问Nginx首页


docker部署
https://developer.aliyun.com/mirror/docker-ce?spm=a2c6h.13651102.0.0.3e221b110ghGIK
# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
# step 2: 信任 Docker 的 GPG 公钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# Step 3: 写入软件源信息
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Step 4: 安装Docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# apt-cache madison docker-ce
# docker-ce | 17.03.1~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# docker-ce | 17.03.0~ce-0~ubuntu-xenial | https://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# Step 2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.1~ce-0~ubuntu-xenial)
# sudo apt-get -y install docker-ce=[VERSION]
容器加速器
https://1panel.cn/docs/user_manual/containers/setting/#1
https://status.1panel.top/status/docker
# 将内容写入 /etc/docker/daemon.json 文件,root 用户可以去掉 sudo
# 配置 Docker 镜像,使用多个镜像源来提高镜像下载速度
echo '{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.1panel.live",
"https://docker.ketches.cn"
]
}' | sudo tee /etc/docker/daemon.json
# 重启 Docker 服务以使配置生效
sudo systemctl restart docker
root@bt-panel:~# docker info |grep -i mirr -A 5
Registry Mirrors:
https://docker.1ms.run/
https://docker.1panel.live/
https://docker.ketches.cn/
Live Restore Enabled: false
# 实测可用
root@bt-panel:~# docker pull alpine
Using default tag: latest
latest: Pulling from library/alpine
6e771e15690e: Pull complete
Digest: sha256:a8560b36e8b8210634f77d9f7f9efd7ffa463e380b75e2e74aff4511df3ef88c
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest
容器化部署jumpserver最新版
https://github.com/jumpserver/Dockerfile
docker volume create jsdata &> /dev/null
docker volume create pgdata &> /dev/null
docker run --name jms_all \
-e SECRET_KEY=yuchao123 \
-e BOOTSTRAP_TOKEN=yuchao456 \
-v jsdata:/opt/data \
-v pgdata:/var/lib/postgresql \
-p 2222:2222 \
-p 80:80 jumpserver/jms_all
# 默认密码 admin ChangeMe
# 修改为chaoge666

