# Linux
# Linux常用系统命令
# 系统
# uname -a # 查看内核/操作系统/CPU信息
# head -n 1 /etc/issue # 查看操作系统版本
# cat /proc/cpuinfo # 查看CPU信息
# hostname # 查看计算机名
# lspci -tv # 列出所有PCI设备
# lsusb -tv # 列出所有USB设备
# lsmod # 列出加载的内核模块
# env # 查看环境变量
# 资源
# free -m # 查看内存使用量和交换区使用量
# df -h # 查看各分区使用情况
# du -sh <目录名> # 查看指定目录的大小
# grep MemTotal /proc/meminfo # 查看内存总量
# grep MemFree /proc/meminfo # 查看空闲内存量
# uptime # 查看系统运行时间、用户数、负载
# cat /proc/loadavg # 查看系统负载
# 磁盘和分区
# mount | column -t # 查看挂接的分区状态
# fdisk -l # 查看所有分区
# swapon -s # 查看所有交换分区
# hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)
# dmesg | grep IDE # 查看启动时IDE设备检测状况
# 网络
# ifconfig # 查看所有网络接口的属性
# iptables -L # 查看防火墙设置
# route -n # 查看路由表
# netstat -lntp # 查看所有监听端口
# netstat -antp # 查看所有已经建立的连接
# netstat -s # 查看网络统计信息
# 进程
# ps -ef # 查看所有进程
# top # 实时显示进程状态
# 用户
# w # 查看活动用户
# id <用户名> # 查看指定用户信息
# last # 查看用户登录日志
# cut -d: -f1 /etc/passwd # 查看系统所有用户
# cut -d: -f1 /etc/group # 查看系统所有组
# crontab -l # 查看当前用户的计划任务
# 服务
# chkconfig --list # 列出所有系统服务
# chkconfig --list | grep on # 列出所有启动的系统服务
# 程序
# rpm -qa # 查看所有安装的软件包
# 虚拟机安装centos7.9
# 下载
下载地址: https://www.centos.org/download/ (opens new window) 尝试了几个地方,清华的下载源速度是最快的。我这里1000M的网络,下载可以60M/s https://mirrors.tuna.tsinghua.edu.cn/centos/7.9.2009/isos/x86_64/ (opens new window)
# 虚拟机安装centos7.9
- 新建虚拟机
- 选择下载的iso镜像文件
- 选择虚拟机存储的位置和名称
- 设置虚拟机磁盘大小
- 设置内存、CPU、网卡选择桥接使用和物理机同样的网络
- 启动虚拟机后选择 install centos 7
- 键盘选择默认
- 时区选择 Asia Shanghai
- 选择INSTALLATION DESTINATION配置磁盘分区
- 选择 I will configure partitioning 手动配置磁盘分区
- 选择标准分区
- /boot(启动分区)一般100m~1024m。swap(交换分区)一般和分配给虚拟机的内存一样,剩余空间分配给根目录,可以根据自己需求配置不同目录挂载的分区。
- 点击 Accept Changes 执行分区操作
- 网络配置,根据自己需求配置
- 静态IP配置,netmask掩码 24相当于 255.255.255.0
- 设置root账号密码
- 配置SSH登录
以下操作是内网测试机为了方便,调整了一些安全配置,外网生产环境不建议按此配置。
# 关闭selinux
- 临时关闭
setenforce 0
- 永久关闭,修改配置文件/etc/selinux/config, 将SELINUX=enforcing改为SELINUX=disabled
#SELINUX=enforcing
SELINUX=disabled
# 关闭防火墙
- 查看防火墙服务状态,running说明打开了
systemctl status firewalld.service
- 停用防火墙服务(临时关闭)
systemctl stop firewalld.service
- 禁用防护墙服务(开机不启动)
systemctl disable firewalld.service
# 修改SSH端口 12350
vi /etc/ssh/sshd_config 修改port=12350
# 查找文件 find/locate/whereis/which/type
# find
find <指定目录> <指定条件> <指定动作>
- <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。
- <指定条件>: 所要搜索的文件的特征。
- <指定动作>: 对搜索结果进行特定的处理。
# 示例:
# 搜索当前目录(含子目录,以下同)中,所有文件名以my开头的文件。
$ find . -name 'my*'
# 搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息。
$ find . -name 'my*' -ls
# 搜索当前目录中,所有过去10分钟中更新过的普通文件。如果不加-type f参数,则搜索普通文件+特殊文件+目录。
$ find . -type f -mmin -10
# locate
locate命令其实是"find -name"的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
# locate命令的使用示例:
#搜索etc目录下所有以sh开头的文件。
$ locate /etc/sh
#搜索用户主目录下,所有以m开头的文件。
$ locate ~/m
#搜索用户主目录下,所有以m开头的文件,并且忽略大小写。
$ locate -i ~/m
# whereis
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
# whereis命令的使用示例:
$ whereis grep
# which
which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
# which命令的使用示例:
$ which grep
# type
type命令其实不能算查找命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。
# type命令的使用示例:
#系统会提示,cd是shell的自带命令(build-in)
$ type cd
#系统会提示,grep是一个外部命令,并显示该命令的路径
$ type grep
#加上-p参数后,就相当于which命令
$ type -p grep
# Linux系统最近重启时间、错误日志
[root@localhost ~]# last reboot
reboot system boot 2.6.18-164.el5 Wed Dec 22 20:19 (12:58)
reboot system boot 2.6.18-164.el5 Wed Nov 10 10:41 (42+09:17)
reboot system boot 2.6.18-164.el5 Tue Oct 26 19:49 (14+14:42)
reboot system boot 2.6.18-164.el5 Fri Oct 22 00:22 (4+19:21)
reboot system boot 2.6.18-164.el5 Thu Oct 21 03:47 (5+15:56)
reboot system boot 2.6.18-164.el5 Wed Oct 20 23:43 (5+20:00)
reboot system boot 2.6.18-164.el5 Sat Sep 18 20:31 (37+23:12)
在2010-12-22 20:19 重启了系统
可以看到正常命令重启显示为down,而电源强制重启为crash。
# 查看最近用户登录情况
[root@localhost ~]# last
oracle pts/1 10.1.1.1 Thu Dec 23 08:59 still logged in
reboot system boot 2.6.18-164.el5 Wed Dec 22 20:19 (12:59)
root pts/1 10.1.1.2 Sun Dec 12 13:07 - 13:59 (00:52)
# 查看操作系统的历史命令:
[root@localhost ~]#history |more
382 top
383 df -lh
384 top
385 service iptables stop
386 last
387 last reboot
388 last
389 history
390 history |more
# 在执行top命令时都可以查看系统状态,然后就出现了reboot重启系统的状况。在service iptables stop 命令之前没有查下到reboot的命令,可见是系统重启。
# 查看系统的日志信息:
[root@localhost ~]#cat /var/log/messages |more
Dec 20 02:46:56 localhost xinetd[5248]: EXIT: telnet status=1 pid=12350 duration
=30(sec)
Dec 22 19:59:12 localhost shutdown[32014]: shutting down for system halt
Dec 22 19:59:12 localhost pcscd: winscard.c:304:SCardConnect() Reader E-Gate 0 0
Not Found
Dec 22 19:59:13 localhost smartd[5472]: smartd received signal 15: Terminated
Dec 22 19:59:13 localhost smartd[5472]: smartd is exiting (exit status 0)
Dec 22 19:59:14 localhost avahi-daemon[5410]: Got SIGTERM, quitting.
Dec 22 19:59:14 localhost avahi-daemon[5410]: Leaving mDNS multicast group on in
terface usb0.IPv6 with address fe80::21:5eff:fe9c:b6d7.
Dec 22 19:59:14 localhost avahi-daemon[5410]: Leaving mDNS multicast group on in
terface eth0.IPv6 with address fe80::221:5eff:fe98:b6f4.
Dec 22 19:59:14 localhost avahi-daemon[5410]: Leaving mDNS multicast group on in
terface eth0.IPv4 with address 10.132.0.162.
Dec 22 20:21:08 localhost syslogd 1.4.1: restart.
Dec 22 20:21:08 localhost kernel: klogd 1.4.1, log source = /proc/kmsg started.
Dec 22 20:21:08 localhost kernel: Linux version 2.6.18-164.el5 (mockbuild@x86-00
3.build.bos.redhat.com) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)) #1 SMP T
ue Aug 18 15:51:48 EDT 2009
# 查询Linux端口占用情况和kill进程
#查询某一个端口占用情况
netstat –apn | grep 8080
# 提示找不到netstat命令就安装一下
yum install net-tools
# 首先,用ps查看进程,方法如下:
$ ps -ef
# 或者:
$ ps -aux
# 然后kill进程
$ kill -s 9 1827
# Rsync 数据同步工具应用指南
# Rsync 简介
Rsync是一款开源的、快速的 多功能的 可以实现全量以及增量的本地或者是远程的数据同步(拷贝)备份的工具
rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。
通过cwrsync已支持跨平台,可以在Windows与Linux间进行数据同步.
# 应用场景
# 异地备份
审计内控需求,需要对关键业务系统的数据做异地备份。通过rsync+crontab每天凌晨同步一下本地的备份文件到异地机房
# 日常工作文件备份
日常工作文件存储在个人电脑上,不乏重要文件,通过rsync备份到文件服务器中
# 附件、配置文件、代码备份
企业备份通常重视数据库的备份而忽略了应用服务器中的附件、配置文件的备份。通过rsync
# 云主机双写互备
解决存储服务器等单点问题,rsync结合inotify做实时的数据同步,根据服务器上目录的变化同步到备份服务器,还可以通过双写方案实现双机数据同步。多个副本文件备份,保障数据安全。
# 安装
windows下使用图形安装界面cwrsync,服务端和客户端分别安装。如果需要从多个服务器往一个服务器同步文件,是需要安装多个服务端,一个客户端。 客户端通过服务端开放的端口从服务端拉取文件到客户端。 结构如下图:
//master
#安装rsync命令
yum -y install rsync
#关闭防火墙,selinux
systemctl stop firewalld
setenforce 0
//bak
#安装rsync命令
yum -y install rsync
#关闭防火墙,selinux
systemctl stop firewalld
setenforce 0
# 配置文件
#rsyncd.conf配置文件说明:
log file = /var/log/rsyncd.log # 日志文件位置,启动rsync后自动产生这个文件,无需提前创建
pidfile = /var/run/rsyncd.pid # pid文件的存放位置
lock file = /var/run/rsync.lock # 支持max connections参数的锁文件
secrets file = /etc/rsync.pass # 用户认证配置文件,里面保存用户名称和密码,必须手动创建这个文件
[erp_bak_client] # 自定义同步名称
path = /chengweniterpbak/ # rsync目标服务器数据存放路径,源服务器的数据将同步至此目录
comment = sync etc from client
uid = root # 设置rsync运行权限为root
gid = root # 设置rsync运行权限为root
port = 873 # 默认端口,建议根据实际修改,并仅允许客户端IP访问
ignore errors # 表示出现错误忽略错误
use chroot = no # 默认为true,目录权限
read only = no # rsync源服务器为读写权限
list = no # 不显示rsync源服务器资源列表
max connections = 200 # 最大连接数
timeout = 600 # 超时时间
auth users = admin # 执行数据同步的用户名,多个用逗号隔开
hosts allow = 10.11.11.11 # 可以进行数据同步的源服务器IP地址,多个用逗号隔开
hosts deny = 10.11.11.12 # 禁止同步数据的源服务器IP地址,多个用逗号隔开
- 备份脚本
#!/bin/bash
rsync --progress -avztSH /data/backup erp@10.11.0.31::erpbak --password-file=/root/rsync.pas
- crontab
30 02 * * * /data/backup/rsyncbakdmp.sh
# linux scp命令不同主机间拷贝文件
# 从本地拷贝文件到远程机
$ sudo scp -P *** /home/ubuntu/footer_icon.png root@*.*.*.*:/home
# 从远程机拷贝文件到本地
$scp root@10.6.159.147:/opt/soft/demo.tar /opt/soft/
# linux下重启oracle服务:监听器和实例
# 方法1:
用root以ssh登录到linux,打开终端输入以下命令:
cd $ORACLE_HOME #进入到oracle的安装目录
dbstart #重启服务器
lsnrctl start #重启监听器
cd $ORACLE_HOME #进入到oracle的安装目录
dbstart #重启服务器
lsnrctl start #重启监听器
# 方法2:
cd $ORACLE_HOME/bin #进入到oracle的安装目录
./dbstart #重启服务器
./lsnrctl start #重启监听器
# 方法3:
- 以oracle身份登录数据库,命令:su -oracle
- 进入Sqlplus控制台,命令:sqlplus /nolog
- 以系统管理员登录,命令:connect / as sysdba
- 启动数据库,命令:startup
- 如果是关闭数据库,命令:shutdown immediate
- 退出sqlplus控制台,命令:exit
- 进入监听器控制台,命令:lsnrctl
- 启动监听器,命令:start
- 退出监听器控制台,命令:exit
# 重启实例:
- 切换需要启动的数据库实例:export ORACLE_SID=C1
- 进入Sqlplus控制台,命令:sqlplus /nolog
- 以系统管理员登录,命令:connect / as sysdba
- 如果是关闭数据库,命令:shutdown abort
- 启动数据库,命令:startup
- 退出sqlplus控制台,命令:exit
# Linux下Oracle修改主机名后LISTENER,TNSNAME.ora
需要修改以下两个文件,注意 /etc/hosts文件主机名指向的IP
/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# tomcat在Linux下调优参数
JAVA_OPTS="-server -Xms8192m -Xmx8192m -Xss512k -XX:+AggressiveOpts
-XX:+UseBiasedLocking -XX:PermSize=2096m -XX:MaxPermSize=2096m
-XX:+DisableExplicitGC
-XX:MaxTenuringThreshold=31
-XX:+UseConcMarkSweepGC
-XX:+UseParNewGC
-XX:+CMSParallelRemarkEnabled
-XX:+UseCMSCompactAtFullCollection
-XX:LargePageSizeInBytes=128m
-XX:+UseFastAccessorMethods
-XX:+UseCMSInitiatingOccupancyOnly
-Djava.awt.headless=true"
# CentOS安装jdk1.8
首先到官网下载jdk-8u171-linux-x64.tar.gz, http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-downloads-2133151-zhs.html
通过终端在/usr/local目录下新建java文件夹,命令行:
mkdir /usr/local/java
- 然后将下载到压缩包剪切到java文件夹中,命令行:
mv jdk-8u66-linux-x64.tar.gz /usr/local/java
- 然后进入java目录,命令行:
cd /usr/local/java
- 解压压缩包,命令行:
tar zxvf jdk-8u66-linux-x64.tar.gz
- 设置jdk环境变量,修改etc/profile,它是是所有用户的共用的环境变量
vi /etc/profile
- 打开之后在末尾添加
JAVA_HOME=/usr/local/java/jdk1.8.0_66
JRE_HOME=/usr/local/java/jdk1.8.0_66/jre
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$JAVA_HOME/bin:$PATH
export PATH JAVA_HOME CLASSPATH
- 使环境变量生效
source /etc/profile
- 看看自己的配置是否都正确
echo $JAVA_HOME
echo $CLASSPATH
echo $PATH
- 检验是否安装成功
java -version
/* java version "1.8.0_66"
Java(TM) SE Runtime Environment (build 1.8.0_66-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode) */
# centos6.9部署OpenLDAP和web管理界面,迁移AD-LDAP
公司原使用微软的ADLDAP,操作系统用的非正版的windows server 2008 r2,因考虑知识产权风险,需把ldap迁移导centos上,下面是在centos搭建openldap 和 部署web管理界面 以及迁移AD ldap的过程记录
- 环境搭建
- 操作系统:centos6.9 x86_64
- 关闭防火墙、selinux
- 配置域名解析:
echo "192.168.1.252 chengwenit.com" >> /etc/hosts
- 解决依赖关系
yum grouplist
Base
Debugging Tools
Performance Tools
Compatibility libraries
Development tools
Dial-up Networking Support
Hardware monitoring utilities
如果缺少组包,需要安装
yum groupinstall -y "Compatibility libraries"
- 安装openldap master
yum install -y openldap openldap-*
yum install -y nscd nss-pam-ldapd nss-* pcre pcre*
rpm -qa | grep openldap*
compat-openldap-2.3.43-2.el6.x86_64
openldap-2.4.40-12.el6.x86_64
openldap-clients-2.4.40-12.el6.x86_64
openldap-servers-sql-2.4.40-12.el6.x86_64
openldap-servers-2.4.40-12.el6.x86_64
openldap-devel-2.4.40-12.el6.x86_64
- 配置slapd.conf文件
cd /etc/openldap/
[root@node5 openldap]# cp /usr/share/openldap-servers/slapd.conf.obsolete slapd.conf
[root@node5 openldap]# cp slapd.conf slapd.conf.bak
[root@node5 openldap]# slappasswd -s chengwenit|sed -e "s#{SSHA}#rootpw\t{SSHA}#g"
rootpw {SSHA}D9+lqUJZVPobp0sZfXl37jE1aVvR2P9K
[root@node5 openldap]# slappasswd -s chengwenit|sed -e "s#{SSHA}#rootpw\t{SSHA}#g">>/etc/openldap/slapd.conf
[root@node5 openldap]# tail -1 slapd.conf
rootpw {SSHA}FvBRnIPqtIi0/u11O2gOfOCrRJr+xMAr
vi slapd.conf
# 注释掉一下四行
# database dbb
#suffix "dc=my-domain,dc=com"
#checkpoint 1024 15
#rootdn "cn=Manager,dc=my-domain,dc=com"
# 添加如下内容
# add start by Evan 2016/07/01
database bdb
suffix "dc=chengwenit,dc=com"
rootdn "cn=admin,dc=chengwenit,dc=com"
对比修改是否成功:
[plain] view plain copy
# diff slapd.conf.bak slapd.conf
114,117c114,122
< database bdb
< suffix "dc=my-domain,dc=com"
< checkpoint 1024 15
< rootdn "cn=Manager,dc=my-domain,dc=com"
---
> #database bdb
> #suffix "dc=my-domain,dc=com"
> #checkpoint 1024 15
> #rootdn "cn=Manager,dc=my-domain,dc=com"
> # add start by Evan 2016/07/01
> database dbd
> suffix "dc=chengwenit,dc=com"
> rootdn "cn=admin,dc=chengwenit,dc=com"
>
140a146
> rootpw {SSHA}FvBRnIPqtIi0/u11O2gOfOCrRJr+xMAr
# 添加如下内容
cat >> /etc/openldap/slapd.conf<<EOF
# add start by Evan 2016/07/01
loglevel 296
cachesize 1000
checkpoint 2018 10
EOF
参数说明:
- loglevel 296 # 日志级别,记录日志信息方便调试,296级别是由256(日志连接/操作/结果)、32(搜索过滤器处理)、8(连接管理)累加的结果
- cachesize 1000 # 设置ldap可以换成的记录数
- checkpoint 2018 10 # 可以设置把内存中的数据协会数据文件的操作上,上面设置表示每达到2048KB或者10分钟执行一次,checkpoint即写入数据文件的操作
- ldap授权及安全参数配置
vi /etc/openldap/slapd.conf
# 删除如下内容:
[plain] view plain copy
database config
access to *
by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" manage
by * none
# enable server status monitoring (cn=monitor)
database monitor
access to *
by dn.exact="gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth" read
by dn.exact="cn=Manager,dc=my-domain,dc=com" read
by * none
改为:
access to *
by self write
by anonymous auth
by * read
- 加入日志记录
cp /etc/rsyslog.conf /etc/rsyslog.conf.bak.$(date +%F%T)
echo '#record ldap.log by Evan 2016-07-01' >> /etc/rsyslog.conf
echo 'local4.* /var/log/ldap.log'>> /etc/rsyslog.conf
tail -1 /etc/rsyslog.conf
local4.* /var/log/ldap.log
service rsyslog restart
- 配置ldap数据库路径
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
[root@node5 openldap]# ll /var/lib/ldap/DB_CONFIG
-rw-r--r-- 1 root root 845 Jul 1 17:29 /var/lib/ldap/DB_CONFIG
[root@node5 openldap]# chown ldap:ldap /var/lib/ldap/DB_CONFIG
[root@node5 openldap]# chmod 700 /var/lib/ldap/
[root@node5 openldap]# ls -l /var/lib/ldap/
total 4
-rw-r--r-- 1 ldap ldap 845 Jul 1 17:29 DB_CONFIG
验证配置是否Ok
slaptest -u
config file testing succeeded
- 启动服务:
# /etc/init.d/slapd restart
# lsof -i :389
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
slapd 50735 ldap 7u IPv4 75541 0t0 TCP *:ldap (LISTEN)
slapd 50735 ldap 8u IPv6 75542 0t0 TCP *:ldap (LISTEN)
[root@node5 openldap]# ps -ef |grep ldap|grep -v grep
ldap 50735 1 0 17:33 ? 00:00:00 /usr/sbin/slapd -h ldap:/// ldapi:/// -u ldap
配置随机启动
# chkconfig slapd on
[root@node5 openldap]# chkconfig --list slapd
slapd 0:off1:off2:on3:on4:on5:on6:off
- 测试查找内容
# ldapsearch -LLL -W -x -H ldap://chengwenit.com-D "cn=admin,dc=chengwenit,dc=com" -b "dc=chengwenit,dc=com" "(uid=*)"
Enter LDAP Password: 报错: ldap_bind: Invalid credentials (49)
解决办法: [plain] view plain copy
# rm -rf /etc/openldap/slapd.d/*
# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
57763ec6 bdb_monitor_db_open: monitoring disabled; configure monitor database to enable
config file testing succeeded
# ldapsearch -LLL -W -x -H ldap://chengwenit.com-D "cn=admin,dc=chengwenit,dc=com" -b "dc=chengwenit,dc=com" "(uid=*)"
Enter LDAP Password:
No such object (32)
重启服务
# service slapd restart
Stopping slapd: [FAILED]
Checking configuration files for slapd: [FAILED]
57763eee ldif_read_file: Permission denied for "/etc/openldap/slapd.d/cn=config.ldif"
slaptest: bad configuration file!
[root@node5 openldap]# chown -R ldap.ldap /etc/openldap/slapd.d/
[root@node5 openldap]# service slapd restart
Stopping slapd: [FAILED]
Starting slapd: [ OK ]
# lsof -i :389
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
slapd 51164 ldap 7u IPv4 77503 0t0 TCP *:ldap (LISTEN)
slapd 51164 ldap 8u IPv6 77504 0t0 TCP *:ldap (LISTEN)
- 为ldap master初始化数据(如果不初始化,后面无法通过web界面管理)
增加初始的入口(entries)
- 创建LDIF文件 编辑一个LDIF格式文件:
# vi base.ldif
[plain] view plain copy
dn: dc=chengwenit, dc=com
objectClass: organization
objectClass: dcObject
dc: chengwenit
o: chengwenit
dn: ou=People, dc=chengwenit, dc=com
objectClass: organizationalUnit
ou: People
dn: ou=group, dc=chengwenit, dc=com
objectClass: organizationalUnit
ou: group
dn: cn=tech, ou=group, dc=chengwenit, dc=com
objectClass: posixGroup
description:: 5oqA5pyv6YOo
gidNumber: 10001
cn: tech
# vi Evan.ldif
[plain] view plain copy
dn: uid=Evan,ou=People,dc=chengwenit,dc=com
objectClass: posixaccount
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
homeDirectory: /home/Evan
loginShell: /bin/bash
uid: Evan
cn: Evan
userPassword:: 55G/ReqPKeOZ8SpgszwIQhaBXySNU4mw
uidNumber: 10005
gidNumber: 10001
sn: Evan
[plain] view plain copy
# ldapadd -x -H ldap://chengwenit.com-D "cn=admin,dc=chengwenit,dc=com" -W -f base.ldif
Enter LDAP Password:
adding new entry "dc=chengwenit, dc=com"
adding new entry "ou=People, dc=chengwenit, dc=com"
adding new entry "ou=group, dc=chengwenit, dc=com"
adding new entry "cn=tech, ou=group, dc=chengwenit, dc=com"
- 运行ldapadd
# ldapadd -x -H ldap://chengwenit.com-D "cn=admin,dc=chengwenit,dc=com" -W -f base.ldif
Enter LDAP Password:
[plain] view plain copy
报错:
adding new entry "dc=chengwenit,dc=com"
ldap_add: Invalid syntax (21)
additional info: objectClass: value #0 invalid per syntax
原因:ldif文件中存在空格 或者 个别单词拼写错误
正确书写格式:
(1空行)
dn:(空格) dc=mail,dc=kaspersky,dc=com(结尾无空格)
objectclass: (空格)dcObject(结尾无空格)
objectclass: (空格)organization(结尾无空格)
o: (空格)kaspersky(结尾无空格)
dc:(空格) test(结尾无空格)
(1空行)
dn: (空格)cn=test,dc=mail,dc=kaspersky,dc=com(结尾无空格)
objectclass: (空格)organizationalRole(结尾无空格)
cn: (空格)test(结尾无空格)
(结尾无空行)
# ldapadd -x -H ldap://chengwenit.com-D "cn=admin,dc=chengwenit,dc=com" -W -f Evan.ldif
Enter LDAP Password:
adding new entry "uid=Evan,ou=People,dc=chengwenit,dc=com"
- 检查是否已经开始正常工作
# ldapsearch -LLL -W -x -H ldap://chengwenit.com-D "cn=admin,dc=chengwenit,dc=com" -b "dc=chengwenit,dc=com" "(uid=*)"
Enter LDAP Password:
dn: uid=Evan,ou=People,dc=chengwenit,dc=com
objectClass: posixAccount
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
homeDirectory: /home/Evan
loginShell: /bin/bash
uid: Evan
cn: Evan
userPassword:: 55G/ReqPKeOZ8SpgszwIQhaBXySNU4mw
uidNumber: 10005
gidNumber: 10001
sn: Evan
# linux 给用户加sudo权限
- 用root帐号登录或者su到root。
- 增加sudoers文件的写权限: chmod u+w /etc/sudoers
- vi /etc/sudoers 找到 root ALL=(ALL) ALL 在这行下边添加 chengwenit ALL=(ALL) ALL (ps:chengwenit代表是你要添加sudo权限的用户名)
- 除去sudoers文件的写权限: chmod u-w /etc/sudoers
# linux下 tar 打包文件和目录(压缩和解压)
打包:tar -czvf ***.tar.gz 解压:tar -xzvf ***.tar.gz 示例:解压jdk到指定文件夹:
tar -xzvf jdk-8u131-linux-x64.tar.gz -C /usr/local/java
tar -czf jpg.tar.gz *.jpg #将目录里所有jpg文件打包成jpg.tar后,并且将其用gzip压缩,生成一个gzip压缩过的包,命名为jpg.tar.gz
- 单个文件压缩打包 tar czvf my.tar file1
- 多个文件压缩打包 tar czvf my.tar file1 file2,...
- 单个目录压缩打包 tar czvf my.tar dir1
- 多个目录压缩打包 tar czvf my.tar dir1 dir2
- 解包至当前目录:tar xzvf my.tar
# 解压
- tar -xvf file.tar //解压 tar包
- tar -xzvf file.tar.gz //解压tar.gz
- tar -xjvf file.tar.bz2 //解压 tar.bz2
- tar -xZvf file.tar.Z //解压tar.Z
- unrar e file.rar //解压rar
- unzip file.zip //解压zip
# 部署ngrok服务
微信开发测试环境使用公网IP转发的80端口进行本地调试
- 安装gcc
yum install gcc
- 安装git
yum install git
下载go https://www.golangtc.com/download
解压
tar -xzvf go1.9.2.linux-amd64.tar.gz -C /usr/local/
- 设置环境变量 vi /etc/profile
GO_HOME=/usr/local/go
export PATH=$PATH:$GO_HOME/bin
- 生效环境变量配置文件和检查是否安装成功
source /etc/profile
go version
- git 克隆 ngrok
git clone https://github.com/inconshreveable/ngrok.git
- 生成证书
NGROK_DOMAIN="vip.chengwenit.com"
openssl genrsa -out base.key 2048
openssl req -x509 -new -nodes -key base.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out base.pem
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr
openssl x509 -req -in server.csr -CA base.pem -CAkey base.key -CAcreateserial -out server.crt -days 5000
- 替换证书
cp base.pem assets/client/tls/ngrokroot.crt
- 编译生成ngrok服务器
make release-server release-client
- 启动ngrok服务
./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="vip.chengwenit.com" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443"
# 后台运行:
setsid ./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain="vip.chengwenit.com" -httpAddr=":80" -httpsAddr=":443" -tunnelAddr=":4443"
- 生成客户端(windows)
GOOS=windows GOARCH=amd64 make release-client
新建ngrok.cfg文件和配置 进入windows_amd64: touch ngrok.cfg 打开文件 erver_addr: "vip.chengwenit.com:4443" trust_host_root_certs:false
拷贝到windows机器上
启动客户端
ngrok -config=ngrok.cfg -subdomain=myapps 8080
http://myapps.vip.chengwenit.com -> 127.0.0.1:8080
ok
复杂ngrok.cfg配置
server_addr: "myngrok.com:8083"
trust_host_root_certs: false
tunnels:
http:
subdomain: "www"
proto:
http: "8081"
https:
subdomain: "www"
proto:
https: "8082"
web:
proto:
http: "8050"
tcp:
proto:
tcp: "8001"
remote_port: 5555
ssh:
remote_port: 2222
proto:
tcp: "22"
启动命令
ngrok -config=ngrok.cfg start web #启动web服务
ngrok -config=ngrok.cfg start tcp #启动tcp服务
ngrok -config=ngrok.cfg start web tcp #同时启动两个服务
ngrok -config=ngrok.cfg start-all #启动所有服务
# 转:推荐一款很好用的内网穿透工具 FRP
由于ngrok开源版本不支持客户端和服务端的身份认证。重新部署一个服务来试试
引用
https://www.hi-linux.com/posts/25686.html (opens new window)
0.22版 客户端和服务端的身份认证 是 token = xxx
- 后台运行: nohup /opt/frpc0270/frpc -c /opt/frpc0270/frpc.ini frp.log 2>&1 &
# linux centos 静默安装Oracle 11gR2(11.2.0.4)
因客户使用的Oracle11g数据库,版本是11.2.0.2,新erp系统管理中心有功能需Oracle11.2.0.4版本才支持,以下是安装步骤。
- 下载安装 centos
https://www.centos.org/download/ (opens new window)
选择最新版本的 Minimal ISO。操作系统安装过程不在这里详细展开,选择最小安装即可。静默安装无需图形界面
下载Oracle 因客户有购买Oracle的正版license,可以通过Oracle官网下载到11.2.0.4版本的程序,如果没有metalink账号,可以点击我分享的百度云链接下载,所有平台的程序都有。 链接:https://pan.baidu.com/s/1s3_Lqgo7-hB6QMX8nKpi-g (opens new window) 提取码:bss7
通过WIN-SCP把安装文件上传到服务器逐个解压
unzip linux.x64_11gR2_database_1of2.zip
unzip linux.x64_11gR2_database_2of2.zip
- 安装依赖包之前,建议最好将yum源修改为aliyun源,国外的源速度太慢 执行如下命令:
cd /etc
mv yum.repos.d yum.repos.d.bak
mkdir yum.repos.d
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache
- 安装依赖包
yum -y install binutils \
compat-libstdc++-33 \
elfutils-libelf \
elfutils-libelf-devel \
expat \
gcc \
gcc-c++ \
glibc \
glibc-common \
glibc-devel \
glibc-headers \
libaio \
libaio-devel \
libgcc \
libstdc++ \
libstdc++-devel \
make \
pdksh \
sysstat \
unixODBC \
unixODBC-devel
安装过程检查是否有包安装成功 可以看到 pdksh 没安装成功,是因为CentOS 7 没有相关安装包可用
通过wget下载pdksh包安装
wget -O /download/pdksh-5.2.14-37.el5_8.1.x86_64.rpm http://vault.centos.org/5.11/os/x86_64/CentOS/pdksh-52.14-37.el5_8.1.x86_64.rpm
rpm -ivh pdksh-5.2.14-37.el5_8.1.x86_64.rpm
- 检查依赖包是否都已完整安装,如果安装的中文语言 grep 后改成 "未安装"
rpm -q \
binutils \
compat-libstdc++-33 \
elfutils-libelf \
elfutils-libelf-devel \
expat \
gcc \
gcc-c++ \
glibc \
glibc-common \
glibc-devel \
glibc-headers \
libaio \
libaio-devel \
libgcc \
libstdc++ \
libstdc++-devel \
make \
pdksh \
sysstat \
unixODBC \
unixODBC-devel | grep "not installed"
- 添加oracle用户组和用户
groupadd oinstall
groupadd dba
groupadd asmadmin
groupadd asmdba
useradd -g oinstall -G dba,asmdba oracle -d /home/oracle
- 设置Oracle用户密码
passwd oracle
- 配置hosts
vi /etc/hosts
10.10.11.xxx chwit-oracle1124
- 测试hostname是否可以连接
ping -c 4 chwit-oracle1124
- 优化OS内核参数
kernel.shmmax 参数设置为物理内存的一半
vi /etc/sysctl.conf
fs.aio-max-nr=1048576
fs.file-max=6815744
kernel.shmall=2097152
kernel.shmmni=4096
kernel.shmmax = 1073741824
kernel.sem=250 32000 100 128
net.ipv4.ip_local_port_range=9000 65500
net.core.rmem_default=262144
net.core.rmem_max=4194304
net.core.wmem_default=262144
net.core.wmem_max=1048586
- 使参数生效
sysctl -p
- 限制oracle用户的shell权限
vi /etc/security/limits.conf
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
vi /etc/pam.d/login
session required /lib64/security/pam_limits.so
session required pam_limits.so
vi /etc/profile
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi
- 创建oracle安装目录配置目录权限
mkdir -p /db/app/oracle/product/11.2.0
mkdir /db/app/oracle/oradata
mkdir /db/app/oracle/inventory
mkdir /db/app/oracle/fast_recovery_area
chown -R oracle:oinstall /db/
chmod -R 775 /db/
- 配置oracle用户环境变量
su - oracle
vi .bash_profile
umask 022
export ORACLE_HOSTNAME=chwit-oracle1124
export ORACLE_BASE=/db/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/
export ORACLE_SID=ORCL
export PATH=.:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$ORACLE_HOME/jdk/bin:$PATH
export LC_ALL="en_US"
export LANG="en_US"
export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
- 新建配置文件目录,根据实际情况修改安装配置文件
mkdir /db/etc/
cp /db/database/response/* /db/etc/
vi /db/etc/db_install.rsp
oracle.install.option=INSTALL_DB_SWONLY
DECLINE_SECURITY_UPDATES=true
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/db/app/oracle/inventory
SELECTED_LANGUAGES=en,zh_CN
ORACLE_HOSTNAME=chwit-oracle1124
ORACLE_HOME=/db/app/oracle/product/11.2.0
ORACLE_BASE=/db/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.isCustomInstall=true
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=dba
DECLINE_SECURITY_UPDATES=true
- 切换到Oracle用户开始安装
su - oracle
./runInstaller -silent -ignorePrereq -responseFile /db/etc/db_install.rsp
安装过程中可以tail命令看oracle的安装日志
tail -f /db/app/oracle/inventory/logs/installActions2022-08-12_10-48-29PM.log
- 安装完成后切换到root用户根据提示执行脚本
su root
sh /db/app/oracle/inventory/orainstRoot.sh
sh /db/app/oracle/product/11.2.0/root.sh
- 切换回配置静默监听
su - oracle
netca /silent /responsefile /db/etc/netca.rsp
- 查看监听端口
netstat -tnulp | grep 1521
- 静默创建数据库(搭建adg 从库不需要创建数据库)
TOTALMEMORY 设置为总内存的80%
vi /db/etc/dbca.rsp
GDBNAME = "orcl"
SID = "orcl"
SYSPASSWORD = "chwit20190812"
SYSTEMPASSWORD = "chwit20190812"
SYSMANPASSWORD = "chwit20190812"
DBSNMPPASSWORD = "chwit20190812"
DATAFILEDESTINATION =/db/app/oracle/oradata
RECOVERYAREADESTINATION=/db/app/oracle/fast_recovery_area
CHARACTERSET = "AL32UTF8"
TOTALMEMORY = "1638"
- 执行静默建库
dbca -silent -responseFile /db/etc/dbca.rsp
- 安装完成后启动监听和数据库
lsnrctl start
sqlplus / as sysdba
startup
至此安装结束,可以用客户端工具测试连接
# openldap主从复制
背景: 公司很多服务,比如gitlab/itsm/crm/jira等依赖openldap的服务进行认证和权限管理,目前仅一台服务器如果宕机影响较大,故搭建一个从ldap服务器提高可用性,也当做备份
# 主ldap配置
vi /etc/openldap/slapd.conf
modulepath /usr/lib64/openldap
moduleload syncprov.la
# master replia server start
overlay syncprov
syncprov-checkpoint 100 10
syncprov-sessionlog 100
如以上,打开slapd.conf文件,取消前面两行注释,新增下面四行
删除目录
如果是生产环境,请注意备份后再操作,第一步修改配置文件也是
rm -rf /etc/openldap/slapd.d/*
重新生成配置文件
slaptest -u
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/
重启服务
service slapd restart
# 从ldap配置
取消两行注释
vi /etc/openldap/slapd.conf
modulepath /usr/lib64/openldap
moduleload syncprov.la
在index nisMapName,nisMapEntry eq,pres,sub行后新增下面两行
# slave replica statement start
syncrepl rid=123 provider=ldap://ldapmaster.chengwenit.com:389 type=refreshOnly
配置文件修改后运行下面命令
rm -rf /etc/openldap/slapd.d/*
slaptest -u
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d/
chown -R ldap. /etc/openldap/slapd.d/
service slapd restart
以上完成后可进行测试
# centos7 部署nginx +配置SSL证书
nginx.conf (opens new window)## 首先安装依赖
yum install gcc-c++
yum install pcre pcre-devel
yum install zlib zlib-devel
yum install openssl openssl-devel
# 下载 解压
wget从官网下载最新稳定版本
wget wget http://nginx.org/download/nginx-1.19.4.tar.gz
tar -xzvf nginx-1.19.4.tar.gz
# 配置
配置安装的路径和模块,不带参数为默认配置 安装在 /usr/local/nginx
./configure --prefix=/opt/nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_ssl_module
# 编译安装
make
make install
# 配置SSL nginx.conf配置
#运行用户
#user nobody;
#启动进程,通常设置成和cpu的数量相等
worker_processes 1;
#全局错误日志
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#PID文件
#pid logs/nginx.pid;
#工作模式及连接数上限
events {
worker_connections 1024; #单个后台worker process进程的最大并发链接数
}
#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
#设定mime类型,类型由mime.type文件定义
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#设定日志格式
#access_log logs/access.log main;
#指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
#必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
sendfile on;
#tcp_nopush on;
#连接超时时间
#keepalive_timeout 0;
keepalive_timeout 65;
#开启gzip压缩
#gzip on;
server {
#侦听11111端口
listen 443 ssl;
#定义使用本机访问
server_name kfwy.chwit.vip;
#charset koi8-r;
#设定本虚拟主机的访问日志
#access_log logs/host.access.log main;
ssl_certificate cert/4729903_kfwy.chwit.vip.pem;
ssl_certificate_key cert/4729903_kfwy.chwit.vip.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
#默认请求
location / {
root html;
index index.html index.htm Index.jsp index.jsp;
client_max_body_size 100m; #定义首页索引文件的名称
}
# 定义错误提示页面
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#禁止访问 .htxxx 文件
#location ~ /\.ht {
# deny all;
#}
location /kfpsm/ {
index index.html index.htm index.jsp;
proxy_pass http://127.0.0.1:8008/kfpsm/;
proxy_set_header X-Real-IP $remote_addr;
# auth_basic "nginx basic http test for ttlsa.com";
# auth_basic_user_file passwd.db;
client_max_body_size 100m;
proxy_next_upstream http_502 http_504 http_404 error timeout invalid_header;
#proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
proxy_http_version 1.1;
}
}
server {
listen 80;
server_name kfwy.chwit.vip; #修改为申请证书绑定的域名
rewrite ^(.*)$ https://${server_name}$1 permanent;
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#第一个虚拟服务器
#server {
#侦听8000端口,8080端口
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
- 成集云nginx配置文件
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# 限制body大小
client_max_body_size 100m;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
upstream server {
ip_hash;
server 10.11.11.52:41066;
}
upstream monitor-admin {
server 10.11.11.52:41063;
}
upstream xxljob-admin {
server 10.11.11.52:61064;
}
server {
listen 80;
server_name 10.11.11.52;
# https配置参考 start
#listen 443 ssl;
# 证书直接存放 /docker/nginx/cert/ 目录下即可 更改证书名称即可 无需更改证书路径
#ssl on;
#ssl_certificate /etc/nginx/cert/xxx.local.crt; # /etc/nginx/cert/ 为docker映射路径 不允许更改
#ssl_certificate_key /etc/nginx/cert/xxx.local.key; # /etc/nginx/cert/ 为docker映射路径 不允许更改
#ssl_session_timeout 5m;
#ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
#ssl_prefer_server_ciphers on;
# https配置参考 end
# 演示环境配置 拦截除 GET POST 之外的所有请求
# if ($request_method !~* GET|POST) {
# rewrite ^/(.*)$ /403;
# }
# location = /403 {
# default_type application/json;
# return 200 '{"msg":"演示模式,不允许操作","code":500}';
# }
# 限制外网访问内网 actuator 相关路径
location ~ ^(/[^/]*)?/actuator(/.*)?$ {
return 403;
}
location / {
root /opt/nginx/html;
try_files $uri $uri/ /index.html;
index index.html index.htm;
}
location /prod-api/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://server/;
}
# 积木报表
location /jmreport/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://server/jmreport/;
}
# https 会拦截内链所有的 http 请求 造成功能无法使用
# 解决方案1 将 admin 服务 也配置成 https
# 解决方案2 将菜单配置为外链访问 走独立页面 http 访问
location /admin/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://monitor-admin/admin/;
}
# https 会拦截内链所有的 http 请求 造成功能无法使用
# 解决方案1 将 xxljob 服务 也配置成 https
# 解决方案2 将菜单配置为外链访问 走独立页面 http 访问
location /chwjob/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://xxljob-admin/chwjob/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
# 开机自动启动
echo -e "/opt/nginx/sbin/nginx" >>/etc/rc.d/rc.local
chmod +x /etc/rc.d/rc.local
# RedHat/centos安装python3和virtualenv
因需要把一个Windows机器下架,一个python3下做的自动读Oracle数据库发邮件的脚本迁移到RedHat6机器上,RedHat自带python,且yum依赖python2,所以单独安装一个python3. 以后部署其他python程序可能用到版本不同的包,所以安装virtualenv来创建一个隔离的python3运行环境
- 下载解压python3源码包
https://www.python.org/downloads/source/
xz -d Python-3.5.2.tar.xz
tar xvf Python-3.5.2.tar
- yum安装Python3依赖后编译安装
sudo yum -y install gcc gcc-c++
sudo yum -y install zlib zlib-devel
sudo yum -y install libffi-devel
./configure
make
make install
- pip安装virtualenv
pip3 install virtualenv
# linux Centos部署frps
# 安装
# 解压文件
tar -xzvf frp_0.27.0_linux_amd64.tar.gz
# 删除多余文件(可省略)
rm -rf frp_0.27.0_linux_amd64/
rm -rf frpc*
rm -rf frps_full.ini
# 修改配置文件
vi frps.ini
# 设置开机启动
cp /opt/frp/frps /usr/bin/
chmod -R 775 /usr/bin/frps
mkdir /etc/frp/
cp /opt/frps/frps.ini /etc/frp/
cp /opt/frps/systemd/frps.service /lib/systemd/system/frps.service
systemctl daemon-reload
systemctl start frps
systemctl enable frps
# Centos7安装MySQL8
# 卸载旧版本(MySQL或者mariadb)
慎用,如果之前的数据库有数据要先备份
for i in $(rpm -qa|grep mysql);do rpm -e $i --nodeps;done
for i in $(rpm -qa|grep mariadb);do rpm -e $i --nodeps;done
rm -rf /var/lib/mysql && rm -rf /etc/my.cnf
# 安装Mysql8的yum源
yum localinstall https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm
# 安装MySQL8服务端
yum install mysql-community-server
- 如果报错 失败的软件包是:mysql-community-client-8.0.32-1.el7.x86_64
- 原因是Mysql的GPG已升级,要重新获取
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
升级GPG 再次安装即可
# 启动服务和设置自动启动
systemctl start mysqld
systemctl enable mysqld
# 查询初始化密码,重置密码
初次登录, 必须重置密码,密码需符合安全要求
grep 'temporary password' /var/log/mysqld.log
mysql -hlocalhost -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Qq+89416695';
# 测试连接,创建数据库
mysql -hlocalhost -uroot -p
create database chwdmsdb0 default character set utf8mb4 collate utf8mb4_general_ci;
# centos7 安装redis6并设置开机启动
# 解压安装包
cd /opt
tar -xzvf redis-6.2.10.tar.gz
# 编译并安装到指定目录
- 安装依赖,gcc最低7以上版本
yum install gcc
- 编译安装redis6
mkdir /opt/redis6
cd /opt/redis-6.2.10
make
make install PREFIX=/opt/redis6
# 指定配置文件启动
- 修改配置文件
vi /opt/redis6/redis.conf
- 成集云redis配置
# redis 密码
requirepass password
# key 监听器配置
# notify-keyspace-events Ex
# 监听端口
port 16379
# 配置持久化文件存储路径
dir /data/redis
# 配置rdb
# 15分钟内有至少1个key被更改则进行快照
save 900 1
# 5分钟内有至少10个key被更改则进行快照
save 300 10
# 1分钟内有至少10000个key被更改则进行快照
save 60 10000
# 开启压缩
rdbcompression yes
# rdb文件名 用默认的即可
dbfilename dump.rdb
# 后台启动
daemonize yes
# 开启aof
appendonly yes
# 文件名
appendfilename "appendonly.aof"
# 持久化策略,no:不同步,everysec:每秒一次,always:总是同步,速度比较慢
# appendfsync always
appendfsync everysec
# appendfsync no
- 启动redis
/opt/redis6/bin/redis-server /opt/redis6/redis.conf
# 设置开机自动启动
- 复制启动脚本到init目录
cp /opt/redis-6.2.10/utils/redisredis_init_script /etc/init.d/redis
- 修改启动配置文件
vi /etc/init.d/redis
- 成集云redis启动配置
#!/bin/sh
#
# Simple Redis init.d script conceived to work on Linux systems
# as it does use of the /proc filesystem.
### BEGIN INIT INFO
# Provides: redis_6379
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Redis data structure server
# Description: Redis data structure server. See https://redis.io
### END INIT INFO
REDISPORT=16379
EXEC=/opt/redis6/bin/redis-server
CLIEXEC=/opt/redis6/bin/redis-cli
PIDFILE=/var/run/redis_${REDISPORT}.pid
CONF="/opt/redis6/redis.conf"
case "$1" in
start)
if [ -f $PIDFILE ]
then
echo "$PIDFILE exists, process is already running or crashed"
else
echo "Starting Redis server..."
$EXEC $CONF
fi
;;
stop)
if [ ! -f $PIDFILE ]
then
echo "$PIDFILE does not exist, process is not running"
else
PID=$(cat $PIDFILE)
echo "Stopping ..."
$CLIEXEC -p $REDISPORT shutdown
while [ -x /proc/${PID} ]
do
echo "Waiting for Redis to shutdown ..."
sleep 1
done
echo "Redis stopped"
fi
;;
*)
echo "Please use start or stop as first argument"
;;
esac
- 设置开机启动
cd /etc/init.d/
chkconfig redis on
systemctl start redis
# 时间同步设置
# 安装ntpdate
yum install ntpdate
# 从阿里云ntp服务器同步时间
也可以设置其他的ntp服务器(如中国国家授时中心:210.72.145.44)或者自己搭建的ntp服务器
ntpdate ntp1.aliyun.com
# crontab开启定时同步
echo "*/10 * * * * /usr/sbin/ntpdate ntp1.aliyun.com > /dev/null 2>&1" >> /var/spool/cron/root