源碼安裝LNMP

  須要準備的安裝包以及下載地址(只是一個大概地址,版本和下載方式須要自行選擇):php

    Nginx  http://nginx.org/en/download.html  nginx主程序包
html

    MySQL  https://dev.mysql.com/downloads/mysql/  mysql主程序包mysql

    PHP  https://php.net/downloads.php  php主程序包nginx

    pcre  http://pcre.org/  nginx的依賴包,不用安裝c++

    boost  https://www.boost.org/users/download/  mysql5.7版本之後必須的依賴包sql

(1).準備安裝環境數據庫

  須要有epel源,yum安裝LNMP框架依賴包(大體的一個依賴包):apache

yum -y install make gcc gcc-c++ flex bison file libtool libtool-libs autoconf kernel-devel libjpeg libjpeg-devel libpng libpng-devel gd freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glib2 glib2-devel bzip2 bzip2-devel libevent ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssl-devel gettext gettext-devel ncurses-devel gmp-devel unzip libcap lsof php-mcrypt vim

  同時上傳下載好的源碼包,我使用的是以下版本:boost_1_59_0、mysql-5.7.1九、nginx-1.14.一、pcre-8.4一、php-7.1.24。api

(2).編譯安裝nginx

  1)安裝nginx依賴包

yum -y install gcc gcc-c++ autoconf automake zlib zlib-devel openssl openssl-devel pcre*

  2)建立nginx專用用戶

[root@youxi1 ~]# useradd -M -s /sbin/nologin nginx

  3)解壓文件,並編譯安裝

[root@youxi1 ~]# tar -zxf pcre-8.41.tar.gz -C /usr/local/src/
[root@youxi1 ~]# tar -zxf nginx-1.14.1.tar.gz -C /usr/local/src/
[root@youxi1 ~]# cd /usr/local/src/nginx-1.14.1/
[root@youxi1 nginx-1.14.1]# ./configure --prefix=/usr/local/nginx --with-http_dav_module --with-http_stub_status_module --with-http_addition_module --with-http_sub_module --with-http_flv_module --with-http_mp4_module --with-pcre=/usr/local/src/pcre-8.41 --user=nginx --group=nginx
[root@youxi1 nginx-1.14.1]# make -j 4 && make install
[root@youxi1 nginx-1.14.1]# echo $?
0

  參數說明:

    --with-http_dav_module  啓用支持(增長PUT,DELETE,MKCOL:建立集合,COPY和MOVE方法)。默認關閉,須要編譯開啓
    --with-http_stub_status_module  啓用支持(獲取Nginx上次啓動以來的工做狀態)
    --with-http_addition_module  啓用支持(做爲一個輸出過濾器,支持不徹底緩衝,分部分相應請求)
    --with-http_sub_module  啓用支持(容許一些其餘文本替換Nginx相應中的一些文本)
    --with-http_flv_module  啓用支持(提供支持flv視頻文件支持)
    --with-http_mp4_module  啓用支持(提供支持mp4視頻文件支持,提供僞流媒體服務端支持)
    --with-pcre=/usr/local/src/pcre-8.37  須要注意,這裏指的是源碼,用#./configure --help |grep pcre查看幫助

  4)配置nginx,使其支持php

[root@youxi1 nginx-1.14.1]# cp /usr/local/nginx/conf/nginx.conf{,.bak}
[root@youxi1 nginx-1.14.1]# vim /usr/local/nginx/conf/nginx.conf
user  nginx;  //第二行,去除註釋並修改用戶爲nginx

location ~ \.php$ {  //第65~71行去除註釋
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;  //這裏的/scripts還要改成網頁的主目錄。
            include        fastcgi_params;
}

  5)配置環境變量,並刷新

[root@youxi1 nginx-1.14.1]# vim /etc/profile.d/nginx.sh
export PATH=/usr/local/nginx/sbin:$PATH
[root@youxi1 nginx-1.14.1]# . /etc/profile.d/nginx.sh

  配置環境變量是爲了能夠直接調用/usr/local/nginx/sbin/nginx腳本,因此也能夠建立一個軟連接將腳本直接加入到當前環境變量中,這是同樣的效果。操做以下:

[root@youxi1 ~]# ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/
[root@youxi1 ~]# ll /usr/local/bin/nginx
lrwxrwxrwx 1 root root 27 6月  27 12:45 /usr/local/bin/nginx -> /usr/local/nginx/sbin/nginx

  這時就可使用nginx命令了,經常使用的nginx選項以下(若是不加選項表示啓動nginx):

-s [reload|reopen|stop|quit]    從新加載配置|重啓|中止|退出
-t    檢測配置文件是否有語法錯誤
-v    顯示版本信息
-V    顯示版本和配置選項信息

  注意:-s reload從新加載配置不會中止nginx,不會影響使用。

  注意:從新編譯時必定要查看之前的編譯配置,只需在原有配置參數後添加新的參數便可。

  6)啓動nginx並設置開機自啓

   有兩種方法,第一種方法是直接使用nginx命令啓動,開機自啓是加入到/etc/rc.d/rc.local中。操做以下:

[root@youxi1 ~]# nginx  //啓動nginx,但沒辦法查看啓動狀態
[root@youxi1 ~]# ss -ntlp |grep 80  //這種方法後期想查看nginx的狀態時,只能經過ps、netstat和ss命令查看
LISTEN     0      128          *:80                       *:*                   users:(("nginx",pid=1691,fd=6),("nginx",pid=1690,fd=6))
[root@youxi1 ~]# ps aux | grep nginx
root       1690  0.0  0.0  18236   640 ?        Ss   12:55   0:00 nginx: master process nginx
nginx      1691  0.0  0.0  18604  1356 ?        S    12:55   0:00 nginx: worker process
root       1718  0.0  0.0 112724   984 pts/0    S+   13:13   0:00 grep --color=auto nginx
[root@youxi1 ~]# vim /etc/rc.d/rc.local  //添加開機自啓
/usr/local/nginx/sbin/nginx  //添加一行啓動命令
[root@youxi1 ~]# chmod +x /etc/rc.d/rc.local  //因爲CentOS7中官方將/etc/rc.d/rc.local的開機自啓默認禁用,因此須要添加執行權限恢復。

  第二種方法,生成一個啓動腳本,而後設置開機自啓,最後再啓動nginx。操做以下:

[root@youxi1 ~]# vim /etc/init.d/nginx  //編輯啓動腳本
#!/bin/bash
# chkconfig: - 99 2
# description: Nginx Service Control Script
PROG="/usr/local/nginx/sbin/nginx"
PIDF="/usr/local/nginx/logs/nginx.pid"
case "$1" in
        start)
        $PROG
        ;;
        stop)
        kill -3 $(cat $PIDF)
        ;;
        restart)
        $0 stop &> /dev/null
        if [ $? -ne 0 ] ; then continue ; fi
        $0 start
        ;;
        reload)
        kill -1 $(cat $PIDF)
        ;;
        *)
        echo "Userage: $0 { start | stop | restart | reload }"
        exit 1
esac
exit 0
[root@youxi1 ~]# chmod +x /etc/init.d/nginx  //添加執行權限
[root@youxi1 ~]# chkconfig --add nginx  //nginx加入到chkconfig管理中
[root@youxi1 ~]# chkconfig --list nginx  //輸出結果是簡寫
nginx           0:關    1:關    2:關    3:關    4:關    5:關    6:關
[root@youxi1 ~]# chkconfig  nginx on   //開啓開機自啓
[root@youxi1 ~]# chkconfig --list nginx  //輸出結果是簡寫
nginx           0:關    1:關    2:開    3:開    4:開    5:開    6:關
[root@youxi1 ~]# init 6  //重啓服務器,以後就可使用systemctl來管理nginx
[root@youxi1 ~]# systemctl status nginx
● nginx.service - SYSV: Nginx Service Control Script
Loaded: loaded (/etc/rc.d/init.d/nginx; bad; vendor preset: disabled)
Active: active (running) since 四 2019-06-27 13:56:27 CST; 57s ago
Docs: man:systemd-sysv-generator(8)
Process: 1126 ExecStart=/etc/rc.d/init.d/nginx start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/nginx.service
├─1143 nginx: master process /usr/local/nginx/sbin/nginx
└─1144 nginx: worker process

6月 27 13:56:27 youxi1 systemd[1]: Starting SYSV: Nginx Service Control Sc.....
6月 27 13:56:27 youxi1 systemd[1]: Started SYSV: Nginx Service Control Script.
Hint: Some lines were ellipsized, use -l to show in full.

  能夠不重啓服務器,直接使用nginx命令管理。

  7)測試

  注意:沒有關閉防火牆的記得添加端口號

[root@youxi1 ~]# firewall-cmd --permanent --zone=public --add-port=80/tcp
success
[root@youxi1 ~]# firewall-cmd --reload 
success
[root@youxi1 ~]# firewall-cmd --permanent --zone=public --list-ports 
80/tcp

  在Windows上查看

(3).編譯安裝Mysql

  1)安裝mysql依賴包

yum install -y cmake make gcc gcc-c++ bison ncurses ncurses-devel

  2)卸載系統自帶的mysql、mariadb、boost

[root@youxi1 ~]# yum -y remove mysql mariadb* boost*

  3)建立mysql專用用戶,官方指定的是/bin/false

[root@youxi1 ~]# useradd -M -s /sbin/nologin -r mysql  //-M不建立主目錄,-s /sbin/nologin不容許登陸,-r建立的是系統用戶

  官方建立mysql專用用戶是分紅兩步寫的:groupadd mysql和useradd -M -s /bin/false -r -g mysql mysql。

  4)解壓文件,準備安裝目錄和數據目錄,並編譯安裝

[root@youxi1 ~]# tar zxf boost_1_59_0.tar.gz -C /usr/local/src/
[root@youxi1 ~]# tar zxf mysql-5.7.19.tar.gz -C /usr/local/src/
[root@youxi1 ~]# mkdir -p /var/lib/mysql/data  //準備安裝目錄和數據目錄
[root@youxi1 ~]# chown -R mysql.mysql /var/lib/mysql/  //修改所屬主和所屬組
[root@youxi1 ~]# cd /usr/local/src/mysql-5.7.19/
[root@youxi1 mysql-5.7.19]# cmake -DCMAKE_INSTALL_PREFIX=/var/lib/mysql \
-DMYSQL_DATADIR=/var/lib/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/src/boost_1_59_0
[root@youxi1 mysql-5.7.19]# make -j 4 && make install
[root@youxi1 mysql-5.7.19]# echo $?
0

  參數說明:

    DCMAKE_INSTALL_PREFIX:指定MySQL程序的安裝目錄,默認/usr/local/mysql
    DMYSQL_DATADIR:指定MySQL程序的數據目錄
    DSYSCONFDIR:初始化參數文件目錄
    DWITH_xxx_STORAGE_ENGINE:指定靜態編譯到mysql的存儲引擎,MyISAM,MERGE,MEMBER以及CSV四種引擎默認即被編譯至服務器,不須要特別指定。
    DWITH_READLINE:使用readline功能
    DMYSQL_UNIX_ADDR:socket文件路徑,默認/tmp/mysql.sock
    DMYSQL_TCP_PORT:服務端口號,默認3306
    DENABLED_LOCAL_INFILE:指定是否容許本地執行LOAD DATA INFILE,默認OFF
    DEFAULT_CHARSET:指定服務器默認字符集,默認latin1
    DEFAULT_COLLATION:指定服務器默認的校對規則,默認latin1_general_ci
    DWITH_BOOST:指定boost的地址
    DWITHOUT_xxx_STORAGE_ENGINE:指定不編譯的存儲引擎
    DWITH_COMMENT:指定編譯備註信息

  注意:在生成環境中,安裝數據庫以前,須要規劃好數據存儲的目錄。這個目錄最好是一塊單獨的分區或者磁盤,作成raid或者LVM,以便往後磁盤的維護和擴容。另外對於讀寫比較頻繁的業務,能夠採用SSD等轉速高的磁盤。

  5)編輯配置文件/etc/my.cnf

[root@youxi1 mysql-5.7.19]# vim /etc/my.cnf
[mysqld]
basedir=/var/lib/mysql
datadir=/var/lib/mysql/data
port=3306
socket=/var/lib/mysql/mysql.sock
character-set-server=utf8
log-error=/var/log/mysqld.log
pid-file=/tmp/mysqld.pid
[mysql]
socket=/var/lib/mysql/mysql.sock
[client]
socket=/var/lib/mysql/mysql.sock

  6)配置環境變量並刷新

[root@youxi1 mysql-5.7.19]# vim /etc/profile.d/mysql.sh
export PATH=/var/lib/mysql/bin:$PATH
[root@youxi1 mysql-5.7.19]# . /etc/profile.d/mysql.sh

  7)生成啓動腳本,設置開機自啓

[root@youxi1 mysql-5.7.19]# cp /var/lib/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@youxi1 mysql-5.7.19]# chmod +x /etc/init.d/mysqld
[root@youxi1 mysql-5.7.19]# chkconfig --add mysqld
[root@youxi1 mysql-5.7.19]# chkconfig --list mysqld
mysqld          0:關    1:關    2:開    3:開    4:開    5:開    6:關
[root@youxi1 mysql-5.7.19]# chkconfig --level 2345 mysqld on  //若是上面顯示的2345全是關,使用這個命令就行了

  注意:從新啓動服務器或mysqld添加到開機自啓,systemctl start|restart|status|stop mysqld就均可以使用了,但沒有辦法enbale,由於這不是一個本地服務。

  8)初始化數據庫,並啓動mysqld

[root@youxi1 mysql-5.7.19]# /var/lib/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/var/lib/mysql --datadir=/var/lib/mysql/data
[root@youxi1 mysql-5.7.19]# /etc/init.d/mysqld start
Starting MySQL..... ERROR! The server quit without updating PID file (/tmp/mysqld.pid).

  處理這個錯誤須要刪除數據目錄,從新初始化

[root@youxi1 mysql-5.7.19]# rm -rf /var/lib/mysql/data/*
[root@youxi1 mysql-5.7.19]# /var/lib/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/var/lib/mysql --datadir=/var/lib/mysql/data
[root@youxi1 mysql-5.7.19]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!

  9)此時的mysql是沒有密碼直接能夠登陸的,使用mysql_secure_installation安全設置初始化

[root@youxi1 mysql-5.7.19]# mysql_secure_installation
 
Securing the MySQL server deployment.
 
Connecting to MySQL using a blank password.
 
VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?
 
Press y|Y for Yes, any other key for No: y
 
There are three levels of password validation policy:
 
LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file
 
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0  //設置密碼複雜度
Please set the password for root here.
 
New password:   //默認最小密碼長度爲8
 
Re-enter new password:
 
Estimated strength of the password: 50
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
 
Remove anonymous users? (Press y|Y for Yes, any other key for No) :
 
 ... skipping.
 
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
 
Disallow root login remotely? (Press y|Y for Yes, any other key for No) :
 
 ... skipping.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.
 
 
Remove test database and access to it? (Press y|Y for Yes, any other key for No) :
 
 ... skipping.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
 
Reload privilege tables now? (Press y|Y for Yes, any other key for No) :
 
 ... skipping.
All done!

  10)測試

[root@youxi1 mysql-5.7.19]# mysql -uroot -p12345678
mysql>

(4).編譯安裝php

  1)安裝php的依賴包

yum -y install php-mcrypt  libmcrypt  libmcrypt-devel php-pear libxml2 libxml2-devel curl curl-devel libjpeg libjpeg-devel libpng libpng-devel freetype-devel

  2)回到文件上傳地址,解壓文件並安裝

[root@youxi1 mysql-5.7.19]# cd
[root@youxi1 ~]# tar zxf php-7.1.24.tar.gz -C /usr/local/src/
[root@youxi1 ~]# cd /usr/local/src/php-7.1.24/
[root@youxi1 php-7.1.24]# ./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/ --enable-fpm \
--with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd \
--with-iconv-dir --with-freetype-dir \
--with-jpeg-dir --with-png-dir --with-zlib \
--with-libxml-dir=/usr --enable-xml --disable-rpath \
--enable-bcmath --enable-shmop --enable-sysvsem \
--enable-inline-optimization --with-curl \
--enable-mbregex --enable-mbstring --with-mcrypt \
--enable-ftp --with-gd --enable-gd-native-ttf \
--with-openssl --with-mhash --enable-pcntl \
--enable-sockets --with-xmlrpc --enable-zip \
--enable-soap --without-pear --with-gettext \
--disable-fileinfo --enable-maintainer-zts
[root@youxi1 php-7.1.24]# make -j 4 && make install
[root@youxi1 php-7.1.24]# echo $?
0

  3)生成php和php-fpm的配置文件

[root@youxi1 php-7.1.24]# cp php.ini-production /usr/local/php/php.ini  
[root@youxi1 php-7.1.24]# cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.conf

  4)修改php-fpm配置文件中的運行用戶和運行組爲nginx

[root@youxi1 php-7.1.24]# vim /usr/local/php/etc/php-fpm.conf
user = nginx  //第23~24行,nobody改成nginx
group = nginx

  5)生成php-fpm啓動腳本,並添加開機自啓

[root@youxi1 php-7.1.24]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@youxi1 php-7.1.24]# chmod +x /etc/init.d/php-fpm
[root@youxi1 php-7.1.24]# chkconfig --add php-fpm  //添加到chkconfig管理中
[root@youxi1 php-7.1.24]# chkconfig --list php-fpm  //查看是否開機自啓
php-fpm         0:關    1:關    2:開    3:開    4:開    5:開    6:關
[root@youxi1 php-7.1.24]# chkconfig php-fpm on  //若是以上沒有開機自啓,再使用這條命令

  6)啓動php-fpm

[root@youxi1 php-7.1.24]# systemctl start php-fpm  //啓動php-fpm
[root@youxi1 php-7.1.24]# systemctl status php-fpm  //查看php-fpm狀態
● php-fpm.service - LSB: starts php-fpm
   Loaded: loaded (/etc/rc.d/init.d/php-fpm; bad; vendor preset: disabled)
   Active: active (running) since 五 2019-06-28 10:39:36 CST; 7s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 3201 ExecStart=/etc/rc.d/init.d/php-fpm start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/php-fpm.service
           ├─3203 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
           ├─3204 php-fpm: pool www
           └─3205 php-fpm: pool www

6月 28 10:39:35 youxi1 systemd[1]: Starting LSB: starts php-fpm...
6月 28 10:39:36 youxi1 php-fpm[3201]: Starting php-fpm  done
6月 28 10:39:36 youxi1 systemd[1]: Started LSB: starts php-fpm.
[root@youxi1 php-7.1.24]# ss -antup | grep php-fpm  //查看是否啓動成功
tcp LISTEN 0 128 127.0.0.1:9000 *:* users:(("php-fpm",pid=3205,fd=5),("php-fpm",pid=3204,fd=5),("php-fpm",pid=3203,fd=7))

  固然還可使用/etc/init.d/php-fpm start啓動。

  注意:systemctl不能管理php-fpm的開機自啓。

  7)修改nginx的配置文件(上面有提到過),而後重啓

[root@youxi1 php-7.1.24]# vim /usr/local/nginx/conf/nginx.conf
        location ~ \.php$ {  //第65~71行
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /usr/local/nginx/html$fastcgi_script_name;  //只修改這一行
            include        fastcgi_params;
        } 
[root@youxi1 php-7.1.24]# nginx -s reload

  8)測試

  建立測試界面

[root@youxi1 php-7.1.24]# vim /usr/local/nginx/html/index.php
<?php phpinfo();?>

  在Windows上查看

相關文章
相關標籤/搜索