源碼安裝LNMP


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

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

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

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

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

    boost  https://www.boost.org/users/download/  mysql5.7版本以后必須的依賴包

(1).准備安裝環境

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

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 

  同時上傳下載好的源碼包,我使用的是如下版本:boost_1_59_0、mysql-5.7.19、nginx-1.14.1、pcre-8.41、php-7.1.24。

(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上查看

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM