1. 程式人生 > >開發環境搭建(lnmp)

開發環境搭建(lnmp)

現在 digi res package .so uri blog 協同 說明

我們的開發環境一般現在時用Linux + Nginx + MySQL(mariaDB) + PHP的組合進行項目的搭建與開發,工欲善其事必先利其器。

搭建環境:

Centos7 + mysql5.6 + php7

廢話少說,直接上幹貨

1. 安裝mysql5.*

與centos6不同,centos7必須使用社區倉庫來按章mysql

如果使用

yum install mysql

默認會安裝MariaDB數據庫

所以,安裝:

wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm
yum update
yum install mysql-server

安裝過程中。使用y確定安裝

完成之後,mysql會默認安裝在/var/lib/mysql目錄下

啟動mysql並設置開機啟動

systemctl start mysqld      #啟動 mysql
systemctl enable mysqld   #開機啟動mysql

mysql安裝後會綁定到地址localhost(127.0.0.1),默認用戶名:root。密碼為空

使用下面的mysql_secure_installation進行密碼修改

註意: mysql5.7.6+版本修改方式會不同

2. 安裝nginx

如果系統中存在apache,可以先進行卸載

service httpd stop

systemctl disable httpd

yum remove httpd

nginx安裝

yum install peel-release
yum -y install nginx

啟動nginx服務並設置為開機啟動

systemctl start nginx
systemctl enable nginx

好了,現在我們可以打開瀏覽器輸入服務器的域名或IP地址:

nginx默認的html根目錄是: /usr/share/nginx/html

為了讓web應用能讀寫,設置擁有者為nginx用戶:

chown -R nginx:nginx html/

註意點:

有時候會出現nginx正常啟動,但是頁面無法正常訪問的問題,這個有可能是防火墻的問題

使用telnet測試端口

telnet 192.168.11.119 80


技術分享圖片

正常連接

查看端口是否開啟

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

如果沒有開啟,將其開啟

firewall-cmd --zone=public --add-port=80/tcp --permanent
//設置完成之後,一定要記得重啟防火墻
systemctl-cmd --reload

3. php-fpm 安裝

PHP通過 php-fpm(FastCGI進程管理器)可以很好的與nginx協同工作

PHP5的安裝:

yum install php php-mysql php-fpm

PHP7的安裝:

rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm. # 安裝epel源

rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm #安裝Webstatic源

yum install php72w php72w-common php72w-fpm php72w-opcache php72w-mysqlnd php72w-gd php72w-mbstring  # PHP 5.3.0以上推薦使用mysqlnd驅動,而不是msyql

這裏使用webstatic源來安裝PHP7.2

進行配置:

1)打開配置文件 /etc/php.ini 刪除cgi.fix_pathinfo前面註釋符並賦值為0

[...]
cgi.fix_pathinfo=0
[...]

再配置PHP-FPM.打開文件/etc/php-fpm.d/www.conf

  將127.0.0.1:9000 改為php-fpm.sock

  取消listen.owner 和 listen.group 前面的註釋

  將user和group值都由apache改成nginx

如下:

[...]
listen = /var/run/php-fpm/php-fpm.sock
[...]
listen.owner = nobody
listen.group = nobody
[...]
user = nginx
group = nginx
[...]

啟動php-fpm並設置開機啟動

systemctl start php-fpm
systemctl enable php-fpm

php-fpm啟動之後,會生成socket文件 /var/run/php-fpm/php-fpm.sock 作為守護進程運行FastCGI服務

nginx配置:

Nginx 的配置文件是:/etc/nginx/nginx.conf 進行配置

首先,根據情況調整worker_processeskeepalive_timeout(可選)

[...]
worker_processes 4;
[...]
keepalive_timeout 2;
[...]

虛擬主機定義在 server{} 容器中,修改為如下內容:

[...]
    server {
        listen 80;
        listen [::]:80 default_server;
        server_name _;
        root /usr/share/nginx/html;

        # 設置默認主頁
        index index.php index.html index.htm;
    
        location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            try_files $uri $uri/ =404;
        }

        # PHP腳本轉發至PHP-FPM解析
        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_index index.php;
            include fastcgi_params;
        }
    }
[...]

關於配置的一些說明:

  • 首先,我們打開兩個listen,讓 Nginx 同時偵聽 IPv4 和 IPv6 的80端口。
  • server_name _; 綁定所有的域名(可以指定主機名,如 www.example.com)。
  • 腳本根目錄 root 不變,依然是 /usr/share/nginx/html
  • 索引首頁文件 index 添加上 index.php
  • 其中針對 PHP 很重要的部分在location ~\.php$ {} 中。為防止零日攻擊(詳見:http://wiki.nginx.org/Pitfalls#Passing_Uncontrolled_Requests_to_PHP andhttp://forum.nginx.org/read.php?2,88845,page=3),該部分開頭設置了try_files $uri =404;

保存配置文件後,檢查配置文件的語法,再重新加載 Nginx:

nginx -t                       # 檢查配置文件語法
systemctl reload nginx         # 重新加載nginx

使用tcp進行連接:

默認情況下,PHP-FPM 通過 /var/run/php-fpm/php-fpm.sock 文件偵聽 socket。

當然,也可以設置 PHP-FPM 使用 TCP 連接。

打開文件 /etc/php-fpm.d/www.conf,設置 listen 值如下:

[...]
;listen = /var/run/php-fpm/php-fpm.sock
listen = 127.0.0.1:9000
[...]

這樣 PHP-FPM 會偵聽地址 127.0.0.1(localhost)和端口9000,確保這個端口沒有被其他程序占用。

然後重新加載 PHP-FPM:

systemctl reload php-fpm

接下來,編輯 /etc/nginx/nginx.conf 文件,修改如下一行:

[...]
#fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_pass 127.0.0.1:9000;
[...]

然後,重載 nginx 就可以了:

systemctl reload nginx

參考文件:

  1.http://dl.fedoraproject.org

  2.https://webtatic.com/packages/php72/

  3.http://php.net/manual/zh/install.unix.nginx.php

4.Centos7 安裝 PHP7最新版

5.CentOS 7 安裝 Nginx、PHP7、PHP-FPM

6.How To Install Linux, Nginx, MySQL, PHP (LEMP) stack On CentOS 7

7.Installing Nginx With PHP5 (And PHP-FPM) And MySQL Support (LEMP) On Ubuntu 14.04 LTS

8.How to Install MySQL on CentOS 7

9.HOW TO INSTALL AND CONFIGURE NGINX ON CENTOS 7

開發環境搭建(lnmp)