1. 程式人生 > 其它 >搭建lnmp_LNMP環境搭建過程

搭建lnmp_LNMP環境搭建過程

技術標籤:搭建lnmp

ubuntu下安裝PHP,MySql,Nginx過程

一、不採用原始碼安裝

1、找到ubuntu軟體原始檔,調整為國內映象,先更新ubuntu軟體源

[email protected]:~$ cd /etc/apt

[email protected]:/etc/apt$ sudo cp sources.list sources.list.bak (備份預設軟體源資料)

[email protected]:/etc/apt$ sudo vim sources.list (如果沒有vim,使用vi)

將選擇的國內映象源內容替換掉,執行

sudo apt-get update

2、不採用原始碼安裝php

sudo apt-get install php7.0 (此時使用Tab檢視可安裝的軟體)

b8eda1efa3a4a8313dea9a36d80e8850.png

安裝完之後

php -v 檢視是否安裝成功

be9c4687e7f8853fb631fa9bd2763799.png

配置php.ini

sudo vim /etc/php/7.0/fpm/php.ini

3、不採用原始碼安裝nginx

sudo apt-get install nginx

nginx -v 檢視是否安裝成功

配置nginx的虛擬主機 sudo vim /etc/nginx/sites-available/default

server {
        listen       80;
        server_name  your_site_name.com;
        root /usr/share/nginx/html;
        index index.php index.html;

        location / {
                try_files $uri $uri/ =404;
        }

        error_page 404 /404.html;
        error_page 500 502 503 504 /50x.html;

        location = /50x.html {
                root /var/www/html;
        }

        location ~ .php$ {
                try_files $uri =404;
                fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }
}

4、不採用原始碼安裝MySql

sudo apt-get install mysql-server

sudo apt-get install mysql-client

sudo apt install libmysqlclient-dev

安裝過程會提示輸入資料庫的登入名和密碼,按提示輸入即可

如果提示依賴不足,使用以下命令強制安裝依賴

sudo apt-get install -f

5、php專案可能會需要php擴充套件

sudo apt-get install php-xxxxx (需要使用擴充套件,打出部分命令情況下使用Tab獲取安裝即可)

6、在遠端連線ubuntu的情況下,需要安裝openssh-server

sudo apt-get install openssh-server

如果發生需要軟體降級的問題,安裝的時候指定版本號,重新安裝即可

sudo apt-get install openssh-client=1:6.6p1-2ubuntu1

7、開啟服務命令

service nginx start

service mysql start

二、原始碼安裝

1、php原始碼安裝

從PHP: Downloads中下載需要的php版本

ubuntu命令列下載php的原始碼 需要使用wget -O php-7.2.10.tar.gz 加上從官網複製的連結

解壓縮 tar -zxvf xxxxxx.tar.gz

cd 到解壓縮的php目錄下

執行 ./configure --prefix=/usr/local/php --enable-fpm

    --enable-mbstring --disable-pdo --with-curl

--disable-debug --disable-rpath

    --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets

    --enable-sysvsem --enable-sysvshm

    --with-mhash --enable-zip --with-pcre-regex --with-mysqli

    --with-gd --with-jpeg-dir

可能會遇到依賴的錯誤,如果系統是centos系統

採用yum install 安裝即可

如果遇到以下問題:

configure: error: Please reinstall the BZip2 distributio 

yum install bzip2 bzip2-devel 解決

libxml2 configure: error: xml2-config not found. Please check your libxml2 installation.

yum install libxml2-devel 解決

其他問題同理

之後進行make && make install 安裝 php即安裝在--prefix指定的目錄下

將php加入到環境變數

(1)輸入命令export PATH=$PATH:/usr/local/php/bin 對當前會話有效

(2)vi ~/.bash_profile 新增PATH=$PATH:/usr/local/php/bin 對當前使用者有效

(3)vi /etc/profile 新增PATH=$PATH:/usr/local/php/bin 對所有使用者生效

不生效的話 執行source /etc/profile 生效

使用php -v測試是否新增到環境變數

給php新增擴充套件

在php原始碼對應擴充套件目錄下或者下載的擴充套件目錄下,輸入/usr/local/php/bin/phpize

可能提示如下錯誤

Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20060613
Zend Extension Api No:   220060519
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.

centos系統使用

yum install m4
yum install autoconf解決

如果遇到

Make sure that you run '/app/php/bin/phpize' in the top level source directory of the module

解決方法

cp config0.m4 config.m4

然後 ./configure --with-php-config=/usr/local/php/bin/php-config

make && make install

需要修改php.ini檔案

原始碼安裝的php,預設的php.ini檔案位置在/usr/local/php/lib下,但這個目錄下可能不存在php.ini配置檔案,複製原始碼中的php.ini-production 到對應目錄下即可

然後新增extension=xxxxxxx 即可

原始碼安裝有php-fpm的話需要修改的地方

在php安裝目錄下找到etc目錄 複製php-fpm.conf.default 為php-fpm.conf.

進入etc目錄下的php-fpm.d目錄 複製www.conf.default 為 www.conf

設定php.ini, 開啟php配置檔案找到cgi.fix_pathinfo配置項,這一項預設被註釋並且值為1,根據官方文件的說明,這裡為了當檔案不存在時,阻止Nginx將請求傳送到後端的PHP-FPM模組,從而避免惡意指令碼注入的攻擊,所以此項應該去掉註釋並設定為0

2、nginx原始碼安裝

從nignx官網nginx: download中下載需要的版本

gz檔案解壓縮 tar -zxvf xxxx.tar.gz

cd 到nginx目錄下

 ./configure --prefix=/opt/demo/nginx --with-http_stub_status_module --with-http_ssl_module

如果遇到以下錯誤:

the HTTP rewrite module requires the PCRE library.

執行 yum install pcre-devel

SSL modules require the OpenSSL library

執行 yum install openssl-devel

然後繼續執行

make && make install

如果出現

make[1]: Leaving directory `/usr/local/nginx

有提示,但是nginx已經建立好

使用 /usr/local/nginx/sbin/nginx -t 測試顯示

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

安裝成功

nginx加入到環境變數的方法同上

export PATH=$PATH:/app/nginx/sbin

預設情況下 nginx沒有設定使用者,如果目錄沒有許可權的話,會返回403錯誤

可以新增使用者 和 組 groupadd nginx

useradd -s /sbin/nologin -g nginx nginx

然後在nginx.conf配置檔案中設定 user nginx,並且將目錄許可權設定為755

在配置nginx和php-fpm的時候,如果php-fpm啟動不了,報9000端口占用時候,可以設定監聽檔案

fastcgi_pass unix:/var/run/php-fpm.sock;

然後在php-fpm配置檔案的www.conf中的listen

listen = /var/run/php-fpm.sock

原始碼安裝的nginx和php-fpm設定開機自啟

vim /etc/rc.local

/usr/local/php/sbin/php-fpm

/usr/loca/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

3、nginx、php原始碼安裝設定開機自啟

在原始碼安裝完php之後,修改一下php-fpm的配置檔案

pid = run/php-fpm.pid 程序檔案位置
error_log = log/php-fpm.log 記錄錯誤位置
daemonize = yes 守護程序執行模式
user = www 執行使用者名稱
group = www 執行使用者組
listen = 127.0.0.1:9000 CGI 監聽埠和 IP
pm = static 程序管理器執行模式
pm.max_children = 32 開啟子程序數量
pm.max_requests = 500 子程序重啟閾值
slowlog = log/slow.log 慢查詢日誌
request_slowlog_timeout = 5 慢查詢閾值
request_terminate_timeout = 30 請求超時閾值

pm 有兩中情況 分別是static 和 dynamic 根據情況設定

然後在/etc/init.d目錄下 新建php-fpm檔案,加入如下程式碼,一些配置根據實際情況設定

#!/bin/bash
# php-fpm startup script for the php-fpm 
# php-fpm version:5.5.0-alpha6
# chkconfig: - 85 15
# description: php-fpm is very good
# processname: php-fpm
# pidfile: /var/run/php-fpm.pid
# config: /usr/local/php/etc/php-fpm.conf
  
php_command=/usr/local/php/sbin/php-fpm
php_config=/usr/local/php/etc/php-fpm.conf
php_pid=/usr/local/php/var/run/php-fpm.pid
RETVAL=0
prog="php-fpm"
  
#start function
php_fpm_start() {
    /usr/local/php/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

nginx自啟配置 在/etc/init.d目錄下新建 nginx檔案

#!/bin/bash
#
# Startup script for Nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /usr/local/nginx/conf/nginx.conf
# pidfile:     /usr/local/nginx/logs/nginx.pid
  
# Source function library.
. /etc/rc.d/init.d/functions
  
# Source networking configuration.
. /etc/sysconfig/network
  
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
  
nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)
  
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
  
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
  
lockfile=/var/lock/subsys/nginx
  
start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}
  
stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}
  
restart() {
    configtest || return $?
    stop
    sleep 1
    start
}
  
reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}
  
force_reload() {
    restart
}
  
configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}
  
rh_status() {
    status $prog
}
  
rh_status_q() {
    rh_status >/dev/null 2>&1
}
  
case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac

然後,修改檔案許可權,並使用chkconfig 加入自啟動

chmod +x /etc/init.d/php-fpm
chkconfig php-fpm on
chkconfig --list

chmod +x /etc/init.d/nginx
chkconfig nginx on
chkconfig --list

完成後使用以下命令,管理 service命令其實是去/etc/init.d目錄下,去執行相關程式

service php-fpm start
service php-fpm stop
service php-fpm restart
service php-fpm reload

或者
/etc/init.d/php-fpm start
/etc/init.d/php-fpm stop
/etc/init.d/php-fpm restart
/etc/init.d/php-fpm reload



service nginx start
service nginx stop
service nginx restart
service nginx reload

或者
/etc/init.d/nginx start
/etc/init.d/nginx stop
/etc/init.d/nginx restart
/etc/init.d/nginx reload