如何部署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