首页 > 编程语言 >部署python网站

部署python网站

时间:2024-04-05 23:45:06浏览次数:32  
标签:opt 61 python jumpserver 部署 master v2.12 网站 root

如何部署python的代码

既然是运维,运维,部署,维护

一个完整的产品、 前端开发工程师(前端代码 html,css,js) + 后端工程师(编写和数据库交互的逻辑代码)

前端、后端源码,打包,发给运维,部署到linux服务器上
1.如果是web产品,需要运维,部署如nginx这样的web服务器,提供域名,端口,防火墙,等允许网站在公网中的可访问。


2. 如果是控制汽车运行的智能算法系统,仅仅要求在linux上运行。基本都要提供基于http协议的一个访问服务。


3. 单纯的计算服务,在系统上,确保可以运行即可,不提供socket(ip:port)让客户端去访问。


不同的公司,使用的技术栈不一样,基本是根据企业的技术沉淀有关,以及招聘来的技术老大有关。决定你开发技术栈,架构,用什么形式的。

早期的,老旧的技术栈,单体应用, 前后端不分离开发模式。(前端、后端代码,糅杂在一起,后端代码,也包括前端代码)

后端代码文件,里面还能看到html这样的标签。。。

具体部署形式,比较简单,整个代码,跑起来,甩给nginx去反向代理即可。,如,经典的wordpress,用的是php后端。

说到这里,听懂扣1.
如果你去其他公司,如360这样公司,大量使用php,那么你的日常维护,部署工作,基本是围绕着LNMP来打转。。



-------------------------
如果你是去了一些新型的互联网公司,某单位,技术栈,用的都是比较新的,复杂的。
那么必然会接触到 ,前后端分离开发模式。具体形式如图


看主流,常见的部署技术栈



php + html + css + js  = wordpress


python + vue  = jumpserver


很方便的看到网站,是基于什么技术开发的


现在大多数网站,前端都是基于vue开发

后端,编程语言选择性很多


数据库,基本是mysql

javascript框架,就知道,这是前端的服务器框架   


python框架,就知道后端用的是python  


bilibili.com

前端 服务器是  运行着 vue.js进程的服务器


后端服务器  是运行着   golang 进程的服务器


数据库服务器,运行着mysql进程的服务器

理解扣 1


部署堡垒机jumpserver(python+vue+golang)

生产级别,较为复杂的项目部署。

再次体验难度加大的部署,前后端不分离的wordpress你已经会了。前后端分离的如何部署。

独立的前端vue项目部署


独立的python项目部署


独立的mysql、redis数据库

独立的golang项目


运维开发,就是去写python,维护jumpserver源码

招运维,就是去给客户,部署jumpserver,以及运行过程中,出现问题,运维做技术支持,解决客户的问题。。

jumpserver基于ansible远程执行命令

项目架构图(组件版本要求)

这些每一个组件,当你部署好,运行好进程后, 需要整合起来,整合为一个可访问的统一入口

这个整合的和事老是,是nginx。

请看nginx统一架构图,也是用户访问jumpserver的核心请求逻辑图。

完整部署笔记

大项目,都是一个工程化开发结构,还是狠复杂的。

服务器准备

准备好你的master-61机器,至少给它4G内存,因为 这里部署形式,是让前端,和后端在一台机器上,先不拆了。

如果是你的官网应用,基于前后端分离开发模式,一定要分开多台机器的

master-61 运行堡垒机所有组件,5大组件

db-51  部署数据库mysql,和redis






但是拆开部署后,需要前端,后端工程师的配合。远程连接,需要设置一定的配置参数,协议,否则导致无法连接。

mysql、redis(db-51,数据库机器)

重要,友情提醒

友情提示:mysql数据库密码请使用 "字母+数字"

可以和超哥配置的一样

用"yuchao666"

数据库密码连接,读取的是字符串类型

如果你的数据库密码是 "123456"这样的纯数字,

在config.yml里面填入的DB_PASSWORD: "123456" 需要像这样,添加引号,否则报错。

1. 密码,复杂一点,数字+字母

2, 给大家准备的堡垒机 v2.12版本,要求mysql版本大于等于5.7


# 具体部署笔记
yum -y localinstall http://mirrors.ustc.edu.cn/mysql-repo/mysql57-community-release-el7.rpm

sed  -i '/gpgcheck=1/c gpgcheck=0' /etc/yum.repos.d/mysql-community*

yum clean all
yum install -y mysql-community-server

初始化mysql数据
shell命令,修改mysql的启动脚本
mysql5.7之后,默认初始化启动,会随机给你生成密码,你得去配置文件中找这个随机密码。
用如下命令,修改配置文件,可以让他默认别生成随机密码。

if [ ! "$(cat /usr/bin/mysqld_pre_systemd | grep -v ^\# | grep initialize-insecure )" ]; then
    sed -i "s@--initialize @--initialize-insecure @g" /usr/bin/mysqld_pre_systemd
fi

启动
systemctl enable mysqld
systemctl start mysqld


检查进程,端口
[root@db-51 ~]#
[root@db-51 ~]#netstat -tunlp|grep mysql
tcp6       0      0 :::3306                 :::*                    LISTEN      2450/mysqld         
[root@db-51 ~]#
[root@db-51 ~]#
[root@db-51 ~]#
[root@db-51 ~]#ps -ef|grep mysql
mysql      2450      1  1 11:32 ?        00:00:00 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
root       2484   1659  0 11:33 pts/0    00:00:00 grep --color=auto mysql


尝试连接mysql,然后设置一个远程连接的用户,因为master-61机器需要用


[root@db-51 ~]#mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.38 MySQL Community Server (GPL)

Copyright (c) 2000, 2022, 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> 
mysql> 
# 创建数据库,用于堡垒机写入数据表信息
mysql> create database jumpserver default charset 'utf8';
Query OK, 1 row affected (0.00 sec)

mysql> 
mysql> 
# 设置弱密码参数,默认密码难度限制较大,数字,字母,特殊符号。
mysql> set global validate_password_policy=LOW;
Query OK, 0 rows affected (0.00 sec)

mysql> 
mysql> 
# 创建用户,jumpserver 以及密码,待会用于远程连接

mysql> create user 'jumpserver'@'%' identified by 'linux0224';
Query OK, 0 rows affected (0.00 sec)

# 用户授予远程连接权限

mysql> grant all on jumpserver.* to 'jumpserver'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> 
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)




到这里,数据库mysql5.7就配置完毕了,看懂6




redis内存型数据库

mysql 磁盘性数据库存储网站的 冷数据,读取不频繁的



redis 数据存内存里。存储网站热数据,如用户信息等,用户的session身份保持信息等。 
组件连接的信息等

要求版本大于6.0

编译安装,准备编译环境,以及redis源码

yum -y install epel-release wget make gcc-c++

# 6.2.4版本
cd /opt ; wget https://download.redis.io/releases/redis-6.2.4.tar.gz
[root@db-51 /opt]#tar -xf redis-6.2.4.tar.gz 

进入源代码目录,编译安装即可,注意可以指定安装的路径参数

cd redis-6.2.4
make && make install PREFIX=/usr/local/redis


检查你的redis安装情况
[root@db-51 /opt/redis-6.2.4]#cd /usr/local/redis/
[root@db-51 /usr/local/redis]#ls
bin
[root@db-51 /usr/local/redis]#ls bin
redis-benchmark  redis-check-aof  redis-check-rdb  redis-cli  redis-sentinel  redis-server

需要你自己添加PATH变量,方可直接使用。


[root@db-51 /opt/redis-6.2.4]#tail -2 /etc/profile

export PATH=$PATH:/usr/local/redis/bin/






修改配置文件的参数,设定redis数据库的连接信息,以及密码

# 拷贝配置文件
cp redis.conf /etc/redis.conf
# 允许redis在任意地址可访问
sed -i "s/bind 127.0.0.1/bind 0.0.0.0/g" /etc/redis.conf

# 让redis以守护进程,在后台运行
sed -i "s/daemonize no/daemonize yes/g" /etc/redis.conf

# 设置redis的内存性参数,内存缓存算法
sed -i "561i maxmemory-policy allkeys-lru" /etc/redis.conf

# 设置redis的连接密码requirepass设置密码的,后面写密码
sed -i "481i requirepass linux0224" /etc/redis.conf


这个配置文件能理解扣 6


验证你的配置,是否生效
grep -Ev '^#|^$' /etc/redis.conf 

验证你的修改操作

[root@db-51 /opt/redis-6.2.4]#grep -Ev '^#|^$' /etc/redis.conf  | grep -E '(bind|require|daemonize)'
bind 0.0.0.0 -::1
daemonize yes
requirepass linux0224

由于是编译安装,默认没有systemctl的管理脚本,可以自己写一个即可

cat >/etc/systemd/system/redis.service <<EOF
[Unit]
Description=Redis persistent key-value database
After=network.target
After=network-online.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/var/run/redis_6379.pid
ExecStart=/usr/local/redis/bin/redis-server /etc/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID

[Install]
WantedBy=multi-user.target
EOF



可以用systemctl去管理了

# 启动redis
systemctl enable redis
systemctl start redis



确保redis运行中
[root@db-51 /opt/redis-6.2.4]#ps -ef|grep redis


root       7009      1  0 11:50 ?        00:00:00 /usr/local/redis/bin/redis-server 0.0.0.0:6379
root       7015   1659  0 11:50 pts/0    00:00:00 grep --color=auto redis
[root@db-51 /opt/redis-6.2.4]#
[root@db-51 /opt/redis-6.2.4]#
[root@db-51 /opt/redis-6.2.4]#
[root@db-51 /opt/redis-6.2.4]#
[root@db-51 /opt/redis-6.2.4]#netstat -tunlp|grep redis
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      7009/redis-server 0 
tcp6       0      0 ::1:6379                :::*                    LISTEN      7009/redis-server 0 




本地连接redis测试,查看密码是否好用


[root@db-51 /opt/redis-6.2.4]#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> auth linux0224
OK
127.0.0.1:6379> 
127.0.0.1:6379> 
127.0.0.1:6379> ping
PONG
127.0.0.1:6379> 
127.0.0.1:6379> exit
[root@db-51 /opt/redis-6.2.4]#
[root@db-51 /opt/redis-6.2.4]#
[root@db-51 /opt/redis-6.2.4]## master-61去远程连接redis
[root@db-51 /opt/redis-6.2.4]#
[root@db-51 /opt/redis-6.2.4]#redis-cli  -h 172.16.1.51
172.16.1.51:6379> 
172.16.1.51:6379> 
172.16.1.51:6379> ping
(error) NOAUTH Authentication required.
172.16.1.51:6379> 
172.16.1.51:6379> 
172.16.1.51:6379> auth linunx0224
(error) WRONGPASS invalid username-password pair or user is disabled.
172.16.1.51:6379> 
172.16.1.51:6379> 
172.16.1.51:6379> auth linux0224
OK
172.16.1.51:6379> 
172.16.1.51:6379> ping
PONG
172.16.1.51:6379> exit
[root@db-51 /opt/redis-6.2.4]#
[root@db-51 /opt/redis-6.2.4]## 本地连接,远程连接,密码认证,ping pong通了,看懂扣  6
[root@db-51 /opt/redis-6.2.4]#
[root@db-51 /opt/redis-6.2.4]#






core(核心堡垒机后端服务)(内存至少6G,其他服务起不来)

光jumpserver核心core程序,至少用到2G内存。

基础环境安装

先确保环境正确,基础环境部署。
先恢复master61机器,注意,做好快照。

从端口来看,这个机器是干净的。

[root@master-61 ~]#netstat -tunlp
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      893/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1151/master         
tcp6       0      0 :::22                   :::*                    LISTEN      893/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      1151/master         
[root@master-61 ~]#


检查防火墙

yum源,基础环境部署
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

# 一是,安装基础软件
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

2.第一个里程:需要部署跳板机依赖软件,重要

# 二是,安装python程序,必须的一些基础依赖。

yum -y install git python-pip  gcc automake autoconf python-devel vim sshpass lrzsz readline-devel  zlib zlib-devel openssl openssl-devel


设置master-61机器的系统编码环境,支持中文
localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8
# 设置操作系统所有的语言环境,改为中文utf8编码
export LC_ALL=zh_CN.UTF-8

查看编码情况
使用locale命令,查看系统本地所有编码的变量
需要你切换系统的中英文支持。

[root@master-61 ~]#locale
LANG=en_US.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=zh_CN.UTF-8






# 这是一个python3开发的源代码,jumpserver,因此需要配置python3环境,咱们是编译安装,因为有版本要求。
# 编译安装,python是可以处理ssl加密,因此你的底层需要安装openssl基础环境


# 下载安装python3源代码,部署python这一块,会需要用到一些python的环境知识,认真听,稍微有点难度。


# 1. 下载jumpserver后端核心源码

mkdir /opt/jumpserver-v2.12.0
wget -O /opt/jumpserver-v2.12.0.tar.gz https://github.com/jumpserver/jumpserver/archive/refs/tags/v2.12.0.tar.gz


# 2. 解压缩源代码,安装后端源码,运行所需的linux环境依赖,rpm包,人家给提供好了
# --strip-components 1 参数意思是,
cd /opt ; tar -xf jumpserver-v2.12.0.tar.gz -C /opt/jumpserver-v2.12.0 --strip-components 1
---------------------------------------------------------------------------------
# 3.检查解压的源码(这就是python的web框架,django的一堆源代码,都是py文件)
# 其实就是一堆py代码,和sh脚本,这个源码是飞致云的运维开发,写的程序
#  纯开发,纯后端开发,是写业务代码,如电商后台,员工管理系统后台,医疗系统后台
#    管理的纯业务的员工数据,商业数据。
------------------------------------------------------------------------
#  运维开发,写代码,写平台,数据库管理的是机器的信息,如资产管理平台, 代码发布平台,容器管理平台
# ansible自动化调度平台。运维开发,通过运维技术+开发技术,管理服务器,等资产信息。
# 能大致理解扣 1
# 
---------------------------------------------------------------------------------

[root@master-61 /opt/jumpserver-v2.12.0]#ls
apps                data        docs           jms      logs          README.md     run_server.py  utils
config_example.yml  Dockerfile  entrypoint.sh  LICENSE  README_EN.md  requirements  tmp            Vagrantfile


# 3. jumpserver源码,给你提供了一堆rpm包,需要你去安装方可运行,
yum install -y $(cat /opt/jumpserver-v2.12.0/requirements/rpm_requirements.txt)


python3.6开发环境安装

当你以后去维护python的产品

目前市面上有2个版本

1. python2的版本,以及不再维护了,但是有老企业在用(linux系统默认很多工具用的是python2,如yum工具)
[root@master-61 /opt/jumpserver-v2.12.0]#python -V
Python 2.7.5


2. python3的版本,主流版本

3. 要注意的是,同时保留python2,和python3,不要乱改。
添加到PATH,让2个版本共存即可。


4. 先安装python3的编译环境,注意整理python的包,是不带3这个数字的!!
yum install gcc patch libffi-devel python-devel  zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y

5. 下载python3源码,编译且安装
# 使用自建的yum仓库即可。
# 确保你的编译过程,没有errorr,看好日志
# python语言是由C语言开发而来。。。它也叫做Cpython。。没想到吧。。

cd /opt && wget https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz
tar -zxf Python-3.6.9.tgz
cd Python-3.6.9/
./configure --prefix=/opt/python369/
make && make install

6.看到如下日志,你的python3才是正常的,看懂扣 6

Collecting setuptools
Collecting pip
Installing collected packages: setuptools, pip
Successfully installed pip-18.1 setuptools-40.6.2

检查python3的环境如下,添加到PATH变量中

[root@master-61 /opt/python369/bin]#tail -2 /etc/profile
# 添加python3的PATH
export PATH=$PATH:/opt/python369/bin
[root@master-61 /opt/python369/bin]#source /etc/profile


7.检查,确保如下2个命令可以正确执行,你的python3环境才是对的

# 这个是python3的解释器,用于执行*.py代码的。
[root@master-61 ~]#python3 -V
Python 3.6.9
[root@master-61 ~]#
[root@master-61 ~]#


# 这是管理python程序的模块依赖包的
# 这么去理解
#    yum是给centos安装rpm包依赖的。
#    pip3命令是给python3,给python项目,安装项目所需的依赖的。
# 它俩是2个 东西


[root@master-61 ~]#pip3 -V
pip 18.1 from /opt/python369/lib/python3.6/site-packages/pip (python 3.6)



能看懂确python3安装成功的,以及这个pip3解释的,扣个6




补充:设置pip3的下载源,豆瓣源,加速模块下载


# 在用户家目录下,生成一个全局的 .pip.conf配置文件而已。
# 这里能看明白什么意思的,扣 1,不懂 2
# 就是生成一个文件而已。然后pip3 install  xxx模块的时候,会使用如下这个地址
# 就和你配置yum源一个意思。。。

# 创建文件夹
mkdir ~/.pip

# 创建配置文件
(venv_py3) [root@master-61 ~]#cat ~/.pip/pip.conf 
[global]
index-url=https://pypi.douban.com/simple

python3的虚拟环境安装(虚拟环境原理就是在修改PATH变量)





当前机器上,存在一个python3的环境,绝对路径在
[root@master-61 ~]#which python3
/opt/python369/bin/python3


# 具体的演示如下



1. 创建虚拟环境(其实就是又下载了一个python3解释器,而已,你理解是本体解释器的一个分身即可。)

# 基于python3命令 指定用venv这个模块功能,下载安装一个解释器路径到   /opt/venv_py3

cd /opt && python3 -m venv /opt/venv_py3


2. 演示,物理解释器的环境信息,以及虚拟环境的解释器信息

------------------------------------------------------------
查看【物理解释器】本体的模块信息
[root@master-61 /opt]#which pip3
/opt/python369/bin/pip3

查看模块列表
[root@master-61 /opt]#pip3 list
Package    Version
---------- -------
pip        18.1   
setuptools 40.6.2 

随便装一个模块,再查看模块列表

[root@master-61 /opt]#pip3 install requests

¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
[root@master-61 /opt]#pip3 list
Package            Version    
------------------ -----------
certifi            2022.5.18.1
charset-normalizer 2.0.12     
idna               3.3        
pip                18.1       
requests           2.27.1     
setuptools         40.6.2     
urllib3            1.26.9    
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
------------------------------------------------------------

3. 激活虚拟环境,安装jumpserver后端所需的python依赖
[root@master-61 /opt]#source /opt/venv_py3/bin/activate
(venv_py3) [root@master-61 /opt]#
(venv_py3) [root@master-61 /opt]#
(venv_py3) [root@master-61 /opt]#
(venv_py3) [root@master-61 /opt]#
(venv_py3) [root@master-61 /opt]#
(venv_py3) [root@master-61 /opt]#
(venv_py3) [root@master-61 /opt]#
(venv_py3) [root@master-61 /opt]#
(venv_py3) [root@master-61 /opt]#which pip3
/opt/venv_py3/bin/pip3
(venv_py3) [root@master-61 /opt]#

查看当前python3解释器的模块列表
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥
(venv_py3) [root@master-61 /opt]#pip3 list
Package    Version
---------- -------
pip        18.1   
setuptools 40.6.2 
¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥

能看明白,此时基于虚拟环境,管理了一个新的解释器模块依赖
和物理解释器的模块信息,是分开的,


说到这里,就是已经装好了一个虚拟环境

/opt/venv_py3/ 这个路径的解释器


为什么激活虚拟环境后,解释器用which查看的路径就变了。

很简单,因为它帮你修改了PATH
PATH有加载顺序,从左到右。

1. 查看虚拟环境下的PATH信息
(venv_py3) [root@master-61 /opt]#echo $PATH
/opt/venv_py3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/python369/bin
(venv_py3) [root@master-61 /opt]#



2. 退出虚拟环境后再看

(venv_py3) [root@master-61 /opt]#deactivate 
[root@master-61 /opt]#
[root@master-61 /opt]#
[root@master-61 /opt]#echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/python369/bin
[root@master-61 /opt]#
[root@master-61 /opt]#which pip3
/opt/python369/bin/pip3




安装jumpserver后端所需的python依赖

1.确保要激活虚拟环境

2. 找到项目中的,项目依赖文件,这是每一个python开发者,必然会设置的一个文件,方便运维去部署这些依赖模块。
(venv_py3) [root@master-61 /opt/jumpserver-v2.12.0/requirements]#ls /opt/jumpserver-v2.12.0/requirements/requirements.txt 
/opt/jumpserver-v2.12.0/requirements/requirements.txt

先查看当前的虚拟环境下的依赖列表
(venv_py3) [root@master-61 ~]#pip3 list
Package    Version
---------- -------
pip        18.1   
setuptools 40.6.2 
You are using pip version 18.1, however version 21.3.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.




3. 安装这些模块依赖(注意,使用豆瓣源去下载,否则让你怀疑人生)
(venv_py3) [root@master-61 ~]#pip3 install -r /opt/jumpserver-v2.12.0/requirements/requirements.txt

这个python模块,要么全部成功,要么全部会失败。
注意别报错即可。

别出现error,否则pip3命令会立即终止的,然后看报错,解决报错即可。



4. 查看模块依赖(依然是虚拟环境下的模块依赖)
差不多有198行模块
(venv_py3) [root@master-61 ~]#pip3 list |wc -l
198



5. 可以退出虚拟环境,对比着物理环境理解下,看下区别。



再次确认,物理环境,和虚拟环境的区别

解决pip版本太低的问题,升级即可

(venv_py3) [root@master-61 ~]#pip install --upgrade pip
Looking in indexes: https://pypi.douban.com/simple
Collecting pip
  Downloading https://pypi.doubanio.com/packages/a4/6d/6463d49a933f547439d6b5b98b46af8742cc03ae83543e4d7688c2420f8b/pip-21.3.1-py3-none-any.whl (1.7MB)
    100% |████████████████████████████████| 1.7MB 26.9MB/s 
Installing collected packages: pip
  Found existing installation: pip 18.1
    Uninstalling pip-18.1:
      Successfully uninstalled pip-18.1
Successfully installed pip-21.3.1


下一步,python3环境好了之后,可以运行项目了

修改jumpserver代码的配置文件

1.  提示,你在部署core服务,后端python服务的时候,确保全程激活虚拟环境

2.拷贝配置文件,修改配置文件如下
(venv_py3) [root@master-61 /opt/jumpserver-v2.12.0]#cp config_example.yml config.yml
(venv_py3) [root@master-61 /opt/jumpserver-v2.12.0]#
(venv_py3) [root@master-61 /opt/jumpserver-v2.12.0]#
(venv_py3) [root@master-61 /opt/jumpserver-v2.12.0]#ls config.yml 
config.yml



3. 修改如下
jumpserver整个架构的所有组件,相互之间的通信,都是基于一个密钥来加密的。
基于如下命令,生成2个密钥。

先打印这2个变量看有没有
echo $SECRET_KEY
echo $BOOTSTRAP_TOKEN
 


# 生成如下2个变量的随机值,待会配置文件得用

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

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



4. 修改jumpserver后台的配置文件【请注意,这个文件是yaml语法,空格语法很严格】
大家,照着我这个修改即可,


SECRET_KEY: "$SECRET_KEY"
BOOTSTRAP_TOKEN: "$BOOTSTRAP_TOKEN"
DEBUG: true                   # 开发建议打开 DEBUG, 生产环境应该关闭
LOG_LEVEL: DEBUG              # 开发建议设置 DEBUG, 生产环境推荐使用 ERROR
SESSION_EXPIRE_AT_BROWSER_CLOSE: true  # 浏览器关闭 session 过期
DB_ENGINE: mysql	# 数据库引擎是mysql
DB_HOST: 10.0.0.51       # 自行配置 数据库相关
DB_PORT: 3306		# 数据库端口
DB_USER: jumpserver		# 数据库远程连接的用户
DB_PASSWORD: linux0224		# mysql密码
DB_NAME: jumpserver			# mysql存储的库名
HTTP_BIND_HOST: 0.0.0.0  	# core服务运行的地址
HTTP_LISTEN_PORT: 8080		# core服务运行的端口
WS_LISTEN_PORT: 8070		# 后端websocket协议的端口
REDIS_HOST: 10.0.0.51       # 自行配置 Redis 相关
REDIS_PORT: 6379
REDIS_PASSWORD: linux0224	 # 自定义的redis密码


因此最终的配置如下
(venv_py3) [root@master-61 /opt/jumpserver-v2.12.0]#cat config.yml 
SECRET_KEY: "$SECRET_KEY"
BOOTSTRAP_TOKEN: "$BOOTSTRAP_TOKEN"
DEBUG: true
LOG_LEVEL: DEBUG
SESSION_EXPIRE_AT_BROWSER_CLOSE: true
DB_ENGINE: mysql
DB_HOST: 10.0.0.51
DB_PORT: 3306
DB_USER: jumpserver
DB_PASSWORD: linux0224
DB_NAME: jumpserver
HTTP_BIND_HOST: 0.0.0.0
HTTP_LISTEN_PORT: 8080
WS_LISTEN_PORT: 8070
REDIS_HOST: 10.0.0.51
REDIS_PORT: 6379
REDIS_PASSWORD: linux0224







数据库迁移

通过python3命令,生成jumpserver的核心数据库,数据表内容,会写入到mysql

都是python开发的知识。。。运维会部署也得会。。


(venv_py3) [root@master-61 /opt/jumpserver-v2.12.0/apps]#python3  ./manage.py makemigrations


此步骤,会写入mysql数据库的jumpserver 库中的数据表
发现生成了97张数据表
看懂扣3

(venv_py3) [root@master-61 /opt/jumpserver-v2.12.0/apps]#python3  ./manage.py migrate 



有了数据之后,可以启动后端了

进入到jumpserver源码目录中,它提供好了启动脚本。


一键执行python的启动服务脚本,运行后端所有程序
并且是后台运行,不会占用你的窗口,xshell关了,也不会断开。



(venv_py3) [root@master-61 /opt/jumpserver-v2.12.0]#
(venv_py3) [root@master-61 /opt/jumpserver-v2.12.0]#ls /opt/jumpserver-v2.12.0/jms 
/opt/jumpserver-v2.12.0/jms
(venv_py3) [root@master-61 /opt/jumpserver-v2.12.0]#
(venv_py3) [root@master-61 /opt/jumpserver-v2.12.0]#
(venv_py3) [root@master-61 /opt/jumpserver-v2.12.0]#./jms start all -d 


检查所有的组件,状态,确保有进程id号,才是对的。
(venv_py3) [root@master-61 /opt/jumpserver-v2.12.0]#./jms status
gunicorn is running: 2977
flower is running: 2992
daphne is running: 3152
celery_ansible is running: 3347
celery_default is running: 3448
beat is running: 3587

确保这6个进程的pid,都存在,即正确。

以及,查看该进程的 端口,注意是端口。

(venv_py3) [root@master-61 /opt/jumpserver-v2.12.0]#netstat -tunlp
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:8070            0.0.0.0:*               LISTEN      3152/python3        
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      2977/python3        
tcp        0      0 0.0.0.0:5555            0.0.0.0:*               LISTEN      2992/python3        
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      958/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1127/master         
tcp6       0      0 :::5555                 :::*                    LISTEN      2992/python3        
tcp6       0      0 :::22                   :::*                    LISTEN      958/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      1127/master  

直接告诉大家,后端core服务,运行的http端口是 8080

因此你可以试着访问试试。





首次访问,登录,修改密码

首次是可以访问,它会让你修改密码,下一次,人家代码中限制,你就没法直接访问后台了,。必须通过前端lina服务器,才能访问到后台。

admin

admin

首次修改密码为,chaoge666


部署到这里,可以退出虚拟环境

记住,虚拟环境影响的只是python的PATH。



(venv_py3) [root@master-61 /opt/jumpserver-v2.12.0]#deactivate 
[root@master-61 /opt/jumpserver-v2.12.0]#


lina前端(可视化前端页面)


部署前端lina全流程

1. 下载前端源代码,下载源码,解压缩。

# 这里由于网络问题,我是去windows下载,能看懂扣 6,会这么玩的扣 6


mkdir -p /opt/lina-v2.12.0
wget -O /opt/lina-v2.12.0.tar.gz https://github.com/jumpserver/lina/archive/refs/tags/v2.12.0.tar.gz
cd /opt/lina-v2.12.0
tar -xf lina-v2.12.0.tar.gz -C /opt/lina-v2.12.0 --strip-components 1

# 注意,源代码放入到指定的目录中
# 确保代码如下即可。
[root@master-61 /opt]#ls /opt/lina-v2.12.0
alias.config.js  dump.rdb        mock               public     utils
babel.config.js  jest.config.js  nginx.conf         README.md  vue.config.js
build            jsconfig.json   package.json       src        yarn.lock
Dockerfile       LICENSE         postcss.config.js  tests




2. 部署nodejs  (学到现在,你已经部署了 php编程语言,python语言,nodejs前端开发的语言)
# node.js和python,php一样,是一个编程语言,专门运行*.js程序的。

# 部署php后端是 2个步骤  一是下载*.php源码,安装php7解释器执行这个代码
# 部署 python后端 2个步骤  一是下载*.py,编译python3去执行代码

# 部署nodejs是因为,前端源代码是一堆*.js文件,需要用node.js解释器去运行

# 程序员大牛,必备技能ctrl +c  ctrl +v   


mkdir -p /opt/node-v10.24.1 && cd /opt/node-v10.24.1 && wget https://nodejs.org/dist/v10.24.1/node-v10.24.1-linux-x64.tar.gz

# 这里下载,解压缩的node.js解释器,是一个二进制的命令,无须安装了,配置PATH即可使用

tar -xf node-v10.24.1-linux-x64.tar.gz -C /opt/node-v10.24.1  --strip-components 1

tail -1 /etc/profile

export PATH=$PATH:/opt/python369/bin/:/opt/node-v10.24.1/bin



# 你最终,确保node.js的运行目录如下即可。
[root@master-61 /opt/node-v10.24.1/bin]#ls /opt/node-v10.24.1/bin
node  npm  npx


# 配置PATH,确保和我一样
[root@master-61 /opt/node-v10.24.1/bin]#tail -2 /etc/profile
# 添加python3的PATH
export PATH=$PATH:/opt/python369/bin:/opt/node-v10.24.1/bin
[root@master-61 /opt/node-v10.24.1/bin]#


[root@master-61 /opt/node-v10.24.1/bin]#node -v
v10.24.1
[root@master-61 /opt/node-v10.24.1/bin]#
[root@master-61 /opt/node-v10.24.1/bin]#
[root@master-61 /opt/node-v10.24.1/bin]#npm -v
6.14.12

[root@master-61 /opt/node-v10.24.1/bin]## 确保node解释器可以用,以及npm命令可以用
[root@master-61 /opt/node-v10.24.1/bin]#
[root@master-61 /opt/node-v10.24.1/bin]##npm 命令又是管理 node.js项目的依赖工具,装前端依赖模块的。。



到这里,前端的node.js开发环境,就已经部署好了

能理解扣  6


配置前端npm的下载加速源

执行如下命令即可

npm config set registry https://registry.npm.taobao.org
npm config get registry

理解npm和node的关系(对比pip和python的关系)

安装前端源代码的依赖

# 1.配置加速源
[root@master-61 /opt/lina-v2.12.0]#
[root@master-61 /opt/lina-v2.12.0]#cd /opt/lina-v2.12.0/

配置淘宝的下载加速源

[root@master-61 /opt/lina-v2.12.0]#npm config set registry https://registry.npm.taobao.org
[root@master-61 /opt/lina-v2.12.0]#npm config get registry
https://registry.npm.taobao.org/



# 2.进入源代码目录,执行命令,安装即可、
先安装yarn工具,为了安装前端vue的依赖,跟着操作就行,都是前端开发的知识。
公司里会有前端工程师,配合你,给你文档,你跟着操作就行。

[root@master-61 /opt/lina-v2.12.0]#npm install -g yarn


# 3.通过如下命令,安装前端的依赖
[root@master-61 /opt/lina-v2.12.0]#yarn install


# 4.你只需要确保,能理解这些步骤,是在部署前端代码,下载前端的项目依赖,确保命令正确执行就OK
只要别跟着笔记操作,一个命令8个报错就行。。。。

到这里的3个步骤,能理解扣 6

# 装前端依赖,装十次,得报错8次,没办法,和前端工程协同工作,报错直接发给他,让他看。


# 多玩几次,就熟练了,

# 一般的错误,你作为一个高级运维,你还是得自己先看一看报错,试着解决,
# 疑难杂症,得让前端配合你。。

# 生产环境下的部署,需要有前端、后端的接口、参数、调试配合,如果没有自动化的话,一天时间,能跑起来。

剩下的复杂的接口,其他程序,数据能调通,慢慢来了。。


最终,确保如下安装结果,才是对的。

[root@master-61 /opt/lina-v2.12.0]#
[root@master-61 /opt/lina-v2.12.0]#yarn install
yarn install v1.22.19
[1/5] Validating package.json...
[2/5] Resolving packages...
[3/5] Fetching packages...
[############################################-----------------------------------------------------------------[############################################-----------------------------------------------------------------[############################################-----------------------------------------------------------------[#############################################---------------------------------------------------------------
warning [email protected]: Invalid bin field for "url-loader".
[#########################################################################-----------------------] 1284/1681
[4/5] Linking dependencies...
warning " > [email protected]" has unmet peer dependency "webpack@^2.0.0 || ^3.0.0 || ^4.0.0".
warning " > [email protected]" has unmet peer dependency "webpack@^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0".
warning " > [email protected]" has unmet peer dependency "webpack@^4.0.0 || ^5.0.0".
warning " > [email protected]" has unmet peer dependency "webpack@^3.0.0 || ^4.0.0".
warning " > [email protected]" has unmet peer dependency "webpack@^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0".
[5/5] Building fresh packages...
success Saved lockfile.
Done in 259.36s.

修改前端的js文件,设置一些运行参数

[root@master-61 /opt/lina-v2.12.0]#cat .env.development 
# 全局环境变量 请勿随意改动
ENV = 'development'



# base api
VUE_APP_BASE_API = ''
VUE_APP_PUBLIC_PATH = '/ui/'

# vue-cli uses the VUE_CLI_BABEL_TRANSPILE_MODULES environment variable,
# to control whether the babel-plugin-dynamic-import-node plugin is enabled.
# It only does one thing by converting all import() to require().
# This configuration can significantly increase the speed of hot updates,
# when you have a large number of pages.
# Detail:  https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/babel-preset-app/index.js

VUE_CLI_BABEL_TRANSPILE_MODULES = true

# External auth
VUE_APP_LOGIN_PATH = '/core/auth/login/'
VUE_APP_LOGOUT_PATH = '/core/auth/logout/'


# Dev server for core proxy
VUE_APP_CORE_HOST = 'http://localhost:8080'
VUE_APP_ENV = 'development'


# 我们这里是测试,前端的lina项目和后端的core项目运行在同一台机器,因此 这里用
# 前端后端在一起的用法。
# 还记得,我们刚才去访问 core的堡垒机登录页面,确认后端端口是8080

到这里能理解扣 1

所这里啥也没改。



运行lina前端项目

执行如下命令,让lina在后台运行即可。

[root@master-61 /opt/lina-v2.12.0]#nohup yarn serve &  


[root@master-61 /opt/lina-v2.12.0]## 确保如下端口存在,前端的lina进程就已经运行了,前端端口是 9528
[root@master-61 /opt/lina-v2.12.0]#
[root@master-61 /opt/lina-v2.12.0]#
[root@master-61 /opt/lina-v2.12.0]#netstat -tunlp|grep 9528
tcp        0      0 0.0.0.0:9528            0.0.0.0:*               LISTEN      5385/node   


测试访问前端

至此,你已经可以基于如下的通信请求,正确访问堡垒机了。

但是,还缺少

  • nginx做端口代理
  • 其他基础组件。

测试访问,能确保正确看到堡垒机后台,就OK

访问的地址入口是前端

http://10.0.0.61:9528/

前端lina、后端core的架构图

目前完成的任务


1. db-51的 mysql,redis组件

2. master-61  core后台组件    lina前端组件


良苦用心

难度 五颗星。

今天加油听,讲的很细,确保你能学会,部署复杂的前后端分离项目

明天慢慢练即可。

(作业会很变态,要求你部署完毕之后,重启所有机器,看还能确保堡垒机正常访问吗,虐虐自己)

重启后,还能让它继续访问,确保可以访问。

理解良苦用心的扣1

luna前端(网页版命令行)

lina项目,是堡垒机的前端项目,咱们目前是运行了一个前端进程  10.0.0.61:9528 对的吧。



在生产环境下的部署,会有前端工程师配合你,将所有的前端的代码,编译 执行前端的 build命令,生成 纯静态文件。

得前端代码中,填写后端的接口地址(负载均衡的地址)

这个得你清晰部署流程。


还有一个luna组件,提供网页版命令行的,这个功能也是是基于 vue前端开发的页面 +  和后端进行数据交互,提供的网页版命令行。

web开发的知识。。大家不用过多琢磨。。


学会如何部署即可。。



1. 部署node环境,因为需要运行 luna的前端代码。

[root@master-61 /opt/lina-v2.12.0]#
[root@master-61 /opt/lina-v2.12.0]#node -v
v10.24.1
[root@master-61 /opt/lina-v2.12.0]#
[root@master-61 /opt/lina-v2.12.0]#npm -v
6.14.12



2.下载luna的前端源代码
mkdir -p  /opt/luna-v2.12.0

wget -O /opt/luna-v2.12.0.tar.gz https://github.com/jumpserver/luna/archive/refs/tags/v2.12.0.tar.gz

tar -xf luna-v2.12.0.tar.gz -C /opt/luna-v2.12.0 --strip-components 1


最后确保如下代码一样即可。
[root@master-61 /opt]#ls /opt/luna-v2.12.0
angular.json  Dockerfile  e2e            LICENSE  nginx.conf    package-lock.json   proxy.conf.json  src            tslint.json
deploy        docs        karma.conf.js  mock.py  package.json  protractor.conf.js  README.md        tsconfig.json  utils



3.安装luna项目的前端依赖,安装依赖的时候,发现缺少如下gcc工具,跟着操作,安装即可。踩坑之后的文档。


yum -y install gcc gcc-c++


4. 安装前端的依赖,很棘手,很容易出现问题。

执行如下2条命令。

命令一,安装依赖,直接执行这个命令即可,会自动寻找目录下的 package.json文件,安装前端依赖信息

[root@master-61 /opt/luna-v2.12.0]#pwd
/opt/luna-v2.12.0
[root@master-61 /opt/luna-v2.12.0]#
[root@master-61 /opt/luna-v2.12.0]#npm install 


老师的机器安装了如下1477个依赖包。
added 1477 packages from 1909 contributors in 244.312s

11 packages are looking for funding
  run `npm fund` for details






命令二:
# 大致能明白啥意思,扣 1

# 必须安装对应版本的 node-sass依赖,否则又是一堆报错。
# 这个命令是单独的,安装一个组件,限定了版本,这是我踩坑的解决办法,你跟着操作就行。
# 你根据这个教程,部署的是v2.12.0 luna源代码,因此这个前端项目,依赖的模块,有指定的版本。
# 如果是其他的luna源码版本你或许不需要装这个操作。。理解即可。。

SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass/ 
npm install [email protected]


如果想加速下载,可以设置linux的全局http_proxy代理。走你的梯子即可。

http,https的数据请求。

搞个梯子,设置全局http代理,

【机器请求 > 梯子】 > 发给目标机器

称之为正向代理,还是反向代理?

对,正向代理。

修改luna 的配置文件

由于luna和 core服务部署在一台机器,因此这里的地址,不用用localhost
如果luna和core服务,分开在不同得机器,你得填写 core机器的ip,理解扣 1


因此这里,啥也不写即可

[root@master-61 /opt/luna-v2.12.0]#cat proxy.conf.json 
{
  "/koko": {
    "target": "http://localhost:5000",
    "secure": false,
    "ws": true
  },
  "/media/": {
    "target": "http://localhost:8080",
    "secure": false,
    "changeOrigin": true
  },
  "/api/": {
    "target": "http://localhost:8080",
    "secure": false,
    "changeOrigin": true
  },
  "/core": {
    "target": "http://localhost:8080",
    "secure": false,
    "changeOrigin": true
  },
  "/static": {
    "target": "http://localhost:8080",
    "secure": false,
    "changeOrigin": true
  },
  "/lion": {
    "target": "http://localhost:9529",
    "secure": false,
    "pathRewrite": {
      "^/lion/monitor": "/monitor"
    },
    "ws": true,
    "changeOrigin": true
  }
}
[root@master-61 /opt/luna-v2.12.0]#



启动luna

需要安装ng命令

你要运行luna这个项目,需要安装ng命令,为了执行,ng server 运行luna进程

这是前端的命令工具。

# 安装ng命令,用于启动前端服务器,注意,必须是这个版本(再次吐槽,官网文档,就不能用心点写吗?一堆烂坑)
# 安装这个ng命令,使用这条命令,添加--unsafe-perm参数,提权,让node的权限大一点
npm install -g @angular/[email protected]  --unsafe-perm

# 确保ng命令能装好,执行如下命令即可。

[root@master-61 /opt/luna-v2.12.0]#ng --version

     _                      _                 ____ _     ___
    / \   _ __   __ _ _   _| | __ _ _ __     / ___| |   |_ _|
   / △ \ | '_ \ / _` | | | | |/ _` | '__|   | |   | |    | |
  / ___ \| | | | (_| | |_| | | (_| | |      | |___| |___ | |
 /_/   \_\_| |_|\__, |\__,_|_|\__,_|_|       \____|_____|___|
                |___/
    

Angular CLI: 7.3.9
Node: 10.24.1
OS: linux x64
Angular: 7.2.15
... animations, common, compiler, compiler-cli, core, forms
... http, language-service, platform-browser
... platform-browser-dynamic, router

Package                           Version
-----------------------------------------------------------
@angular-devkit/architect         0.13.9
@angular-devkit/build-angular     0.13.9
@angular-devkit/build-optimizer   0.13.9
@angular-devkit/build-webpack     0.13.9
@angular-devkit/core              7.3.9 (cli-only)
@angular-devkit/schematics        7.3.9 (cli-only)
@angular/cdk                      7.3.7
@angular/cli                      7.3.9
@angular/flex-layout              7.0.0-beta.24
@angular/material                 7.3.7
@ngtools/webpack                  7.3.9
@schematics/angular               7.3.9
@schematics/update                0.13.9
rxjs                              6.3.3
typescript                        3.2.4
webpack                           4.29.0


# 后台运行命令如下,必须运行在0.0.0.0地址上,否则不通。
# 必须执行这个命令。

# 当前是没有luna的端口的
[root@master-61 /opt/luna-v2.12.0]#netstat -tunlp|grep 4200


# 执行命令,运行luna进程

[root@master-61 /opt/luna-v2.12.0]#nohup ng serve --proxy-config proxy.conf.json --host 0.0.0.0 & 

# 检查端口
[root@master-61 /opt/luna-v2.12.0]#netstat -tunlp|grep 4200
tcp        0      0 0.0.0.0:4200            0.0.0.0:*               LISTEN      7244/@angular/cli   

# 至此,luna就OK了,可以访问网页版linux命令行了。

测试访问luna

由于这个luna版本,有点问题,v2.12.0,总是需要前端工程师配合,才能精确的调通。

这里的部署,有点bug,需要指定luna的端口才可以访问到 网页版命令行。

以及luna需要去连接koko服务,才能实现远程网页,执行linux命令。

你先确保可以看到luna的页面。

得给自己灌鸡汤

感到难受,就是在爬坡了,就是有长进了。

koko后端(命令行版堡垒机)

早期的命令行堡垒机,是基于coco服务,是飞致云公司,基于python开发的工具。

部署python的环境,运行coco代码。

后来代码升级,基于golang重构了,换为了koko。

需要提供golang的开发环境,才能运行koko

Koko 是 Go 版本的 coco,重构了 coco 的 SSH/SFTP 服务和 Web Terminal 服务。

Koko组件用于基于ssh的跳板机登录,统一管理。

jumpserver是一个 跳板机(koko)的升级版,添加了很多4A功能,完成了整个的堡垒机产品。


部署koko

1. 下载koko代码,由于是基于golang开发,可以直接打包二进制,你无须安装了,下载即用。

mkdir /opt/koko-v2.12.0
cd /opt ; wget https://github.com/jumpserver/koko/releases/download/v2.12.0/koko-v2.12.0-linux-amd64.tar.gz

tar -xf koko-v2.12.0-linux-amd64.tar.gz  -C /opt/koko-v2.12.0 --strip-components 1


2. 确保如下目录存在即可
看懂扣 1

[root@master-61 /opt]#ls /opt/koko-v2.12.0
config_example.yml  init-kubectl.sh  koko  kubectl  locale  static  templates


3.配置golang的环境,也是下载即可,然后配置环境变量就可以用了


直接下载二进制版本
wget https://golang.google.cn/dl/go1.15.linux-amd64.tar.gz

tar -xf go1.15.linux-amd64.tar.gz 

添加path
[root@master-61 /opt/go/bin]#tail -2 /etc/profile
# 添加python3的PATH
export PATH=$PATH:/opt/python369/bin:/opt/node-v10.24.1/bin:/opt/go/bin


确认版本
[root@master-61 /opt/go/bin]#source /etc/profile
[root@master-61 /opt/go/bin]#
[root@master-61 /opt/go/bin]#
[root@master-61 /opt/go/bin]#go version
go version go1.15 linux/amd64



至此golang开发环境,go编译器已经装好, 看懂扣6



启动koko

1.先修改配置文件
[root@master-61 /opt/koko-v2.12.0]#cp config_example.yml config.yml
[root@master-61 /opt/koko-v2.12.0]#
[root@master-61 /opt/koko-v2.12.0]#
[root@master-61 /opt/koko-v2.12.0]#ls
config_example.yml  config.yml  init-kubectl.sh  koko  kubectl  locale  static  templates


2. 修改如下即可
CORE_HOST: http://127.0.0.1:8080   # Core 的地址
# 第一次运行的时候,koko会用这个值,注册当前机器的信息到jumpserver中,证明这个机器是当做了跳板机,安全验证
# 第二次运行,这个参数就给删除即可,否则会反复注册,如果说你运行koko出了问题,找超哥,你估计解决不了。

BOOTSTRAP_TOKEN: "$BOOTSTRAP_TOKEN" 
BIND_HOST: 0.0.0.0         # koko服务绑定运行在0.0.0.0上,表示可以基于10.0.0.61访问
# 表示你可以基于ssh 协议,连接koko, 用法是  ssh [email protected]  -p 2222
# 连接22端口是 sshd进程,  连接2222是koko进程,这里能听懂扣   1

SSHD_PORT: 2222            # 使用 0.0.0.0:2222,
HTTPD_PORT: 5000           # 使用 0.0.0.0:5000
LOG_LEVEL: DEBUG           # 开发建议设置 DEBUG, 生产环境推荐使用 ERROR


3.具体配置如下,和我一样即可

[root@master-61 /opt/koko-v2.12.0]#cat config.yml 
CORE_HOST: http://127.0.0.1:8080
BOOTSTRAP_TOKEN: "$BOOTSTRAP_TOKEN"
BIND_HOST: 0.0.0.0
SSHD_PORT: 2222
HTTPD_PORT: 5000
LOG_LEVEL: DEBUG


4.运行koko服务,首次会注册到堡垒机中,以及确保2222,和5000端口都运行了,koko才是正常运行。

[root@master-61 /opt/koko-v2.12.0]#ls
config_example.yml  config.yml  init-kubectl.sh  koko  kubectl  locale  static  templates
[root@master-61 /opt/koko-v2.12.0]#
[root@master-61 /opt/koko-v2.12.0]#
[root@master-61 /opt/koko-v2.12.0]#./koko  -f config.yml  -d  


5.到这第五步,跟得上的扣 6 


6.验证koko的运行
[root@master-61 /opt/koko-v2.12.0]#netstat -tunlp|grep -E '(5000|2222)'
tcp6       0      0 :::5000                 :::*                    LISTEN      7613/./koko         
tcp6       0      0 :::2222                 :::*                    LISTEN      7613/./koko    

7.至此,koko已经运行成功了




此时你可以试试,跳板机的实际用法了,1.访问luna的网页命令行

由于还没在堡垒机中,添加你的服务器资产数据,所以说看不到服务器列表,下节课,添加资产列表就可以管理你的机器了。

为了验证luna和koko结合,点击文件管理功能即可。

以及试试,基于ssh协议连接koko

这张图,能看懂扣 1

确保如下操作,正常即可,说明你的koko,跳板机以及可以使用,使用的是jumpserver的用户信息

账户 admin  密码chaoge666

ssh [email protected] -p 2222

说明你的koko,命令行,跳板机已经可以用了。

部署lion(提供vnc远程桌面功能)

体验下,阿里云服务器的两种登录方式。

无法基于ssh连接的话,基于vnc连接去解决机器的故障。

下一步,部署jumpserver也提供给你的lion服务

先装一个工具叫做 guacamole,远程桌面依赖的一个前端框架

mkdir /opt/guacamole-v2.12.0
cd /opt/guacamole-v2.12.0
wget http://download.jumpserver.org/public/guacamole-server-1.3.0.tar.gz
tar -xzf guacamole-server-1.3.0.tar.gz
cd guacamole-server-1.3.0/

注意,需要安装centos的依赖环境,才可以使用这个VNC远程桌面协议。

# 踩坑了
yum -y install cairo-devel libjpeg-devel libpng-devel uuid-devel

# 粘贴如下代码即可

./configure --with-init-dir=/etc/init.d
make && make install

# 让你的linux,更新底层的驱动,加载远程桌面 guacamole协议
ldconfig



安装lion程序

cd /opt
wget https://github.com/jumpserver/lion-release/releases/download/v2.12.0/lion-v2.12.0-linux-amd64.tar.gz

tar -xf lion-v2.12.0-linux-amd64.tar.gz

cd lion-v2.12.0-linux-amd64

最终看到如下数据即可
[root@master-61 /opt]#tar -xf lion-v2.12.0-linux-amd64_\(1\).tar.gz 
[root@master-61 /opt]#
[root@master-61 /opt]#
[root@master-61 /opt]#cd lion-v2.12.0-linux-amd64/
[root@master-61 /opt/lion-v2.12.0-linux-amd64]#
[root@master-61 /opt/lion-v2.12.0-linux-amd64]#
[root@master-61 /opt/lion-v2.12.0-linux-amd64]#ls
config_example.yml  lion  ui


拷贝配置文件
[root@master-61 /opt/lion-v2.12.0-linux-amd64]#cp config_example.yml config.yml


修改配置文件,参考如下写法

# 项目名称, 会用来向Jumpserver注册, 识别而已, 不能重复
# NAME: 

# Jumpserver项目的url, api请求注册会使用
CORE_HOST: http://127.0.0.1:8080   # Core 的地址

# Bootstrap Token, 预共享秘钥, 用来注册使用的service account和terminal
# 请和jumpserver 配置文件中保持一致,注册完成后可以删除
BOOTSTRAP_TOKEN: "$BOOTSTRAP_TOKEN"

# 启动时绑定的ip, 默认 0.0.0.0
BIND_HOST: 0.0.0.0

# 监听的HTTP/WS端口号,默认8081
HTTPD_PORT: 8081

# 设置日志级别 [DEBUG, INFO, WARN, ERROR, FATAL, CRITICAL]
LOG_LEVEL: DEBUG           # 开发建议设置 DEBUG, 生产环境推荐使用 ERROR

# Guacamole Server ip, 默认127.0.0.1
# GUA_HOST: 127.0.0.1

# Guacamole Server 端口号,默认4822
# GUA_PORT: 4822

# 会话共享使用的类型 [local, redis], 默认local
# SHARE_ROOM_TYPE: local

# Redis配置
# REDIS_HOST: 127.0.0.1
# REDIS_PORT: 6379
# REDIS_PASSWORD:
# REDIS_DB_ROOM:




启动guacd程序

都是官网提供的教程,学会操作,确保操作正确即可。

/etc/init.d/guacd start

[root@master-61 /opt/lion-v2.12.0-linux-amd64]#/etc/init.d/guacd start
Starting guacd: guacd[13422]: INFO:	Guacamole proxy daemon (guacd) version 1.3.0 started
SUCCESS

启动lion进程

[root@master-61 /opt/lion-v2.12.0-linux-amd64]#nohup ./lion -f config.yml &
[3] 13435

部署nginx(整合所有组件,提供统一的七层反向代理)

经历九九八十一难,终于来到了最后,是被boss打死,还是打死boss成为赢家。。就看这里了。

先看架构图。

部署nginx的配置文件

1. 确保nginx安装,在大于 1.18版本即可
[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


2. 安装nginx
yum install nginx -y


3. 配置nginx虚拟主机文件,实现整合所有jumpserver的组件,统一访问入口,如

jumpserver.linux0224.cc 默认80端口即可。



4.具体配置文件如下
[root@master-61 /etc/yum.repos.d]#cd /etc/nginx/conf.d/
[root@master-61 /etc/nginx/conf.d]#ls
default.conf
[root@master-61 /etc/nginx/conf.d]#
[root@master-61 /etc/nginx/conf.d]#
[root@master-61 /etc/nginx/conf.d]#rm -f default.conf 
[root@master-61 /etc/nginx/conf.d]#


server {
  listen 80;
  # 不做域名解析,基于ip:port直接访问
  # server_name www.yuchaoit.cn;

  client_max_body_size 5000m;

  # Luna 配置
  # 经过实测,这个v12版本,只能http://10.0.0.61:4200/luna/这样去访问,前端这里有点难处理。

  location /luna/ {
    proxy_pass http://luna:4200;
  }

  # Core data 静态资源
  location /media/replay/ {
    add_header Content-Encoding gzip;
    root /opt/jumpserver-v2.12.0/data/;
  }

  location /media/ {
    root /opt/jumpserver-v2.12.0/data/;
  }

  location /static/ {
    root /opt/jumpserver-v2.12.0/data/;
  }

  # KoKo Lion 配置
  location /koko/ {
    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/ {
    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;
  }

  # Core 配置
  location /ws/ {
    proxy_pass http://core:8070;
    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";
  }

  location /api/ {
    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;
  }

  location /core/ {
    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/ {
    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;
  }
}


图解nginx配置


注意,配置文件中用的都是测试域名,你要在master-61上做好hosts解析

最后,启动nginx,访问入口

[root@master-61 /etc/nginx/conf.d]#
[root@master-61 /etc/nginx/conf.d]#nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@master-61 /etc/nginx/conf.d]#
[root@master-61 /etc/nginx/conf.d]#nginx
[root@master-61 /etc/nginx/conf.d]#
[root@master-61 /etc/nginx/conf.d]#
[root@master-61 /etc/nginx/conf.d]#ps -ef|grep nginx
root      13675      1  0 19:01 ?        00:00:00 nginx: master process nginx
nginx     13676  13675  0 19:01 ?        00:00:00 nginx: worker process
nginx     13677  13675  0 19:01 ?        00:00:00 nginx: worker process
nginx     13678  13675  0 19:01 ?        00:00:00 nginx: worker process
nginx     13679  13675  0 19:01 ?        00:00:00 nginx: worker process
root      13681   1333  0 19:01 pts/0    00:00:00 grep --color=auto nginx
[root@master-61 /etc/nginx/conf.d]#
[root@master-61 /etc/nginx/conf.d]#


注意,客户端,windows也做好域名解析

不用域名解析了。

最终访问,访问堡垒机官网

这里,不能用域名去测试了,用ip去访问即可,所有的后端进程,它还不认识你这个域名。

访问入口是

http://10.0.0.61:80

确保可以正确登录,整个实验就没问题了。

堡垒机大盘页面

总之,你在页面上,确保点点点,各种链接,访问都是正常的

你的这个堡垒机才是正确的部署完毕。

以最终看到,个人页面为结束

到这里,朋友们,你已经搞定了很复杂的,前后端分离模式

你接触了 前端nodejs项目的部署

搞定了python后端的部署

以及golang程序的部署

以及nginx的复杂代理配置

标签:opt,61,python,jumpserver,部署,master,v2.12,网站,root
From: https://www.cnblogs.com/btcm409181423/p/18116505

相关文章

  • jumserver详细部署文档
    jumserver部署前关闭防火墙这些部署前关闭防火墙这些部署前关闭防火墙这些部署前关闭防火墙这些部署一台mysql5.7友情提示:mysql数据库密码请使用"字母+数字"用"yuchao666"数据库密码连接,读取的是字符串类型如果你的数据库密码是"123456"这样的纯数字,在config.yml......
  • AMD_Ubuntu_Docker部署firefox
    AMD_Ubuntu_Docker部署firefox下载driverhttps://github.com/mozilla/geckodriver/releasesfirefox好像跟chrome不一样高版本的geckodriver可以兼容低版本的firefox所以理论上应该节约了很大的工作量.https://www.mozilla.org/zh-CN/firefox/linux/https://downl......
  • python的时间格式化
    datetimedatetime.date属性/方法功能说明.max日期最大值类属性.min日期最小值类属性.today()今天的日期类方法.year对象的年属性int类型.month对象的月属性int类型.day对象的天属性int类型.weekday对象的星期属性周一~周日(0~6)......
  • Python if、for、while
    一、第一个程序 交互式输入第一个程序 #!/usr/bin/envpython3#-*-coding:utf-8-*-#@Author:Tom#@Time:2024/4/522:25#定义变量Google_Mail="[email protected]"#允许交互式输入并赋值给对应的变量Google_Url=input("PleaseInputGoogleTheUr......
  • Python分支结构与循环结构
    程序的基本结构共有三种,「任何程序都可以由这三种基本结构组合来实现」。顺序结构分支结构循环结构一、分支结构分支结构是根据判断条件结果而选择不同向前路径的运行方式,分支结构分为:单分支,二分支和多分支。1)单分支结构单分支结构是分支结构中最简单的一种方......
  • Python 变量循环
    一、变量编程语言或脚本语言都涉及变量,在变量定义时都有一定的规则。Python变量定义规则如下:A.变量名:只能是"字母、数字和下划线"的任意组合。注:不能有空格和其他特殊字符B.变量名:不能以数字开头C.变量名:不能是关键字。如下:  and、as、assert、break、class、contin......
  • Linux(CentOS)部署 y-api 接口管理平台
    目录前言前置环境mongodbnode安装y-api部署页面启动y-api基本使用教程前言前后端分离时代,前后端通过接口文档来协作开发项目。一般开发过程中,由后端先编写接口文档,然后交付给前端,这时候前后端都根据这个编写的接口文档来进行开发。在没有一个统一的接口管理平台......
  • Python实战:天气应用
    1.引言天气应用是现代生活中不可或缺的一部分,它可以帮助我们实时获取天气信息,合理安排出行和活动。通过Python实现天气应用,我们可以加深对编程语言的理解,同时也能够体会到编程带来的便利。2.环境准备在开始编写天气应用之前,我们需要准备以下环境:1)Python环境:确保计......
  • Python实战:文章朗读器
    1.引言朗读器是一种可以帮助我们阅读文本的工具,特别适合那些需要长时间阅读或者视力不佳的用户。通过Python实现朗读器,我们可以加深对编程语言的理解,同时也能够体会到编程带来的便利。2.环境准备在开始编写朗读器之前,我们需要准备以下环境:1)Python环境:确保计算机上......
  • Python实战:键盘记录器
    1.引言键盘记录器是一种可以监控和记录用户键盘输入的工具,通常用于安全测试、数据分析等场景。通过Python实现键盘记录器,我们可以加深对编程语言的理解,同时也能够体会到编程带来的便利。2.环境准备在开始编写键盘记录器之前,我们需要准备以下环境:1)Python环境:确保计......