搭建ThinkPHP開發(fā)環(huán)境(LNMP/WNOP)

環(huán)境搭建

LNMP(Linux+Nginx+MySQL+PHP)
WNOP(Windows10+Nginx+Oracle+PHP)
非主流搭法,也遇到了一些問題,權作學習筆記。

一、安裝

1.Nginx服務器

Windows版本的Nginx可從 Nginx.org 下載。
下載完成后,將.zip文件解壓到安裝路徑(如D:\nginx),在命令提示符界面切換到安裝目錄。

// 啟動(每次執(zhí)行均開啟新的nginx.exe進程)
D:\nginx>start nginx.exe
// 停止(不會結束nginx.exe進程)
D:\nginx>nginx.exe -s stop
// 退出(結束nginx.exe進程)
D:\nginx>nginx.exe -s quit 
// 重新加載配置文件
D:\nginx>nginx.exe -s reload

Ubuntu版本的Nginx可以使用apt-get命令安裝。

// 安裝
sudo apt-get install nginx
// 啟動
sudo /etc/init.d/nginx start
// 停止
sudo /etc/init.d/nginx/stop
// 重新加載配置文件
sudo /etc/init.d/nginx reload

Win10環(huán)境下,80端口可能會被System占用,可通過如下步驟進行修改。

  • 打開注冊表(regedit)并找到鍵值:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP
  • 編輯名稱Start,類型REG_DWORD的數(shù)據(jù)項,將數(shù)據(jù)改為0
  • 重啟系統(tǒng)

2.數(shù)據(jù)庫

Windows版本的Oracle可以從 Oracle.com 下載,相關安裝步驟可從網(wǎng)絡搜索,此處不再贅述。

# 啟動Oracle服務(安裝路徑為D:\Oracle)
D:>start D:\Oracle\product\11.2.0\dbhome_1\BIN\oracle.exe
# 默認的sqlplus路徑
D:\Oracle\product\11.2.0\dbhome_1\BIN\sqlplus.exe

需要注意的是,Windows環(huán)境下連接Oracle數(shù)據(jù)庫需要當前用戶屬于ora_dba組,若未配置會出現(xiàn)ORA-01031: insufficient privileges報錯。添加組的方法如下。

  • 計算機管理(compmgmt.msc) -> 本地用戶和組 -> 用戶
  • 雙擊要添加的用戶名,在“隸屬于”選項卡點擊添加,輸入組名ora_dba并點擊“檢查名稱”,點擊應用

Linux下的Mysql可以使用apt-get命令安裝。

sudo apt-get install mysql-server

3.安裝PHP7

Windows版本的PHP7可以從 PHP 下載。
解壓后將php.ini-production復制并重命名為php.ini,即為PHP7的配置文件。
Linux版本的PHP7可以使用apt-get命令安裝。

sudo apt-get install php7.0-cli php7.0-cgi php7.0-mysql
sudo apt-get install php7.0-fpm

二、配置文件

配置文件 默認路徑
nginx.conf Win10:
安裝路徑\conf\nginx.conf
Linux:
/etc/nginx/nginx.conf
/etc/nginx/conf.d/*.conf
php.ini Win10:
安裝路徑\conf\php.ini
Linux:
/etc/php/7.0/cgi/php.ini
php-fpm.conf Linux:
/etc/php/7.0/fpm/php-fpm.conf
/etc/php/7.0/fpm/pool.d/www.conf

1. Nginx配置文件:nginx.conf

nginx.conf文件作為Nginx服務器的配置文件,主要進行的配置包括Web服務器的監(jiān)聽端口、主機名稱、部署路徑。
由于Nginx是輕量級服務器,本身不能處理PHP的請求,因此需要配置守護進程FastCGI或FPM,把以.php結尾的請求轉發(fā)并進行處理。

需要配置的內(nèi)容包括:

  • location /
    修改網(wǎng)站根目錄、默認頁面、支持ThinkPHP的pathinfo模式
  • location ~ .php$
    使Nginx將.php結尾的請求轉發(fā)至PHP的守護線程進行處理
  • location /Proxy
    配置反向代理,Proxy是自定義的二級域名

最終的配置文件如下(其中php處理的部分Windows和Linux配置均出現(xiàn),請參考注釋)。

user www-data; #Linux下需要將用戶改為www-data
#user nobody; #Windows無需配置
worker_processes 1;

error_log  logs/error.log;

events {
    worker_connections  1024;
}

http {
    include mime.types;
    default_type application/octet-stream;
    
    sendfile on;
    keepalive_timeout  65;

    #配置了一臺server
    #Linux安裝后,server的配置默認位于
    #/etc/nginx/conf.d/default.conf文件
    server {
        listen 80; #監(jiān)聽80端口
        server_name localhost;
        
        #FastCGI相關設置
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
        fastcgi_buffer_size 64k;
        fastcgi_buffers 4 64k;
        fastcgi_busy_buffers_size 128k;
        fastcgi_temp_file_write_size 128k;

        #網(wǎng)站根目錄
        location / {
            root   app; #Web訪問的默認目錄,可為相對/絕對路徑
            index  index.php; #Web訪問的默認路徑

            # 支持ThinkPHP的pathinfo模式
            if (!-e $request_filename) {
                rewrite  ^(.*)$  /index.php?s=$1  last;
                break;
            }
        }
        
        #配置到達虛擬機的反向代理
        location /Proxy {
            proxy_pass_header Server;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Scheme $scheme;
            proxy_pass      http://192.168.1.102:80;
         }
    
        #將所有.php結尾的請求轉發(fā)至本機9000端口由FastCGI進行處理(本段為Win10下的配置)
        location ~ \.php$ {
            root app;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #使用$document_root的相對路徑,即本段代碼中配置的root
            include fastcgi_params;     
        }

        #將所有.php結尾的請求轉發(fā)至本機fpm的Socket端口進行處理(本段為Linux下的配置)
        location ~ \.php$ {
            root /var/www/app;
            fastcgi_pass unix:/run/php/php7.0-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #使用$document_root的相對路徑,即本段代碼中配置的root
            include fastcgi_params;     
        }

        #50x的錯誤頁面
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

2.PHP配置文件php.ini

php.ini需要將文件路徑、訪問數(shù)據(jù)庫等相關注釋打開。
可以從Oracle官方網(wǎng)站下載 php_oci8_11g.dll 文件。

#支持短標簽<? ?>
short_open_tag = On
#隱藏PHP
expose_php = On 
#Windows中需要寫絕對路徑
extension_dir = "ext" 
#防止通過URL直接調用PHP
cgi.force_redirect = 0
#支持pathinfo模式
cgi.fix_pathinfo = 1
#安全令牌相關功能
fastcgi.impersonate = 1
#指定PHP在發(fā)送HTTP響應代碼時使用RFC2616兼容的報頭
cgi.rfc2616_headers = 1
#數(shù)據(jù)庫相關dll,支持mysql、oracle和pdo模式
extension = php_gd2.dll
extension = php_mbstring.dll
extension = php_mysqli.dll
extension = php_oci8_11g.dll
extension = php_pdo_mysql.dll
extension = php_pdo_oci.dll

3.FPM配置文件php-fpm.conf

Windows版本的PHP7.0已經(jīng)集成php-cgi.exe,無需單獨下載,也無需配置。

Tips
php-cgi.exe運行后默認窗口不會關閉,因此需要使用RunHiddenConsole隱藏窗口,該程序可以從網(wǎng)上自行下載。

Linux需要配置www.conf文件(php-fpm.conf引用該文件)。

#默認采用Socket方式監(jiān)聽
listen = /run/php/php7.0-fpm.sock

Tips
/run/php/php7.0-fpm.sock
是用戶和組均為www-data的文件

三、服務啟動腳本

為了使Web服務能夠正常使用,每次需要啟動Nginx、數(shù)據(jù)庫、FastCGI或FPM。
Windows下的server.bat腳本。

  • 選擇1 開啟Nginx及FastCGI
  • 選擇2 開啟Oracle
  • 選擇3 強制kill掉Nginx和FastCGI進程
  • 選擇4 退出
@echo "1、Nginx"
@echo "2、Oracle"
@echo "3、關閉"
@echo "4、退出"
@echo off
:choose
set /p st="模式選擇:"
if /i "%st%"=="1" goto open_nginx
if /i "%st%"=="2" goto open_oracle
if /i "%st%"=="3" goto close_all
if /i "%st%"=="4" goto exit
:open_nginx
@echo "啟動Nginx"
%Win10系統(tǒng)中必須切換到nginx所在目錄%
cd /d D:\nginx 
start D:\nginx\nginx.exe
@echo "啟動FastCGI"
%監(jiān)聽本機9000端口%
D:\php7\RunHiddenConsole.exe D:\php7\php-cgi.exe -b 127.0.0.1:9000 -c D:\php7\php.ini 
goto choose
:open_oracle
start D:\Oracle\product\11.2.0\dbhome_1\BIN\oracle.exe
goto choose
:close_all
%直接殺死進程%
taskkill /f /im nginx.exe
taskkill /f /im php-cgi.exe
goto choose
:exit
exit

Linux下的server.sh腳本。
強制關閉并重啟Nginx、FPM和MySQL服務器。

#!/bin/bash
sudo /etc/init.d/nginx stop
sudo /etc/init.d/nginx start
sudo /etc/init.d/nginx reload
sudo /etc/init.d/php7.0-fpm stop
sudo /etc/init.d/php7.0-fpm start
sudo /etc/init.d/php7.0-fpm reload
sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start
#Linux下使用fcgi的方式
#sudo spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u www-data -g www-data -f /usr/bin/php-cgi7.0

四、網(wǎng)絡配置

搭建的網(wǎng)絡架構

本次的Linux系統(tǒng)安裝在虛擬機中,外部請求經(jīng)路由器端口映射到PC,在PC上架設Nginx服務器并配置反向代理

1. 配置外網(wǎng)訪問局域網(wǎng)內(nèi)nginx的服務器

Tips
設置固定IP
配置端口映射,將外網(wǎng)的請求轉發(fā)至PC的Web服務器

  • 在TPLINK中設置DHCP服務器-靜態(tài)地址保留
  • 添加本機MAC地址和IP地址
  • 在路由器(TPLINK)中設置轉發(fā)規(guī)則-虛擬服務器
  • 添加規(guī)則:服務端口80(若運營商屏蔽80端口則換為其他),內(nèi)網(wǎng)端口80,IP地址為本機局域網(wǎng)IP,協(xié)議ALL

配置完成后,外網(wǎng)可通過http://本機外網(wǎng)IP:服務端口訪問PC的nginx服務器。

2. 配置PC和虛擬機在同一網(wǎng)段

  • 設置虛擬機網(wǎng)絡為橋接網(wǎng)卡
  • 設置虛擬機固定IP
  • 重啟虛擬機即可生效

3. 配置反向代理

參考前文Nginx配置文件:nginx.conf中location /Proxy部分。

五、ThinkPHP

下載地址
開發(fā)手冊

六、存疑

  • 通過EasyBCD安裝Win10/Ubuntu16.04雙系統(tǒng)時,報錯unable to find a medium containing a live file system,安裝失敗。
  • Linux下的fpm配置目錄也存在php.ini文件,不確定fpm讀取的是否為該文件。
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容