CentOS 7 编译安装LNMP环境

CentOS 7 编译安装LNMP环境

    • 1、前言
    • 2、准备安装工具
    • 3、安装Nginx
    • 4、安装php
    • 5、安装MySQL
    • 6、配置Nginx+PHP+MySQL

1、前言

本文适合于已经对Linux操作系统具有基本操作经验,并且能够在Linux或Windows上通过一键搭建工具或者yum命令行进行环境搭建的读者,阅读本文需具有一定的专业知识,如果初学者的的基础比较厉害的伙伴也可以尝试一下。
本文所描述的是在标准的CentOS 7.6 64位操作系统下,安装Nginx 1.15.9 + PHP 7.3.3 + MySQL 5.7.20环境。采用源码编译安装的方式,虽然较直接使用yum命令安装较为复杂,但是源码安装可以自定义指定安装路径,可以自定义配置安装配套的库和插件,这样服务器运维人员将更清楚自己服务器的情况,从而,在日后的环境、插件的升级和更新操作中,将变得更加简便和容易
注意:该教程是以VM虚拟机安装的CentOS 7.6 minimal(最小安装) 的初始环境版本为例,如有不同的情况,可能是系统版本或者系统安装的其它软件等导致。

2、准备安装工具

2.1、安装make

yum -y install gcc automake autoconf libtool make

2.1、安装g++

yum install gcc gcc-c++ glibc

2.3、创建安装目录
本文是在VM虚拟机上安装,所以在系统根目录下创建www目录,然后在www目录里面分别创建server目录、logs目录、wwwroot目录和package目录,其中server目录存放所有的服务器软件(本文中所涉及到的nginx、php、mysql等),wwwroot目录存放所有部署的代码及程序,package目录用来存放安装过程中需要用到的编译后的库文件。
需以root权限,依次执行以下命令

mkdir /www
mkdir /www/package
mkdir –p /www/server
mkdir –p /www/wwwroot
mkdir –p /www/logs

这里需要说明,上述的server目录,是指环境安装完成后,运行程序所在的目录,并非nginx等程序的源码存放目录,为了方便,本文将下载到的这些运行环境程序的源码统一存放于/root目录下,读者可根据自身情况及喜好,将运行环境程序源码存放于任意不是/www/server的目录下

3、安装Nginx

3.1、下载并解压pcre
官网:http://www.pcre.org/
依次执行以下命令

cd /root/
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.43.tar.gz
tar -zxvf pcre-8.43.tar.gz

如果系统提示如下

-bash: wget: command not found

请执行以下命令,等待完成后继续操作

yum -y install wget

3.2、下载并解压zlib
官网:http://zlib.net/
依次执行以下命令

cd /root/
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
官网:https://www.openssl.org/
依次执行以下命令

cd /root/
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/
依次执行以下命令

cd /root/
wget http://nginx.org/download/nginx-1.15.9.tar.gz
tar –zxvf nginx-1.15.9.tar.gz

以上命令完成下载和解压操作,接下来进行安装操作

cd nginx-1.15.9/
./configure
--prefix=/www/server/nginx
--sbin-path=/www/server/nginx/sbin/nginx
--conf-path=/www/server/nginx/conf/nginx.conf
--pid-path=/www/server/nginx/logs/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=/www/logs/nginx/error.log 
--http-log-path=/www/logs/nginx/access.log  
--with-pcre=/root/pcre-8.43 
--with-zlib=/root/zlib-1.2.11
--with-openssl=/root/openssl-1.1.0b

我这里是为了好看的格式,如果复制以上命令的伙伴,建议转换一下,以免执行出错
其中,./configure是对安装进行配置;

--prefix                                          #表示nginx要安装到哪个路径下,这里指定刚才新建好的/www/server目录下的nginx;
--sbin-path                                       #表示nginx的可执行文件存放路径
--conf-path                                       #表示nginx的主配置文件存放路径,nginx允许使用不同的配置文件启动,通过命令行中的-c选项
--pid-path                                        #表示nginx.pid文件的存放路径,将存储的主进程的进程号。安装完成后,可以随时改变的文件名 , 在nginx.conf配置文件中使用 PID指令。默认情况下,文件名 为prefix/logs/nginx.pid
--error-log-path                                  #表示nginx的主错误、警告、和诊断文件存放路径
--http-log-path                                   #表示nginx的主请求的HTTP服务器的日志文件的存放路径
--user                                            #表示nginx工作进程的用户
--group                                           #表示nginx工作进程的用户组
--with-select_module / --without-select_module    #表示启用或禁用构建一个模块来允许服务器使用select()方法
--with-poll_module / --without-poll_module        #表示启用或禁用构建一个模块来允许服务器使用poll()方法
--with-http_ssl_module                            #表示使用https协议模块。默认情况下,该模块没有被构建。建立并运行此模块的OpenSSL库是必需的
--with-pcre                                       #表示pcre的源码路径,因为解压后的pcre是放在root目录下的,所以是/root/pcre-8.43;
--with-zlib                                       #表示zlib的源码路径,这里因为解压后的zlib是放在root目录下的,所以是/root/zlib-1.2.11
--with-openssl                                    #表示openssl库的源码路径

配置成功后,依次执行make和make install命令,即可安装Nginx,安装成功后,可以看到在/www/server目录下,多出了一个nginx,里面即是nginx的实际运行程序。
3.6、设置nginx配置文件
本文配置的nginx支持多域名,每个域名的配置文件单独放在/www/server/nginx/conf/vhosts路径下,使用vim命令打开nginx.conf文件,对其内容进行修改

user  www www;
worker_processes  2;

error_log  /www/logs/nginx/error.log crit;

pid        /www/server/nginx/logs/nginx.pid;
worker_rlimit_nofile 65535;

events {
    use epoll;
    worker_connections  65535;
}

http {
    include       mime.types;
    server_tokens off; #隐藏nginx版本号
    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  /www/logs/nginx/access.log  main;

server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;

sendfile        on;
tcp_nopush     on;

keepalive_timeout  65;

gzip  on;
gzip_min_length  1k;
gzip_buffers     4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types       text/plain application/x-javascript text/css application/xml;
gzip_vary on;

tcp_nodelay on;

fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;

log_format '$remote_addr - $remote_user [$time_local] "$request" '
              '$status $body_bytes_sent "$http_referer" '
              '"$http_user_agent" "$http_x_forwarded_for"';

include /www/server/nginx/conf/vhosts/*.conf; #网站配置
include /www/server/nginx/conf/proxy/*.conf; #用于代理
}

上述配置中,引用了/www/server/nginx/conf/vhosts/目录下所有后缀名是.conf的配置文件,现在进入该目录编写一个默认配置文件default.conf,其内容是

server {
    listen      80;
    server_name  _;
    index index.html;
    root /www/server/nginx/html;
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
        expires 30d;
    }
    location ~ .*\.(js|css)?$
    {
        expires 1h;
    }
    #伪静态规则
    include /www/server/nginx/conf/rewrite/default.conf;
    access_log  /www/logs/nginx/access/default.log;
    error_log /www/logs/nginx/error/default.log;
}

其中引入了一个/www/server/nginx/conf/rewrite/default.conf文件,这个文件是用来编写rewrite规则的配置文件,用来实现伪静态,其内容是

rewrite ^(.*)-htm-(.*)$ $1.php?$2 last;
rewrite ^(.*)/simple/([a-z0-9\_]+\.html)$ $1/simple/index.php?$2 last;
rewrite ^(.*)/data/(.*)\.(htm|php)$ 404.html last;
rewrite ^(.*)/attachment/(.*)\.(htm|php)$ 404.html last;
rewrite ^(.*)/html/(.*)\.(htm|php)$ 404.html last;

3.7、启动nginx
以本文为例,启动nginx需要执行以下命令

/www/server/nginx/sbin/nginx

启动后,使用命令

ps -aux | grep nginx

查看进程,若能够看到相关进程,则证明启动成功。查询进程时,可以看到进程是以www用户身份执行的

3.8、加入系统环境变量

使用vim命令打开/etc/profile文件,在文件最末尾加上如下代码

export NGINX_DIR=/alidata/server/nginx
export PATH=$PATH:$NGINX/sbin

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

source /etc/profile

执行上述命令后,可使用

echo $PATH

命令查看环境变量中是否已经加入了相关的路径

3.9、开机自启服务

使用vim命令编辑/etc/rc.local文件,这个文件是系统启动后会自动执行的,我们就将启动命令加入到这个文件中

vim /etc/rc.local

我们可以按i 进入到编辑模式 插入对应的程序启动命令即可

/www/server/nginx/sbin/nginx &

随后我们:wq保存文件并退出,使用 init 6重启系统
重启后,运行以下命令

ps -aux | grep nginx

是不是看到nginx的进程了呢,如果没有看到,请检查编辑的命令或者看系统的某部分是否修改过
3.10、开放nginx默认端口
防火墙开放80端口(nginx默认使用80端口,可在nginx.conf中配置,若无需进行远程访问则不需要开放端口)
永久开放80端口:

firewall-cmd --zone=public --add-port=80/tcp --permanent

重启防火墙:

firewall-cmd --reload

查看防火墙开启状态:

systemctl status firewalld

查看80端口是否开放成功:

firewall-cmd --zone=public --query-port=80/tcp

可在windows宿主主机浏览器直接访问虚拟机ip测试是否可以成功访问。

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://php.net/
依次执行以下命令

cd /root/
wget http://cn2.php.net/distributions/php-7.3.3.tar.gz
tar –zxvf php-7.3.3.tar.gz

以上命令完成下载和解压操作,接下来进行安装操作

cd /root/php-7.3.3
./configure 
--prefix=/www/server/php-7.3.3
--with-config-file-path=/www/server/php/73/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

我这里是为了好看的格式,如果复制以上命令的伙伴,建议转换一下,以免执行出错

可能会出现的问题:

error: Please reinstall the libzip distribution

解决:安装 libzip

yum -y install libzip ibzip-devel

安装后重新 ./configure 可能还会报错:

error: system libzip must be upgraded to version >= 0.11

根据提示我们可以清楚的知道是因为系统自带的libzip版本低了,这里我们需要安装最新的libzip
首先,卸载系统自带的libzip

yum  -y remove libzip-devel

然后从官网下载并编译安装

cd /root
wget https://libzip.org/download/libzip-1.3.2.tar.gz
tar xvf libzip-1.3.2.tar.gz
cd libzip-1.3.2
./configure
make && make install

如果是下载1.5.*以上版本,则需要采用如下安装方式

yum -y install cmake
wget https://libzip.org/download/libzip-1.5.1.tar.gz
tar -zxvf libzip-1.5.1.tar.gz`在这里插入代码片`
cd libzip-1.5.1
mkdir build
cd build
cmake ..
make && make install

这里需要提到:安装较新版本的 libzip 在执行 cmake 时可能会报错:

CMake Error at CMakeLists.txt:4 (CMAKE_MINIMUM_REQUIRED):
  CMake 3.0.2 or higher is required.  You are running version 2.8.12.2


-- Configuring incomplete, errors occurred!

意思是系统安装的 cmake 版本过低 需要更高的版本才能编译安装 libzip,如需安装高版本的 libzip 请查看此教程
我这里安装的 libzip 版本是 1.3.2 无需用到 cmake

安装后重新 ./configure 还可能会出现的错误:

error: off_t undefined; check your library configuration

解决:因为没有配置系统动态链接库,手动创建

echo '/usr/local/lib64
/usr/local/lib
/usr/lib
/usr/lib64'>>/etc/ld.so.conf && ldconfig

ldconfig -v

最后没有问题后,make && make install ,make 在这里有个小技巧

make -j 2

如上,“2” 代表的是以多核执行,服务器有几核就填几,过多会导致服务器负载繁忙
4.3、设置php配置文件
将官方提供的配置模板拷贝到配置参数中所指定的目录中

cp /root/php-7.3.3/php.ini-production /www/server/php/73/etc/php.ini

然后可以根据自己服务器的需求,对php.ini文件的内容进行修改
4.4、设置php-fpm配置文件
依次执行以下命令

cd /www/server/php/73/etc
cp php-fpm.conf.default php-fpm.conf
cd /www/server/php/73/etc/php-fpm.d
cp www.conf.default www.conf

使用vim命令对php-fpm.conf的内容进行如下修改

pid= /www/server/php/73/var/run/php-fpm.pid

使用vim命令对www.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

其他配置可根据自己的情况进行相应修改
4.5、启动php-fpm
完成以上配置后,即可启动php-fpm,执行以下命令

/www/server/php/73/sbin/php-fpm

启动后,使用

ps aux | grep php-fpm

命令查看进程,若能够看到相关进程,则证明启动成功。查询进程时,可以看到进程是以www用户身份执行的
4.6、加入系统环境变量
使用vim命令打开/etc/profile文件,在文件最末尾加上如下代码

export PHP_DIR=/www/server/php/73
export PATH=$PATH:$PHP_HOME/bin:$PHP_DIR/sbin

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

source /etc/profile

执行上述命令后,可使用

echo $PATH

命令查看环境变量中是否已经加入了相关的路径
4.7、设置php-fpm开机自启动
使用vim命令编辑/etc/rc.local文件,这个文件是系统启动后会自动执行的,我们就将启动命令加入到这个文件中

vim /etc/rc.local

我们可以按i 进入到编辑模式 插入对应的程序启动命令即可

/www/server/php/73/sbin/php-fpm &

随后我们:wq保存文件并退出,使用 init 6重启系统
重启后,运行以下命令

ps -aux | grep nginx

5、安装MySQL

5.1、下载源码
官网链接
去到官网,选择以下:
Select Operating System: Source Code
Select OS Version:Generic Linux
下载带boost库的源码
依次执行以下命令

cd /root/
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.25.tar.gz
tar –zxvf mysql-boost-5.7.25.tar.gz

安装相关依赖

yum -y install \
gcc gcc-devel gcc-c++ gcc-c++-devel \
autoconf* automake* zlib* libxml*ncurses-devel ncurses \
libgcrypt* libtool* cmake openssl openssl-devel \
bisonbison-devel perl-Data-Dumper boost boost-doc boost-devel

之前有安装过的也可以省些步骤,确保安装以下依赖包:

yum -y install cmake ncurses-devel

5.2、为MySQL添加用户及组
为了保证操作系统的安全,这里为mysql工作进程创建专用的用户

groupadd mysql
useradd -r -g mysql mysql

创建安装目录及数据库存放目录,给与mysql读写的权限

mkdir -p /www/server/mysql/conf
chown –R mysql:mysql /www/server/mysql/
mkdir -p /www/server/data/mysql
chown -R mysql:mysql /www/server/data/mysql

5.4、预编译
从 MySQL 5.7.5 开始Boost库是必需的

cd /root/mysql-boost-5.7.25
cmake \
-DCMAKE_INSTALL_PREFIX=/www/server/mysql \
-DMYSQL_DATADIR=/www/server/data/mysql \
-DSYSCONFDIR=/www/server/mysql/conf \
-DMYSQL_USER=mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_BOOST=boost
make
make install

配置说明:

-DCMAKE_INSTALL_PREFIX=/www/server/mysql \        #mysql安装目录
-DMYSQL_DATADIR=/www/server/data/mysql \          #数据库文件目录
-DSYSCONFDIR=/www/server/mysql/conf \             #配置文件目录
-DMYSQL_USER=mysql \                              #运行mysql进行的用户,如果没有需要提前添加用户和用户组
-DDEFAULT_CHARSET=utf8 \                          #默认字符集
-DDEFAULT_COLLATION=utf8_general_ci \             #默认校对规则
-DWITH_BOOST=boost                                #boost库,带boost的源码包只需要这样即可,不带boost源码包需要指明boost目录

5.3、清空mysql的遗留配置文件
mysql 的配置文件是放在 /etc/ 目录下的,名字是 my.cnf

rm -rf /etc/my.cnf #删除(清空也行),原本的会导致服务起不来
vim /etc/my.cnf  #进去后 :wq #保存退出 

5.4、初始化MySQL

cd /www/server/mysql/bin
./mysqld --initialize --user=mysql --basedir=/www/server/mysql/ --datadir=/www/server/data/mysql

初始化成功后,会输出初始密码,记住临时密码,首次进入数据库后需要修改密码
创建软链方便命令行连接

cp bin/mysql /usr/bin/

5.5、配置启动
在mysql安装目录的bin目录下,使用以下命令启动mysql

cp /www/server/mysql/support-files/mysql.server /etc/init.d/mysqld
service mysqld start

启动后,使用初始化所得的root密码登录mysql,查看是否可以正常操作,命令如下

mysql –u root –p 你的临时密码
alter user user() identified by "123456";

5.6、设置MySQL服务开机自启
上面我们已经把mysql的可执行服务复制到 /etc/init.d/ 目录里了,下面我们只需将服务添加到系统

chkconfig --add mysqld
chkconfig mysqld on

重启服务器看看mysql有没有启动成功:

ps aux | grep mysql

命令,启动MySQL服务,接下来,就请使用root用户登录,然后进行创建用户,创建数据库,赋权等操作,这部分属于MySQL的基本操作,本文不再赘述。

6、配置Nginx+PHP+MySQL

与Apache服务器不同的是,Nginx本身并不解释、运行PHP代码,Nginx只是将用户端发来的HTTP请求进行转发,真正解释运行PHP代码的是php-fpm进程,所以,这里只需要将Nginx收到的http请求转发给php-fpm即可。
根据本文前序步骤,已经完成了Nginx和PHP的安装和配置,接下来,只需要在Nginx的配置文件中加入转发至php-fpm的配置即可。
6.1、配置Nginx+PHP
本文中对Nginx进行了多域名配置,每个域名只需要在/www/server/nginx/conf/vhosts目录下有一个自己的配置文件即可,所以重点就在这个配置文件里,现在假定我们需要查看当前服务器的php信息,因为本文没有涉及到域名解析及配置的相关信息,所以这里就以IP访问为例进行配置讲解,首先,需要在我们的web代码根路径/www/server/nginx/html下创建一个index.php文件
执行以下命令

vim /www/server/nginx/html/index.php

文件内容可以是一段非常简单的php代码:例如


保存文件后,对Nginx的配置文件进行修改,前文已经在/www/server/nginx/conf/vhosts/目录下创建了default.conf配置文件,现在对这个文件的内容进行修改,修改后的内容如下

server {
        listen       80;
        server_name  localhost;
        index index.php index.htm index.html;
        root /www/server/nginx/html;
        location ~ .*\.(php|php5)?$
        {
                #fastcgi_pass  unix:/tmp/php-cgi.sock;
                fastcgi_pass  127.0.0.1:9000;
                fastcgi_index index.php;
                include fastcgi.conf;
        }
        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
                expires 30d;
        }
        location ~ .*\.(js|css)?$
        {
                expires 1h;
        }
        # 配置页面静态化
        include /www/server/nginx/conf/rewrite/default.conf;
        access_log  /www/logs/nginx/access/default.log;
        error_log /www/logs/nginx/error/default.log;
}

可以看到,与之前的配置文件相比,主要是index配置项后,多了关于php的配置内容,以及location相关配置中,多了对于php的内容,保存以上配置文件,使用以下命令使配置生效

nginx -s reload

通过浏览器访问http://服务器的IP/info.php,即可看到上文中php代码的运行效果,就会输出相关的php信息
至此,即完成了Nginx和PHP的配置,这里需要说明,上述的配置只是最简单的配置,若项目不是运行在html根目录下的,那么配置文件也需要对应的进行修改
如有相关的问题,请大家在评论区说明一下,我后续会跟进,让文章更能给大家带来帮助。
在此,感谢:
文章部分内容来自吾爱我娇,经个人阅读后总结出的问题及解决方案改编。

你可能感兴趣的:(改编)