### Jumpserver服务

```
1. Linux服务器准备
硬件配置如下
2cpu 4G内存 50G硬盘

2.想要运行jumpserver，后台相关，需要软件如下

Python2解释器
Linux的命令，bash解释器 ls命令 > 交给bash解释器，进行翻译之后 > 再告诉Linux内核去执行

jumpserver是由Python编程语言开发的，旧的jumpserver是由Python2开发的，新版本是Python3开发的

准备如下版本软件
Python = 3.8.x
mysql server ≥ 5.6
mariadb ≥ 5.6
Redis 数据库，缓存型数据库 ≥ 5
```



### 环境初始化

#### 1.修改主机名

```shell
[root@VM-16-13-centos ~]# hostname jumpserver   # 临时修改
[root@VM-16-13-centos ~]# bash
[root@jumpserver ~]# hostnamectl set-hostname jumpserver   # 永久修改
```



### 2.查询IP地址

```shell
[root@jumpserver ~]# ifconfig

或者

[root@jumpserver ~]# ip a
```



#### 3.关闭防火墙与安全协议

```shell
[root@jumpserver ~]# iptables -F   # 清空所有规则
[root@jumpserver ~]# systemctl stop firewalld   # 关闭防火墙
[root@jumpserver ~]# systemctl disable firewalld    # 永久关闭
[root@jumpserver ~]# getenforce
Disabled
[root@jumpserver ~]# setenforce 0
[root@jumpserver ~]# vim /etc/selinux/config
SELINUX=disabled
```



#### 4.配置yum源

```shell
[root@jumpserver ~]# yum -y install wget
[root@jumpserver ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@jumpserver ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

[root@jumpserver ~]# yum clean all && yum makecache
```



#### 5.基础环境安装

```shell
[root@jumpserver ~]# yum install -y bash-completion vim lrzsz wget expect net-tools nc nmap tree dos2unix htop iftop iotop unzip telnet sl psmisc nethogs glances bc ntpdate openldap-devel
```



#### 6.安装jumpserver运行所需的依赖环境

```shell
[root@jumpserver ~]# yum -y install git python-pip gcc automake autoconf python-devel vim sshpass lrzsz readline-devel zlib zlib-devel openssl openssl-devel


# git 我们获取jumpserver代码，是在github上下载
# python-pip --- 用于安装Python软件
# gcc --- 解析代码中C语言信息(解释器)
# automake --- 实现软件自动编译过程
# autoconf --- 实现软件自动配置过程
# python-devel --- 系统中需要有Python依赖
# readline-devel --- 在操作Python命令信息时，实现补全功能
```



#### 7.修改系统的字符集

```shell
[root@jumpserver ~]# localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8
[root@jumpserver ~]# export LC_ALL=zh_CN.UTF-8

# 永久修改
[root@jumpserver ~]# echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf
```



#### 8.检查系统编码

```shell
[root@jumpserver ~]# locale
```



### 部署数据库

#### 1.下载

把mysql5.7的包放在/opt/目录下

```shell
[root@jumpserver ~]# cd /opt/
[root@jumpserver opt]# mkdir /opt/jumpserver
[root@jumpserver opt]# cd /opt/jumpserver/
[root@jumpserver jumpserver]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.35-1.el7.x86_64.rpm-bundle.tar
```



#### 2.解压缩安装

```shell
[root@jumpserver jumpserver]# mkdir /opt/jumpserver/mysql
[root@jumpserver jumpserver]# tar xvf mysql-5.7.35-1.el7.x86_64.rpm-bundle.tar -C /opt/jumpserver/mysql
[root@jumpserver jumpserver]# cd /opt/jumpserver/mysql/
[root@jumpserver mysql]# yum localinstall ./* -y   # 当前目录下的所有rpm包都会安装
```



#### 3.检查配置文件

```shell
[root@jumpserver mysql]# cat /etc/my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

# 添加以下内容
[mysqld_safe]
log-error=/var/log/mysql/mysql.log
pid-file=/var/run/mysql/mysql.pid
```



#### 4.初始化

```shell
[root@jumpserver mysql]# mysqld --initialize   # 初始化后会在/var/log/mysqld.log生成随机密码
[root@jumpserver mysql]# cat /var/log/mysqld.log
*<M(lHdr8P9p
```



#### 5.修改mysql数据库目录的所属用户及其所属组，然后启动mysql数据库

```shell
[root@jumpserver mysql]# chown mysql:mysql /var/lib/mysql -R
[root@jumpserver mysql]# systemctl start mysqld.service
[root@jumpserver mysql]# systemctl status mysqld.service
[root@jumpserver mysql]# systemctl enable mysqld.service
```



#### 6.登录mysql，并修改root用户的密码（系统强制要求，否则不能操作mysql）

```shell
[root@jumpserver mysql]# mysql -uroot -p'a1=%r:ou7;8B'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.35

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'sushiyi123456';   # 第一次临时密码登录,需要先使用此命令修改
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;   # 只要涉及修改用户都要刷新权限表
Query OK, 0 rows affected (0.00 sec)
```



#### 7.创建运行jumpserver的数据库

```mysql
mysql> create database jumpserver default charset 'utf8' collate 'utf8_bin';
Query OK, 1 row affected (0.00 sec)
```



#### 8.创建对应的数据库用户

```mysql
mysql> create user 'jumpserver'@'%' IDENTIFIED BY 'sushiyi';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
```



#### 9.给用户授权

```mysql
mysql> grant all privileges on jumpserver.* to 'jumpserver'@'%' identified by 'sushiyi';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
```



### 部署Python

默认Python版本是2.x，所有需要重新安装

#### 1.下载

```shell
[root@jumpserver jumpserver]# cd /opt/jumpserver/ && wget https://www.python.org/ftp/python/3.8.10/Python-3.8.10.tgz
```



#### 2.安装必要依赖

```shell
# 安装依赖
[root@jumpserver bin]# yum install libxml2-devel xmlsec1-devel xmlsec1-openssl-devel libtool-ltdl-devel libffi-devel -y
```



#### 3.解压缩安装

```shell
[root@jumpserver jumpserver]# tar xvf Python-3.8.10.tgz

[root@jumpserver jumpserver]# cd Python-3.8.10/

[root@jumpserver Python-3.8.10]# ./configure --prefix=/opt/jumpserver/python3.8
[root@jumpserver Python-3.8.10]# make && make install
```



#### 4.配置python3的环境变量

```shell
[root@jumpserver bin]# vim /etc/profile
# set python
PATH="/opt/jumpserver/python3.8/bin:$PATH"

[root@jumpserver bin]# source !$
source /etc/profile
```



#### 5.创建python运行所需的虚拟环境

为什么用虚拟环境

​	因为不希望搞乱我原本的环境

Linux系统内置了python2解释器，那么在安装python3之后，系统上有多个解释器版本共存，得明确项目用的是哪一个解释器去运行

图一，理解Linux上有多个解释器，去运行项目的概念

![](https://figure-bed-1304788733.cos.ap-guangzhou.myqcloud.com/typora/202204101751339.png)



图二，为什么要用虚拟环境

![](https://figure-bed-1304788733.cos.ap-guangzhou.myqcloud.com/typora/202204101753252.png)

```shell
# 先更新pip源
[root@jumpserver bin]# mkdir ~/.pip
[root@jumpserver bin]# touch ~/.pip/pip.conf
[root@jumpserver bin]# vim ~/.pip/pip.conf
# 添加一下内容
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/

[install]
trusted-host=mirrors.aliyun.com


# 更新
[root@jumpserver bin]# python3 -m pip install --upgrade pip setuptools wheel

# 安装
[root@jumpserver bin]# pip3 install virtualenv
```



#### 6.使用虚拟环境工具，再创建一个python3解释器，用于运行代码

```shell
[root@jumpserver bin]# virtualenv --python=python3 jmp_veve1
created virtual environment CPython3.8.10.final.0-64 in 811ms
  creator CPython3Posix(dest=/opt/jumpserver/python3.8/bin/jmp_veve1, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/root/.local/share/virtualenv)
    added seed packages: pip==22.0.4, setuptools==61.0.0, wheel==0.37.1
  activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator
```

```shell
注意：
	这里的虚拟环境路径在成功后的提示desc=...就是那个路径下的bin/activate
```



#### 7.此时Linux服务器上就有2个python3解释器

解释器本体是:/opt/jumpserver/python3.8/bin/python3

我们创建了一个虚拟的解释器，路径是:/opt/jumpserver/python3.8/bin/jmp_veve1/bin/python3

   

#### 8.激活虚拟环境，默认修改环境变量

```shell
[root@jumpserver bin]# which python3
/opt/jumpserver/python3.8/bin/python3
[root@jumpserver bin]# source /opt/jumpserver/Python-3.8.10/jmp_veve1/bin/activate
(jmp_veve1) [root@jumpserver bin]# which python3
/opt/jumpserver/python3.8/bin/jmp_veve1/bin/python3
(jmp_veve1) [root@jumpserver bin]# echo $PATH
/opt/jumpserver/python3.8/bin/jmp_veve1/bin:/opt/jumpserver/python3.8/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
(jmp_veve1) [root@jumpserver bin]# deactivate   # 退出虚拟环境
```



### 部署Redis

#### 1.下载

```shell
# 选择二进制安装即可
[root@jumpserver opt]# wget -O /opt/jumpserver/redis-5.0.13.tar.gz https://download.redis.io/releases/redis-5.0.13.tar.gz
```



#### 2.解压缩安装

```shell
[root@jumpserver opt]# tar -xvf /opt/jumpserver/redis-5.0.13.tar.gz

# 创建目录
[root@jumpserver opt]# mkdir -p /usr/local/redis/conf
[root@jumpserver opt]# mkdir -p /usr/local/redis/bin
[root@jumpserver opt]# mkdir -p /usr/local/redis/log
[root@jumpserver opt]# mkdir -p /data/redis

# 编译
[root@jumpserver opt]# cd /opt/redis-5.0.13
[root@jumpserver redis-5.0.13]# make

# 移动程序
[root@jumpserver opt]# cd /opt/redis-5.0.13/src/
[root@jumpserver src]# cp `ls -F|grep "*"|tr -d "*"` /usr/local/redis/bin
[root@jumpserver src]# ll /usr/local/redis/bin

# 解决warning问题
[root@jumpserver src]# echo 511 >/proc/sys/net/core/somaxconn
[root@jumpserver src]# echo vm.overcommit_memory = 1 >>/etc/sysctl.conf
[root@jumpserver src]# echo never > /sys/kernel/mm/transparent_hugepage/enabled
[root@jumpserver src]# vim /etc/profile
# set redis
export PATH=$PATH:/usr/local/redis/bin/

[root@jumpserver src]# source /etc/profile

# 修改成后台启动
[root@jumpserver redis-5.0.13]# cp redis.conf sentinel.conf /usr/local/redis/conf
[root@jumpserver redis-5.0.13]# vim  /usr/local/redis/conf/redis.conf
136 daemonize yes  #开启后台运行模式
171  logfile /xxxx/redis.log #指定日志生成路径和文件名字 
     logfile "/usr/local/redis/log/redis.log"
263  dir /data/redis          #指定应用持久化路径
253  dbfilename dump.rdb #默认的持久化文件名字
```



#### 2.启动服务

```shell
[root@jumpserver redis-5.0.13]# redis-server /usr/local/redis/conf/redis.conf   # 带着配置文件启动
[root@jumpserver redis-5.0.13]# netstat -aulntp   # redis默认端口是6379
```





### 部署jumpserver

一个后台程序，基本上都是需要依赖于数据库才能运行，后台程序在启动的时候，代码就回去连接数据库，保证数据库正确启动，且可以正确连接，否则后台程序是起不来的。



#### 1.下载

```shell
[root@jumpserver opt]# cd /opt/jumpserver/
[root@jumpserver jumpserver]# wget https://github.com/jumpserver/jumpserver/releases/download/v2.20.1/jumpserver-v2.20.1.tar.gz
```



#### 2.解压缩安装

```shell
[root@jumpserver jumpserver]# tar xvf jumpserver-v2.20.1.tar.gz

[root@jumpserver jumpserver]# ln -s /opt/jumpserver/jumpserver-v2.20.1 /opt/jumpserver/jumpserver
```



#### 3.安装依赖关系

```shell
[root@jumpserver jumpserver]# yum install -y bash-completion vim lrzsz wget expect net-tools nc nmap tree dos2unix htop iftop iotop unzip telnet sl psmisc nethogs glances bc ntpdate openldap-devel
```



#### 4.安装jumpserver所需要的模块

```shell
# 先激活虚拟环境
[root@jumpserver jumpserver]# cd /opt/jumpserver/jumpserver/requirements/
[root@jumpserver requirements]# source /opt/jumpserver/Python-3.8.10/jmp_veve1/bin/activate

# 下载模块
(jmp_veve1) [root@jumpserver requirements]# cd ..
(jmp_veve1) [root@jumpserver jumpserver]# wget https://download.jumpserver.org/files/GeoLite2-City.mmdb -O apps/common/utils/geoip/GeoLite2-City.mmdb
(jmp_veve1) [root@jumpserver jumpserver]# pip3 install -r /opt/jumpserver/jumpserver/requirements/requirements.txt
```



#### 5.修改配置文件

```shell
(jmp_veve1) [root@jumpserver requirements]# cd /opt/jumpserver/jumpserver
(jmp_veve1) [root@jumpserver jumpserver]# cp config_example.yml config_example.yml.bak

# 生成密钥
if [ "$SECRET_KEY" = "" ]; then SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`; echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc; echo $SECRET_KEY; else echo $SECRET_KEY; fi

# 生成token密钥
if [ "$BOOTSTRAP_TOKEN" = "" ]; then BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`; echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc; echo $BOOTSTRAP_TOKEN; else echo $BOOTSTRAP_TOKEN; fi

# 修改写入配置文件
(jmp_veve1) [root@jumpserver jumpserver]# grep -Ev "^#|^$" config_example.yml.bak > config_example.yml
(jmp_veve1) [root@jumpserver jumpserver]# grep -Ev "^#|^$" config_example.yml
SECRET_KEY: 5EOqWuwEkecNDLAquxO14jz1Ru0kOl774EblDySQUgz5AjnRt3 
BOOTSTRAP_TOKEN: Iy9wBfGO3ctgDEMV
DB_ENGINE: mysql
DB_HOST: 127.0.0.1
DB_PORT: 3306
DB_USER: jumpserver
DB_PASSWORD: sushiyi 
DB_NAME: jumpserver
HTTP_BIND_HOST: 0.0.0.0
HTTP_LISTEN_PORT: 8080
WS_LISTEN_PORT: 8070
REDIS_HOST: 127.0.0.1
REDIS_PORT: 6379
```



### 对python程序进行数据库迁移

**jumpserver这个程序是由python的web框架Django开发而来，必须得先进行数据库迁移，生成库表的信息，才能运行程序**

**<font color='red'>注意:这里一切操作都是在jumpserver这个软件目录下，也就是在jumpserver配置文件的那个目录下操作；因为如果不是在有配置文件的路径下操作，到最后python程序运行是提示找不到配置文件</font>**

```shell
(jmp_veve1) [root@jumpserver jumpserver]# cd /opt/jumpserver/jumpserver/   # 配置文件所在路径

(jmp_veve1) [root@jumpserver jumpserver]# rm -rf /opt/jumpserver/jumpserver-v2.20.1/apps/locale/zh/LC_MESSAGES/django.mo   # 处理国际化，不然会报错

(jmp_veve1) [root@jumpserver jumpserver]# cp /opt/jumpserver/jumpserver/config_example.yml ./config.yml

# 第一条命令
(jmp_veve1) [root@jumpserver jumpserver]#ln -s /usr/local/mysql/lib/libmysqlclient.so.20 /usr/local/lib/libmysqlclient.so.20
(jmp_veve1) [root@jumpserver jumpserver]# echo "/usr/local/lib" >> /etc/ld.so.conf
(jmp_veve1) [root@jumpserver jumpserver]# /sbin/ldconfig -v 
(jmp_veve1) [root@jumpserver jumpserver]# python3 /opt/jumpserver/jumpserver/apps/manage.py makemigrations

mysqladmin -ujumpserver -p123456 password ye123456

CREATE USER 'jumpserver'@'%' IDENTIFIED BY 'ye123456';
GRANT ALL PRIVILEGES ON *.* TO 'jumpserver'@'%' WITH
GRANT OPTION;
# https://blog.csdn.net/qq_38912395/article/details/122741101 第一条命令可能遇到的问题解决文章


# 第二条命令
(jmp_veve1) [root@jumpserver jumpserver]# python3 /opt/jumpserver/jumpserver/apps/manage.py migrate
```



此时打开数据库检验，会发现多了好多表

```mysql
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| jumpserver         |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> use jumpserver;
Database changed
mysql> show tables;
+--------------------------------------------+
| Tables_in_jumpserver                       |
+--------------------------------------------+
| acls_loginacl                              |
| acls_loginacl_reviewers                    |
| acls_loginassetacl                         |
| acls_loginassetacl_reviewers               |
| applications_account                       |
| applications_application                   |
   ……
| users_usergroup                            |
| users_userpasswordhistory                  |
+--------------------------------------------+
119 rows in set (0.00 sec)
```



### 启动jms

```shell
(jmp_veve1) [root@jumpserver jumpserver]# cd /opt/jumpserver/jumpserver/

(jmp_veve1) [root@jumpserver jumpserver]# ./jms start -d
……
beat is running: 38862.
daphne is running: 38868.
flower is running: 38870.
celery_ansible is running: 38872.
celery_default is running: 38874.
gunicorn is running: 38888.
```

```shell
# 检验
(jmp_veve1) [root@jumpserver jumpserver]# netstat -tulntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      812/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1163/master         
tcp        0      0 0.0.0.0:8070            0.0.0.0:*               LISTEN      38868/python        
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      21863/redis-server  
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      38888/python        
tcp        0      0 0.0.0.0:5555            0.0.0.0:*               LISTEN      38870/python        
tcp6       0      0 :::22                   :::*                    LISTEN      812/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      1163/master         
tcp6       0      0 :::3306                 :::*                    LISTEN      8867/mysqld         
tcp6       0      0 :::5555                 :::*                    LISTEN      38870/python        
udp        0      0 127.0.0.1:323           0.0.0.0:*                           523/chronyd         
udp        0      0 0.0.0.0:68              0.0.0.0:*                           9256/dhclient       
udp6       0      0 ::1:323                 :::*                                523/chronyd
```

浏览器输入IP:8080就可以看到没有UI的页面，如下图

![](https://figure-bed-1304788733.cos.ap-guangzhou.myqcloud.com/typora/202204111313803.png)



### 部署koko

#### 1.判断CPU架构，根据架构选择包

```shell
(jmp_veve1) [root@jumpserver jumpserver]# yum install -y redhat-lsb

(jmp_veve1) [root@jumpserver jumpserver]# lsb_release -a
LSB Version:	:core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch
Distributor ID:	CentOS
Description:	CentOS Linux release 7.8.2003 (Core)
Release:	7.8.2003
Codename:	Core
```



#### 2.下载amd架构的包

```shell
(jmp_veve1) [root@jumpserver jumpserver]# cd /opt/jumpserver/ && wget https://github.com/jumpserver/koko/releases/download/v2.20.1/koko-v2.20.1-linux-amd64.tar.gz
```



#### 3.解压缩安装

```shell
(jmp_veve1) [root@jumpserver jumpserver]# tar xvf koko-v2.20.1-linux-amd64.tar.gz
```



#### 4.修改权限

```shell
(jmp_veve1) [root@jumpserver jumpserver]# chown -R root.root /opt/jumpserver/koko-v2.20.1-linux-amd64

(jmp_veve1) [root@jumpserver jumpserver]# ln -s /opt/jumpserver/koko-v2.20.1-linux-amd64 /opt/jumpserver/koko
```



#### 5.修改配置文件

```shell
(jmp_veve1) [root@jumpserver jumpserver]# cd /opt/jumpserver/koko

(jmp_veve1) [root@jumpserver koko]# cp config_example.yml config_example.yml.bak

# 修改如下
(jmp_veve1) [root@jumpserver koko]# grep -Ev "#|^$" config_example.yml.bak > config_example.yml
(jmp_veve1) [root@jumpserver koko]# grep -Ev "#|^$" config_example.yml
CORE_HOST: http://127.0.0.1:8080
BOOTSTRAP_TOKEN: Iy9wBfGO3ctgDEMV
LOG_LEVEL: INFO
REDIS_HOST: 127.0.0.1
REDIS_PORT: 6379
REDIS_PASSWORD:
REDIS_CLUSTERS:
REDIS_DB_ROOM:

# 再次修改
(jmp_veve1) [root@jumpserver koko]# cp config_example.yml config.yml
```



#### 6.启动koko

```shell
(jmp_veve1) [root@jumpserver koko]# /opt/jumpserver/koko/koko -d   # 后台运行

# 检验
(jmp_veve1) [root@jumpserver koko]# ps -ef | grep koko
root      39434      1  1 13:59 ?        00:00:00 /opt/jumpserver/koko/koko -d
root      39442  22819  0 13:59 pts/1    00:00:00 grep --color=auto koko

# 查看日志
(jmp_veve1) [root@jumpserver koko]# tail -100 /opt/jumpserver/koko/data/logs/koko.log

# 检查端口
(jmp_veve1) [root@jumpserver koko]# netstat -tulntp | grep 2222
tcp6       0      0 :::2222                 :::*                    LISTEN      39719/koko
```



### 部署Guacamole与lion

guacamole == 1.4



#### 1.去官网下载上传，解压缩

```shell
(jmp_veve1) [root@jumpserver jumpserver]# tar xvf guacamole-server-1.4.0.tar.gz
```



#### 2.安装依赖

```shell
(jmp_veve1) [root@jumpserver guacamole-server-1.4.0]# yum -y localinstall --nogpgcheck https://mirrors.aliyun.com/rpmfusion/free/el/rpmfusion-free-release-7.noarch.rpm

(jmp_veve1) [root@jumpserver guacamole-server-1.4.0]# yum install -y cairo-devel libjpeg-turbo-devel libpng-devel libtool uuid-devel

(jmp_veve1) [root@jumpserver guacamole-server-1.4.0]# yum install -y ffmpeg ffmpeg-devell freerdp-devel pango-devel libssh2-devel libtelnet-devel libvncserver-devel libwebsockets-devel pulseaudio-libs-devel openssl-devel
```



#### 3.编译安装

```shell
(jmp_veve1) [root@jumpserver jumpserver]# cd /opt/jumpserver/guacamole-server-1.4.0/ && ./configure --with-systemd-dir=/etc/systemd/system/ && make && make install
```



#### 4.下载lion

```shell
(jmp_veve1) [root@jumpserver guacamole-server-1.4.0]# cd /opt/jumpserver/ && wget https://github.com/jumpserver/lion-release/releases/download/v2.20.1/lion-v2.20.1-linux-amd64.tar.gz
```



#### 5.解压安装lion

```shell
(jmp_veve1) [root@jumpserver jumpserver]# tar -xvf lion-v2.20.1-linux-amd64.tar.gz

(jmp_veve1) [root@jumpserver jumpserver]# ln -s /opt/jumpserver/lion-v2.20.1-linux-amd64 lion
```



#### 6.修改配置文件

```shell
(jmp_veve1) [root@jumpserver jumpserver]# cd /opt/jumpserver/lion
(jmp_veve1) [root@jumpserver lion]# cp config_example.yml config.yml

# 修改如下
(jmp_veve1) [root@jumpserver lion]# grep -Ev "#|^$" config_example.yml > config.yml
(jmp_veve1) [root@jumpserver lion]# grep -Ev "#|^$" config.yml 
CORE_HOST: http://127.0.0.1:8080
BOOTSTRAP_TOKEN: FlMPNlelgVd7WNYQ
BIND_HOST: 0.0.0.0
HTTPD_PORT: 8081
LOG_LEVEL: DEBUG
REDIS_HOST: 127.0.0.1
REDIS_PORT: 6379
REDIS_PASSWORD:
REDIS_DB_ROOM:
```



#### 7.启动guacamole

```shell
(jmp_veve1) [root@jumpserver lion]# /sbin/ldconfig -v 
(jmp_veve1) [root@jumpserver lion]# systemctl start guacd
(jmp_veve1) [root@jumpserver lion]# systemctl status guacd
● guacd.service - Guacamole Server
   Loaded: loaded (/etc/systemd/system/guacd.service; disabled; vendor preset: disabled)
   Active: active (running) since 一 2022-04-11 19:45:08 CST; 5s ago
     Docs: man:guacd(8)
 Main PID: 52274 (guacd)
   CGroup: /system.slice/guacd.service
           └─52274 /usr/local/sbin/guacd -f

4月 11 19:45:08 jumpserver systemd[1]: Started Guacamole Server.
4月 11 19:45:09 jumpserver guacd[52274]: Guacamole proxy daemon (guacd) version 1.4.0 started
4月 11 19:45:09 jumpserver guacd[52274]: guacd[52274]: INFO:        Guacamole proxy daemon (guacd) version 1.4.0 started
4月 11 19:45:09 jumpserver guacd[52274]: guacd[52274]: INFO:        Listening on host ::1, port 4822
4月 11 19:45:09 jumpserver guacd[52274]: Listening on host ::1, port 4822
```



#### 8.启动lion

```shell
(jmp_veve1) [root@jumpserver lion]# /opt/jumpserver/lion/lion

# 可以加入system管理
(jmp_veve1) [root@jumpserver lion]# vim /etc/systemd/system/lion.service
[Unit]
Description=JumpServer Lion Service
After=network.target

[Service]
Type=simple
User=root
Group=root

WorkingDirectory=/opt/jumpserver/lion-v2.20.1-linux-amd64
ExecStart=/opt/jumpserver/lion-v2.20.1-linux-amd64/lion -f config.yml
Restart=on-failure

[Install]
WantedBy=multi-user.target

# 启动
(jmp_veve1) [root@jumpserver lion]# systemctl daemon-reload
(jmp_veve1) [root@jumpserver lion]# systemctl start lion
(jmp_veve1) [root@jumpserver lion]# systemctl status lion
```



### Lina与Luna编译安装

#### 1.安装node

```shell
(jmp_veve1) [root@jumpserver lion]# cd /opt/jumpserver/ && wget https://registry.npmmirror.com/-/binary/node/v16.6.0/node-v16.6.0-linux-x64.tar.gz

(jmp_veve1) [root@jumpserver jumpserver]# tar xvf node-v16.6.0-linux-x64.tar.gz

(jmp_veve1) [root@jumpserver jumpserver]# mv node-v16.6.0-linux-x64 /usr/local/node

(jmp_veve1) [root@jumpserver jumpserver]# chown -R root.root /usr/local/node

(jmp_veve1) [root@jumpserver jumpserver]# vim /etc/profile
# set node
export PATH=/usr/local/node/bin:$PATH

(jmp_veve1) [root@jumpserver jumpserver]# source !$

(jmp_veve1) [root@jumpserver jumpserver]# node -v
v16.6.0
```



#### 2.下载Lina

```shell
(jmp_veve1) [root@jumpserver jumpserver]# cd /opt/jumpserver/ && wget https://github.com/jumpserver/lina/releases/download/v2.20.1/lina-v2.20.1.tar.gz

(jmp_veve1) [root@jumpserver jumpserver]# tar xvf lina-v2.20.1.tar.gz

(jmp_veve1) [root@jumpserver jumpserver]# ln -s /opt/jumpserver/lina-v2.20.1 lina
```



#### 3.进入Lina

```shell
(jmp_veve1) [root@jumpserver jumpserver]# cd lina
(jmp_veve1) [root@jumpserver jumpserver]# chown -R nginx:nginx /opt/jumpserver/lina-v2.20.1   # 要先安装nginx
```



#### 4.下载安装Luna

```shell
(jmp_veve1) [root@jumpserver lina]# cd /opt/jumpserver/ && wget https://github.com/jumpserver/luna/releases/download/v2.20.1/luna-v2.20.1.tar.gz

(jmp_veve1) [root@jumpserver jumpserver]# tar xvf luna-v2.20.1.tar.gz

(jmp_veve1) [root@jumpserver jumpserver]# ln -s /opt/jumpserver/luna-v2.20.1 luna

(jmp_veve1) [root@jumpserver jumpserver]# cd luna

(jmp_veve1) [root@jumpserver jumpserver]# chown -R nginx:nginx /opt/jumpserver/luna-v2.20.1   # 要先安装nginx
```



### 最后部署

#### 1.安装nginx

```shell
(jmp_veve1) [root@jumpserver assets]# yum install nginx -y
(jmp_veve1) [root@jumpserver jumpserver]# nginx -v
nginx version: nginx/1.20.1
```



#### 2.修改原来的虚拟主机配置

```shell
vim /etc/nginx/conf.d/jumpserver.conf

server {
    listen 80;
    client_max_body_size 100m;
    location /ui/ {
        try_files $uri / /index.html;
        alias /opt/jumpserver/lina-v2.20.1/;
}
    location /luna/ {
        try_files $uri / /index.html;
        alias /opt/jumpserver/luna-v2.20.1/;

}
    location /media/ {
        add_header Content-Encoding gzip;
        root /opt/jumpserver/jumpserver-v2.20.1/data/;
}
    location /static/ {
        root /opt/jumpserver/jumpserver-v2.20.1/data/;
}
    location /koko/ {
        proxy_pass       http://localhost:5000;
        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;
        access_log off;
}
    location /guacamole/ {
        proxy_pass       http://localhost:8081/;
        proxy_buffering off;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $http_connection;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        access_log off;
}
    location /ws/ {
        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_pass http://localhost:8070;
        proxy_http_version 1.1;
        proxy_buffering off;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
}
    location /api/ {
        proxy_pass http://localhost: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;
}
    location /core/ {
        proxy_pass http://localhost: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;
}
    location / {
        rewrite ^/(.*)$ /ui/$1 last;
}
}
```



#### 3.启动nginx

```shell
systemctl start nginx

# 此时输入IP:80即可进入，不再是8080
# 默认账号密码都是admin
# 下个窗口会强制让你改密重新登陆，成功登陆后如下图
```

![](https://figure-bed-1304788733.cos.ap-guangzhou.myqcloud.com/typora/202204112156905.png)

![](https://figure-bed-1304788733.cos.ap-guangzhou.myqcloud.com/typora/202205042336134.png)

