阿里云镜像:https://developer.aliyun.com/mirror/
centos上有很多第三方的软件,yum需要安装epel源,才能进行下载
# 查看进程
ps -ef
# 查看端口
netstat -tunlp
# CURL
linux通过curl命令 访问网站通不通 -I 拿到服务器信息
# rpm 查询软件安装目录
rpm -ql nginx | grep index
# vim 全部清空
dG
nginx
源码安装的好处是,可以指定安装目录,配置文件,更加可控,而yum安装的是固定目录
# 源代码编译安装
具体查看博客园我的关注
虚拟主机的概念就是在web服务里的一个独立的网站站点,这个站点对应独立的域名(IP),具有独立的程序和资源目录,可以独立的对外提供服务。这个独立的站点配置是在nginx.conf中使用server{}代码块标签来表示一个虚拟主机。Nginx支持多个server{}标签,即支持多个虚拟主机站点
Nginx + 两台tomcat 实现负载均衡
Nginx部署在其中一台就可以
# 创建nginx用户不创建家目录 -M 是不创建家目录 -s /sbin/nologin 是不需要登录
useradd -s /sbin/nologin -M nginx
# 编译安装nginx
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_gzip_static_module --with-pcre
make && make install
tips:
模块 | 说明 |
---|---|
--with-http_realip_module | 此模块支持显示真实来源ip地址,主要用户nginx做前端负载均衡服务器使用 |
--with-http_gzip_static_module | 这个模块指定压缩 |
--with-pcre | 此模块支持rewrite功能 |
修改conf文件
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
改为:
# 添加1
upstream tomcats{
server 192.168.1.201:8080;
server 192.168.1.202:8080;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
# 添加2
proxy_pass http://tomcats;
root html;
index index.html index.htm;
}
# 检查配置语法
nginx -t
# 重新加载
nginx -s reload
然后在tomcat下创建一个jsp
print time <%=new java.util.Date()%> 0000
# 另一个tomcat后面写1111
访问tomcat会随机显示0000 1111说明负载均衡成功了
如何把nginx服务设置为开机启动:
创建 /etc/init.d/nginx 通过这个文件中的命令对nginx进行操作start、stop、reload
在Nginx官网上的NGINX Init Scripts选择启动脚本,我这里是CentOS系统,选择 Red Hat NGINX Init Script, 将脚本拷贝到/etc/init.d/nginx
https://www.nginx.com/resources/wiki/start/topics/examples/initscripts/
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig: - 85 15
# description: NGINX is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /etc/nginx/nginx.conf
# config: /etc/sysconfig/nginx
# pidfile: /var/run/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/etc/nginx/nginx.conf"
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
lockfile=/var/lock/subsys/nginx
make_dirs() {
# make required directories
user=`$nginx -V 2>&1 | grep "configure arguments:.*--user=" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
if [ -n "$user" ]; then
if [ -z "`grep $user /etc/passwd`" ]; then
useradd -M -s /bin/nologin $user
fi
options=`$nginx -V 2>&1 | grep 'configure arguments:'`
for opt in $options; do
if [ `echo $opt | grep '.*-temp-path'` ]; then
value=`echo $opt | cut -d "=" -f 2`
if [ ! -d "$value" ]; then
# echo "creating" $value
mkdir -p $value && chown -R $user $value
fi
fi
done
fi
}
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
make_dirs
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
configtest || return $?
stop
sleep 1
start
}
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $prog -HUP
retval=$?
echo
}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac
tips:记得要修改路径
nginx文件 | 本机路径 | 脚本路径 |
---|---|---|
nginx执行文件 | /opt/nginx1-12/sbin/nginx | /usr/sbin/nginx |
nginx.conf配置文件 | /opt/nginx1-12/conf/nginx.conf | /etc/nginx/nginx.conf |
配置好init.d就可以使用命令控制nginx
service nginx start &
service nginx stop
下面配置开机启动
方式一:在/etc/rc.local中配置
可以将此命令加入到rc.local文件中,这样开机的时候nginx就默认启动了
vi /etc/rc.local
加入一行 /etc/init.d/nginx start
保存并退出,下次重启会生效
方式二:将nginx配置成自启动的服务
chmod a+x /etc/init.d/nginx
chkconfig --add /etc/init.d/nginx
chkconfig nginx on
chkconfig nginx --list
ansible
ansible管理机器
yum install ansible
rpm -ql ansible|grep -E '^/etc/|^/usr/bin'
/etc/ansible
/etc/ansible/ansible.cfg
/etc/ansible/hosts
/etc/ansible/roles
/usr/bin/ansible
/usr/bin/ansible-config
/usr/bin/ansible-connection
/usr/bin/ansible-console
/usr/bin/ansible-doc
/usr/bin/ansible-galaxy
/usr/bin/ansible-inventory
/usr/bin/ansible-playbook
ansible --version
ansible 2.9.27
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.5 (default, Jun 28 2022, 15:30:04) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
ansible被管理机器
yum install libselinux-python
ansible管理方式
- 传统的输入ssh密码
# 备份原始配置文件
cp /etc/ansible/ansible.cfg{,.ori}
# 配置文件hosts追加被管理机器
vim /etc/ansible/hosts
[chen]
192.168.76.83
# 然后就可以使用ansible远程执行命令了
ansible chen -m command -a 'hostname' -k -u root
# 但是会报错,因为管理机器没有ssh过被管理机器 ~/.ssh/known_hosts 文件中没有这个目标机器的指纹、需要ssh一下,就可以了
# 可以将密码信息配置到hosts文件,就不用每次输入密码了
# ansible_host ansible_port ansible_user ansible_ssh_pass
[chen]
192.168.76.83 ansible_port=22 ansible_user=root ansible_ssh_pass=123456
# 就不需要 -k 和 -u 了
ansible chen -m command -a 'hostname'
# 但是这样十分不安全,密码是明文的
- 密钥管理
# 比起ssh密码管理更加安全
# 生成密钥
ssh-keygen -f ~/.ssh/id_rsa -P "" > /dev/null 2>&1
# 分发公钥
ssh-copy-id [email protected]
#可以执行ansible hosts文件也不需要明文的ssh密码
ansible chen -m command -a 'hostname'
分发公钥的脚本
#!/bin/bash
rm -rf ~/.ssh/id_rsa*
ssh-keygen -f ~/.ssh/id_rsa -P "" > /dev/null 2>&1
SSH_Pass=123456
Key_Path=~/.ssh/id_rsa.pub
for ip in 83
do
sshpass -p$SSH_Pass ssh-copy-id -i $Key_Path "-o StrictHostKeyChecking=no" 192.168.76.$ip
done
# 非交互式分发需要使用sshpass指定ssh密码,通过-o StrictHostKeyChecking跳过ssh连接确认信息
ansible command 模块 不支持变量 特殊符号
# 列出所有ansible支持的模块
ansible-doc -l
# 查看模块具体用法
ansible-doc -s command
# chdir 切换到目录
ansible chen -m command -a "pwd chdir='/tmp'"
# creates 有这个文件跳过
ansible chen -m command -a "pwd chdir='~' creates='book.sql'"
# removes 没有这个文件跳过
ansible chen -m command -a "pwd chdir='~' removes='xbook.sql'"
shell 模块 支持特殊符号
# 带管道符
ansible chen -m shell -a "ps -ef|grep vim|grep -v grep"
script模块
ansible chen -m script -a "脚本路径"
监控
# 基础设施监控
ipmitool
# 存储监控
df
fdisk
iotop
# cpu 监控
lscpu
uptime
top
htop
glances
# 内存
free
# 网络
iftop
# 应用监控
mysql redis nginx python php-fpm
zabbix5.0需要php7版本以上
# 取ip 注意是单引号
ifconfig ens33 | awk 'NR==2{print $2}'
# 关闭防火墙 需要重启linux才能生效
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
systemctl disable --now firewalld
# 查看剩余内存 最好4个g
free -m
# 获取zabbix的下载源
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
# 执行之后 yum源会多一个 zabbix.repo
ls /etc/yum.repos.d/
CentOS-Base.repo epel.repo repo_bak zabbix.repo
# 更换zabbix.repo源为阿里的 -i 是不显示结果的意思
sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' /etc/yum.repos.d/zabbix.repo
# yum清空缓存
yum clean all
yum makecache
# 安装zabbix
yum install -y zabbix-server-mysql zabbix-agent
# 安装scl 可以让系统安装多个版本的软件,而不会影响系统依赖环境
yum install centos-release-scl -y
# 编辑zabbix.repo 将[zabbix-frontend] 的enable改为1
# 安装zabbix 前端环境 而且安装到的是scl环境
yum install zabbix-web-mysql-scl zabbix-apache-conf-scl -y
# 安装zabbix所需的数据库mariadb
yum install mariadb-server -y
systemctl enable --now mariadb
# 初始化数据库
mysql_secure_installation
# 添加数据库用户
create database zabbix character set utf8 collate utf8_bin;
create user zabbix@localhost identified by '123456';
grant all privileges on zabbix.* to zabbix@localhost;
#导入数据
zcat /usr/share/doc/zabbix-server-mysql-5.0.30/create.sql.gz|mysql -uzabbix -p123456 zabbix
#配置zabbixserver连接mysql
sed -i.ori '124a DBPassword=123456' /etc/zabbix/zabbix_server.conf
#检查一下是否修改成功
grep '^DBPassword' /etc/zabbix/zabbix_server.conf
# 修改php配置文件中的时区
sed -i.ori '25a php_value[date.timezone] = Asia/Shanghai' /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
# 检查一下
grep timezone /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
# 启动zabbix服务
systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm
# 浏览器访问
http://192.168.76.169/zabbix
被监控机器的安装,用于数据采集
# 安装zabbix-agent2 使用golang语言编写的 老的是用c语言写的agent
# 注意时间正确
yum install ntpdate -y
ntpdate -u ntp.aliyun.com
# 时区的统一
mv /etc/localtime{,.bak}
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 配置好zabbix的yum源 参考服务端的
yum install -y zabbix-agent2
# 查看文件
vim /etc/zabbix/zabbix_agent2.conf
ls -l /usr/sbin/zabbix_agent2
# 启动
systemctl enable --now zabbix-agent2
netstat -lnp|grep -v grep|grep zabbix
# 修改配置文件,先来看一下配置
grep -Ev '^#|^$' /etc/zabbix/zabbix_agent2.conf
hostnamectl set-hostname zabbix-agent01
sed -i 's/Server=127.0.0.1/Server=192.168.76.169/' /etc/zabbix/zabbix_agent2.conf
sed -i 's/Hostname=Zabbix server/Hostname=zabbix-agent01/' /etc/zabbix/zabbix_agent2.conf
# 重启zabbix
systemctl restart zabbix-agent2
测试连通性
# 服务端安装zabbix-get
yum install zabbix-get -y
# 测试命令
zabbix_get -s 192.168.76.88 -p 10050 -k "system.cpu.load[all,avg1]"
0.000000
zabbix_get -s 192.168.76.88 -p 10050 -k "agent.ping"
1
zabbix_get -s 192.168.76.88 -p 10050 -k "system.hostname"
解决乱码问题
# 服务端安装一个字体
yum install wqy-microhel-fonts -y
\cp /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/fonts/dejavu/DejaVuSans.ttf
跳板机&堡垒机
jumperserver 是python3编写的,旧版本是python3
准备
python =3.6.x
mysql server > 5.6 or mariadb > 5.6 在centos7上,mysql由于收费了,开源社区就诞生了mariadb
redis 数据库
部署jumpserver,初始化环境
# 1. 环境初始化,关闭防火墙
iptables -F
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
systemctl disable --now firewalld
# 2.配置yum源,以及epel源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache
# 3.安装依赖软件
yum install -y bash-completion vim lrzsz wget expect net-tools nc nmap tree dos2unix htop iftop iotop unzip telnet al psmisc nethoge glances bc ntpdate openldap-devel
yum install -y git python-pip gcc automake autoconf python-devel sshpass readline-devel
# 4.修改系统字符集
localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf
部署mysql
# 部署数据库mysql5.6
wget https://downloads.mysql.com/archives/get/p/23/file/MySQL-5.6.49-1.el7.x86_64.rpm-bundle.tar
tar -xf MySQL-5.6.49-1.el7.x86_64.rpm-bundle.tar -C ./mysql56_rpm/
yum localinstall ./*.rpm
# 修改配置文件
vim /etc/my.cnf
:%s/mariadb/mysql/g
# 查看生成的密码
cat ~/.mysql_secret
# 进入mysql
# 修改密码
mysqladmin -uroot -pxOvD6WhA1rJCgh_Y password 123456
# 或者
update mysql.user set passowrd=password('123456') where user='root'
# 创建数据库
create database jumpserver default charset 'utf8';
# 创建用户
create user 'jumpserver'@'%' identified by '123456';
# 授权
grant all privileges on jumpserver.* to 'jumpserver'@'%' identified by '123456';
flush privileges
部署python3.6
# 1.下载python3.6源代码
wget https://www.python.org/ftp/python/3.6.10/Python-3.6.10.tgz
tar -xvf Python-3.6.10.tgz
# 安装依赖
yum install zlib zlib-devel openssl openssl-devel -y
# 编译安装
./configure --prefix=/opt/python36
make && make install
# 配置环境变量
vim /etc/profile
追加
PATH="/opt/python36/bin:$PATH"
source /etc/profile
echo $PATH
python3创建虚拟环境
# 创建python运行虚拟环境virtualenv
# 目的是有很多python项目,防止不同项目之间依赖冲突,为每一个项目做一个虚拟环境
# python3是一个解释器,还有一个工具叫pip3,这是给python3安装模块的
# 安装virtualenv
pip3 install virtualenv
# 如果提示缺少ssl,得删掉编译安装的python3,安装openssl工具,再重新安装python3
vim /etc/profile # 删除环境变量
rm -rf python36
yum install openssl openssl-devel -y
# 根据上面的笔记重新解压编译安装python3
# 安装virtualenv
pip3 install virtualenv -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
# 使用虚拟环境,再创建出一个python3解释器
# 进入python3的安装目录
virtualenv --python=python3 新的解释器名字(例如jmp_venv1)
# 激活虚拟环境,进入虚拟环境目录,默认修改了环境变量
source activate # python3 默认就修改为虚拟环境的了
# 去激活,环境变量就还原了,这个命令是隐藏的
deactivate
redis 缓存型数据库
# 1. 安装redis的形式
rpm包手动安装,需要手动解决依赖,不推荐使用
yum自动化安装,适合软件调试学习使用,安装自动解决依赖,很好用
源代码编译安装redis
# 2. 选择yum自动化安装即可
# 配置好yum源
yum install redis -y
# 使用
redis-cli
jumpserver 手动的后台部署
# 安装依赖
yum install -y bash-completion vim lrzsz wget expect net-tools nc nmap tree dos2unix htop iftop iotop unzip telnet al psmisc nethoge glances bc ntpdate openldap-devel
# 下载安装包进行安装
wget https://github.com/jumpserver/jumpserver/releases/download/v2.1.0/jumpserver-v2.1.0.tar.gz
tar -zxf jumpserver-v2.1.0.tar.gz
ln -s /root/jumpserver-v2.1.0 /root/jumpserver
# 安装运行所需模块
# 先激活虚拟环境,在虚拟环境下安装模块
source /opt/python36/bin/jmp_venv1/bin/activate
pip3 install -r /root/jumpserver/requirements/requirements.txt
如何修改pip的下载源
mkdir ~.pip
vim ~.pip/pip.conf
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host = mirrors.aliyun.com
:x
或者
pip3 config set global.index-url https://mirrors.aliyun.com/pypi/simple/
修改配置文件
# 生成密钥
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
# 生成BOOTSTRAP_TOKEN
if [ "$BOOTSTRAP_TOKEN" = "" ]; then BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`; echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc;echo $BOOTSTRAP_TOKEN; else echo $BOOTSTRAP_TOKEN; fi
# 编辑配置文件
cp config_example.yml config.yml
# vim 将密钥信息和数据库密码修改
sed -i 's/SECRET_KEY:/SECRET_KEY: CAbxbYZQAsoMo76l84Ckwn3yGyjpxxen5GaMjNbbZUH01E1KlE/' config.yml
sed -i 's/BOOTSTRAP_TOKEN:/BOOTSTRAP_TOKEN: KQziHFKNgHxmlb9S/' config.yml
# 注意数据库密码要带引号
grep -Ev '^#|^$' config.yml
对python程序进行数据库迁移
# 生成jumpserver数据库表信息
python3 /root/jumpserver/apps/manage.py makemigrations
python3 /root/jumpserver/apps/manage.py migrate
# 启动后台项目
/root/jumpserver/jms start -d
# 通过 http://192.168.76.169:8080/ 可以访问到堡垒机后台
部署koko/coco组件
# 之前使用python写的叫coco,现在使用go语言改成了koko,提供ssh和websocket接口
wget https://github.com/jumpserver/koko/releases/download/v2.1.0/koko-v2.1.0-linux-amd64.tar.gz
tar -zxf koko-v2.1.0-linux-amd64.tar.gz
ln -s koko-v2.1.0-linux-amd64 koko
cp config_example.yml config.yml
echo $BOOTSTRAP_TOKEN
vim config.yml
# 启动koko
./koko -d
ps -ef|grep koko
tail -f koko/data/logs/koko.log
搭建guacamole的时候没成功,手动部署这个有点难
jumpserver一键部署
# 默认会安装到 /opt/jumpserver-installer-v2.21.0 目录,如果类似ubuntu提示没权限,请加上sudo即可
curl -sSL https://github.com/jumpserver/jumpserver/releases/download/v2.21.0/quick_start.sh | bash
cd /opt/jumpserver-installer-v2.21.0
# 启动,如果权限问提,同意前面加上sudo即可。
./jmsctl.sh start
# 停止
./jmsctl.sh down
# 卸载
./jmsctl.sh uninstall
# 帮助
./jmsctl.sh -h
>>> 安装完成了
1. 可以使用如下命令启动, 然后访问
cd /opt/jumpserver-installer-v2.21.0
./jmsctl.sh start
2. 其它一些管理命令
./jmsctl.sh stop
./jmsctl.sh restart
./jmsctl.sh backup
./jmsctl.sh upgrade
更多还有一些命令, 你可以 ./jmsctl.sh --help 来了解
3. Web 访问
http://192.168.76.169:80
默认用户: admin 默认密码: admin
4. SSH/SFTP 访问
ssh -p2222 [email protected]
sftp -P2222 [email protected]
5. 更多信息
我们的官网: https://www.jumpserver.org/
我们的文档: https://docs.jumpserver.org/
jumpserver的使用
https://www.jumpserver.org/video.html
# 客户机添加跳板机的input规则,执行下面两行,只允许跳板机ssh到它
iptables -A INPUT -s 跳板机的ip -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j REJECT
标签:运维,etc,基础,jumpserver,nginx,zabbix,ansible,yum
From: https://www.cnblogs.com/bagdje/p/17043825.html