jumpserver跳板机服务器部署

JumpServer 环境要求:
硬件配置: 2个CPU核心, 4G 内存, 50G 硬盘(最低)
操作系统: Linux 发行版 x86_64
Python = 3.6.x
Mysql Server ≥ 5.7
Redis

安装步骤

一.环境准备

1.关闭 selinux 和防火墙

[root@localhost ~]# setenforce 0
[root@localhost ~]#sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# systemctl  disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

安装 epel 库

[root@localhost ~]#yum upgrade -y
[root@localhost ~]#wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@localhost ~]#yum -y install epel-release wget

2.修改字符集,否则可能报 input/output error的问题,因为日志里打印了中文

[root@localhost ~]# localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8
[root@localhost ~]# export LC_ALL=zh_CN.UTF-8
[root@localhost ~]# echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf

3.准备 Python3 和 Python 虚拟环境
最新的jumpserver环境依赖于Python3

3.1安装依赖包

[root@localhost ~]# yum -y install  sqlite-devel xz gcc automake zlib-devel openssl-devel epel-release git   libffi-devel
[root@localhost ~]# wget https://www.python.org/ftp/python/3.6.4/Python-3.6.4.tar.xz
[root@localhost ~]#tar -xf Python-3.6.4.tar.xz
[root@localhost ~]# cd Python-3.6.4
[root@localhost Python-3.6.4]# ./configure && make && make install

3.2建立 Python 虚拟环境

[root@localhost Python-3.6.4]# cd /opt/
[root@localhost opt]# python3.6 -m venv /opt/py3
[root@localhost opt]# source /opt/py3/bin/activate
(py3) [root@localhost opt]# 

3.3获取 JumpServer 代码

[root@localhost opt]# wget https://github.com/jumpserver/jumpserver/releases/download/v2.8.2/jumpserver-v2.8.2.tar.gz
(py3) [root@localhost opt]# tar xf jumpserver-v2.8.2.tar.gz 
(py3) [root@localhost opt]# mv jumpserver-v2.8.2 jumpserver

3.4安装编译环境依赖

(py3) [root@localhost opt]# cd jumpserver/requirements/

3.5安装依赖 RPM 包

(py3) [root@localhost requirements]# yum install -y $(cat rpm_requirements.txt)

3.6安装 Python 库依赖

(py3) [root@localhost requirements]#pip install --upgrade pip setuptools
(py3) [root@localhost requirements]# pip install -r requirements.txt

国内可以使用镜像加速

(py3) [root@localhost requirements]#pip install --upgrade pip setuptools -i https://mirrors.aliyun.com/pypi/simple/
(py3) [root@localhost requirements]#pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

4.安装 Redis, Jumpserver 使用 Redis 做 cache 和 celery broke

(py3) [root@localhost requirements]# cd ~
(py3) [root@localhost ~]# yum -y install redis
(py3) [root@localhost ~]# systemctl enable redis
(py3) [root@localhost ~]# systemctl start redis

5.安装 MySQL5.7

卸载mariadb,否则安装mysql会出现冲突
5.1执行命令

(py3) [root@localhost ~]# rpm -qa | grep mariadb
mariadb-devel-5.5.68-1.el7.x86_64
mariadb-libs-5.5.68-1.el7.x86_64
mariadb-5.5.68-1.el7.x86_64
(py3) [root@localhost ~]# rpm -e --nodeps `rpm -qa |grep mariadb`

5.2安装mysql yum repository

(py3) [root@localhost ~]#wget https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm
(py3) [root@localhost ~]#yum  -y localinstall mysql57-community-release-el7-11.noarch.rpm

5.3确认yum repository已经安装

(py3) [root@localhost ~]# yum repolist enabled | grep "mysql.*-community.*"

5.4安装

(py3) [root@localhost ~]# yum -y install mysql-community-server

5.5启动
执行命令

(py3) [root@localhost ~]# service mysqld start

5.6创建数据库 Jumpserver 并授权

生成数据库密码

(py3) [root@localhost ~]# cd /opt/jumpserver/requirements/
(py3) [root@localhost requirements]# DB_PASSWORD='Admin123!@#'
(py3) [root@localhost requirements]# echo -e "\033[31m 你的数据库密码是 $DB_PASSWORD \033[0m"
 你的数据库密码是 Admin123!@# 
 
 (py3) [root@localhost requirements]# grep 'temporary password' /var/log/mysqld.log
 (py3) [root@localhost requirements]# mysql -uroot -p'KJ+#P+!8e0ek'

5.7修改root密码

mysql> set password for root@localhost = password('Admin123!@#');

5.8创建数据库用户

mysql> CREATE USER 'jumpserver'@'%' IDENTIFIED BY 'Admin123!@#';

5.9创建数据库

mysql> create database jumpserver default charset 'utf8' collate 'utf8_bin';

5.10授权

mysql> grant all on jumpserver.* to jumpserver@'%' identified by'Admin123!@#' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'  IDENTIFIED BY 'Admin123!@#'  WITH GRANT OPTION;

5.11刷新权限

mysql> flush privileges;

6.修改 Jumpserver 配置文件

(py3) [root@localhost requirements]# cd /opt/jumpserver
(py3) [root@localhost jumpserver]# cp config_example.yml config.yml
生成随机SECRET_KEY
(py3) [root@localhost jumpserver]# SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`
(py3) [root@localhost jumpserver]# echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc
生成随机BOOTSTRAP_TOKEN
(py3) [root@localhost jumpserver]# BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`
(py3) [root@localhost jumpserver]# echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc
(py3) [root@localhost jumpserver]# sed -i "s/SECRET_KEY:/SECRET_KEY: $SECRET_KEY/g" /opt/jumpserver/config.yml
(py3) [root@localhost jumpserver]# sed -i "s/BOOTSTRAP_TOKEN:/BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN/g" /opt/jumpserver/config.yml
(py3) [root@localhost jumpserver]# sed -i "s/# DEBUG: true/DEBUG: false/g" /opt/jumpserver/config.yml
(py3) [root@localhost jumpserver]# sed -i "s/# LOG_LEVEL: DEBUG/LOG_LEVEL: ERROR/g" /opt/jumpserver/config.yml
(py3) [root@localhost jumpserver]# sed -i "s/# SESSION_EXPIRE_AT_BROWSER_CLOSE: false/SESSION_EXPIRE_AT_BROWSER_CLOSE: true/g" /opt/jumpserver/config.yml
(py3) [root@localhost jumpserver]# sed -i "s/DB_PASSWORD: /DB_PASSWORD: $DB_PASSWORD/g" /opt/jumpserver/config.yml
(py3) [root@localhost jumpserver]# echo -e "\033[31m 你的SECRET_KEY是 $SECRET_KEY \033[0m"
 你的SECRET_KEY是 ZxCXRpEAamhOueHRx6WBnI4GwyQCJQmewtF71WtfQrB16b2tKZ 
(py3) [root@localhost jumpserver]# echo -e "\033[31m 你的BOOTSTRAP_TOKEN是 $BOOTSTRAP_TOKEN \033[0m"
 你的BOOTSTRAP_TOKEN是 M5Oi6nMOfkYYqPhl 

7.确认配置没有问题

(py3) [root@localhost jumpserver]# vim config.yml 
# SECURITY WARNING: keep the secret key used in production secret!
# 加密秘钥 生产环境中请修改为随机字符串,请勿外泄, 可使用命令生成 
# $ cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 49;echo
SECRET_KEY: ZxCXRpEAamhOueHRx6WBnI4GwyQCJQmewtF71WtfQrB16b2tKZ 

# SECURITY WARNING: keep the bootstrap token used in production secret!
# 预共享Token coco和guacamole用来注册服务账号,不在使用原来的注册接受机制
BOOTSTRAP_TOKEN: M5Oi6nMOfkYYqPhl 

# Development env open this, when error occur display the full process track, Production disable it
# DEBUG 模式 开启DEBUG后遇到错误时可以看到更多日志
DEBUG: false

# DEBUG, INFO, WARNING, ERROR, CRITICAL can set. See https://docs.djangoproject.com/en/1.10/topics/logging/
# 日志级别
LOG_LEVEL: ERROR
# LOG_DIR: 

# Session expiration setting, Default 24 hour, Also set expired on on browser close
# 浏览器Session过期时间,默认24小时, 也可以设置浏览器关闭则过期
# SESSION_COOKIE_AGE: 86400
SESSION_EXPIRE_AT_BROWSER_CLOSE: true

# Database setting, Support sqlite3, mysql, postgres ....
# 数据库设置
# See https://docs.djangoproject.com/en/1.10/ref/settings/#databases

# SQLite setting:
# 使用单文件sqlite数据库
# DB_ENGINE: sqlite3
# DB_NAME: 
# MySQL or postgres setting like:
# 使用Mysql作为数据库
DB_ENGINE: mysql
DB_HOST: 127.0.0.1
DB_PORT: 3306
DB_USER: jumpserver
DB_PASSWORD: Admin123!@#
DB_NAME: jumpserver

# When Django start it will bind this host and port
# ./manage.py runserver 127.0.0.1:8080
# 运行时绑定端口
HTTP_BIND_HOST: 0.0.0.0
HTTP_LISTEN_PORT: 8080
WS_LISTEN_PORT: 8070

# 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

# Use OpenID Authorization
# 使用 OpenID 进行认证设置
# AUTH_OPENID: False # True or False
# BASE_SITE_URL: None
# AUTH_OPENID_CLIENT_ID: client-id
# AUTH_OPENID_CLIENT_SECRET: client-secret
# AUTH_OPENID_PROVIDER_ENDPOINT: https://op-example.com/
# AUTH_OPENID_PROVIDER_AUTHORIZATION_ENDPOINT: https://op-example.com/authorize
# AUTH_OPENID_PROVIDER_TOKEN_ENDPOINT: https://op-example.com/token
# AUTH_OPENID_PROVIDER_JWKS_ENDPOINT: https://op-example.com/jwks
# AUTH_OPENID_PROVIDER_USERINFO_ENDPOINT: https://op-example.com/userinfo
# AUTH_OPENID_PROVIDER_END_SESSION_ENDPOINT: https://op-example.com/logout
# AUTH_OPENID_PROVIDER_SIGNATURE_ALG: HS256
# AUTH_OPENID_PROVIDER_SIGNATURE_KEY: None
# AUTH_OPENID_SCOPES: "openid profile email"
# AUTH_OPENID_ID_TOKEN_MAX_AGE: 60
# AUTH_OPENID_ID_TOKEN_INCLUDE_CLAIMS: True
# AUTH_OPENID_USE_STATE: True
# AUTH_OPENID_USE_NONCE: True
# AUTH_OPENID_SHARE_SESSION: True
# AUTH_OPENID_IGNORE_SSL_VERIFICATION: True
# AUTH_OPENID_ALWAYS_UPDATE_USER: True

# Use Radius authorization
# 使用Radius来认证
# AUTH_RADIUS: false
# RADIUS_SERVER: localhost
# RADIUS_PORT: 1812
# RADIUS_SECRET: 

# CAS 配置
# AUTH_CAS': False,
# CAS_SERVER_URL': "http://host/cas/",
# CAS_ROOT_PROXIED_AS': 'http://jumpserver-host:port',  
# CAS_LOGOUT_COMPLETELY': True,
# CAS_VERSION': 3,

# LDAP/AD settings
# LDAP 搜索分页数量
# AUTH_LDAP_SEARCH_PAGED_SIZE: 1000
#
# 定时同步用户
# AUTH_LDAP_SYNC_IS_PERIODIC: True
# 同步间隔 (单位: 时) (优先)
# AUTH_LDAP_SYNC_INTERVAL: 12
# Crontab 表达式
# AUTH_LDAP_SYNC_CRONTAB: * 6 * * *
#
# LDAP 用户登录时仅允许在用户列表中的用户执行 LDAP Server 认证
# AUTH_LDAP_USER_LOGIN_ONLY_IN_USERS: False
#
# LDAP 认证时如果日志中出现以下信息将参数设置为 0 (详情参见:https://www.python-ldap.org/en/latest/faq.html)
# In order to perform this operation a successful bind must be completed on the connection
# AUTH_LDAP_OPTIONS_OPT_REFERRALS: -1

# OTP settings
# OTP/MFA 配置
# OTP_VALID_WINDOW: 0
# OTP_ISSUER_NAME: Jumpserver

# Perm show single asset to ungrouped node
# 是否把未授权节点资产放入到 未分组 节点中
# PERM_SINGLE_ASSET_TO_UNGROUP_NODE: False
#
# 同一账号仅允许在一台设备登录
# WINDOWS_SKIP_ALL_MANUAL_PASSWORD: False
# Windows 登录跳过手动输入密码
#
# LOGIN_CONFIRM_ENABLE: False
# 启用二次复合认证配置
#
# PERIOD_TASK_ENABLE: True
# 启用定时任务
#
# USER_LOGIN_SINGLE_MACHINE_ENABLED: False

8.安装pymysql连接工具

(py3) [root@localhost jumpserver]#pip3  uninstall pycrypto
 (py3) [root@localhost jumpserver]#pip3  uninstall pycryptodome
 (py3) [root@localhost jumpserver]#pip3  install pycryptodome
 (py3) [root@localhost jumpserver]#pip  install mysqlclient
 (py3) [root@localhost jumpserver]#pip  install pymysql

9.生成数据表结构和初始化数据文件

(py3) [root@localhost jumpserver]# cd /opt/jumpserver/utils/
(py3) [root@localhost utils]# bash make_migrations.sh
Traceback (most recent call last):
  File "/opt/py3/lib/python3.6/site-packages/MySQLdb/__init__.py", line 18, in <module>
    from . import _mysql
ImportError: libmysqlclient.so.18: cannot open shared object file: No such file or directory

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "../apps/manage.py", line 28, in <module>
    execute_from_command_line(sys.argv)
  File "/opt/py3/lib/python3.6/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
    utility.execute()
  File "/opt/py3/lib/python3.6/site-packages/django/core/management/__init__.py", line 377, in execute
    django.setup()
  File "/opt/py3/lib/python3.6/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/opt/py3/lib/python3.6/site-packages/django/apps/registry.py", line 114, in populate
    app_config.import_models()
  File "/opt/py3/lib/python3.6/site-packages/django/apps/config.py", line 211, in import_models
    self.models_module = import_module(models_module_name)
  File "/usr/local/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/opt/jumpserver/apps/orgs/models.py", line 12, in <module>
    from common.db.models import ChoiceSet
  File "/opt/jumpserver/apps/common/db/models.py", line 69, in <module>
    class JMSBaseModel(Model):
  File "/opt/py3/lib/python3.6/site-packages/django/db/models/base.py", line 122, in __new__
    new_class.add_to_class('_meta', Options(meta, app_label))
  File "/opt/py3/lib/python3.6/site-packages/django/db/models/base.py", line 326, in add_to_class
    value.contribute_to_class(cls, name)
  File "/opt/py3/lib/python3.6/site-packages/django/db/models/options.py", line 206, in contribute_to_class
    self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
  File "/opt/py3/lib/python3.6/site-packages/django/db/__init__.py", line 28, in __getattr__
    return getattr(connections[DEFAULT_DB_ALIAS], item)
  File "/opt/py3/lib/python3.6/site-packages/django/db/utils.py", line 214, in __getitem__
    backend = load_backend(db['ENGINE'])
  File "/opt/py3/lib/python3.6/site-packages/django/db/utils.py", line 111, in load_backend
    return import_module('%s.base' % backend_name)
  File "/usr/local/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/opt/py3/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 29, in <module>
    from .introspection import DatabaseIntrospection            # isort:skip
  File "/opt/py3/lib/python3.6/site-packages/django/db/backends/mysql/introspection.py", line 4, in <module>
    from MySQLdb.constants import FIELD_TYPE
  File "/opt/py3/lib/python3.6/site-packages/MySQLdb/__init__.py", line 24, in <module>
    version_info, _mysql.version_info, _mysql.__file__
NameError: name '_mysql' is not defined
Traceback (most recent call last):
  File "/opt/py3/lib/python3.6/site-packages/MySQLdb/__init__.py", line 18, in <module>
    from . import _mysql
ImportError: libmysqlclient.so.18: cannot open shared object file: No such file or directory

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "../apps/manage.py", line 28, in <module>
    execute_from_command_line(sys.argv)
  File "/opt/py3/lib/python3.6/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
    utility.execute()
  File "/opt/py3/lib/python3.6/site-packages/django/core/management/__init__.py", line 377, in execute
    django.setup()
  File "/opt/py3/lib/python3.6/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/opt/py3/lib/python3.6/site-packages/django/apps/registry.py", line 114, in populate
    app_config.import_models()
  File "/opt/py3/lib/python3.6/site-packages/django/apps/config.py", line 211, in import_models
    self.models_module = import_module(models_module_name)
  File "/usr/local/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/opt/jumpserver/apps/orgs/models.py", line 12, in <module>
    from common.db.models import ChoiceSet
  File "/opt/jumpserver/apps/common/db/models.py", line 69, in <module>
    class JMSBaseModel(Model):
  File "/opt/py3/lib/python3.6/site-packages/django/db/models/base.py", line 122, in __new__
    new_class.add_to_class('_meta', Options(meta, app_label))
  File "/opt/py3/lib/python3.6/site-packages/django/db/models/base.py", line 326, in add_to_class
    value.contribute_to_class(cls, name)
  File "/opt/py3/lib/python3.6/site-packages/django/db/models/options.py", line 206, in contribute_to_class
    self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
  File "/opt/py3/lib/python3.6/site-packages/django/db/__init__.py", line 28, in __getattr__
    return getattr(connections[DEFAULT_DB_ALIAS], item)
  File "/opt/py3/lib/python3.6/site-packages/django/db/utils.py", line 214, in __getitem__
    backend = load_backend(db['ENGINE'])
  File "/opt/py3/lib/python3.6/site-packages/django/db/utils.py", line 111, in load_backend
    return import_module('%s.base' % backend_name)
  File "/usr/local/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/opt/py3/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 29, in <module>
    from .introspection import DatabaseIntrospection            # isort:skip
  File "/opt/py3/lib/python3.6/site-packages/django/db/backends/mysql/introspection.py", line 4, in <module>
    from MySQLdb.constants import FIELD_TYPE
  File "/opt/py3/lib/python3.6/site-packages/MySQLdb/__init__.py", line 24, in <module>
    version_info, _mysql.version_info, _mysql.__file__
NameError: name '_mysql' is not defined
Traceback (most recent call last):
  File "/opt/py3/lib/python3.6/site-packages/MySQLdb/__init__.py", line 18, in <module>
    from . import _mysql
ImportError: libmysqlclient.so.18: cannot open shared object file: No such file or directory

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "../apps/manage.py", line 28, in <module>
    execute_from_command_line(sys.argv)
  File "/opt/py3/lib/python3.6/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
    utility.execute()
  File "/opt/py3/lib/python3.6/site-packages/django/core/management/__init__.py", line 377, in execute
    django.setup()
  File "/opt/py3/lib/python3.6/site-packages/django/__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "/opt/py3/lib/python3.6/site-packages/django/apps/registry.py", line 114, in populate
    app_config.import_models()
  File "/opt/py3/lib/python3.6/site-packages/django/apps/config.py", line 211, in import_models
    self.models_module = import_module(models_module_name)
  File "/usr/local/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/opt/jumpserver/apps/orgs/models.py", line 12, in <module>
    from common.db.models import ChoiceSet
  File "/opt/jumpserver/apps/common/db/models.py", line 69, in <module>
    class JMSBaseModel(Model):
  File "/opt/py3/lib/python3.6/site-packages/django/db/models/base.py", line 122, in __new__
    new_class.add_to_class('_meta', Options(meta, app_label))
  File "/opt/py3/lib/python3.6/site-packages/django/db/models/base.py", line 326, in add_to_class
    value.contribute_to_class(cls, name)
  File "/opt/py3/lib/python3.6/site-packages/django/db/models/options.py", line 206, in contribute_to_class
    self.db_table = truncate_name(self.db_table, connection.ops.max_name_length())
  File "/opt/py3/lib/python3.6/site-packages/django/db/__init__.py", line 28, in __getattr__
    return getattr(connections[DEFAULT_DB_ALIAS], item)
  File "/opt/py3/lib/python3.6/site-packages/django/db/utils.py", line 214, in __getitem__
    backend = load_backend(db['ENGINE'])
  File "/opt/py3/lib/python3.6/site-packages/django/db/utils.py", line 111, in load_backend
    return import_module('%s.base' % backend_name)
  File "/usr/local/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/opt/py3/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 29, in <module>
    from .introspection import DatabaseIntrospection            # isort:skip
  File "/opt/py3/lib/python3.6/site-packages/django/db/backends/mysql/introspection.py", line 4, in <module>
    from MySQLdb.constants import FIELD_TYPE
  File "/opt/py3/lib/python3.6/site-packages/MySQLdb/__init__.py", line 24, in <module>
    version_info, _mysql.version_info, _mysql.__file__
NameError: name '_mysql' is not defined

这里报错主要原因就是没有连接mysql的模块。所以需要在几个文件修改一下把mysql改成pymysql
但是mysql,redis数据库安装在另外一台服务器的时候,没有出现这个情况,初始化数据一次通过

10.增加pymysql模块

(py3) [root@localhost utils]# vim /opt/py3/lib/python3.6/site-packages/django/db/backends/mysql/base.py
(py3) [root@localhost utils]# vim /opt/py3/lib/python3.6/site-packages/django/apps/config.py
(py3) [root@localhost utils]# vim /opt/py3/lib/python3.6/site-packages/django/db/backends/mysql/introspection.py

重新生成数据表结构和初始化数据文件

(py3) [root@localhost utils]# bash make_migrations.sh 
No changes detected
Operations to perform:
  Apply all migrations: acls, admin, applications, assets, audits, auth, authentication, captcha, common, contenttypes, django_cas_ng, django_celery_beat, jms_oidc_rp, ops, orgs, perms, sessions, settings, terminal, tickets, users
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0001_initial... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying users.0001_initial... OK
  Applying acls.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying users.0002_auto_20171225_1157_squashed_0019_auto_20190304_1459... OK
  Applying users.0020_auto_20190612_1825... OK
  Applying users.0021_auto_20190625_1104... OK
  Applying users.0022_auto_20190625_1105... OK
  Applying users.0023_auto_20190724_1525... OK
  Applying users.0024_auto_20191118_1612... OK
  Applying users.0025_auto_20200206_1216... OK
  Applying users.0026_auto_20200508_2105... OK
  Applying users.0027_auto_20200616_1503... OK
  Applying users.0028_auto_20200728_1805... OK
  Applying users.0029_auto_20200814_1650... OK
  Applying users.0030_auto_20200819_2041... OK
  Applying assets.0001_initial... OK
  Applying perms.0001_initial... OK
  Applying assets.0002_auto_20180105_1807_squashed_0009_auto_20180307_1212... OK
  Applying assets.0010_auto_20180307_1749_squashed_0019_auto_20180816_1320... OK
  Applying perms.0002_auto_20171228_0025_squashed_0009_auto_20180903_1132... OK
  Applying perms.0003_action... OK
  Applying perms.0004_assetpermission_actions... OK
  Applying assets.0020_auto_20180816_1652... OK
  Applying assets.0021_auto_20180903_1132... OK
  Applying assets.0022_auto_20181012_1717... OK
  Applying assets.0023_auto_20181016_1650... OK
  Applying assets.0024_auto_20181219_1614... OK
  Applying assets.0025_auto_20190221_1902... OK
  Applying assets.0026_auto_20190325_2035... OK
  Applying applications.0001_initial... OK
  Applying perms.0005_auto_20190521_1619... OK
  Applying perms.0006_auto_20190628_1921... OK
  Applying perms.0007_remove_assetpermission_actions... OK
  Applying perms.0008_auto_20190911_1907... OK
  Applying assets.0027_auto_20190521_1703... OK
  Applying assets.0028_protocol... OK
  Applying assets.0029_auto_20190522_1114... OK
  Applying assets.0030_auto_20190619_1135... OK
  Applying assets.0031_auto_20190621_1332... OK
  Applying assets.0032_auto_20190624_2108... OK
  Applying assets.0033_auto_20190624_2108... OK
  Applying assets.0034_auto_20190705_1348... OK
  Applying assets.0035_auto_20190711_2018... OK
  Applying assets.0036_auto_20190716_1535... OK
  Applying assets.0037_auto_20190724_2002... OK
  Applying assets.0038_auto_20190911_1634... OK
  Applying perms.0009_remoteapppermission_system_users... OK
  Applying assets.0039_authbook_is_active... OK
  Applying assets.0040_auto_20190917_2056... OK
  Applying assets.0041_gathereduser... OK
  Applying assets.0042_favoriteasset... OK
  Applying assets.0043_auto_20191114_1111... OK
  Applying assets.0044_platform... OK
  Applying assets.0045_auto_20191206_1607... OK
  Applying assets.0046_auto_20191218_1705... OK
  Applying applications.0002_remove_remoteapp_system_user... OK
  Applying applications.0003_auto_20191210_1659... OK
  Applying applications.0004_auto_20191218_1705... OK
  Applying perms.0010_auto_20191218_1705... OK
  Applying perms.0011_auto_20200721_1739... OK
  Applying assets.0047_assetuser... OK
  Applying assets.0048_auto_20191230_1512... OK
  Applying assets.0049_systemuser_sftp_root... OK
  Applying assets.0050_auto_20200711_1740... OK
  Applying assets.0051_auto_20200713_1143... OK
  Applying assets.0052_auto_20200715_1535... OK
  Applying assets.0053_auto_20200723_1232... OK
  Applying assets.0054_auto_20200807_1032... OK
  Applying applications.0005_k8sapp... OK
  Applying perms.0012_k8sapppermission... OK
  Applying assets.0055_auto_20200811_1845... OK
  Applying assets.0056_auto_20200904_1751... OK
  Applying assets.0057_fill_node_value_assets_amount_and_parent_key...

  ................................................................. OK
  Applying perms.0013_rebuildusertreetask_usergrantedmappingnode... OK
  Applying perms.0014_build_users_perm_tree... OK
  Applying perms.0015_auto_20200929_1728... OK
  Applying assets.0058_auto_20201023_1115... OK
  Applying assets.0059_auto_20201027_1905... OK
  Applying applications.0006_application... OK
  Applying perms.0016_applicationpermission... OK
  Applying perms.0017_auto_20210104_0435... OK
  Applying applications.0007_auto_20201119_1110... OK
  Applying applications.0008_auto_20210104_0435... OK
  Applying assets.0060_node_full_value...
- Start migrate node value if has /
- Start migrate node full value
 OK
  Applying assets.0061_auto_20201116_1757... OK
  Applying assets.0062_auto_20201117_1938... OK
  Applying assets.0063_migrate_default_node_key...
Check old default node `key=0 value=Default` not exists
 OK
  Applying assets.0064_auto_20201203_1100... OK
  Applying assets.0065_auto_20210121_1549... OK
  Applying assets.0066_auto_20210208_1802... OK
  Applying assets.0067_auto_20210311_1113... OK
  Applying assets.0068_auto_20210312_1455... OK
  Applying audits.0001_initial... OK
  Applying audits.0002_ftplog_org_id... OK
  Applying audits.0003_auto_20180816_1652... OK
  Applying audits.0004_operatelog_passwordchangelog_userloginlog... OK
  Applying audits.0005_auto_20190228_1715... OK
  Applying audits.0006_auto_20190726_1753... OK
  Applying audits.0007_auto_20191202_1010... OK
  Applying audits.0008_auto_20200508_2105... OK
  Applying audits.0009_auto_20200624_1654... OK
  Applying audits.0010_auto_20200811_1122... OK
  Applying audits.0011_userloginlog_backend... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying authentication.0001_initial... OK
  Applying authentication.0002_auto_20190729_1423... OK
  Applying authentication.0003_loginconfirmsetting... OK
  Applying authentication.0004_ssotoken... OK
  Applying captcha.0001_initial... OK
  Applying common.0001_initial... OK
  Applying common.0002_auto_20180111_1407... OK
  Applying common.0003_setting_category... OK
  Applying common.0004_setting_encrypted... OK
  Applying common.0005_auto_20190221_1902... OK
  Applying common.0006_auto_20190304_1515... OK
  Applying django_cas_ng.0001_initial... OK
  Applying django_celery_beat.0001_initial... OK
  Applying django_celery_beat.0002_auto_20161118_0346... OK
  Applying django_celery_beat.0003_auto_20161209_0049... OK
  Applying django_celery_beat.0004_auto_20170221_0000... OK
  Applying django_celery_beat.0005_add_solarschedule_events_choices... OK
  Applying django_celery_beat.0006_auto_20180322_0932... OK
  Applying django_celery_beat.0007_auto_20180521_0826... OK
  Applying django_celery_beat.0008_auto_20180914_1922... OK
  Applying django_celery_beat.0006_auto_20180210_1226... OK
  Applying django_celery_beat.0006_periodictask_priority... OK
  Applying django_celery_beat.0009_periodictask_headers... OK
  Applying django_celery_beat.0010_auto_20190429_0326... OK
  Applying django_celery_beat.0011_auto_20190508_0153... OK
  Applying django_celery_beat.0012_periodictask_expire_seconds... OK
  Applying jms_oidc_rp.0001_initial... OK
  Applying ops.0001_initial... OK
  Applying ops.0002_celerytask... OK
  Applying ops.0003_auto_20181207_1744... OK
  Applying ops.0004_adhoc_run_as... OK
  Applying ops.0005_auto_20181219_1807... OK
  Applying ops.0006_auto_20190318_1023... OK
  Applying ops.0007_auto_20190724_2002... OK
  Applying ops.0008_auto_20190919_2100... OK
  Applying ops.0009_auto_20191217_1713... OK
  Applying ops.0010_auto_20191217_1758... OK
  Applying ops.0011_auto_20200106_1534... OK
  Applying ops.0012_auto_20200108_1659... OK
  Applying ops.0013_auto_20200108_1706... OK
  Applying ops.0014_auto_20200108_1749... OK
  Applying ops.0015_auto_20200108_1809... OK
  Applying ops.0016_commandexecution_org_id... OK
  Applying ops.0017_auto_20200306_1747... OK
  Applying ops.0018_auto_20200509_1434... OK
  Applying ops.0019_adhocexecution_celery_task_id... OK
  Applying users.0031_auto_20201118_1801... OK
  Applying tickets.0001_initial... OK
  Applying tickets.0002_auto_20200728_1146... OK
  Applying tickets.0003_auto_20200804_1551... OK
  Applying tickets.0004_ticket_comment... OK
  Applying tickets.0005_ticket_meta_confirmed_system_users... OK
  Applying tickets.0006_auto_20201023_1628... OK
  Applying tickets.0007_auto_20201224_1821... OK
  Applying terminal.0001_initial... OK
  Applying terminal.0002_auto_20171228_0025_squashed_0009_auto_20180326_0957... OK
  Applying terminal.0010_auto_20180423_1140... OK
  Applying terminal.0011_auto_20180807_1116... OK
  Applying terminal.0012_auto_20180816_1652... OK
  Applying terminal.0013_auto_20181123_1113... OK
  Applying terminal.0014_auto_20181226_1441... OK
  Applying terminal.0015_auto_20190923_1529... OK
  Applying terminal.0016_commandstorage_replaystorage... OK
  Applying settings.0001_initial... OK
  Applying terminal.0017_auto_20191125_0931... OK
  Applying terminal.0018_auto_20191202_1010... OK
  Applying terminal.0019_auto_20191206_1000... OK
  Applying terminal.0020_auto_20191218_1721... OK
  Applying terminal.0021_auto_20200213_1316... OK
  Applying terminal.0022_session_is_success... OK
  Applying terminal.0023_command_risk_level... OK
  Applying terminal.0024_auto_20200715_1713... OK
  Applying terminal.0025_auto_20200810_1735... OK
  Applying terminal.0026_auto_20201027_1905... OK
  Applying terminal.0027_auto_20201102_1651... OK
  Applying terminal.0028_auto_20201110_1918... OK
  Applying terminal.0029_auto_20201116_1757... OK
  Applying terminal.0030_terminal_type... OK
  Applying terminal.0031_auto_20210113_1356... OK
  Applying perms.0018_auto_20210208_1515... OK
  Applying orgs.0001_initial... OK
  Applying orgs.0002_auto_20180903_1132... OK
  Applying orgs.0003_auto_20190916_1057... OK
  Applying orgs.0004_organizationmember... OK
  Applying orgs.0005_auto_20200721_1937... OK
  Applying orgs.0006_auto_20200721_1937... OK
  Applying orgs.0007_auto_20200728_1805... OK
  Applying orgs.0008_auto_20200819_2041... OK
  Applying orgs.0009_auto_20201023_1628... OK
  Applying orgs.0010_auto_20210219_1241...
Migrate model org id: Application done, use 0.93 ms
Migrate model org id: AdminUser done, use 0.7 ms
Migrate model org id: Asset done, use 0.71 ms
Migrate model org id: AuthBook done, use 0.71 ms
Migrate model org id: CommandFilter done, use 0.6 ms
Migrate model org id: CommandFilterRule done, use 0.56 ms
Migrate model org id: Domain done, use 0.62 ms
Migrate model org id: Gateway done, use 0.63 ms
Migrate model org id: GatheredUser done, use 0.6 ms
Migrate model org id: Label done, use 0.58 ms
Migrate model org id: Node done, use 0.68 ms
Migrate model org id: SystemUser done, use 0.61 ms
Migrate model org id: FTPLog done, use 0.67 ms
Migrate model org id: OperateLog done, use 0.58 ms
Migrate model org id: AdHoc done, use 0.61 ms
Migrate model org id: AdHocExecution done, use 0.5 ms
Migrate model org id: CommandExecution done, use 0.65 ms
Migrate model org id: Task done, use 0.72 ms
Migrate model org id: ApplicationPermission done, use 0.59 ms
Migrate model org id: AssetPermission done, use 0.59 ms
Migrate model org id: UserAssetGrantedTreeNodeRelation done, use 0.6 ms
Migrate model org id: Session done, use 0.48 ms
Migrate model org id: Command done, use 0.65 ms
Migrate model org id: Ticket done, use 0.74 ms
Migrate model org id: UserGroup done, use 0.8 ms
Will add users to default org: 1
Add users to default org: 1-1
done, use 5.95 ms
 OK
  Applying sessions.0001_initial... OK
  Applying terminal.0032_auto_20210302_1853... OK
  Applying terminal.0033_auto_20210324_1008... OK
  Applying tickets.0008_auto_20210311_1113... OK
No conflicts detected to merge.

11.运行 Jumpserver

(py3) [root@localhost jumpserver]# /opt/jumpserver/jms start all -d
gunicorn is running: 49031
flower is running: 49042
daphne is running: 49057
celery_ansible is running: 49071
celery_default is running: 49075
celery_node_tree is running: 49082
celery_check_asset_perm_expired is running: 49090
celery_heavy_tasks is running: 49106
beat is running: 49115

查看运行端口

(py3) [root@localhost jumpserver]# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      18106/redis-server  
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      49031/python3.6     
tcp        0      0 0.0.0.0:5555            0.0.0.0:*               LISTEN      49042/python3.6     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      15613/sshd          
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1228/master         
tcp        0      0 0.0.0.0:8070            0.0.0.0:*               LISTEN      49057/python3.6     
tcp6       0      0 :::5555                 :::*                    LISTEN      49042/python3.6     
tcp6       0      0 :::22                   :::*                    LISTEN      15613/sshd          
tcp6       0      0 ::1:25                  :::*                    LISTEN      1228/master         
tcp6       0      0 :::3306                 :::*                    LISTEN      18291/mysqld        
udp        0      0 0.0.0.0:56348           0.0.0.0:*                           806/dhclient        
udp        0      0 0.0.0.0:68              0.0.0.0:*                           806/dhclient        
udp        0      0 127.0.0.1:323           0.0.0.0:*                           652/chronyd         
udp6       0      0 :::27837                :::*                                806/dhclient        
udp6       0      0 ::1:323   

这个时候就可以访问了
IP:8080

还是不能使用

二.部署 KoKo 组件

主要功能
SSH
SFTP
web terminal
web文件管理

2.1获取安装包

(py3) [root@localhost jumpserver]# cd /opt/
(py3) [root@localhost opt]# wget https://github.com/jumpserver/koko/releases/download/v2.8.2/koko-v2.8.2-linux-amd64.tar.gz
(py3) [root@localhost opt]# tar -xf koko-v2.8.2-darwin-amd64.tar.gz
(py3) [root@localhost opt]# mv koko-v2.8.2-darwin-amd64 koko
(py3) [root@localhost opt]# chown -R root.root koko
(py3) [root@jumpserver opt]# cd koko

2.2修改配置文件
BOOTSTRAP_TOKEN 需要从 jumpserver/config.yml 里面获取, 保证一致

(py3) [root@jumpserver koko]# cp config_example.yml config.yml 
(py3) [root@localhost koko]# sed -i "s/BOOTSTRAP_TOKEN: <PleasgeChangeSameWithJumpserver>/BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN/g" /opt/koko/config.yml

2.3启动服务

(py3) [root@localhost koko]#/opt/koko/koko -d

2.4查看服务端口

(py3) [root@localhost koko]# netstat -lntup | grep koko
tcp6       0      0 :::2222                 :::*                    LISTEN      49767/./koko        
tcp6       0      0 :::5000                 :::*                    LISTEN      

三.部署 Guacamole 组件
Docker 部署 Guacamole 组件
安装DOCKER

(py3) [root@jumpserver ~]# cd /etc/yum.repos.d
(py3) [root@jumpserver yum.repos.d]# wget https://download.docker.com/linux/centos/docker-ce.repo
(py3) [root@jumpserver yum.repos.d]# yum install docker-ce -y
(py3) [root@jumpserver yum.repos.d]# systemctl start docker
(py3) [root@jumpserver yum.repos.d]# systemctl enable docker
(py3) [root@jumpserver ~]# docker run --name jms_guacamole -d \
-p 127.0.0.1:8081:8080 \
-e JUMPSERVER_KEY_DIR=/config/guacamole/key \
-e JUMPSERVER_SERVER=http://10.14.2.165:8080 \
-e BOOTSTRAP_TOKEN=ioyUIGxgeOl6iiMb \
-e GUACAMOLE_LOG_LEVEL=ERROR \
jumpserver/jms_guacamole:v2.8.2

这里需要注意BOOTSTRAP_TOKEN,根据实际情况填写
jms_guacamole:v2.8.2这个写的是jumpserver的版本号

四.下载 Lina 组件
Lina 是 JumpServer 的前端 UI 项目, 主要使用 Vue, Element UI 完成

(py3) [root@localhost config]# cd /opt/
(py3) [root@localhost opt]# wget https://github.com/jumpserver/lina/releases/download/v2.8.2/lina-v2.8.2.tar.gz
(py3) [root@localhost opt]# tar -xf lina-v2.8.2.tar.gz  
(py3) [root@localhost opt]# mv lina-v2.8.2 lina
(py3) [root@localhost opt]# useradd -s /sbin/nologin nginx
(py3) [root@localhost opt]# chown -R nginx.nginx lina

五.下载 Luna 组件

cd /opt 
 (py3) [root@localhost opt]# wget https://github.com/jumpserver/luna/releases/download/v2.8.2/luna-v2.8.2.tar.gz
(py3) [root@localhost opt]# tar -xf luna-v2.8.2.tar.gz 
(py3) [root@localhost opt]# mv luna-v2.5.3 luna
(py3) [root@localhost opt]# chown -R nginx.nginx luna

六.配置 Nginx 整合各组件

(py3) [root@localhost opt]# yum -y  install yum-utils
(py3) [root@jumpserver opt]# cat << EOF > /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
EOF

这里写好nginx repo文件之后需要打开文件检查一下,这样导入baseurl后面的两个$会没有。所以运行的时候会报错。

6.1数据缓存到本地

(py3) [root@localhost opt]# yum makecahe
(py3) [root@localhost opt]# yum -y install nginx
(py3) [root@localhost opt]# rm -rf /etc/nginx/conf.d/default.conf

6.2配置文件

(py3) [root@localhost opt]# vim /etc/nginx/conf.d/jumpserver.conf
server {
    listen 80;

    client_max_body_size 100m;  # 录像及文件上传大小限制

    location /ui/ {
        try_files $uri / /index.html;
        alias /opt/lina/;
    }

    location /luna/ {
        try_files $uri / /index.html;
        alias /opt/luna/;  # luna 路径, 如果修改安装目录, 此处需要修改
    }

    location /media/ {
        add_header Content-Encoding gzip;
        root /opt/jumpserver/data/;  # 录像位置, 如果修改安装目录, 此处需要修改
    }

    location /static/ {
        root /opt/jumpserver/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;
    }
}

6.3运行nginx

确保配置没有问题, 有问题请先解决

(py3) [root@localhost opt]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
(py3) [root@localhost opt]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
(py3) [root@localhost opt]# systemctl start nginx

6.4 开始使用 Jumpserver
检查应用是否已经正常运行

服务全部启动后, 访问 http://IP, 访问nginx代理的端口, 不要再通过8080端口访问
默认账号: admin 密码: admin

到这里就安装完成了。这是第三次修改。
还有很多不足的地方。

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rio520

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值