centOS7 安装nginx php mysql

nginx安装

本文是介绍使用源码编译安装,包括具体的编译参数信息。

正式开始前,编译环境gcc g++ 开发库之类的需要提前装好。

安装make:

1
yum -y install gcc automake autoconf libtool make

安装g++:

1
yum install gcc gcc-c++

1.选定源码目录

可以是任何目录,本文选定的是/root/

1
cd /root/

2.安装PCRE库

1
2
3
4
5
6
cd /root/
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.41.tar.gz
tar -zxvf pcre-8.41.tar.gz
cd pcre-8.41
./configure
make && make install

3.安装zlib库

1
2
3
4
5
6
cd /root/
wget http://zlib.net/zlib-1.2.11.tar.gz
tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11
./configure
make && make install

4.安装ssl

1
2
3
4
5
6
cd /root/
wget https://www.openssl.org/source/openssl-1.1.0g.tar.gz
tar -zxvf openssl-1.1.0g
cd openssl-1.1.0g
./config
make && make install

5.安装nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
cd /root/
wget http://nginx.org/download/nginx-1.13.9.tar.gz
tar -zxvf nginx-1.13.9.tar.gz
cd nginx-1.13.9
groupadd -r nginx
useradd -r -g nginx nginx
./configure \
--prefix=/usr/local/nginx \
--sbin-path=/usr/local/nginx/sbin/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--pid-path=/usr/local/nginx/nginx.pid \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/tmp/nginx/client/ \
--http-proxy-temp-path=/var/tmp/nginx/proxy/ \
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
--http-scgi-temp-path=/var/tmp/nginx/scgi \
--with-pcre=/root/pcre-8.41 \
--with-zlib=/root/zlib-1.2.11 \
--with-openssl=/root/openssl-1.1.0g
make && make install

php-fpm安装配置

nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端。

nginx一般是把请求发fastcgi管理进程处理,fascgi管理进程选择cgi子进程处理结果并返回被nginx

本文以php-fpm为例介绍如何使nginx支持PHP

一、编译安装php-fpm

什么是PHP-FPM

PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的,可以在 http://php-fpm.org/download下载得到.

PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。

新版PHP已经集成php-fpm了,不再是第三方的包了,推荐使用。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多优点,所以被PHP官方收录了。在./configure的时候带 –enable-fpm参数即可开启PHP-FPM,其它参数都是配置php的,具体选项含义可以查看这里。

安装前准备
1
2
3
4
5
6
7
8
9
yum -y install glibc libmcrypt-devel \ 
mhash-devel libxslt-devel libjpeg \
libjpeg-devel libpng libpng-devel \
freetype freetype-devel libxml2 \
libxml2-devel zlib zlib-devel glibc \
glibc-devel glib2 glib2-devel bzip2 \
bzip2-devel ncurses ncurses-devel curl \
curl-devel e2fsprogs e2fsprogs-devel \
krb5 krb5-devel libidn libidn-devel
安装libiconv
1
2
3
4
5
6
cd /root/
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
tar -zxvf libiconv-1.14.tar.gz
cd libiconv-1.14
./configure
make && make install
安装php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
cd /root/
wget http://am1.php.net/distributions/php-7.2.3.tar.gz
tar -zxvf php-7.2.3.tar.gz
cd php-7.2.3
./configure --with-curl \
--with-freetype-dir \
--with-gd \
--with-gettext \
--with-iconv-dir \
--with-kerberos \
--with-libdir=lib64 \
--with-libxml-dir \
--with-mysqli \
--with-openssl \
--with-pcre-regex \
--with-pdo-mysql \
--with-pdo-sqlite \
--with-pear \
--with-png-dir \
--with-xmlrpc \
--with-xsl \
--with-zlib \
--enable-fpm \
--enable-bcmath \
--enable-libxml \
--enable-inline-optimization \
--enable-gd-native-ttf \
--enable-mbregex \
--enable-mbstring \
--enable-opcache \
--enable-pcntl \
--enable-shmop \
--enable-soap \
--enable-sockets \
--enable-sysvsem \
--enable-xml \
--enable-zip
make ZEND_EXTRA_LIBS='-liconv' && make install

PHP 编译安装时出现 undefined reference to `libiconv’ 错误的解决方法
在最后面添加 -liconv ,修改后如下
EXTRA_LIBS = -lcrypt -lz -lcrypt -lrt -lmysqlclient -lmcrypt -lldap -llber -lfreetype -lpng -lz -ljpeg -lcurl -lz -lrt -lm -ldl -lnsl -lrt -lxml2 -lz -lm -lssl -lcrypto -ldl -lz -lcurl -ldl -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err -lidn -lssl -lcrypto -lz -lxml2 -lz -lm -lssl -lcrypto -ldl -lz -lxml2 -lz -lm -lxml2 -lz -lm -lcrypt -lxml2 -lz -lm -lxml2 -lz -lm -lxml2 -lz -lm -lxml2 -lz -lm -lcrypt -liconv

报错信息为:
configure: error: off_t undefined; check your library configuration

在编译php时会遇到如上问题,这个问题一般在centos 64位系统中比较多见,解决如下

1
2
3
4
echo '/usr/local/lib64
/usr/local/lib
/usr/lib
/usr/lib64'>>/etc/ld.so.conf&&ldconfig -v

其实就是在这个库配置文件中加入64位库到默认库查找路径中,不然就会报错

1.配置:

php配置

1
vim /etc/php.ini

php-fpm配置

1
2
3
4
cd /usr/local/etc/
cp php-fpm.conf.default php-fpm.conf
cd php-fpm.d
cp www.conf.default www.conf
修改
1
2
3
4
5
6
user = nginx
group = nginx
pm.max_children = 150
pm.start_servers = 8
pm.min_spare_servers = 5
pm.max_spare_servers = 10

2.运行php-fpm

1
/usr/local/sbin/php-fpm

3.nginx和php-fpm整合

1
vim /usr/local/nginx/nginx.conf

修改如下:

重新载入nginx的配置文件:

1
/usr/local/nginx/sbin/nginx -s reload

mysql安装

1
2
3
4
5
6
7
wget -c https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz
tar -zxvf mysql-5.7.21-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.21-linux-glibc2.12-x86_64 /usr/local/mysql
cd /usr/local/mysql/

groupadd mysql
useradd -r -g mysql mysql

数据库数据默认目录datadir=/var/lib/mysql,可通过vim /etc/my.cnf 查看
修改后的目录是 mkdir -p /usr/local/mysql/data

1
chown -R mysql:mysql  ./

初始化数据库

1
./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

会生成初始root密码,记下这个问题用于首次登录./bin/mysql -uroot -p mysql


修改权限为root

1
2
chown -R root:root .
chown -R mysql:mysql data

安装完mysql之后,登陆以后,不管运行任何命令,总是提示这个”ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.”
step 1: SET PASSWORD = PASSWORD(‘your new password’);
step 2: ALTER USER ‘root‘@’localhost’ PASSWORD EXPIRE NEVER;
step 3: flush privileges;

注:

修改root密码:

1
update mysql.user set authentication_string=password('123qwe') where user='root' and Host = 'localhost';


开机自启动

在/usr/lib/systemd/system创建三个.service文件,内容如下:

1.nginx.service
1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=nginx - high performance web server
After=network.target remote-fs.target nss-lookup.target

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

[Install]
WantedBy=multi-user.target
2.mysql.service
1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=mysql
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/usr/local/mysql/support-files/mysql.server start
#ExecReload=/usr/local/mysql/support-files/mysql.server restart
#ExecStop=/usr/local/mysql/support-files/mysql.server stop
#PrivateTmp=true

[Install]
WantedBy=multi-user.target
3.php-fpm.service
1
2
3
4
5
6
7
8
9
10
[Unit]
Description=php
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
ExecStart=/usr/local/sbin/php-fpm

[Install]
WantedBy=multi-user.target
4.注册service
1
2
3
systemctl enable nginx.service #设置nginx服务为自启动服务
systemctl enable mysql.service
systemctl enable php-fpm.service
5.启动service
1
2
3
systemctl start nginx.service #启动jenkins服务
systemctl start mysql.service
systemctl start php-fpm.service
-------------本文结束感谢您的阅读-------------