运维之道 | CentOS7.6 + Nginx1.8 + MySQL5.6 + PHP7.3 环境部署(源码编译安装)
CentOS7.6 + Nginx1.8 + MySQL5.6 + PHP7.3
- LNMP代表的就是:Linux系统下Nginx+MySQL+PHP这种网站服务器架构。
- Linux是一类Unix计算机操作系统的统称,是目前最流行的免费操作系统。
- Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。
- MySQL是一个小型关系型数据库管理系统。
- PHP是一种在服务器端执行的嵌入HTML文档的脚本语言。
LNMP动态网站部署架构是一套由Linux + Nginx + MySQL + PHP组成的动态网站系统解决方案,具有免费、高效、扩展性强且资源消耗低等优良特性。
一、Nginx
1、nginx安装环境
- 安装 GCC
源码安装nginx需要依赖gcc环境,需要安装gcc
[aaa@qq.com ~]# yum install -y gcc gcc-c++
- 安装 PCRE
PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。nginx的http模块使用pcre来解析正则表达式,所以需要在linux上安装pcre库
[aaa@qq.com ~]# yum install -y pcre pcre-devel
- 安装 zlib
zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip,所以需要在linux上安装zlib库
[aaa@qq.com ~]# yum install -y zlib zlib-devel
- 安装 openssl
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的**和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用;
nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。
[aaa@qq.com ~]# yum install -y openssl openssl-devel
2、获取nginx源码安装包、并解压
[aaa@qq.com nginx]# wget https://files.cnblogs.com/files/ftl1012/nginx-1.8.0.tar.gz
[aaa@qq.com nginx]# ls
nginx-1.8.0.tar.gz
[aaa@qq.com nginx]# tar -zxvf nginx-1.8.0.tar.gz
3、编译、安装
- 预编译
[aaa@qq.com nginx-1.8.0]# ./configure \
--prefix=/usr/local/nginx \ ///--prefix= 指向安装目录
--pid-path=/var/run/nginx/nginx.pid \ ///--pid-path= 指向pid文件(nginx.pid)
--lock-path=/var/lock/nginx.lock \ ///--lock-path= 指向lock文件(nginx.lock)(安装文件锁定,防止安装文件被别人利用,或自己误操作。)
--error-log-path=/var/log/nginx/error.log \ ///--error-log-path= 指向错误日志目录
--http-log-path=/var/log/nginx/access.log \ ///--http-log-path= 指向http服务日志
--with-http_gzip_static_module \ ///禁用nginx_http_gzip_module支持
--http-client-body-temp-path=/var/temp/nginx/client \ ///设定http客户端请求临时文件路径
--http-proxy-temp-path=/var/temp/nginx/proxy \ ///设定http代理临时文件路径
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \ ///设定http fastcgi临时文件路径
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \ ///设定http uwsgi临时文件路径
--http-scgi-temp-path=/var/temp/nginx/scgi ///设定http scgi临时文件路径
- 使用
echo $?
查看是否成功执行预编译(0表示成功)
[aaa@qq.com nginx-1.8.0]# echo $?
0
- 编译、安装
[aaa@qq.com nginx-1.8.0]# make && make install
- 使用echo $? 查看是否成功执行编译安装(0表示成功)
[aaa@qq.com nginx-1.8.0]# echo $?
0
4、启动Nginx服务
- 启动nginx(不加任何参数)
[aaa@qq.com ~]# /usr/local/nginx/sbin/nginx
- 关闭nginx
[aaa@qq.com ~]# /usr/local/nginx/sbin/nginx -s stop
- 重启nginx
[aaa@qq.com ~]# /usr/local/nginx/sbin/nginx -s reload
- 查看服务进程
[aaa@qq.com ~]# ps -ef | grep nginx
root 18538 1 0 16:37 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody 18539 18538 0 16:37 ? 00:00:00 nginx: worker process
root 18549 8217 0 16:38 pts/0 00:00:00 grep --color=auto nginx
- 查看端口
[aaa@qq.com ~]# netstat -ntl | grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
二、MySQL
1、获取mysql源码包
mysql5.6 百度网盘 - 密码:39ru
2、解压源码包
[aaa@qq.com src]# tar -xzvf mysql-5.6.43-linux-glibc2.12-x86_64.tar.gz
3、将源码包内容移动至/usr/local/mysql
目录下
[aaa@qq.com src]# mv mysql-5.6.43-linux-glibc2.12-x86_64/* /usr/local/mysql
4、设置权限
[aaa@qq.com mysql]# groupadd mysql //增加 mysql 属组
[aaa@qq.com mysql]# useradd -g mysql mysql //增加 mysql 用户 并归于mysql 属组
[aaa@qq.com mysql]# chown mysql:mysql -Rf /usr/local/mysql // 设置 mysql 目录的用户及用户组归属。
[aaa@qq.com mysql]# chmod +x -Rf /usr/local/mysql //赐予可执行权限
5、拷贝配置文件
[aaa@qq.com ~]# cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
6、初始化mysql
[aaa@qq.com mysql]# ./scripts/mysql_install_db --user=mysql
PS:需要进入到[aaa@qq.com mysql]#
目录下执行该命令,否则会报错
PS:FATAL ERROR: please install the following Perl modules before executing(错误
)
解决方法 :安装autoconf库 - 命令:yum install -y autoconf
7、配置mysql启动
[aaa@qq.com ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql //复制mysql服务程序 到系统目录
[aaa@qq.com ~]# chkconfig mysql on //添加mysql 至系统服务并设置为开机启动
[aaa@qq.com ~]# systemctl start mysql //启动mysql
8、环境变量配置
[aaa@qq.com ~]# vim /etc/profile //编辑profile,将mysql的可执行路径加入系统PATH
export PATH=/usr/local/mysql/bin:$PATH
9、重新加载环境变量
[aaa@qq.com ~]# source /etc/profile //使PATH生效
10、设置数据库密码
[aaa@qq.com ~]# mysqladmin -u root password 'yourpassword'
11、登录数据库进行配置
mysql -u root -p //使用root用户登录mysql
use mysql //切换至mysql数据库。
select user,host,password from user; //查看系统权限
drop user ''@'localhost'; //删除不安全的账户
drop user aaa@qq.com'::1';
drop user aaa@qq.com127.0.0.1;
select user,host,password from user; //再次查看系统权限,确保不安全的账户均被删除。
flush privileges; //刷新权限
扩展:mysql配置
1、修改字符集为UTF8
vi /etc/my.cnf
在[client]下面添加 default-character-set = utf8
在[mysqld]下面添加 character_set_server = utf8
2、增加错误日志
vim /etc/my.cnf
在[mysqld]下面添加:
log-error = /usr/local/mysql/log/error.log
general-log-file = /usr/local/mysql/log/mysql.log
3、设置为不区分大小写,linux下默认会区分大小写。
vi /etc/my.cnf
在[mysqld]下面添加:
lower_case_table_name=1
三、PHP
1、配置PHP支持环境
[aaa@qq.com ~]# yum -y install libxml2
[aaa@qq.com ~]# yum -y install libxml2-devel
配置前如果没有libxml2
和libxml2-devel
会报错
补充配置
因为不同的操作系统环境,系统安装开发环境包的完整程度也不相同,所以建议安装操作系统的时候做必要选择,也可以统一执行一遍所有的命令,将没有安装的组件安装好,如果已经安装了可能会进行升级
yum -y install openssl
yum -y install openssl-devel
yum -y install curl
yum -y install curl-devel
yum -y install libjpeg
yum -y install libjpeg-devel
yum -y install libpng
yum -y install libpng-devel
yum -y install freetype
yum -y install freetype-devel
yum -y install pcre
yum -y install pcre-devel
yum -y install libxslt
yum -y install libxslt-devel
yum -y install bzip2
yum -y install bzip2-devel
2、获取PHP源码包
[aaa@qq.com src]# wget https://www.php.net/distributions/php-7.3.15.tar.gz
3、解压源码包
[aaa@qq.com src]# tar -xzvf php-7.3.15.tar.gz
4、编译、安装
[aaa@qq.com ~]# cd /usr/local/src/php-7.3.15
[aaa@qq.com php-7.3.15]# ./configure --prefix=/usr/local/php \
--with-gd \
--with-freetype-dir \
--enable-gd-native-ttf \
--enable-mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-openssl \
--with-mcrypt \
--enable-mbstring \
--enable-zip \
--enable-fpm
[aaa@qq.com php-7.3.15]# make
编译时间可能会有点长,编译完成之后,执行安装:
[aaa@qq.com php-7.3.15]# make install
5、配置PHP启动
[aaa@qq.com php-7.3.15]# cp php.ini-development /usr/local/php/lib/php.ini
[aaa@qq.com php-7.3.15]# cp sapi/fpm/php-fpm /usr/local/bin
[aaa@qq.com php]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf ##其实就是cp配置文件
6、设置php.ini文件
[aaa@qq.com ~]# vim /usr/local/php/lib/php.ini
打开php配置文件找到cgi.fix_pathinfo配置项,这一项默认被注释并且值为1,根据官方文档的说明,这里为了当文件不存在时,阻止Nginx将请求发送到后端的PHP-FPM模块,从而避免恶意脚本注入的攻击,所以此项应该去掉注释并设置为0。
拓展
另外注意一个地方就是php.ini配置文件的位置可以在编译前配置参数中设置,编译参数可以写成:–with-config-file-path=/usr/local/php 这样的话php就回去指定的目录下读取php.ini配置文件,如果不加这个参数默认位置就是php安装目录下的lib目录,具体也可以在phpinfo()输出界面查看,如果php.ini放到其他位置,php读取不到,那么所有的配置修改后都是不生效的,这点要注意
- 此时首先应该创建web用户
[aaa@qq.com ~]# groupadd www-data
[aaa@qq.com ~]# useradd -g www-data www-data
[aaa@qq.com ~]# usermod -s /sbin/nologin www-data
- 修改
www.conf.defalut
配置用户的文件
[aaa@qq.com ~]# cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
[aaa@qq.com ~]# vim /usr/local/php/etc/php-fpm.d/www.conf
- 默认user和group的设置为nobody,将其改为www-data
user = www-data
group = www-data
- 修改完成之后,保存并退出,然后执行以下命令启动php-fpm服务
[aaa@qq.com ~]# /usr/local/bin/php-fpm
- 启动完毕之后,php-fpm 服务默认使用9000端口,使用
netstat -tln | grep 9000
可以查看端口使用情况
[aaa@qq.com ~]# netstat -ntl | grep 9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
9000端口正常使用,说明php-fpm服务启动成功
四、配置 Nginx - PHP
1、修改nginx.conf配置文件
修改location块,追加index.php
让nginx服务器默认支持index.php为首页
配置.php请求被传送到后端的php-fpm模块,默认情况下php配置块是被注释的,此时去掉注释并修改为以下内容
这里面很多都是默认的,root是配置php程序放置的根目录,主要修改的就是fastcgi_param中的/scripts为$document_root
修改user用户,默认是#user nobody
, 这里要去掉注释改为user www-data
,表示nginx服务器的权限为www-data
2、检测nginx配置文件
[aaa@qq.com ~]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
3、编辑php测试界面
[aaa@qq.com ~]# vim /usr/local/nginx/html/test.php
<?php
phpinfo();
?>
4、重载nginx服务
[aaa@qq.com ~]# /usr/local/nginx/sbin/nginx -s reload
5、访问php测试界面
192.168.182.11/test.php
拓展:PHP编译配置
--prefix=/usr/local/php7 # 配置安装目录
--with-config-file-path=/usr/local/php7 # 配置文件 php.ini 的路径
--enable-sockets # 开启 socket
--enable-fpm # 启用 fpm 扩展
--enable-cli # 启用 命令行模式 (从 php 4.3.0 之后这个模块默认开启所以可以不用再加此命令)
--enable-mbstring # 启用 mbstring 库
--enable-pcntl # 启用 pcntl (仅 CLI / CGI)
--enable-soap # 启用 soap
--enable-opcache # 开启 opcache 缓存
--disable-fileinfo # 禁用 fileinfo (由于 5.3+ 之后已经不再持续维护了,但默认是开启的,所以还是禁止了吧)(1G以下内存服务器直接关了吧)
--disable-rpath #禁用在搜索路径中传递其他运行库。
--with-mysqli # 启用 mysqli 扩展
--with-pdo-mysql # 启用 pdo 扩展
--with-iconv-dir # 启用 XMLRPC-EPI 字符编码转换 扩展
--with-openssl # 启用 openssl 扩展 (需要 openssl openssl-devel)
--with-fpm-user=www #设定 fpm 所属的用户
--with-fpm-group=www #设定 fpm 所属的组别
--with-curl # 启用 curl 扩展
--with-mhash # 开启 mhash 基于离散数学原理的不可逆向的php加密方式扩展库
# GD
--with-gd # 启用 GD 图片操作 扩展
--with-jpeg-dir # 开启对 jpeg 图片的支持 (需要 libjpeg)
--with-png-dir # 开启对 png 图片支持 (需要 libpng)
--with-freetype-dir # 开启 freetype
# 压缩
--enable-zip # 启用 zip
--with-zlib # 启用对 zlib 支持
# xml
--enable-simplexml # 启用对 simplexml 支持
--with-libxml-dir # 启用对 libxml2 支持
上一篇: 关于php fast cgi异常停止