centos7.4 编译安装PHP+Nginx+Mysql

博文参考 https://blog.csdn.net/faith306/article/details/78541974#1%E5%89%8D%E8%A8%80 

     https://blog.csdn.net/z13615480737/article/details/78906598

1. 前言:

  centos7.4

  php7.1.11+nginx1.15.2+mysql5.7

  编译安装比较复杂,但是可以自定义安装路径,可以自定义安装配置库

2. 准备工作

  2.1 创建文件夹  

本文中所有文件放在/usr目录下,进入usr目录中
mkdir lnmp  // php+nginx+mysql安装目录
mkdir lnmp/php // php安装目录
mkdir lnmp/nginx // nginx 安装目录
mkdir lnmp/mysql // mysql安装目录
mkdir lnmp/logs // 日志目录
mkdir origindatas // 安装包存放目录
mkdir lnmp/package // package目录用来存放安装过程中需要用到的编译后的库文件

  2.2 安装make

yum -y install gcc automake autoconf libtool make

  2.3 安装g++

yum install gcc gcc-c++ glibc

3. 安装Nginx

  3.1 下载并解压pcre

/usr/origindatas目录下执行
wget https://sourceforge.net/projects/pcre/files/pcre/8.41/pcre-8.41.tar.gz tar -zxvf pcre-8.41.tar.gz

  3.2 下载并解压zlib

/usr/origindatas目录下执行
wget https://sourceforge.net/projects/libpng/files/zlib/1.2.11/zlib-1.2.11.tar.gz tar –zxvf zlib-1.2.11.tar.gz

  3.3 下载并解压openssl

// 同上
wget https://www.openssl.org/source/openssl-1.1.0b.tar.gz tar –zxvf openssl-1.1.0b.tar.gz

  3.4 为nginx添加用户组

// nginx的进程需要以某一个用户的权限进行运行,为了服务器安全,一般指定一个普通用户作为nginx的运行角色,这里创建一个www用户作为nginx工作进程的用户,后续安装的PHP也以www用户做为工作进程用户
groupadd -r www useradd -r -g www www

  3.5 下载并安装nginx

// 网站 http://nginx.org/
// 在/usr/origindatas目录下执行
wget http://nginx.org/download/nginx-1.12.2.tar.gz tar –zxvf nginx-1.12.2.tar.gz

  完成了以上下载解压操作,接下来编译安装

// 进入解压后的nginx文件中,执行以下操作
./configure --prefix=/usr/lnmp/nginx/nginx-1.12.2 --sbin-path=/usr/lnmp/nginx/nginx-1.12.2/sbin/nginx --conf-path=/usr/lnmp/nginx/nginx-1.12.2/nginx.conf --pid-path=/usr/lnmp/nginx/nginx-1.12.2/nginx.pid --user=www --group=www --with-http_ssl_module --with-http_flv_module --with-http_mp4_module --with-http_stub_status_module --with-select_module --with-poll_module --error-log-path=/usr/lnmp/logs/nginx/error.log --http-log-path=/usr/lnmp/logs/nginx/access.log --with-pcre=/usr/origindatas/pcre-8.41 --with-zlib=/usr/origindatas/zlib-1.2.11 --with-openssl=/usr/origindatas/openssl-1.1.0b

// ./configure执行完成后执行
make
make install // 安装成功后便可在/usr/lnmp/nginx目录下看见nginx

  关于./configure内容

--prefix=/usr/lnmp/nginx/nginx-1.15.2   // --prefix nginx安装在哪个路径下
--sbin-path=/usr/lnmp/nginx/nginx-1.15.2/sbin/nginx // 可执行文件存放路径
--conf-path=/usr/lnmp/nginx/nginx-1.15.2/nginx.conf // nginx的主配置文件存放路径
--pid-path=/usr/lnmp/nginx/nginx-1.15.2/nginx.pid  // nginx.pid文件的存放路径,将存储的主进程的进程号
--user=www // 表示nginx工作进程的用户 
--group=www //表示nginx工作进程的用户组 --with-http_ssl_module // 表示使用https协议模块。默认情况下,该模块没有被构建。建立并运行此模块的OpenSSL库是必需的 --with-http_flv_module --with-http_mp4_module --with-http_stub_status_module --with-select_module // 表示启用或禁用构建一个模块来允许服务器使用select()方法 --with-poll_module // 表示启用或禁用构建一个模块来允许服务器使用poll()方法 --error-log-path=/usr/lnmp/logs/nginx/error.log // 表示nginx的主错误、警告、和诊断文件存放路径 --http-log-path=/usr/lnmp/logs/nginx/access.log // 表示nginx的主请求的HTTP服务器的日志文件的存放路径 --with-pcre=/usr/origindatas/pcre-8.41 // 表示pcre的源码路径,因为解压后的pcre存放目录 --with-zlib=/usr/origindatas/zlib-1.2.11 // 表示zlib的源码路径,这里因为解压后的zlib存放目录 --with-openssl=/usr/origindatas/openssl-1.1.0b // 表示openssl库的源码路径

  3.6 配置nginx配置文件

  打开配置文件

vi /usr/lnmp/nginx/nginx-1.12.2/nginx.conf

  修改成如下

#user  nobody;
worker_processes  1;

error_log  /usr/lnmp/logs/nginx/error.log;  // 错误日志路径
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

pid        /usr/lnmp/logs/nginx/nginx.pid; // pid文件路径


events {
    worker_connections  1024;
}


http {
    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 /usr/lnmp/nginx/nginx-1.12.2/conf/vhosts/*.conf;   // 引入配置了域名信息的文件注意路径
}

  添加配置文件最后一行引入的域名文件

server {
    listen       80;
    server_name  www.itryfirst.top;
    root /usr/webapps;
    index index.php index.html index.htm;



    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires 30d;
    }
    location ~ .*.(js|css)?$
    {
        expires 1h;
    }

  #使其可以解析php文件
  location ~ .php$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    } }

  完成后启动nginx

/usr/lnmp/nginx/nginx-1.12.2/sbin/nginx

  如果启动报错如下

 nginxnginx: [emerg] unknown directive "  " in /usr/lnmp/nginx/nginx-1.15.2/conf/vhosts/try.conf:22

  将这段代码删除,再从编辑器中复制进来,在保存重启即可!

  查看nginx进程是否启动成功

ps aux | grep nginx

  3.7 加入系统环境变量

vi /etc/profile
// 最后一行加入
export PATH=$PATH:/usr/lnmp/nginx/nginx-1.12.2/sbin

  保存修改后,使用source命令重新加载配置文件

source /etc/profile

  查看系统环境变量

echo $PATH

  3.8 加入系统服务

  执行命令打开文件

vim /etc/init.d/nginx

  添加如下内容

#!/bin/bash
# chkconfig: - 85 15
PATH=/usr/lnmp/nginx/nginx-1.12.2  // nginx安装路径
DESC="nginx daemon"
NAME=nginx
DAEMON=$PATH/sbin/$NAME
CONFIGFILE=$PATH/$NAME.conf
PIDFILE=$PATH/logs/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
set -e
[ -x "$DAEMON" ] || exit 0
do_start() {
$DAEMON -c $CONFIGFILE || echo -n "nginx already running"
}
do_stop() {
$DAEMON -s stop || echo -n "nginx not running"
}
do_reload() {
$DAEMON -s reload || echo -n "nginx can't reload"
}
case "$1" in
start)
echo -n "Starting $DESC: $NAME"
do_start
echo "."
;;
stop)
echo -n "Stopping $DESC: $NAME"
do_stop
echo "."
;;
reload|graceful)
echo -n "Reloading $DESC configuration..."
do_reload
echo "."
;;
restart)
echo -n "Restarting $DESC: $NAME"
do_stop
do_start
echo "."
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|reload|restart}" &gt &amp 2
exit 3
;;
esac
exit 0

  保存完成后,赋予权限

chmod +x /etc/init.d/nginx

  启动nginx

service nginx start

  3.9 设置nginx开机自启

chkconfig --add nginx
chkconfig nginx on

 4. 安装PHP

  4.1 通过yum安装php需要的常用库

yum -y install 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 openssl openssl-devel

  4.2 下载并安装php

// 网站 http://www.php.net/downloads.php
// 进入/usr/origindatas目录下执行
wget http://cn2.php.net/distributions/php-7.1.11.tar.gz tar –zxvf php-7.1.11.tar.gz

  完成了下载和解压,接下来进行安装操作

// 进入加压的目录下,执行语句,注意修改前两个参数的路径
./configure --prefix=/usr/lnmp/php/php-7.1.11 --with-config-file-path=/usr/lnmp/php/php-7.1.11/etc --enable-fpm --with-mcrypt --enable-mbstring --enable-pdo --with-curl --disable-debug --disable-rpath --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --with-mhash --enable-zip --with-pcre-regex --with-mysqli --with-gd --with-jpeg-dir --with-freetype-dir --enable-calendar
// 继续执行
make
make install

  4.3 修改配置文件

  将官方提供的配置模板拷贝到配置参数(上面configure中第二个路径)中所指定的目录中

// php.ini文件根据自己的需要进行修改
cp /usr/origindatas/php-7.1.11/php.ini-production /usr/lnmp/php/php-7.1.11/etc/php.ini

  4.4 设置php-fpm配置文件

// 依次执行下面语句
cd /usr/lnmp/php/php-7.1.11/etc cp php-fpm.conf.default php-fpm.conf cd /usr/lnmp/php/php-7.1.11/etc/php-fpm.d cp www.conf.default www.conf

  修改php-fpm.conf文件(如果下面启动失败,就不要这个)

user = www
group = www
listen = 127.0.0.1:9000
pm.max_children = 100
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35

  启动php-fpm

/usr/lnmp/php/php-7.1.11/sbin/php-fpm

  查看是否启动成功

ps aux | grep php-fpm

  4.5 加入系统环境变量

vi /etc/profile
// 最后一行加入
export PATH=$PATH:/usr/lnmp/php/php-7.1.11/bin // 注意此处路径修改
// 保存退出执行
source /etc/profile // 重新加载配置文件

  4.6 加入系统服务

// 使用vi命令在/etc/init.d/目录下创建一个php-fpm文件
vi /etc/init.d/php-fpm

  内容如下(注意路径修改)

#!/bin/bash
# php-fpm startup script for the php-fpm 
# php-fpm version:7.1.11
# chkconfig: - 85 15
# description: php-fpm
# processname: php-fpm
# pidfile: /usr/lnmp/php/php-7.1.11/var/run/php-fpm.pid
# config: /usr/lnmp/php/php-7.1.11/etc/php-fpm.conf

php_command=/usr/lnmp/php/php-7.1.11/sbin/php-fpm
php_config=/usr/lnmp/php/php-7.1.11/etc/php-fpm.conf
php_pid=/usr/lnmp/php/php-7.1.11/var/run/php-fpm.pid
RETVAL=0
prog="php-fpm"

#start function
php_fpm_start() {
    /usr/lnmp/php/php-7.1.11/sbin/php-fpm
}

start(){
    if [ -e $php_pid  ]
    then
    echo "php-fpm already start..."
    exit 1
    fi
    php_fpm_start
}

stop(){
    if [ -e $php_pid ]
    then
    parent_pid=`cat $php_pid`
    all_pid=`ps -ef | grep php-fpm | awk '{if('$parent_pid' == $3){print $2}}'`
    for pid in $all_pid
    do
            kill $pid
        done
        kill $parent_pid
    fi
    exit 1
}

restart(){
    stop
    start
}

# See how we were called.
case "$1" in
start)
        start
        ;;
stop)
        stop
        ;;
restart)
        stop
        start
        ;;
status)
        status $prog
        RETVAL=$?
        ;;
*)
        echo $"Usage: $prog {start|stop|restart|status}"
        exit 1
esac
exit $RETVAL

  设置开机自启

chkconfig --add php-fpm
chkconfig php-fpm on

  此时php还未安装openssl扩展,安装方法:https://www.cnblogs.com/cyclzdblog/p/9424686.html

5. mysql安装配置(使用yum安装)

  官网教程:https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/

  5.1 安装mysql的repo源

进入/usr/origindatas目录下依次执行下面代码
wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm
rpm -ivh mysql57-community-release-el7-8.noarch.rpm 
yum -y install mysql-server 

  这样装环境变量配置都不用你管,装上直接启动就行。安装路径是默认的。

  安装完成后

  默认配置文件路径: 
  配置文件:/etc/my.cnf 
  日志文件:/var/log/mysqld.log 
  服务启动脚本:/usr/lib/systemd/system/mysqld.service 
  socket文件:/var/run/mysqld/mysqld.pid

  5.2 配置my.cnf文件

vi /etc/my.cnf // 打开文件将下面内容复制进去,无需修改
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
server_id = 1
expire_logs_days = 3
 
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
 
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

  配置完成后启动mysql

service mysqld restart

  5.3 连接mysql,修改初始密码等

  安装完成后会生成一个复杂的初始密码,获取方式

grep "password" /var/log/mysqld.log

  使用获取的密码连接mysql即可成功

  修改密码

alter user 'root'@'localhost' identified by '123456';  

  如果报错如下

ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

  先执行

// 设置安全级别
set
global validate_password_policy=0;
// 设置密码长度
set global validate_password_length=6;

  然后在执行上面的修改密码的语句即可成功

  最后刷新权限

flush privileges;

  5.4 如果发现找不到密码,解决如下

vi /etc/my.cnf

  打开文件最末尾加上下面语句,保存退出

skip-grant-tables   // 取消密码登陆

  重新启动mysql后就可以连接上,记住不需要加-p

use mysql 
update user set password=password("123456") where user="root";
// mysql 5.7的数据库没有了password字段 用的是authentication_string字段
update mysql.user set authentication_string=password('123456') where user='root' ;
flush privileges;

  修改密码之后将配置文件改回来即可

  5.4 开启mysql远程连接访问权限

mysql -u root -p     //输入密码进入mysql控制台
mysql>use mysql;
mysql>update user set host = '%' where user = 'root';    //这个命令执行错误时可略过 
mysql>flush privileges;
mysql>select host, user from user; //检查‘%’ 是否插入到数据库中
mysql>quit
原文地址:https://www.cnblogs.com/cyclzdblog/p/9408693.html