LNMP环境搭建-----建议和LAMP环境搭建联合参考

Linux+Nginx+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。该软件开发的项目在软件方面的投资成本较低,因此受到整个IT界的关注。目前已经较多的企业使用LNMP代替LAMP,轻量级nginx比apache能承受并处理的并发更多。

本实验采用64位CentOS7.2进行部署,系统最小化安装,nginx选用nginx-1.10.2,MariaDB选用MariaDB-10.1.19,php选用php-5.6.26。

软件包列表如下

零、编译安装前的准备工作

1、安装虚拟机(CentOS7.2最小化安装)[安装过程不做说明]

2、修改为静态ip(由于是最小化安装,所以暂时还没有vim ifconfig等命令)

[root@LINUX-LNMP ~]# vi /etc/sysconfig/network-scripts/ifcfg-eno16777736
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
NAME=eno16777736
UUID=a423480d-e96c-4f17-98d1-dccb0a675e1d
DEVICE=eno16777736
ONBOOT=yes
IPADDR=192.168.2.46
NETMASK=255.255.255.0
GATEWAY=192.168.2.1
DNS1=202.96.134.133
DNS2=202.96.154.8

保存退出,重启网络服务,可以通过ip a命令查看ip等信息(暂无ifconfig命令)
另外请注意自己的ip和网关,dns有没有问题,确保一次性成功,
我这里坐标深圳,所以dns服务器我写的这边。大家可以根据自己的坐标搜索对应的dns服务器。

[root@LINUX-LNMP ~]# systemctl restart network
[root@LINUX-LNMP ~]# ip a

3、永久修改主机名(这里只是方便我区分实验项目,大家根据需求,若没必要可不改)

[root@LINUX-LNMP ~]# hostnamectl --static set-hostname LINUX-LNMP

注意:不必重启。上面的命令会立即修改内核主机名。退出并重新登入shell后在命令行提示即可看到新主机名已经改为LINUX-LNMP。

4、编译及其他工具安装

安装gcc、vim、 net-tools(包含ifconfignetstat等命令)等工具,gcc为部署过程中需要调用的编译工具,非常重要,必须安装。
依次安装gcc,vim,screen,lrzsz等可能用到的常用工具。

[root@LINUX-LNMP ~]# yum -y install gcc gcc-c++ vim screen lrzsz net-tools wget curl unzip zip dos2unix
[root@LINUX-LNMP ~]# yum -y install lvm2 vim lrzsz net-tools wget curl unzip zip dos2unix rsync git telnet tree nmap nfs-utils bash-completion bash-completion-extras && history -c
[root@LINUX-LNMP ~]# apt update && apt install lvm2 vim lrzsz net-tools wget curl unzip zip dos2unix rsync telnet zip unzip tree nmap && history -c

注意:系统安装完成后,自带的yum源为官方yum源,无需修改可直接使用。
提示:若系统无法使用自带yum源,请自行百度搜索其他的yum源,修改yum配置文件既可。常用的有搜狐的,阿里的,网易的等。

5、上传源码包

[root@LINUX-LNMP ~]# cd /usr/local/src
[root@LINUX-LNMP ~]# rz

然后选择所需上传的源码包上传即可。
当然也可以采用winscp这类软件上传源码包(图形化界面)。
#关于rz,sz,是lrzsz里面的两个命令,有疑问者请自行搜索lrzsz使用方法。
建议:将所有源码包放在此路径下面,也可根据个人习惯存放。

6:解压所有的源码包

建议:由于大部分为tar.gz格式,可直接使用以下脚本一次性全部解压。
若个别源码包格式不是tar.gz,若报错,无需理会,查看没有解压的包,手动单个解压即可。

[root@LINUX-LNMP ~]# for i in `ls /usr/local/src/`;do tar -zxf $i;done

壹、底层辅助支持软件的安装

1、安装OpenSSL

[root@LINUX-LNMP src]# cd /usr/local/src/openssl-1.0.2j
[root@LINUX-LNMP openssl-1.0.2j]# ./config --prefix=/usr/local/openssl shared
[root@LINUX-LNMP openssl-1.0.2j]# make && make install

修改:此步骤非常重要,至少对于现有的软件版本,修改之后执行/sbin/ldconfig
[root@LINUX-LNMP openssl-1.0.2j]# vi /etc/ld.so.conf 添加一行/usr/local/openssl/lib/
[root@LINUX-LNMP openssl-1.0.2j]# /sbin/ldconfig

2、安装Curl库

[root@LINUX-LNMP src]# cd /usr/local/src/curl-7.50.3
[root@LINUX-LNMP openssl-1.0.2j]# ./configure --prefix=/usr/local/curl
[root@LINUX-LNMP curl-7.50.3]# make && make install

3、安装expat

[root@LINUX-LNMP src]# cd /usr/local/src/expat-2.2.0
[root@LINUX-LNMP expat-2.2.0]# ./configure --prefix=/usr/local/expat
[root@LINUX-LNMP expat-2.2.0]# make && make install

4、安装libxml2

[root@LINUX-LNMP src]# cd /usr/local/src/libxml2-2.9.4
[root@LINUX-LNMP libxml2-2.9.4]# rpm -qa | grep python-devel      #查询是否安装python-devel,若无,请务必执行下面命令安装
[root@LINUX-LNMP libxml2-2.9.4]# yum -y install python-devel      #安装python-devel
[root@LINUX-LNMP libxml2-2.9.4]# ./configure --prefix=/usr/local/libxml2/
 root@LINUX-LNMP libxml2-2.9.4]# make && make install

5、安装libxslt

[root@LINUX-LNMP src]# cd /usr/local/src/libxslt-1.1.29
[root@LINUX-LNMP libxslt-1.1.29]# ./configure --prefix=/usr/local/libxslt --with-libxml-prefix=/usr/local/libxml2
[root@LINUX-LNMP libxslt-1.1.29]# make && make install

6、安装libmcrypt

[root@LINUX-LNMP src]# cd /usr/local/src/libmcrypt-2.5.8
[root@LINUX-LNMP libmcrypt-2.5.8]# ./configure --prefix=/usr/local/libmcrypt

checking for C++ compiler default output file name... configure: error: C++ compiler cannot create executables See `config.log' for more details.
若有此报错:提示没有gcc-c++,安装即可,安装之后再重新编译安装。

[root@LINUX-LNMP libmcrypt-2.5.8]# yum -y install gcc-c++
[root@LINUX-LNMP libmcrypt-2.5.8]# ./configure --prefix=/usr/local/libmcrypt
[root@LINUX-LNMP libmcrypt-2.5.8]# make && make install

# 安装libltdl,也在libmcrypt源码目录中,非新软件

[root@LINUX-LNMP libmcrypt-2.5.8]# cd /usr/local/src/libmcrypt-2.5.8/libltdl
[root@LINUX-LNMP libltdl]# ./configure --enable-ltdl-install
[root@LINUX-LNMP libltdl]# make && make install

7、安装mhash

[root@LINUX-LNMP src]# cd /usr/local/src/mhash-0.9.9.9
[root@LINUX-LNMP mhash-0.9.9.9]# ./configure --prefix=/usr/local/mhash
[root@LINUX-LNMP mhash-0.9.9.9]# make && make install

8、安装mcrypt(两种方法,任选一种)

[root@LINUX-LNMP src]# cd /usr/local/src/mcrypt-2.6.8

8.1、如果mhash没有指定安装目录,而采用默认安装请使用如下命令

[root@LINUX-LNMP mcrypt-2.6.8]# LD_LIBRARY_PATH=/usr/local/libmcrypt/lib:/usr/local/lib \
./configure --with-libmcrypt-prefix=/usr/local/libmcrypt   #两行为一条命令,其中 \ 表示一行未结束,换行的意思
[root@LINUX-LNMP mcrypt-2.6.8]# make && make install > /root/mcrypt-1.install.log
#将安装日志记录下来,如果以后需要删除该软件的话,可以对着日志去看安装的时候都生成了哪些文件,然后对照着删除。

8.2、由于上面我们的mhash指定了安装目录,没有采用默认安装,这里会有如下报错:
configure: error: "You need at least libmhash 0.8.15 to compile this program. http://mhash.sf.net/"

[root@LINUX-LNMP mcrypt-2.6.8]# export LD_LIBRARY_PATH=/usr/local/libmcrypt/lib:/usr/local/mhash/lib
[root@LINUX-LNMP mcrypt-2.6.8]# export LDFLAGS="-L/usr/local/mhash/lib/ -I/usr/local/mhash/include/"
[root@LINUX-LNMP mcrypt-2.6.8]# export CFLAGS="-I/usr/local/mhash/include/"
[root@LINUX-LNMP mcrypt-2.6.8]# ./configure --with-libmcrypt-prefix=/usr/local/libmcrypt
[root@LINUX-LNMP mcrypt-2.6.8]# make && make install > /root/mcrypt-1.install.log
#将安装日志记录下来,如果以后需要删除该软件的话,可以对着日志去看安装的时候都生成了哪些文件,然后对照着删除。

9、安装zlib

[root@LINUX-LNMP src]# cd /usr/local/src/zlib-1.2.8			
[root@LINUX-LNMP zlib-1.2.8]# ./configure --prefix=/usr/local/zlib/
[root@LINUX-LNMP zlib-1.2.8]# make && make install

10、安装libpng

[root@LINUX-LNMP libpng-1.6.25]# cd /usr/local/src/libpng-1.6.25
[root@LINUX-LNMP libpng-1.6.25]# ./configure --prefix=/usr/local/libpng

报错如下:
configure: error: zlib not installed
提示我们zlib没有安装,但是实际上,我们在上面已经安装了,也没有任何错误。
后来发现原来只要把编译好的libz.so.1.2.X指向/lib/libz.so即可,
因为编译的需要,对于头文件也需要软链接到/usr/include. 然后重新编译。

[root@LINUX-LNMP libpng-1.6.25]# ln -s /usr/local/zlib/lib/libz.so.1.2.8 /lib/libz.so
[root@LINUX-LNMP libpng-1.6.25]# ln -s /usr/local/zlib/include/* /usr/include
[root@LINUX-LNMP libpng-1.6.25]# ./configure --prefix=/usr/local/libpng
[root@LINUX-LNMP libpng-1.6.25]# make && make install

11、安装jpeg

[root@LINUX-LNMP src]# cd /usr/local/src/jpeg-9b
[root@LINUX-LNMP jpeg-9b]# ./configure --prefix=/usr/local/jpeg/ --enable-shared --enable-static
[root@LINUX-LNMP jpeg-9b]# make && make install
    
特别注意:如果是安装jpeg的老版本,安装的时候不会自己创建以下目录,如果提示目录不存在,请手工创建
    ------------------------------------------------------------------
    | [root@LINUX-LNMP jpeg-9b]# mkdir /usr/local/jpeg	             |
    | [root@LINUX-LNMP jpeg-9b]# mkdir /usr/local/jpeg/bin           |
    | [root@LINUX-LNMP jpeg-9b]# mkdir /usr/local/jpeg/lib           |
    | [root@LINUX-LNMP jpeg-9b]# mkdir /usr/local/jpeg/include       | 
    | [root@LINUX-LNMP jpeg-9b]# mkdir -p /usr/local/jpeg/man/man1   | 
    ------------------------------------------------------------------

12、安装freetype

[root@LINUX-LNMP src]# cd /usr/local/src/freetype-2.7
[root@LINUX-LNMP freetype-2.7]# ./configure --prefix=/usr/local/freetype/  --with-png=/usr/local/libpng/ --with-zlib=/usr/local/zlib/
[root@LINUX-LNMP freetype-2.7]# make && make install

13、安装m4

[root@LINUX-LNMP src]# cd /usr/local/src/m4-1.4.17
[root@LINUX-LNMP m4-1.4.17]# ./configure
[root@LINUX-LNMP m4-1.4.17]# make && make install > /root/m4.install.log

14、安装autoconf (如果嫌麻烦,直接yum得了 # yum -y install autoconf)

报错如下:请执行第13步,先安装m4
checking for GNU M4 that supports accurate traces... configure: error: no acceptable m4 could be found in $PATH.

[root@LINUX-LNMP src]# cd /usr/local/src/autoconf-2.69
[root@LINUX-LNMP autoconf-2.69]# ./configure
[root@LINUX-LNMP autoconf-2.69]# make

若make报错如下:请执行 yum -y groupinstall perl* ,然后重新编译安装
Compilation failed in require at ../bin/autom4te line 37.

[root@LINUX-LNMP autoconf-2.69]# yum -y groupinstall perl* 
[root@LINUX-LNMP autoconf-2.69]# make clean         #删除之前make生成的文件
[root@LINUX-LNMP autoconf-2.69]# ./configure
[root@LINUX-LNMP autoconf-2.69]# make
[root@LINUX-LNMP autoconf-2.69]# make install > /root/autoconf.install.log
#将安装日志记录下来,如果以后需要删除该软件的话,可以对着日志去看安装的时候都生成了哪些文件,然后对照着删除。

15、安装libiconv

[root@LINUX-LNMP src]# cd /usr/local/src/libiconv-1.14
[root@LINUX-LNMP libiconv-1.14]# ./configure --prefix=/usr/local/libiconv
[root@LINUX-LNMP libiconv-1.14]# make

./stdio.h:1010:1: error: ‘gets’ undeclared here (not in a function)
若make有上面报错:请按如下操作修改
解决方法:修改/usr/local/src/libiconv-1.14/srclib/stdio.in.h文件第698行

[root@LINUX-LNMP libiconv-1.14]# vim /usr/local/src/libiconv-1.14/srclib/stdio.in.h +698


_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");

替换为

#if defined(__GLIBC__) && !defined(__UCLIBC__) && !__GLIBC_PREREQ(2, 16)
 _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
#endif

修改完之后,然后再重新编译安装即可。

[root@LINUX-LNMP libiconv-1.14]# make clean         #删除之前make生成的文件
[root@LINUX-LNMP libiconv-1.14]# ./configure --prefix=/usr/local/libiconv
[root@LINUX-LNMP libiconv-1.14]# make && make install

16、安装bzip2

[root@LINUX-LNMP src]# cd /usr/local/src/bzip2-1.0.6
[root@LINUX-LNMP bzip2-1.0.6]# make -f Makefile-libbz2_so
[root@LINUX-LNMP bzip2-1.0.6]# make install PREFIX=/usr/local/bzip2

17、安装GD库

[root@LINUX-LNMP src]# cd /usr/local/src/libgd-2.1.1
[root@LINUX-LNMP libgd-2.1.1]# ./configure --prefix=/usr/local/gd2/ \
--with-jpeg=/usr/local/jpeg/ \
--with-freetype=/usr/local/freetype/ \
--with-png=/usr/local/libpng/ \
--with-zlib=/usr/local/zlib/

[root@LINUX-LNMP libgd-2.1.1]# make && make install

18、安装apr

[root@LINUX-LNMP src]# cd /usr/local/src/apr-1.5.2
[root@LINUX-LNMP apr-1.5.2]# ./configure --prefix=/usr/local/apr/
[root@LINUX-LNMP apr-1.5.2]# make && make install

19、安装apr-util

[root@LINUX-LNMP src]# cd /usr/local/src/apr-util-1.5.4
[root@LINUX-LNMP apr-util-1.5.4]# ./configure --prefix=/usr/local/apr-util/ --with-apr=/usr/local/apr/
[root@LINUX-LNMP apr-util-1.5.4]# make && make install

20、安装pcre

[root@LINUX-LNMP src]# cd /usr/local/src/pcre-8.38
[root@LINUX-LNMP pcre-8.38]# ./configure --prefix=/usr/local/pcre/
[root@LINUX-LNMP pcre-8.38]# make && make install
小结:基础支持包就安装到这里,后面将进入正式环节安装Nginx,MariaDB,PHP了,底层支持包都是为了安装后面的这些做准备的。

贰、安装Nginx

21、安装Nginx

[root@LINUX-LNMP src]# cd /usr/local/src/nginx-1.10.2
[root@LINUX-LNMP nginx-1.10.2]# groupadd nginx
[root@LINUX-LNMP nginx-1.10.2]# useradd -g nginx nginx
[root@LINUX-LNMP nginx-1.10.2]# ./configure \
--prefix=/usr/local/nginx  \
--user=nginx --group=nginx  \
--with-http_stub_status_module  \
--with-openssl=/usr/local/src/openssl-1.0.2j \    注意:这里指定的是openssl的源码包解压后的路径,而不是安装路径
--with-pcre=/usr/local/src/pcre-8.38  \           注意:这里指定的是pcre的源码包解压后的路径,而不是安装路径
--with-zlib=/usr/local/src/zlib-1.2.8 \           注意:这里指定的是zlib的源码包解压后的路径,而不是安装路径
--with-http_gzip_static_module \
--with-http_realip_module \
--with-http_sub_module \
--with-http_ssl_module  \
--with-http_mp4_module

[root@LINUX-LNMP nginx-1.10.2]# make && make install

[root@LINUX-LNMP nginx-1.10.2]# echo 'export PATH=$PATH:/usr/local/nginx/sbin' > /etc/profile.d/nginx.sh
[root@LINUX-LNMP nginx-1.10.2]# source /etc/profile.d/nginx.sh

Nginx两种管理方法,任选一种

注意firewall,开放80端口或者关闭firewall
注意防火墙,开放80端口或者关闭防火墙服务

1.手工管理Nginx
[root@LINUX-LNMP src]# echo "/usr/local/nginx/sbin/nginx" >> /etc/rc.local           #开机自启动
[root@LINUX-LNMP src]# /usr/local/nginx/sbin/nginx                                   #开启服务
[root@LINUX-LNMP src]# pkill nginx                                                   #关闭服务

检查服务是否开启
[root@LINUX-LNMP src]# ps -aux | grep nginx
[root@LINUX-LNMP src]# netstat -ultn | grep 80
        
杀掉进程
kill -9 "进程id"
关于killpkillkillall的区别和用法,建议大家直接传送门进行了解。
2.使用systemctl进行管理Nginx
vim /usr/local/nginx/conf/nginx.conf

第2行 #user nobody; 修改为 user nginx;
第9行 #pid logs/nginx.pid; 修改为 pid /var/run/nginx.pid;
第17行 下面添加 server_tokens off; 其实就是在http{}里面添加       #隐藏Nginx版本号,返回错误页面的时候不显示版本号

编写CentOS7系统默认的启动方式脚本nginx.service,(比如systemctl restart network.service)

vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network.target
 
[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
 
[Install]
WantedBy=multi-user.target

保存退出就可以了。 接下来就可以使用如下这些命令进行开、关、重启了。

[root@LINUX-LNMP src]# systemctl start nginx.service
[root@LINUX-LNMP src]# systemctl stop nginx.service
[root@LINUX-LNMP src]# systemctl restart nginx.service
[root@LINUX-LNMP src]# systemctl enable nginx.service                   使nginx开机自动启动
[root@LINUX-LNMP src]# systemctl disable nginx.service                  取消nginx开机自动启动
对比表,以 Nginx 为例

任务 旧指令 新指令
使某服务自动启动 chkconfig --level 3 nginx on systemctl enable nginx.service
使某服务不自动启动 chkconfig --level 3 nginx off systemctl disable nginx.service
检查服务状态 service nginx status systemctl status nginx.service (服务详细信息) systemctl is-active nginx.service (仅显示是否 Active)
显示所有已启动的服务 chkconfig --list systemctl list-units --type=service
启动某服务 service nginx start systemctl start nginx.service
停止某服务 service nginx stop systemctl stop nginx.service
重启某服务 service nginx restart systemctl restart nginx.service

关于这个脚本,大家可以自己搜索下相关内容进行了解学习下。如果不会写,可以先装太虚拟机,先yum安装一遍常用的服务,然后看它的脚本。
当然,我们也可以像在centos6系统里面一样,使用sysv init风格的脚本来开、关、重启等。这里我就不详细介绍sysv init风格的启动脚本方式了。
其实也简单,网上找一个或者自己写一个脚本放/etc/init.d/下面即可,也可以用chkconfig管理。这里可以参考下LAMP环境搭建。
既然7的系统已经从init改成了systemd,个人认为sysv init风格的启动脚本方式也许在不久的未来就会被舍弃了,也许现在还暂时只在过渡期。还可以兼容。

叁、安装MariaDB

为了体现出后面的内存报错,这里暂时先关闭swap分区。如果是云主机,有可能本来就没有swap

[root@LINUX-LNMP ~]# cat /etc/fstab | grep -v ^# | grep -v ^$           查看已有的swap分区位置,排除注释行,排除空行
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=7e87314b-1e70-47a7-9e91-e6b26aa8a88d /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
[root@LINUX-LNMP ~]# free                                         查看swap分区大小和使用情况
[root@LINUX-LNMP ~]# swapoff /dev/mapper/centos-swap              关闭swap分区,这里请根据自己的系统情况进行处理
[root@LINUX-LNMP ~]# free                                         再次查看swap分区,与前一次比较

22、安装cmake

[root@LINUX-LNMP src]# cd /usr/local/src/cmake-3.6.2
[root@LINUX-LNMP cmake-3.6.2]# ./configure --prefix=/usr/local/cmake/
[root@LINUX-LNMP cmake-3.6.2]# make && make install

#cmake安装完成之后需要执行以下命令,否则会提示-bash: cmake: command not found
[root@LINUX-LNMP cmake-3.6.2]# echo 'export PATH=$PATH:/usr/local/cmake/bin' > /etc/profile.d/cmake.sh
[root@LINUX-LNMP cmake-3.6.2]# source /etc/profile.d/cmake.sh

23、安装bison(如果有关于m4的报错,请执行13步,安装m4)

[root@LINUX-LNMP src]# cd /usr/local/src/bison-3.0.4
[root@LINUX-LNMP bison-3.0.4]# ./configure
[root@LINUX-LNMP bison-3.0.4]# make && make install > /root/bison.install.log

24、安装ncurses

[root@LINUX-LNMP src]# cd /usr/local/src/ncurses-6.0
[root@LINUX-LNMP ncurses-6.0]# ./configure --with-shared --without-debug --without-ada --enable-overwrite
[root@LINUX-LNMP ncurses-6.0]# make && make install > /root/ncurses.install.log

25、安装MariaDB(步骤和安装MySQL一毛一样)

[root@LINUX-LNMP src]# cd /usr/local/src/mariadb-10.1.19
[root@LINUX-LNMP mariadb-10.1.19]# groupadd mysql
[root@LINUX-LNMP mariadb-10.1.19]# useradd -g mysql mysql
[root@LINUX-LNMP mariadb-10.1.19]# mkdir -p /usr/local/mysql            #数据库安装目录
[root@LINUX-LNMP mariadb-10.1.19]# mkdir -p /data/mysqldb               #数据库数据文件存放目录
	
[root@LINUX-LNMP mariadb-10.1.19]# cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysqldb \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DMYSQL_TCP_PORT=3306 \
-DENABLE_DOWNLOADS=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_USER=mysql
	
[root@LINUX-LNMP mariadb-10.1.19]# make
#如果是4核cpu,可以使用make -j4使用4颗cpu同时进行编译,注意保留cpu资源以便其他服务使用,如果cpu资源不够建议直接make
#如果是24核cpu,可以使用make -j24使用24颗cpu同时进行编译,如果cpu资源不够建议直接make

报错如下:一般是因为内存不够,导致编译无法继续。

cc: internal compiler error: Killed (program cc1)
Please submit a full bug report,
with preprocessed source if appropriate.
See  for instructions.
make[2]: *** [storage/mroonga/vendor/groonga/lib/CMakeFiles/libgroonga.dir/expr.c.o] Error 4
make[1]: *** [storage/mroonga/vendor/groonga/lib/CMakeFiles/libgroonga.dir/all] Error 2
make: *** [all] Error 2

解决方法:
1、增加内存,如果是虚拟机或者有条件加内存,选用此方法
2、添加swap分区,如果是云主机或者暂时无法添加内存,选此方法

[root@LINUX-LNMP mariadb-10.1.19]# dd if=/dev/zero of=/home/swap bs=1024 count=512000       #创建一个512M的分区文件(大小自己决定)
[root@LINUX-LNMP mariadb-10.1.19]# /sbin/mkswap /home/swap                                  #将创建的分区文件格式化为swap
[root@LINUX-LNMP mariadb-10.1.19]# /sbin/swapon /home/swap                                  #使这个swap分区文件立即生效
[root@LINUX-LNMP mariadb-10.1.19]# vim /etc/fstab                                           #设置开机自动挂载swap
/home/swap	swap	swap	defaults	0	0
#在/etc/fstab文件里面添加此行
[root@LINUX-LNMP mariadb-10.1.19]# free                                           #查看swap大小
OK,增加了swap,继续编译MariaDB。
注意:出现错误需要删除CMakeCache.txt,才能再次cmake,而不是使用make clean命令了。
[root@LINUX-LNMP mariadb-10.1.19]# rm -f /usr/local/src/mariadb-10.1.19/CMakeCache.txt

[root@LINUX-LNMP mariadb-10.1.19]# cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/data/mysqldb \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DMYSQL_TCP_PORT=3306 \
-DENABLE_DOWNLOADS=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_USER=mysql

[root@LINUX-LNMP mariadb-10.1.19]# make && make install
这里可能会报错:如下
CMake Error at client/cmake_install.cmake:44 (file):
   file INSTALL connot copy file
这个问题原因未知,没有找到解决方案,有可能是权限问题,删除源码目录,重新解压一份出来再继续就可以了,奇怪的问题。

[root@LINUX-LNMP mariadb-10.1.19]# cd /usr/local/mysql
[root@LINUX-LNMP mysql]# chown -R mysql:mysql /usr/local/mysql
[root@LINUX-LNMP mysql]# chown -R mysql:mysql /data/mysqldb
[root@LINUX-LNMP mysql]# /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysqldb
[root@LINUX-LNMP mysql]# chown -R root /usr/local/mysql
[root@LINUX-LNMP mysql]# \cp -f /usr/local/mysql/support-files/my-huge.cnf /etc/my.cnf
[root@LINUX-LNMP mysql]# echo 'export PATH=$PATH:/usr/local/mysql/bin:/usr/local/mysql/lib' > /etc/profile.d/mysql.sh
[root@LINUX-LNMP mysql]# source /etc/profile.d/mysql.sh
这里说明下swap分区的删除方法(在没有swap分区使用需求的情况可以删除)

[root@LINUX-LNMP mysql]# /sbin/swapoff /home/swap                #停止swap分区
[root@LINUX-LNMP mysql]# rm -f /home/swap                        #删除swap分区文件
[root@LINUX-LNMP mysql]# vim /etc/fstab                          #取消开机自动挂载swap
/home/swap	swap	swap	defaults	0	0
#在/etc/fstab文件里面 删除或注释 此行,注释用 #
[root@LINUX-LNMP mariadb-10.1.19]# free                                           #查看swap大小

MariaDB启动管理方式,任选一种

注意firewall,开放3306端口或者关闭firewall
注意防火墙,开放3306端口或者关闭防火墙服务

1、手工管理MariaDB
[root@LINUX-LNMP mysql]# echo "/usr/local/mysql/bin/mysqld_safe --datadir='/data/mysqldb' --user=mysql &" >> /etc/rc.local     #开机自启动
[root@LINUX-LNMP mysql]# /usr/local/mysql/bin/mysqld_safe --datadir='/data/mysqldb' --user=mysql &                             #开启服务
        
[root@LINUX-LNMP mysql]# /usr/local/mysql/bin/mysql                                        #登录到mysql终端(刚安装完可以这样登录)
[root@LINUX-LNMP mysql]# /usr/local/mysql/bin/mysqladmin -uroot password 123456            
#设置mysql数据库里面root用户对应的密码为123456,注意,大家的密码就不要设置的这么简单

[root@LINUX-LNMP mysql]# history -C                                                        #清空历史命令
	
检查服务是否开启
[root@LINUX-LNMP src]# ps -aux | grep mysql
[root@LINUX-LNMP src]# netstat -ultn | grep 3306
        
杀掉进程
kill -9 "进程id"
关于killpkillkillall的区别和用法,建议大家直接传送门进行了解。
2、使用systemctl进行管理MariaDB

编写CentOS7系统默认的启动方式脚本mysqld.service

vim /usr/lib/systemd/system/mysqld.service
[Unit]
Description=mysqld server
Documentation=http://mysql.cn/
After=network.target
 
[Service]
#Type=forking
#PIDFile=/data/mysqldb/mysqld.pid
#ExecStartPre=/usr/local/mysql/bin/mysqld_safe --datadir=/data/mysqldb --pid-file=/data/mysqldb/mysqld.pid 
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysqldb --user=mysql --log-error=/data/mysqldb/linuxnb.err --pid-file=/data/mysqldb/mysqld.pid --plugin-dir=/usr/local/mysql/lib/plugin --socket=/tmp/mysql.sock
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
 
[Install]
WantedBy=multi-user.target

保存退出就可以了。 接下来就可以使用如下这些命令进行开、关、重启了。

[root@LINUX-LNMP src]# systemctl start mysqld.service
[root@LINUX-LNMP src]# systemctl stop mysqld.service
[root@LINUX-LNMP src]# systemctl restart mysqld.service
[root@LINUX-LNMP src]# systemctl enable mysqld.service                   #使mysqld开机自动启动
[root@LINUX-LNMP src]# systemctl disable mysqld.service                  #取消mysqld开机自动启动

温馨提醒:
此时启动服务,然后使用/usr/local/mysql/bin/mysql连接数据库,发现连接报错,原因是mysql.sock文件位置不对
开始排查,查询了所有的配置文件,启动脚本等等,发现确实写的都是/tmp/mysql.sock,但是但是但是现在套接字文件确实在这么个奇怪的路径下
/tmp/systemd-private-68e93c68892b46729df2a56746ac9f79-mysqld.service-WdxX8N/tmp/mysql.sock
由于初次研究CentOS7,经过长时间排查最终确定问题在mysqld.service这个新版启动脚本上。
修改文件里面PrivateTmp属性(布尔值),然后systemctl daemon-reload,再systemctl restart mysqld就可以了。
具体详情请看如下详解,下面为传送门,感谢作者。
Systemd Unit文件中PrivateTmp字段详解    原文地址:http://www.cnblogs.com/lihuobao/p/5624071.html
Systemd 进程管理相关                            原文地址:https://my.oschina.net/soarwilldo/blog/683291

OK,总算知道怎么回事了。貌似好像之前更安全,哈哈。

当然也可以使用源码包自带的sysv风格启动脚本,这里只做简要说明

[root@LINUX-LNMP src]# \cp -f /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@LINUX-LNMP src]# service mysqld start|stop|restart|reload|status|force-reload            #接着你就可以使用这些命令实现开、关、重启

肆、安装PHP

26、安装php

在编译安装php之前,确保系统已经安装了libtool和libtool-ltdl软件包。
[root@LINUX-LNMP src]# yum -y install libtool*
[root@LINUX-LNMP src]# yum -y install libtool-ltdl*

[root@LINUX-LNMP src]# yum -y install libXpm-devel
安装libXpm-devel,否则编译mysql可能会报错如下
/usr/local/src/php-5.6.26/ext/gd/gd.c:57:22: error:X11/xpm.h:no such file or directory
make: *** [ext/gd/gd.lo] error 1

在php编译参数加上  --with-xpm-dir=/usr/lib   ,然后重新编译,

安装以FastCGI模式安装即[新版标示为这个 --enable-fpm]
添加运行php-fpm服务的用户以及用户组
[root@LINUX-LNMP src]# groupadd fpmuser
[root@LINUX-LNMP src]# useradd -g fpmuser fpmuser

[root@LINUX-LNMP php-5.6.26]# cd /usr/local/src/php-5.6.26
[root@LINUX-LNMP php-5.6.26]# ./configure --prefix=/usr/local/php \
--with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php.d \
--enable-sockets \
--enable-ftp \
--enable-fpm \
--with-fpm-user=fpmuser \
--with-fpm-group=fpmuser \
--enable-mbstring \
--enable-xml \
--enable-soap \
--with-mysql=/usr/local/mysql \
--with-pdo-mysql=/usr/local/mysql \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-openssl-dir=/usr/local/openssl \
--with-curl=/usr/local/curl \
--with-libexpat-dir=/usr/local/expat \
--with-libxml-dir=/usr/local/libxml2 \
--with-xsl=/usr/local/libxslt \
--with-mcrypt=/usr/local/libmcrypt \
--with-mhash=/usr/local/mhash \
--with-zlib-dir=/usr/local/zlib \
--with-png-dir=/usr/local/libpng \
--with-jpeg-dir=/usr/local/jpeg \
--with-freetype-dir=/usr/local/freetype \
--with-iconv-dir=/usr/local/libiconv \
--with-bz2=/usr/local/bzip2 \
--with-gd=/usr/local/gd2 \
--with-pcre-dir=/usr/local/pcre \
--with-xpm-dir=/usr/lib \
--disable-ipv6

[root@LINUX-LNMP php-5.6.26]# make
[root@LINUX-LNMP php-5.6.26]# make install

[root@LINUX-LNMP php-5.6.26]# \cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
[root@LINUX-LNMP php-5.6.26]# \cp /usr/local/src/php-5.6.26/php.ini-production /etc/php.ini

特别注意:

如果本机有安装mysql,则应该这样写
--with-mysql=/usr/local/mysql
--with-pdo-mysql=/usr/local/mysql \
--with-mysqli=/usr/local/mysql/bin/mysql_config
	
如果本机没有安装mysql,则应该这样写,适用于php和mysql分别在不同服务器上使用。
--with-mysql=mysqlnd
--with-pdo-mysql=mysqlnd
--with-mysqli=mysqlnd

php-fpm启动管理方式

注意firewall,开放9000端口或者关闭firewall
注意防火墙,开放9000端口或者关闭防火墙服务

I、使用systemctl进行管理php-fpm

编写CentOS7系统默认的启动方式脚本php-fpm.service

vim /usr/lib/systemd/system/php-fpm.service
[Unit]
Description=php-fpm server
Documentation=http://nginx.org/en/docs/
After=network.target
#After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/php/var/run/php-fpm.pid
ExecStartPre=
ExecStart=/usr/local/php/sbin/php-fpm --daemonize --fpm-config /usr/local/php/etc/php-fpm.conf --pid /usr/local/php/var/run/php-fpm.pid
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

保存退出就可以了。 接下来就可以使用如下这些命令进行开、关、重启了。

[root@LINUX-LNMP src]# systemctl start php-fpm.service
[root@LINUX-LNMP src]# systemctl stop php-fpm.service
[root@LINUX-LNMP src]# systemctl restart php-fpm.service
[root@LINUX-LNMP src]# systemctl enable php-fpm.service                   #使php-fpm开机自动启动
[root@LINUX-LNMP src]# systemctl disable php-fpm.service                  #取消php-fpm开机自动启动

检查服务是否开启

ps -aux | grep php-fpm
netstat -ultn | grep 9000

当然也可以使用源码包自带的sysv风格启动脚本,这里只做简要说明

[root@LINUX-LNMP src]# \cp /usr/local/src/php-5.6.26/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@LINUX-LNMP src]# service php-fpm start|stop|force-quit|restart|reload|status            #接着你就可以使用这些命令实现开、关、重启

修改nginx配置文件添加php解析, 打开如下段落中的注释,并做如下修改

[root@LINUX-LNMP src]# vim /usr/local/nginx/conf/nginx.conf
#location ~ \.php$ {
#root           html;
#fastcgi_pass   127.0.0.1:9000;
#fastcgi_index  index.php;
#fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;   #将/scripts修改为/usr/local/nginx/html(即网页文件存放目录)
#include        fastcgi_params;
#}

修改nginx配置文件之后请重启或者重新加载nginx配置文件。

编写php测试文件,测试php解析是否成功,请确保nginx和php-fpm都已启动。

[root@LINUX-LNMP php-5.6.26]# vim /usr/local/nginx/html/index.php
<?php
    phpinfo();
?>
浏览器访问http://192.168.2.46/index.php,能看到php版本信息就说明已经正确解析php网页文件。

编写mysql连接测试文件,请确保mysql已启动

[root@LINUX-LNMP php-5.6.26]# vim /usr/local/nginx/html/mysql.php
<?php 
    $link=mysql_connect("127.0.0.1","root","123456"); 
    if(!$link) echo "FAILD!连接错误,用户名密码不对"; 
    else echo "OK!可以连接"; 
?>
浏览器访问http://192.168.2.46/mysql.php,能看到    OK!可以连接      就说明mysql连通性OK。

27、安装memcached服务器端

[root@LINUX-LNMP src]# yum -y install libevent-devel              #安装libevent-devel
[root@LINUX-LNMP src]# cd /usr/local/src/memcached-1.4.31
[root@LINUX-LNMP memcached-1.4.31]# ./configure --prefix=/usr/local/memcached
[root@LINUX-LNMP memcached-1.4.31]# make && make install
[root@LINUX-LNMP memcached-1.4.31]# groupadd memcached
[root@LINUX-LNMP memcached-1.4.31]# useradd -g memcached memcached
[root@LINUX-LNMP memcached-1.4.31]# echo 'export PATH=$PATH:/usr/local/memcached/bin' > /etc/profile.d/memcached.sh
[root@LINUX-LNMP memcached-1.4.31]# source /etc/profile.d/memcached.sh

I、使用systemctl进行管理memcached

注意firewall,开放11211端口或者关闭firewall
注意防火墙,开放11211端口或者关闭防火墙服务

编写CentOS7系统默认的启动方式脚本memcached.service

vim /usr/lib/systemd/system/memcached.service
[Unit]
Description=memcached.service server
After=network.target
#Before=nginx.service

[Service]
Type=simple
ExecStart=/usr/local/memcached/bin/memcached -u memcached -p 11211 -m 64 -c 128
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=false

[Install]
WantedBy=multi-user.target

保存退出就可以了。 接下来就可以使用如下这些命令进行开、关、重启了。

[root@LINUX-LNMP src]# systemctl start memcached.service
[root@LINUX-LNMP src]# systemctl stop memcached.service
[root@LINUX-LNMP src]# systemctl restart memcached.service
[root@LINUX-LNMP src]# systemctl enable memcached.service                   #使memcached开机自动启动
[root@LINUX-LNMP src]# systemctl disable memcached.service                  #取消memcached开机自动启动

检查服务是否开启

ps -aux | grep memcached
netstat -ultn | grep 11211

当然也可以使用源码包自带的sysv风格启动脚本,这里是@深圳-沉醉寒风提供的启动脚本,请通过wget下载,或者右键另存为...

[root@LINUX-LNMP src]# wget http://man.linuxnb.com/public/init.d/memcached.init
[root@LINUX-LNMP src]# \mv memcached.init /etc/init.d/memcached
[root@LINUX-LNMP src]# chmod +x /etc/init.d/memcached
[root@LINUX-LNMP src]# service memcached start|stop|status|restart            #接着你就可以使用这些命令实现开、关、重启

[root@LINUX-LNMP memcached-1.4.31]# echo "/usr/local/memcached/bin/memcached -umemcached &" >> /etc/rc.local   #开机启动
[root@LINUX-LNMP memcached-1.4.31]# /usr/local/memcached/bin/memcached -umemcached &                           #启动memcached服务器端
[root@LINUX-LNMP memcached-1.4.31]# pkill memcached                                                            #关闭memcached服务器端

28、安装php扩展memcache

[root@LINUX-LNMP src]# cd /usr/local/src/memcache-2.2.7
[root@LINUX-LNMP memcache-2.2.7]# yum -y install zlib-devel           #安装libevent-devel
[root@LINUX-LNMP memcache-2.2.7]# /usr/local/php/bin/phpize
[root@LINUX-LNMP memcache-2.2.7]# ./configure --with-php-config=/usr/local/php/bin/php-config --enable-memcache
[root@LINUX-LNMP memcache-2.2.7]# make && make install
注意最后是否有此信息,没有即失败     Installing shared extensions:/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/
[root@LINUX-LNMP mcrypt]# vim /etc/php.ini
查找extension_dir,再查到的内容下面添加下面内容
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/"
extension="memcache.so"

29、安装php扩展memcached

首先安装libmemcached

[root@LINUX-LNMP src]# cd /usr/local/src/libmemcached-1.0.18
[root@LINUX-LNMP libmemcached-1.0.18]# ./configure --prefix=/usr/local/libmemcached  --with-memcached=/usr/local/memcached
[root@LINUX-LNMP libmemcached-1.0.18]# make && make install

接下来安装php扩展memcached

[root@LINUX-LNMP src]# cd /usr/local/src/memcached-2.2.0
[root@LINUX-LNMP memcached-2.2.0]# /usr/local/php/bin/phpize
[root@LINUX-LNMP memcached-2.2.0]# ./configure -with-php-config=/usr/local/php/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached --enable-memcached --disable-memcached-sasl

make && make install
注意最后是否有此信息,没有即失败     Installing shared extensions:/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/
[root@LINUX-LNMP mcrypt]# vim /etc/php.ini
在步骤28编辑之后的地方添加如下
extension="memcached.so"

30、安装php扩展Zend加速器

[root@LINUX-LNMP src]# cd /usr/local/src/zend-loader-php5.6-linux-x86_64/
[root@LINUX-LNMP zend-loader-php5.6-linux-x86_64]# cp /usr/local/src/zend-loader-php5.6-linux-x86_64/ZendGuardLoader.so /usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/

由于之前我们编译的memcache.so和memcached.so都在这个路径,所以我也直接将这个ZendGuardLoader.so拷贝到这个路径了。
[root@LINUX-LNMP zend-loader-php5.6-linux-x86_64]# vim /etc/php.ini
添加如下几行即可,可以直接在之前添加memcache.so和memcached.so代码块下面添加,这样这些改动都在一起,也好排查,自己也知道大概在哪里。

zend_extension = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/ZendGuardLoader.so"
zend_loader.enable = 1
zend_loader.disable_licensing = 0
zend_loader.obfuscation_level_support = 3
zend_loader.license_path =

保存退出,然后重启php-fpm服务

[root@LINUX-LNMP src]# systemctl daemon-reload
[root@LINUX-LNMP src]# systemctl restart php-fpm
访问http://192.168.2.46/index.php 有 with Zend Guard Loader v3.3 字样,就表示zend加速器已经加载成功。

总结:
初次接触CentOS7,很多不懂,而且systemd改动太大,这篇文章也整理了好久,测试了好几遍,希望对大家有帮助。
如果觉得本站内容对您有所帮助,请分享推荐给更多朋友。返回首页添加交流群。有错误的地方也希望大家联系指正。
部分内容由群友提供,本文原创,如果转载请说明出处,再次感谢大家的观看。