云计算运维1

1、企业服务器LNMP环境搭建

集群:多台服务器在一起作同样的事 。分布式 :多台服务器在一起作不同的事 。
环境准备:

1、设置静态ip(NAT模式网关为.2)
# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
BOOTPROTO="none"
IPADDR="10.1.1.10"
NETMASK="255.255.255.0"
GATEWAY="10.1.1.2"
DNS1="8.8.8.8"
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"
2、关闭防火墙和selinux
systemctl stop firewalld   systemctl disable firewalld   centos7版本
service iptables stop      chkconfig iptables off   centos6版本
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
3、设置主机名和域名解析(FQDN完整域名如linux.lnmp.com,简短域名linux)
hostnamectl set-hostname linux
# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.1.1.10   linux.lnmp.com linux
4、宿主机不通外网,配置本地yum源(可选)
挂载本地光驱/dev/sr0到/mnt,mount /dev/sr0 /mnt
开机自动挂载光盘,echo "mount /dev/sr0 /mnt" >> /etc/rc.local  chmod +x /etc/rc.local
开机启动文件/etc/rc.local是os开机最后读取的一个文件,os启动后会自动执行文件/etc/rc.local
先备份默认源,cd /etc/yum.repos.d    mkdir bak   mv ./* ./bak
centos7版本本地yum源配置,# vim test.repo
[os]
name = os
baseurl = file:///mnt
gpgcheck = 0
yum clean all 清缓存,yum makecache 重新建立缓存,yum repolist all 列出所有repo
7版本在挂载点/mnt就有repodata和Packages目录(repodata引用Packages里面软件包)
8版本要进去挂载点/mnt的AppStream和BaseOS目录里面才有相应的repodata和Packages目录
centos8版本本地yum源配置:/dev/cdrom是/dev/sr0软链接,# mount /dev/cdrom /mnt
# vim test.repo
[os]
name = os
baseurl = file:///mnt/BaseOS
gpgcheck = 0

[app]
name = app
baseurl = file:///mnt/AppStream
gpgcheck = 0
yum clean all 清缓存,yum makecache 重新建立缓存,yum repolist all 列出所有repo
5、网络校时
服务器校时的原因:1因为计划任务要执行,提供准确的时间 2服务器间进行通信时,需要统一的一致时间
centos7版本,yum -y install ntp   systemctl start ntpd   systemctl enable ntpd
centos6版本,开启ntpd服务 service ntpd start 开机自启ntpd chkconfig ntpd on
ntpdate -u  ntp1.aliyun.com    -u 参数来强制 ntpdate 命令使用 UDP 协议与 NTP 服务器进行通信
echo "* */1 * * * root ntpdate -u time.server.com" >> /etc/crontab    每小时同步一次

LNMP架构生产业务环境需要使用源码编译的方式进行安装。
MySQL编译参数的说明
云计算运维1_第1张图片
MySQL初始化参数说明
云计算运维1_第2张图片
脚本实现MySQL安装及其初始化,vi mysql_install.sh

#!/bin/bash
#源码编译安装MySQL,将MySQL安装过程封装成了mysql_install(){}函数
mysql_install() {
#1、创建用户,没有mysql用户就创建mysql用户
`id mysql` &>/dev/null
[ $? -ne 0 ] && useradd -s /sbin/nologin -M mysql
#2、解决依赖
yum install -y cmake
yum install -y ncurses-devel
#3、编译安装
cd /root/soft
tar zxvf mysql-5.6.33.tar.gz
cd mysql-5.6.33
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_SSL=bundled
make && make install
#配置文件
rm -rf /etc/my.cnf
cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
#授权并初始化数据库
chown -R mysql:mysql /usr/local/mysql
/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
#配置服务、自启动和环境变量
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
systemctl  start mysqld
systemctl  enable mysqld
# centos6版本,chkconfig --add mysqld   chkconfig mysqld on  service start mysqld
echo 'PATH=/usr/local/mysql/bin:$PATH' >> /etc/profile
source  /etc/profile
#删除匿名用户
#设置root域名的密码
rpm -qa|grep expect
if [ $? -ne 0 ];then
   yum -y install expect
fi
#导入环境变量PATH
export PATH=/usr/local/mysql/bin:$PATH
#初始化root密码 删除匿名用户
echo '#!/usr/bin/expect
set timeout 60
spawn mysql_secure_installation
expect {
"enter for none" { send "\r"; exp_continue}
"Y/n" { send "Y\r" ; exp_continue}
"password" { send "123456\r"; exp_continue}
"Cleaning up" { send "\r"}
}
interact ' > mysql_secure_installation.exp
chmod +x mysql_secure_installation.exp
./mysql_secure_installation.exp
}

#脚本开始时间
start_time=`date +%s`
#执行的脚本代码,调mysql_install(){}函数
mysql_install
#脚本结束时间
end_time=`date +%s`
#脚本执行花费时间
const_time=$((end_time-start_time))
echo 'Take time is: '$const_time's'

[root@linux ~]# mysql -uroot -p
Enter password:
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.01 sec)

nginx官网:http://nginx.org/,nginx常见安装方式:
①yum安装配置,需使用Nginx官方源或者EPEL源
②源码编译,编译过程中出现的依赖问题,依赖解决yum -y install pcre-devel zlib-devel openssl-devel
云计算运维1_第3张图片
Nginx编译参数说明
云计算运维1_第4张图片
脚本实现Nginx安装及其初始化,vi nginx_install.sh

#!/bin/bash
#源码编译安装Nginx,将Nginx安装过程封装成了nginx_install(){}函数
nginx_install(){
#创建软件运行用户,没有www用户就创建www用户
`id www` &>>/dev/null
if [ $? -ne 0 ];then
   useradd -s/sbin/nologin -M www
fi
#安装依赖
yum -y install pcre-devel zlib-devel openssl-devel
#编译安装
cd /root/soft
tar zxvf nginx-1.14.2.tar.gz
cd nginx-1.14.2
./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module && make && make install
}

#脚本开始时间
start_time=`date +%s`
#执行的脚本代码,调nginx_install(){}函数
nginx_install
#脚本结束时间
end_time=`date +%s`
#脚本执行花费时间
const_time=$((end_time-start_time))
echo 'Take time is: '$const_time's'
编译安装nginx
cd  /opt
wget http://nginx.org/download/nginx-1.18.0.tar.gz
tar xf   nginx-1.18.0.tar.gz
cd  nginx-1.18.0
yum -y install gcc pcre-devel openssl-devel zlib-devel openssl  openssl-devel 
mkdir /apps/nginx -p    
./configure   --prefix=/apps/nginx
make
make  install
 
ln -s /apps/nginx/sbin/nginx   /usr/sbin/nginx

查看安装目录/usr/local/nginx
云计算运维1_第5张图片
启动nginx,网页访问测试

[root@linux sbin]# pwd
/usr/local/nginx/sbin
[root@linux sbin]# ./nginx     启动nginx
[root@linux sbin]# ps -aux | grep nginx
root      12572  0.0  0.0  45948  1116 ?        Ss   16:45   0:00 nginx: master process ./nginx
www       12573  0.0  0.0  46396  1892 ?        S    16:45   0:00 nginx: worker process
root      12580  0.0  0.0 112708   972 pts/0    S+   16:46   0:00 grep --color=auto nginx

云计算运维1_第6张图片
查看nginx的二进制可执行文件的相关参数

求帮助,[root@linux sbin]# ./nginx -h
nginx version: nginx/1.14.2
Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]

Options:
#查看帮助
  -?,-h         : this help
#查看版本并退出
  -v            : show version and exit
#查看版本和配置选项并退出
  -V            : show version and configure options then exit
#检测配置文件语法并退出
  -t            : test configuration and exit
#检测配置文件语法打印它并退出
  -T            : test configuration, dump it and exit
#在配置测试期间禁止显示非错误信息
  -q            : suppress non-error messages during configuration testing
#发送信号给主进程  stop强制退出  quit优雅的退出  reopen重开日志   reload重载配置
  -s signal     : send signal to a master process: stop, quit, reopen, reload
#设置nginx目录  $prefix路径
  -p prefix     : set prefix path (default: /usr/local/nginx/)
#指定启动使用的配置文件
  -c filename   : set configuration file (default: conf/nginx.conf)
#在配置文件之外设置全局指令
  -g directives : set global directives out of configuration file
一般主要使用:
-s参数控制管理nginx服务,停止nginx服务[root@linux sbin]# ./nginx -s stop
-V参数查看nginx开启的模块和编译参数
-t参数检测配置文件是否有错误

centos7版本,使用systemctl管理自搭建nginx,编译安装配置文件编写使得可以使用systemctl管理。
systemctl管理服务依靠的是/lib/systemd/system配置文件下有对应服务以.service结尾的文件,yum安装或者rpm安装服务时该文件已经写好了,但是编译安装没有此文件所以需要我们手写才可以通过systemctl来管理服务。

使用社区的服务配置文件,nginx编译包里默认没有服务启动脚本模板
https://www.nginx.com/resources/wiki/start/topics/examples/systemd/

vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecStop=/usr/local/nginx/sbin/nginx -s stop
ExecReload=/usr/local/nginx/sbin/nginx -s reload
PrivateTmp=true

[Install]
WantedBy=multi-user.target
ExecStart:nginx的启动命令
ExecReload:nginx的重载命令
ExecStop:nginx的停止命令
WantedBy=multi-user.target:安装字符界面
重新加载systemctl配置文件,systemctl daemon-reload
systemctl start nginx
systemctl enable nginx
systemctl status nginx

centos6版本,使用service管理自搭建nginx

1、使用社区的服务配置文件,nginx编译包里默认没有服务启动脚本模板
vim /etc/init.d/nginx
https://www.nginx.com/resources/wiki/start/topics/examples/redhatnginxinit/
修改软件和配置路径,vim /etc/init.d/nginx
#执行文件路径  第22行
nginx="/usr/local/nginx/sbin/nginx"
#配置文件路径  第25行
NGINIX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
2、添加自启动
chmod +x /etc/init.d/nginx
chkconfig --add nginx  添加服务
chkconfig --del nginx  删除服务
chkconfig nginx on  添加服务开机自启动
service start nginx   启动nginx服务
chkconfig  查看服务开启模式(init0-6)的情况  chkconfig |grep nginx
chkconfig --level 35 nginx on  开启服务运行模式3字符5图形模式
3、注意在服务脚本中,有chkconfig配置开启模式、开启顺序、关闭顺序设置(系统中有些软件要依赖别的软件先启动才能启动的)
#!/bin/sh
# nginx - this script starts and stops the nginx daemon
# 下面chkconfig看似注释掉了,但其实不是注释掉的内容
# 下面横线这个位置即第一项为开启模式(init0-6)  85即第2项为开启顺序  15即第3项为关闭顺序    
# chkconfig:   - 85 15      -是什么都不开启,要是想开启3字符5图形模式,chkconfig:  35 85 15
4、自定义服务脚本,vim /etc/init.d/nginx
#!/bin/bash
#Nginx管理文件位置
EXEC=/usr/local/nginx/sbin/nginx
start(){
   $EXEC
   if [ $? -eq 0 ];then
      echo -e "\033[32m nginx is running \033[0m"
   fi
}

stop(){
  $EXEC -s quit
   if [ $? -eq 0 ];then
      echo -e "\033[31m nginx is not run \033[0m"
   fi
}
status(){    #nginx启用了有/usr/local/nginx/logs/nginx.pid文件
  if [ -f '/usr/local/nginx/logs/nginx.pid' ];then
     echo -e "\033[32m nginx is running \033[0m"
  else
     echo -e "\033[31m nginx is not run \033[0m"
  fi
}
restart(){
  stop
  start
}

reload(){
  $EXEC -s reload
}

configtest(){
  $EXEC -t
}

#调用执行
case "$1" in 
   start)
      start;;
   stop)
      stop;;
   restart)
      restart;;
   status)
      status;;
   reload)
      reload;;
   configtest)
      configtest;;
   *)
   echo '请输入这些内容{start|stop|restart|reload|configtest}'
   ;;
esac

源码安装php

1、解压进入目录
tar zxf php-7.2.12.tar.gz
cd php-7.2.12
2、编译参数配置
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --enable-ftp --with-gd --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --with-libzip --enable-soap --without-pear --with-gettext --disable-fileinfo --enable-maintainer-zts
--with 代表需要手动开启  可能需要加载第三方模块  第三方模块没有,就会error
--enable 代表开启php的默认功能
--without  关闭默认加载的模块
3、解决软件依赖问题
yum -y install libxml2-devel libjpeg-devel libpng-devel freetype-devel curl-devel openssl-devel
解决完依赖问题再次执行编译参数配置
4、编译并安装到目录
make && make install

云计算运维1_第7张图片
查看PHP的安装目录,cd /usr/local/php
云计算运维1_第8张图片

使用php-fpm进行管理php服务,有两个配置文件:
php.ini           #默认php配置文件
php-fpm.conf      #php-fpm相关的配置 
1、复制配置文件
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
cp /root/soft/php-7.2.12/php.ini-development /usr/local/php/etc/php.ini
2、添加启动服务
centos6版本的服务运行脚本init.d.php-fpm,复制到/etc/init.d/php-fpm
cp /root/soft/php-7.2.12/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
chkconfig --add php-fpm
chkconfig php-fpm on
service start php-fpm
centos7版本的服务运行脚本php-fpm.service,复制到/lib/systemd/system/php-fpm.service
cp /root/soft/php-7.2.12/sapi/fpm/php-fpm.service /lib/systemd/system/php-fpm.service
chmod +x /lib/systemd/system/php-fpm.service
systemctl start php-fpm
systemctl enable php-fpm
systemctl status php-fpm
3、添加环境变量(方便php、phpize、phpconfig查找使用)
echo 'PATH=/usr/local/php/bin:$PATH' >> /etc/profile
source /etc/profile
[root@linux ~]# php -v
PHP 7.2.12 (cli) (built: Feb  6 2024 15:00:06) ( ZTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

脚本安装php及其初始化配置,vi php_install.sh

#!/bin/bash
php_install(){
#php编译安装
#和nginx使用相同的用户www,如果没有就创建
`id www` &> /dev/null
[ $? -ne 0 ] && useradd -s /sbin/nologin -M www
#解决依赖
yum -y install libxml2-devel libjpeg-devel libpng-devel freetype-devel curl-devel openssl-devel
#解压
tar xvf php-7.2.12.tar.gz
cd php-7.2.12
#编译安装php
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --enable-ftp --with-gd --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --with-libzip --enable-soap --without-pear --with-gettext --disable-fileinfo --enable-maintainer-zts && make && make install
#配置文件初始化
cp php.ini-development /usr/local/php/etc/php.ini
#php-fpm服务配置文件
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
#php-fpm服务子配置文件
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
#配置服务及其环境变量
cp /root/soft/php-7.2.12/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
chkconfig --add php-fpm
chkconfig php-fpm on
service start php-fpm
echo 'PATH=/usr/local/php/bin:$PATH' >> /etc/profile
source /etc/profile
}

#脚本开始时间
start_time=`date +%s`
#执行的脚本代码
php_install
#脚本结束时间
end_time=`date +%s`
#脚本执行花费时间
const_time=$((end_time-start_time))
echo 'Take time is: '$const_time's'

Nginx+php-fpm配置

1、编写测试文件
vim /usr/local/nginx/html/index.php
<?php
	phpinfo();
2、在nginx.conf中配置
修改配置文件,告知nginx如果接收到.php结尾的请求,交由给php-fpm进行处理
vim /usr/local/nginx/conf/nginx.conf
打开location ~ .php$那段注释,并把/scripts修改为$document_root$document_root加载的就是root目录

# 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  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

云计算运维1_第9张图片

[root@linux conf]# netstat -lntp |grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      35902/nginx: master
[root@linux conf]# netstat -lntp |grep php
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      35394/php-fpm: mast

你可能感兴趣的:(云计算,运维)