环境:
系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡)
系统版本:CentOS-7-x86_64-Minimal-1611.iso
安装步骤:
1.准备
1.0 查看硬件信息
查看物理cpu个数
[root@centos ~]# grep 'physical id' /proc/cpuinfo | sort -u | wc -l
查看核心数量
[root@centos ~]# grep 'core id' /proc/cpuinfo | sort -u | wc -l
查看线程数
[root@centos ~]# grep 'processor' /proc/cpuinfo | sort -u | wc -l
查看硬盘空间占用
[root@centos ~]# du -h -x --max-depth=1
[root@centos ~]# df -h
查看目录空间占用
[root@centos ~]# du -msh /usr/local/src
查看物理内存,以及swap使用情况
[root@centos ~]# free -h
******************************************
把 /usr/local/src 目录,转到 /data 下
[root@centos ~]# mkdir -p /data
[root@centos ~]# mv /usr/local/src /data
[root@centos ~]# ln -s /data/src /usr/local/src
******************************************
1.1 主机名设置
当前主机名查看
[root@centos ~]# hostname
主机名设置
[root@centos ~]# hostnamectl --static set-hostname tCentos
[root@centos ~]# systemctl restart network
[root@centos ~]# hostname
tCentos
修改目录日期显示格式
[root@centos ~]# vim ~/.bash_profile
最后添加以下内容
export TIME_STYLE='+%Y%m%d %H:%M'
保存退出
[root@centos ~]# source ~/.bash_profile
1.2 设置静态IP、DNS地址(网络设备名称有可能不一样,这里是eno16780032,如使用DHCP获取动态IP,可忽略)
[root@centos ~]# vi /etc/sysconfig/network-scripts/ifcfg-eno16780032
找到BOOTPROTO,并且修改(设为静态网址)
BOOTPROTO="static"
在最后添加三行内容(添加本机IP,子网掩码,网关)
IPADDR="192.168.1.10"
NETMASK="255.255.255.0"
GATEWAY="192.168.1.1"
:wq 保存退出
[root@centos ~]# shutdown -r now
[root@centos ~]# vi /etc/resolv.conf
添加以下几个DNS地址
nameserver 114.114.114.114
nameserver 192.168.1.1
nameserver 8.8.8.8
:wq 保存退出
[root@centos ~]# systemctl restart network
[root@centos ~]# ip addr|grep inet
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
inet 192.168.1.10/24 brd 192.168.1.255 scope global eno16780032
inet6 fe80::250:56ff:feb0:30f2/64 scope link
1.3 更新时间,设置定时同步时间
[root@centos ~]# yum install -y ntpdate
[root@centos ~]# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
手动设置系统时间(测试用)
[root@centos ~]# date -s "2000-1-1"
[root@centos ~]# /usr/sbin/ntpdate us.pool.ntp.org
******************************************************************
同步时间站点:
us.pool.ntp.org
time.nist.gov
******************************************************************
查看当前系统时间
[root@centos ~]# systemctl stop ntpd
[root@centos ~]# systemctl disable ntpd
[root@centos ~]# date
设置定时任务,自动执行
[root@centos ~]# mkdir -p /data/crond
[root@centos ~]# crontab -e
添加以下内容 (每天 02:00同步一次,并且日志记录到 /data/crond/ntpdate.log)
00 02 * * * /usr/sbin/ntpdate us.pool.ntp.org 1>>/data/crond/ntpdate.log 2>&1
:wq 保存退出
1.4 安装基本软件包
[root@centos ~]# yum install vim wget lsof gcc gcc-c++ bzip2 firewalld openssl-devel mlocate -y
配置Vim显示格式
[root@centos ~]# vim /etc/vimrc
在末尾添加以下内容
set nocompatible
set number
filetype on
set history=1000
set background=dark
syntax on
set autoindent
set smartindent
set tabstop=2
set shiftwidth=2
set showmatch
set guioptions-=T
set vb t_vb=
set ruler
set nohls
set incsearch
if has("vms")
set nobackup
else
set backup
endif
:wq 保存退出
VIM格式化使用方法(打开文件后,输入以下命令,第二个G是shift+g)
gg=G
打开selinux ( centos 7.3某个版本设置为enforcing会导致没法重启)
[root@centos ~]# vim /etc/selinux/config
找到这一行,去掉前面的#注释
SELINUX=enforcing
保存,退出
重启后,查询是否关闭(显示Enforcing表示启用,Disabled则表示关闭)
[root@centos ~]# shutdown -r now
[root@centos ~]# getenforce
Enforcing
1.5 更新内核 (4.9 版本及以上的内核均支持全新的 Google BBR TCP 拥塞控制算法)
1.5.1 源码编译内核
[root@centos ~]# yum install vim wget gcc gcc-c++ xz bc ncurses-devel hmaccalc zlib-devel binutils-devel elfutils-libelf-devel bison flex
[root@centos ~]# cd /usr/local/src/
[root@centos ~]# wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.16.13.tar.xz --no-check-certificate
[root@centos ~]# tar -vxf linux-4.16.13.tar.xz
[root@centos ~]# cd linux-4.16.13
[root@centos ~]# uname -r
3.10.0-693.5.2.el7.x86_64
[root@centos ~]# cp /boot/config-3.10.0-693.5.2.el7.x86_64 .config
导入当前配置
[root@centos ~]# make menuconfig
打开菜单后,加入 BBR 模块
Networkingsupport -> Networking options -> TCP:advanced congestion control -> BBR TCP 按M
保存后,退出
[root@centos ~]# sudo sh -c 'yes "" | make oldconfig'
以原配置文件产生新的配置文件,默认回答为YES方式
[root@centos ~]# make
[root@centos ~]# make modules_install install
查看可用内核,设置默认启动内核
[root@centos ~] cat /boot/grub2/grub.cfg |grep menuentry
[root@centos ~] grub2-editenv list
[root@centos ~] grub2-set-default 'CentOS Linux (4.14.1) 7 (Core)'
[root@centos ~] grub2-editenv list
[root@centos ~]# shutdown -r now
开启 TCP BBR
[root@centos ~] echo 'net.core.default_qdisc=fq' | sudo tee -a /etc/sysctl.conf
[root@centos ~] echo 'net.ipv4.tcp_congestion_control=bbr' | sudo tee -a /etc/sysctl.conf
[root@centos ~] sudo sysctl -p
[root@centos ~] cat /etc/sysctl.conf
查看是否开成功
[root@centos ~] sysctl net.ipv4.tcp_available_congestion_control
[root@centos ~] sysctl -n net.ipv4.tcp_congestion_control
[root@centos ~] lsmod | grep bbr
有类似的输出,表未成功开启BBR
net.ipv4.tcp_available_congestion_control = bbr cubic reno
bbr
tcp_bbr 16384 0
1.5.2 删除旧内核
[root@centos ~]# rpm -qa | grep kernel
[root@centos ~]# yum -y remove kernel kernel-devel kernel-tools kernel-tools-libs
1.5.3 手工清理及卸载内核
删除/lib/modules/目录下不需要的内核库文件
删除/boot目录下启动的内核和内核映像文件
更改grub的配置文件,删除不需要的内核启动列表
1.5.4 如果不想升级内核及系统版本,则在执行 yum update之前
在 /etc/yum.conf 的 [main] 后面添加以下配置
exclude=kernel*
exclude=centos-release*
1.6 更新系统,显示系统版本(使用阿里云源)
[root@centos ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
[root@centos ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@centos ~]# yum clean all
[root@centos ~]# yum makecache
[root@centos ~]# yum update -y
更新完成后重启,查看内核版本
[root@centos ~]# shutdown -r now
[root@centos ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
1.7 设置PUTTY远程登录时,不使用密码,使用密钥文件登录(如不需要,可忽略)
1.7.1 服务器上创建目录
[root@centos ~]# mkdir -p /root/.ssh
1.7.2 在"客户机"生成对称密钥,把客户机上的公钥复制到服务器(公钥文件:id_rsa.pub)
[root@centos ~] ssh-keygen -t rsa
根据提示操作,生成公钥
上传到服务器指定目录
[root@centos ~] scp id_rsa.pub root@192.168.1.10/root/.ssh
*** 或使用软件远程复制id_rsa.pub到服务器/root/.ssh中。
1.7.3 查看服务器上,公钥是否已经存在
[root@centos ~]# cd /root/.ssh
[root@centos ~]# ll
-rw-r--r-- 1 root root 394 12月 5 09:33 id_rsa.pub
导入密钥到authorized_keys
[root@centos ~]# cat id_rsa.pub >> authorized_keys
[root@centos ~]# ll /root/.ssh
-rw-r--r-- 1 root root 394 12月 5 09:37 authorized_keys
-rw-r--r-- 1 root root 394 12月 5 09:33 id_rsa.pub
导入后,删除公钥文件
[root@centos ~]# rm id_rsa.pub
设置目录和文件读取权限
[root@centos ~]# chmod 700 /root/.ssh
[root@centos ~]# chmod 600 /root/.ssh/authorized_keys
1.7.4 设置sshd配置文件
[root@centos ~]# vim /etc/ssh/sshd_config
找到GSSAPICleanupCredentials,并且修改为以下内容
GSSAPICleanupCredentials yes
:wq 保存退出
重启sshd服务,让其生效
[root@centos ~]# systemctl restart sshd
1.7.5 客户端设置PUTTY,进行远程登录
打开软件 PuTTYgen
点击load 选择之前客户机生成私钥文件id_rsa, 点击save private key 生成 pKey.ppk文件
打开软件 PuTTY
点击Session,在HostName(or IP address)输入服务器地址
点击Connection下的DATA,在Auto-login username中输入登录账号(当前账号为root)
点击Connection下的SSH下的Auth,点击Browse 选择之前生成 pKeyppk文件
点击Session,在Saved Sessions中,输入需要保存的Session名称,点击保存
1.7.6 设置完成后,即可以远程连接到服务器
打开软件 PuTTY
点击Session,在"Default Settings"下,找到之前已经保存的Session,双击打开连接
如果显示 Authenticating with public key "xxxxx-xxxx"时,即表未成功
1.8 设置新用户,并且使用密码和证书双重认证远程登录。同时禁止root远程登录 (如不需要,可忽略)
1.8.1 root登录后,修改root密码 (安全建议:密码为15位,大小字母+数字+特殊字符)
[root@centos ~]# passwd
1.8.2 添加新用户,并且设置密码
[root@centos ~]# adduser vicowong
[root@centos ~]# passwd vicowong
1.8.3 创建目录,复制密钥相关文件到用户目录,并且设置权限
[root@centos ~]# mkdir /home/vicowong/.ssh -p
[root@centos ~]# cp /root/.ssh/authorized_keys /home/vicowong/.ssh
[root@centos ~]# chmod 700 /home/vicowong/.ssh
[root@centos ~]# chmod 600 /home/vicowong/.ssh/authorized_keys
[root@centos ~]# chown vicowong:vicowong /home/vicowong/.ssh
[root@centos ~]# chown vicowong:vicowong /home/vicowong/.ssh/authorized_keys
1.8.4 设置防火墙,设置远程连接端口(这里是26322)
[root@centos ~]# systemctl enable firewalld
[root@centos ~]# systemctl start firewalld
[root@centos ~]# systemctl status firewalld
[root@centos ~]# firewall-cmd --zone=public --add-port=26322/tcp --permanent
[root@centos ~]# firewall-cmd --reload
[root@centos ~]# iptables -L|grep ACCEPT
1.8.5 安装semanage(用于设置selinux策略)
[root@centos ~]# yum install -y policycoreutils-python selinux-policy selinux-policy-targeted
查看当前 selinux 是否启用 即 Enforcing 状态 (否则有可能设置 selinux 策略不成功)
[root@centos ~]# getenforce
查看当前 selinux 关于远程ssh连接端口的设置
[root@centos ~]# semanage port -l | grep ssh
ssh_port_t tcp 22
添加新端口
[root@centos ~]# semanage port -a -t ssh_port_t -p tcp 26322
1.8.6 设置sshd配置文件
[root@centos ~]# vim /etc/ssh/sshd_config
找到以下内容,并且进行修改
Port 26322
Protocol 2
ServerKeyBits 1024
PermitRootLogin no
AllowUsers vicowong
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PermitEmptyPasswords no
PasswordAuthentication yes
AuthenticationMethods publickey,password
X11Forwarding no
MaxStartups 10:30:60
:wq 保存退出
重启sshd服务,让其生效
[root@centos ~]# systemctl restart sshd
1.8.7 使用新用户登录(重新打开一个新终端,原来的终端先不关,避免因设置不当导致没法连接远程)
打开软件 PuTTY,点击之前保存的Sessions,点击Load读取之前的配置
在Port框输入端口(当前账号为26322)
点击Connection下的DATA,在Auto-login username中输入登录账号(当前账号为vicowong)
点击Session 点击Save。保存当前修改。
点击Open,打开终端。
1.8.8 设置后,必须远程将进行密码和证书双重认证。
远程登录会以vicowong这个账号进行登录。安装维护需要root权限时,可以使用su实现
[root@centos ~]# su root
1.8.9 开机自动禁止被ping (设置为 1:禁止,0:允许)
[root@centos ~]# chmod +x /etc/rc.d/rc.local
[root@centos ~]# vim /etc/rc.d/rc.local
打开后,在最后增加一行
echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all
:wq 保存退出
[root@centos ~]# cat /proc/sys/net/ipv4/icmp_echo_ignore_all
1
1.9 升级 gcc
1.9.1 下载 gcc,解压
[root@centos ~]# cd /usr/local/src
[root@centos ~]# wget ftp://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-8.1.0/gcc-8.1.0.tar.gz
[root@centos ~]# tar zvxf gcc-8.1.0.tar.gz
[root@centos ~]# cd gcc-8.1.0
1.9.2 下载依赖文件,并且刷新
[root@centos ~]# ./contrib/download_prerequisites
[root@centos ~]# ldconfig
1.9.3 创建编辑目录
[root@centos ~]# mkdir gcc-build && cd gcc-build
1.9.4 编译
[root@centos ~]# ../configure --enable-languages=c,c++ --disable-multilib --enable-checking=release --prefix=/opt/gcc
# --prefix=/opt/gcc 指定安装目录(如指定/usr,则覆盖原默认目录,编译后不需要重建软连接)
# --enable-languages,说明你要让你的gcc支持那些语言
# --disable-multilib不生成编译为其他平台可执行代码的交叉编译器
# --disable-checking生成的编译器在编译过程中不做额外检查,也可以使用
# --enable-checking=xxx来增加一些检查
1.9.5 编译、安装
[root@centos ~]# make && make install
**************************************************************************************************************
[root@centos ~]# ldconfig
如提示“ldconfig: /opt/gcc/lib64/libstdc++.so.6.0.25-gdb.py is not an ELF file”
[root@centos ~]# mv /opt/gcc/lib64/libstdc++.so.6.0.25-gdb.py /opt/gcc/lib64/bak.libstdc++.so.6.0.25-gdb.py
**************************************************************************************************************
[root@centos ~]# echo '/opt/gcc/lib64' > /etc/ld.so.conf.d/local-lib64.conf
[root@centos ~]# ldconfig -v
[root@centos ~]# mv /usr/bin/gcc /usr/bin/gcc.bak
[root@centos ~]# mv /usr/bin/g++ /usr/bin/g++.bak
[root@centos ~]# ln -s /opt/gcc/bin/gcc /usr/bin/gcc
[root@centos ~]# ln -s /opt/gcc/bin/g++ /usr/bin/g++
[root@centos ~]# update-alternatives --install /usr/bin/gcc gcc /opt/gcc/bin/gcc 999
1.9.6 重启,查看版本,检查是否成功更新
[root@centos ~]# shutdown -r now
[root@centos ~]# gcc --version
[root@centos ~]# g++ --version
1.10 安装cmake
[root@centos ~]# cd /usr/local/src/
[root@centos ~]# wget https://cmake.org/files/v3.11/cmake-3.11.3.tar.gz
[root@centos ~]# tar zvxf cmake-3.11.3.tar.gz
[root@centos ~]# cd cmake-3.11.3
[root@centos ~]# ./bootstrap && make && make install
1.11 更新安装openssl (依赖zlib库)
[root@centos ~]# cd /usr/local/src/
[root@centos ~]# wget http://zlib.net/zlib-1.2.11.tar.gz
[root@centos ~]# tar zvxf zlib-1.2.11.tar.gz
[root@centos ~]# cd zlib-1.2.11
[root@centos ~]# ./configure && make && make install
[root@centos ~]# openssl version
[root@centos ~]# cd /usr/local/src/
[root@centos ~]# wget https://www.openssl.org/source/openssl-1.1.0h.tar.gz
[root@centos ~]# tar zvxf openssl-1.1.0h.tar.gz
[root@centos ~]# cd openssl-1.1.0h
[root@centos ~]# ./config shared zlib --prefix=/usr && make && make install
*****************************************************************************************************************
#更新软连接 (如编译指定不是/usr目录则需要添加软连接,如指定/ --prefix=/opt/openssl )
[root@centos ~]# mv /usr/bin/openssl /usr/bin/openssl_bak
[root@centos ~]# mv /usr/include/openssl/ /usr/include/openssl_bak
[root@centos ~]# ln -s /opt/openssl/bin/openssl /usr/bin/openssl
[root@centos ~]# ln -s /opt/openssl/include/openssl/ /usr/include/openssl
[root@centos ~]# echo "/opt/openssl/lib" >> /etc/ld.so.conf
*****************************************************************************************************************
#查看最新版本
[root@centos ~]# ldconfig -v | grep ssl
[root@centos ~]# openssl version
2.安装mariadb
2.1 安装依赖
[root@centos ~]# yum install ncurses-devel zlib-devel openssl-devel bzip2 m4 -y
2.2 安装bison(需要 m4 库)
[root@centos ~]# cd /usr/local/src/
[root@centos ~]# wget http://ftp.gnu.org/gnu/bison/bison-3.0.5.tar.gz
[root@centos ~]# tar zvxf bison-3.0.5.tar.gz
[root@centos ~]# cd bison-3.0.5
[root@centos ~]# ./configure && make && make install
2.3 安装jemalloc(需要 bzip2 库解压)
[root@centos ~]# cd /usr/local/src/
[root@centos ~]# wget https://github.com/jemalloc/jemalloc/releases/download/5.1.0/jemalloc-5.1.0.tar.bz2
[root@centos ~]# tar xjf jemalloc-5.1.0.tar.bz2
[root@centos ~]# cd jemalloc-5.1.0
[root@centos ~]# ./configure && make && make install
[root@centos ~]# echo '/usr/local/lib' > /etc/ld.so.conf.d/local.conf
[root@centos ~]# ldconfig
2.4 安装libevent(依赖openssl库)
***********************************
[root@centos ~]# yum reinstall openssl-devel -y
[root@centos ~]# ldconfig
[root@centos ~]# cd /usr/local/src
[root@centos ~]# wget https://github.com/libevent/libevent/releases/download/release-2.1.8-stable/libevent-2.1.8-stable.tar.gz
[root@centos ~]# tar zvxf libevent-2.1.8-stable.tar.gz
[root@centos ~]# cd libevent-2.1.8-stable
[root@centos ~]# ./configure --prefix=/usr && make && make install
[root@centos ~]# ll /usr/lib | grep libevent
[root@centos ~]# updatedb
[root@centos ~]# locate libevent
如果libevent的lib目录不在LD_LIBRARY_PATH里,可以使用以下命令加入
[root@centos ~]# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr
2.5 创建mysql需要的目录、配置用户和用户组
[root@centos ~]# groupadd mysql
[root@centos ~]# useradd -g mysql mysql -s /sbin/nologin
[root@centos ~]# mkdir -p /data/mysql
[root@centos ~]# chown -R mysql:mysql /data/mysql
2.6 编译mariadb(需要 cmake ncurses-devel bison 库)
[root@centos ~]# cd /usr/local/src/
[root@centos ~]# wget https://mirrors.shu.edu.cn/mariadb//mariadb-10.3.7/source/mariadb-10.3.7.tar.gz
[root@centos ~]# tar zvxf mariadb-10.3.7.tar.gz
[root@centos ~]# cd mariadb-10.3.7
[root@centos ~]# cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/opt/mysql \
-DINSTALL_DOCDIR=share/doc/mariadb \
-DINSTALL_DOCREADMEDIR=share/doc/mariadb \
-DINSTALL_MANDIR=share/man \
-DINSTALL_MYSQLSHAREDIR=share/mysql \
-DINSTALL_MYSQLTESTDIR=share/mysql/test \
-DINSTALL_PLUGINDIR=lib/mysql/plugin \
-DINSTALL_SBINDIR=sbin \
-DINSTALL_SCRIPTDIR=bin \
-DINSTALL_SQLBENCHDIR=share/mysql/bench \
-DINSTALL_SUPPORTFILESDIR=share/mysql \
-DMYSQL_DATADIR=/data/mysql \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DWITH_EXTRA_CHARSETS=complex \
-DWITH_EMBEDDED_SERVER=ON \
-DTOKUDB_OK=0 \
-DCMAKE_EXE_LINKER_FLAGS="-ljemalloc" \
-DWITH_SAFEMALLOC=OFF \
[root@centos ~]# make && make install
**************************************************************
如果编译不带 -DCMAKE_EXE_LINKER_FLAGS="-ljemalloc" -DWITH_SAFEMALLOC=OFF 参数
也可以编辑 /opt/mysql/bin/mysqld_saf 文件,来实现加载 jemalloc
[root@centos ~]# sed -i 's@executing mysqld_safe@executing mysqld_safe\n export LD_PRELOAD=/usr/local/lib/libjemalloc.so@' /opt/mysql/bin/mysqld_safe
**************************************************************
2.7 创建软连接
[root@centos ~]# ln -s /opt/mysql/lib/lib* /usr/lib/
[root@centos ~]# ln -s /opt/mysql/bin/mysql /bin
[root@centos ~]# ln -s /opt/mysql/bin/mysqldump /bin
[root@centos ~]# ln -s /opt/mysql/bin/mysqlbinlog /bin
2.8 修改配置文件
[root@centos ~]# vim /etc/my.cnf
删除原来的内容,直接替换掉以下代码
[client]
port = 3306
default-character-set = utf8mb4
socket = /tmp/mysql.sock
[mysqld]
port = 3306
datadir = /data/mysql
max_connections=1000
character-set-server = utf8mb4
ssl
socket = /tmp/mysql.sock
skip-external-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
thread_concurrency = 8
log-bin=mysql-bin
binlog_format=mixed
server-id = 1
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
:wq 保存退出
2.9 初始化数据库
[root@centos ~]# cd /opt/mysql
[root@centos ~]# ./bin/mysql_install_db --basedir=/opt/mysql --datadir=/data/mysql --user=mysql
[root@centos ~]# ./bin/mysqld_safe --datadir=/data/mysql
确认运行后,按可以按CTRL+Z结束
[root@centos ~]# ps -ef|grep mysqld
[root@centos ~]# lsof -n | grep jemalloc
2.10 设置数据库ROOT密码,移除删除临时用户,删除测试数据库等(根据提示操作)
[root@centos ~]# ./bin/mysql_secure_installation
输入当前密码。(默认为空,回车即可)
Enter current password for root (enter for none):
是否设置root密码,输入Y,后,输入两次密码
Set root password? [Y/n] y
New password:
Re-enter new password:
是否移除匿名用户,输入Y
Remove anonymous users? [Y/n] y
是否禁止root远程登录,输入Y
Disallow root login remotely? [Y/n] y
是否删除测试数据库,输入Y
Remove test database and access to it? [Y/n] y
是否重新读取权限表数据
Reload privilege tables now? [Y/n] y
2.11 登录数据库,查看数据库状态
[root@centos ~]# mysql -u root -p
MariaDB [(none)]> status;
MariaDB [(none)]> show engines;
MariaDB [(none)]> SHOW VARIABLES LIKE '%have%ssl%';
MariaDB [(none)]> exit;
2.12 设置mysql开机自动启动服务
[root@centos ~]# vim /etc/systemd/system/mysqld.service
录入以下内容
[Unit]
Description=MySQL Community Server
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
Alias=mysql.service
[Service]
User=mysql
Group=mysql
LimitNOFILE=65535
LimitNPROC=65535
# Execute pre and post scripts as root
PermissionsStartOnly=true
# Needed to create system tables etc.
# Start main service
ExecStart=/opt/mysql/bin/mysqld_safe
# Don't signal startup success before a ping works
# Give up if ping don't get an answer
TimeoutSec=30
Restart=always
PrivateTmp=false
:wq 保存
[root@centos ~]# systemctl enable mysqld.service
[root@centos ~]# systemctl list-unit-files|grep enabled|grep mysql
[root@centos ~]# systemctl daemon-reload
2.13 重启,确认是否已自动启动服务
[root@centos ~]# shutdown -r now
[root@centos ~]# systemctl start mysqld.service
[root@centos ~]# systemctl status mysqld.service -l
[root@centos ~]# ps -ef|grep mysqld
[root@centos ~]# lsof -n | grep jemalloc
2.14 增加远程访问用户,并且打开防火墙3306端口(不远程连接数据,可忽略)
[root@centos ~]# mysql -u root -p
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit;
(root是用户名,%是主机名或IP地址,这里的%代表任意主机或IP地址,也可指定唯一的IP地址;密码是MyPassword )
2.15 防火墙添加3306端口(不远程连接数据,可忽略)
[root@centos ~]# iptables -L|grep ACCEPT
[root@centos ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
[root@centos ~]# firewall-cmd --reload
[root@centos ~]# iptables -L|grep ACCEPT
---------------------------------------------------------------------------------------------------------------------------------------
最大连接数
MariaDB [(none)]> show global variables like 'max_connections';
MariaDB启动后的累计连接数
MariaDB [(none)]> show global status like 'Connections';
mariaDB启动后的最大同时连接数
MariaDB [(none)]> show global status like 'Max_used_connections';
MariaDB线程信息
MariaDB [(none)]> show global status like 'Thread_%'
MariaDB备用的线程信息
MariaDB [(none)]> show global variables like "thread_cache_size";
Threads_cached:备用的线程数(线程是可以再利用的)
Threads_connected:现在的连接数
Threads_created:备用的线程不足时,会生成新线程(这个值不断变大时,表示Threads_cached不足)
Threads_running:正在执行中的线程,也可以说是不在Sleep状态的线程
理想的状态:
Threads_cached + Threads_connected < thread_cache_size
---------------------------------------------------------------------------------------------------------------------------------------
3.编译安装Nginx
3.1安装依赖
[root@centos ~]# yum install zlib-devel openssl-devel -y
3.2 安装Pcre
[root@centos ~]# cd /usr/local/src/
[root@centos ~]# wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.42.tar.gz
[root@centos ~]# tar zvxf pcre-8.42.tar.gz
[root@centos ~]# cd pcre-8.42
[root@centos ~]# ./configure && make && make install
3.3 创建www用户和组,创建www虚拟主机使用的目录,以及Nginx使用的日志目录,并且赋予他们适当的权限
[root@centos ~]# groupadd www
[root@centos ~]# useradd -g www www -s /sbin/nologin
[root@centos ~]# mkdir -p /data/www/web
[root@centos ~]# chmod +w /data/www/web
[root@centos ~]# chown -R www:www /data/www/web
3.4 安装nginx
[root@centos ~]# cd /usr/local/src/
[root@centos ~]# wget http://nginx.org/download/nginx-1.15.6.tar.gz
[root@centos ~]# tar zvxf nginx-1.15.6.tar.gz
[root@centos ~]# cd nginx-1.15.6
**************************************************************
可以修改 nginx.h 中的这两行,达到 自定义显示 nginx 版本的目白
[root@centos ~]# vim src/core/nginx.h
#define nginx_version 1007008
#define NGINX_VERSION "1.7.8"
#define NGINX_VER "Power_nginx"
***************************************************************
[root@centos ~]# ./configure --prefix=/opt/nginx \
--user=www \
--group=www \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-openssl=/usr/local/src/openssl-1.1.0h \
--with-zlib=/usr/local/src/zlib-1.2.11 \
--with-pcre=/usr/local/src/pcre-8.42 \
--with-ld-opt="-ljemalloc" \
--with-http_v2_module \
[root@centos ~]# make && make install
3.5 配置nginx,以支持静态网页访问
[root@centos ~]# vim /opt/nginx/conf/nginx.conf
打开配置文件,删除原所有内容,添加以下新内容:
user www www;
worker_processes auto;
error_log logs/error.log crit;
pid logs/nginx.pid;
events {
use epoll;
worker_connections 1024;
}
http {
fastcgi_buffers 8 16k;
fastcgi_buffer_size 32k;
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;
sendfile on;
# tcp_nopush on;
# keepalive_timeout 0;
keepalive_timeout 65;
# gzip on;
include /opt/nginx/conf/vhosts/*.conf;
}
:wq 保存退出 ( 保存前先 gg=G 格式化)
*************************************************************************************
如果需要支持http2,参考以下设置(需要https证书,并且OpenSSL 1.0.2+)
server {
listen 443 ssl http2;
ssl_certificate server.crt;
ssl_certificate_key server.key;
...
}
* HTTPS性能评估:https://www.ssllabs.com/ssltest/
*************************************************************************************
创建网站配置文件目录
[root@centos ~]# mkdir -p /opt/nginx/conf/vhosts
创建网站配置文件
[root@centos ~]# vim /opt/nginx/conf/vhosts/web.conf
添加以下内容
server {
listen 80;
server_name 192.168.1.10;
set $root /data/www/web;
root $root;
location / {
index index.html index.htm;
}
}
:wq 保存退出 ( 保存前先 gg=G 格式化)
3.6 建立测试首页
[root@centos ~]# vim /data/www/web/index.html
<html>
<head><title>nginx index.html</title></head>
<body>
<h1>index.html</h1>
</body>
</html>
保存,退出
3.7 测试和运行
[root@centos ~]# cd /opt/nginx
[root@centos ~]# ldconfig
[root@centos ~]# ./sbin/nginx -c /opt/nginx/conf/nginx.conf -t
如果显示下面信息,即表示配置没问题
nginx: the configuration file /opt/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /opt/nginx/conf/nginx.conf test is successful
查看jemalloc是否生效,需要先启动nginx
[root@centos ~]# ./sbin/nginx -c /opt/nginx/conf/nginx.conf
[root@centos ~]# lsof -n | grep jemalloc
ginx 2346 root mem REG 253,1 1824470 51571788 /usr/local/lib/libjemalloc.so.1
nginx 2347 www mem REG 253,1 1824470 51571788 /usr/local/lib/libjemalloc.so.1
nginx 2348 www mem REG 253,1 1824470 51571788 /usr/local/lib/libjemalloc.so.1
nginx 2349 www mem REG 253,1 1824470 51571788 /usr/local/lib/libjemalloc.so.1
nginx 2350 www mem REG 253,1 1824470 51571788 /usr/local/lib/libjemalloc.so.1
3.8 防火墙添加80端口
[root@centos ~]# iptables -L|grep ACCEPT
[root@centos ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent
[root@centos ~]# firewall-cmd --reload
[root@centos ~]# iptables -L|grep ACCEPT
3.9 浏览器打开
http://192.168.1.10
显示出欢迎内容,则表示成功
3.10 作为服务,开机后启动
[root@centos ~]# vim /etc/systemd/system/nginx.service
增加以下内容
[Unit]
Description=The nginx HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/opt/nginx/logs/nginx.pid
ExecStartPre=/opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf -t
ExecStart=/opt/nginx/sbin/nginx -c /opt/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
:wq 保存退出
[root@centos ~]# systemctl enable nginx.service
[root@centos ~]# systemctl list-unit-files|grep enabled|grep nginx
3.11 启动服务
[root@centos ~]# ./sbin/nginx -s stop
[root@centos ~]# systemctl daemon-reload
[root@centos ~]# systemctl start nginx.service
[root@centos ~]# systemctl status nginx.service -l
[root@centos ~]# ps -ef|grep nginx
[root@centos ~]# lsof -n | grep jemalloc
4.编译安装 Asp.net Core2
4.1安装依赖
[root@centos ~]# rpm --import https://packages.microsoft.com/keys/microsoft.asc
[root@centos ~]# sh -c 'echo -e "[packages-microsoft-com-prod]\nname=packages-microsoft-com-prod \nbaseurl=https://packages.microsoft.com/yumrepos/microsoft-rhel7.3-prod\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/dotnetdev.repo'
[root@centos ~]# yum update -y
[root@centos ~]# yum install libunwind libicu -y
[root@centos ~]# yum install dotnet-sdk*
[root@centos ~]# shutdown -r now
[root@centos ~]# dotnet --info
4.2生成测试网站
[root@centos ~]# mkdir -p /data/www/Core2
[root@centos ~]# cd /data/www/Core2
[root@centos ~]# dotnet new mvc
[root@centos ~]# dotnet restore
[root@centos ~]# dotnet run
显示以下内容即表示成功
Hosting environment: Production
Content root path: /data/www/Core2
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
4.3 浏览器打开测试
http://localhost:5000
4.4 配置 nginx,以支持 core 网站
[root@centos ~]# vim /opt/nginx/conf/vhosts/web.conf
替换成如下内容
server {
listen 80;
location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
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_set_header Cookie $http_cookie;
}
}
:wq 保存退出
[root@centos ~]# systemctl restart nginx
[root@centos ~]# systemctl status nginx
4.5 安装 Supervisor (低于 3.3.3 会有安全漏洞)
[root@centos ~]# cd /usr/local/src
[root@centos ~]# yum install unzip -y
[root@centos ~]# wget https://files.pythonhosted.org/packages/6e/9c/6a003320b00ef237f94aa74e4ad66c57a7618f6c79d67527136e2544b728/setuptools-40.4.3.zip
[root@centos ~]# unzip setuptools-40.4.3.zip
[root@centos ~]# cd setuptools-40.4.3
[root@centos ~]# python setup.py build && python setup.py install
[root@centos ~]# cd /usr/local/src
[root@centos ~]# wget https://files.pythonhosted.org/packages/44/60/698e54b4a4a9b956b2d709b4b7b676119c833d811d53ee2500f1b5e96dc3/supervisor-3.3.4.tar.gz
[root@centos ~]# tar zvxf supervisor-3.3.4.tar.gz
[root@centos ~]# cd supervisor-3.3.4
[root@centos ~]# python setup.py install
配置Supervisor
[root@centos ~]# mkdir -p /etc/supervisor/conf.d
[root@centos ~]# echo_supervisord_conf > /etc/supervisor/supervisord.conf
[root@centos ~]# vim /etc/supervisor/supervisord.conf
查找
;[include]
;files = relative/directory/*.ini
修改为
[include]
files=conf.d/*.conf
查找 [unix_http_server] 下账号和密码设置,设置密码 (使用 supervisorctl 强制输入密码,增强安全性)
username=user ; default is no username (open server)
password=userpwd ; default is no password (open server)
:wq 保存退出
假设有一个 asp.net core mvc项目 Core2。编译发布后目录包含Core2.dll
并且运行dotnet Core2.dll 能够正常运行网站项目
[root@centos ~]# cd /data/www/Core2
[root@centos ~]# ll
-rw-r--r--. 1 root root 146 11月 12 10:30 appsettings.Development.json
-rw-r--r--. 1 root root 105 11月 12 10:30 appsettings.json
-rw-r--r--. 1 root root 228322 11月 12 10:30 Core2.deps.json
-rw-r--r--. 1 root root 7680 11月 12 10:30 Core2.dll
-rw-r--r--. 1 root root 1296 11月 12 10:30 Core2.pdb
-rw-r--r--. 1 root root 224 11月 12 10:30 Core2.runtimeconfig.json
-rw-r--r--. 1 root root 522 11月 12 10:30 web.config
---------------必须是发布过程序--------------------
[root@centos ~]# dotnet Core2.dll
显示以下内容,则表示成功
Hosting environment: Production
Content root path: /data/www/Core2
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
浏览器打开测试
http://localhost
[root@centos ~]# vim /etc/supervisor/conf.d/Core2.conf
输入以下内容
[program:Core2]
command=dotnet Core2.dll --urls="http://[*]:5000"; 运行的命令
directory=/data/www/Core2/ ; 命令执行目录
autorestart=true ; 自动重启
stderr_logfile=/var/log/Core2.err.log ; 错误日志
stdout_logfile=/var/log/Core2.out.log ; 输出日志
environment=ASPNETCORE_ENVIRONMENT=Production ; 环境变量
user=www ; 进程执行的用户身份
stopsignal=INT
:wq 保存退出
运行supervisord,查看是否生效
[root@centos ~]# supervisord -c /etc/supervisor/supervisord.conf
配置 Supervisor 开机启动
[root@centos ~]# vim /etc/systemd/system/supervisord.service
[Unit]
Description=Supervisor daemon
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
:wq 保存退出
[root@centos ~]# systemctl enable supervisord
[root@centos ~]# systemctl restart supervisord
[root@centos ~]# systemctl status supervisord
[root@centos ~]# supervisorctl
> version # 查看当前版本
> status # 查看程序状态
> stop core2 # 关闭 usercenter 程序
> start core2 # 启动 usercenter 程序
> restart core2 # 重启 usercenter 程序
> reread # 读取有更新(增加)的配置文件,不会启动新添加的程序
> update # 重启配置文件修改过的程序
> reload
> exit # 退出
*****************************************************************
4.6 浏览器打开测试
http://localhost
***********************************
如果由于SELinux保护机制所导致没法打不开,则要将nginx添加至SELinux的白名单。
[root@centos ~]# yum install policycoreutils-python
[root@centos ~]# cat /var/log/audit/audit.log | grep nginx | grep denied | audit2allow -M mynginx
[root@centos ~]# semodule -i mynginx.pp
***********************************
4.7 安装组件,支持 core 图片生成
[root@centos ~]# yum install autoconf automake libtool freetype-devel fontconfig libXft-devel libjpeg-turbo-devel libpng-devel giflib-devel libtiff-devel libexif-devel glib2-devel cairo-devel -y
[root@centos ~]# yum install git -y
[root@centos ~]# cd /usr/local/src
[root@centos ~]# git clone https://github.com/mono/libgdiplus
[root@centos ~]# cd libgdiplus
[root@centos ~]# ./autogen.sh && make && make install
[root@centos ~]# ln -s /usr/local/lib/libgdiplus.so /usr/lib64/gdiplus.dll
*************************************************************
//假设使用以下 Centos 中没有的字体
string[] fonts = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" };
把windows下font目录的相应字体上传到服务器 /usr/share/fonts/chinese/TrueType
[root@centos ~]# yum install mkfontscale fontconfig -y
[root@centos ~]# mkdir -p /usr/share/fonts/chinese/TrueType
[root@centos ~]# cd /usr/share/fonts/chinese/TrueType
[root@centos ~]# mkfontscale && mkfontdir && fc-cache -fv
*************************************************************
[root@centos ~]# shutdown -r now