美文网首页PHP经验分享
搭建ThinkPHP开发环境(LNMP/WNOP)

搭建ThinkPHP开发环境(LNMP/WNOP)

作者: 白色翅膀云 | 来源:发表于2016-08-07 16:21 被阅读0次

    环境搭建

    LNMP(Linux+Nginx+MySQL+PHP)
    WNOP(Windows10+Nginx+Oracle+PHP)
    非主流搭法,也遇到了一些问题,权作学习笔记。

    一、安装

    1.Nginx服务器

    Windows版本的Nginx可从 Nginx.org 下载。
    下载完成后,将.zip文件解压到安装路径(如D:\nginx),在命令提示符界面切换到安装目录。

    // 启动(每次执行均开启新的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环境下,80端口可能会被System占用,可通过如下步骤进行修改。

    • 打开注册表(regedit)并找到键值:
      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP
    • 编辑名称Start,类型REG_DWORD的数据项,将数据改为0
    • 重启系统

    2.数据库

    Windows版本的Oracle可以从 Oracle.com 下载,相关安装步骤可从网络搜索,此处不再赘述。

    # 启动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环境下连接Oracle数据库需要当前用户属于ora_dba组,若未配置会出现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服务器的监听端口、主机名称、部署路径。
    由于Nginx是轻量级服务器,本身不能处理PHP的请求,因此需要配置守护进程FastCGI或FPM,把以.php结尾的请求转发并进行处理。

    需要配置的内容包括:

    • location /
      修改网站根目录、默认页面、支持ThinkPHP的pathinfo模式
    • location ~ .php$
      使Nginx将.php结尾的请求转发至PHP的守护线程进行处理
    • location /Proxy
      配置反向代理,Proxy是自定义的二级域名

    最终的配置文件如下(其中php处理的部分Windows和Linux配置均出现,请参考注释)。

    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; #监听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;
    
            #网站根目录
            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结尾的请求转发至本机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结尾的请求转发至本机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需要将文件路径、访问数据库等相关注释打开。
    可以从Oracle官方网站下载 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在发送HTTP响应代码时使用RFC2616兼容的报头
    cgi.rfc2616_headers = 1
    #数据库相关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已经集成php-cgi.exe,无需单独下载,也无需配置。

    Tips
    php-cgi.exe运行后默认窗口不会关闭,因此需要使用RunHiddenConsole隐藏窗口,该程序可以从网上自行下载。

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

    #默认采用Socket方式监听
    listen = /run/php/php7.0-fpm.sock
    

    Tips
    /run/php/php7.0-fpm.sock
    是用户和组均为www-data的文件

    三、服务启动脚本

    为了使Web服务能够正常使用,每次需要启动Nginx、数据库、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系统中必须切换到nginx所在目录%
    cd /d D:\nginx 
    start D:\nginx\nginx.exe
    @echo "启动FastCGI"
    %监听本机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
    

    四、网络配置

    搭建的网络架构
    本次的Linux系统安装在虚拟机中,外部请求经路由器端口映射到PC,在PC上架设Nginx服务器并配置反向代理

    1. 配置外网访问局域网内nginx的服务器

    Tips
    设置固定IP
    配置端口映射,将外网的请求转发至PC的Web服务器

    • 在TPLINK中设置DHCP服务器-静态地址保留
    • 添加本机MAC地址和IP地址
    • 在路由器(TPLINK)中设置转发规则-虚拟服务器
    • 添加规则:服务端口80(若运营商屏蔽80端口则换为其他),内网端口80,IP地址为本机局域网IP,协议ALL

    配置完成后,外网可通过http://本机外网IP:服务端口访问PC的nginx服务器。

    2. 配置PC和虚拟机在同一网段

    • 设置虚拟机网络为桥接网卡
    • 设置虚拟机固定IP
    • 重启虚拟机即可生效

    3. 配置反向代理

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

    五、ThinkPHP

    下载地址
    开发手册

    六、存疑

    • 通过EasyBCD安装Win10/Ubuntu16.04双系统时,报错unable to find a medium containing a live file system,安装失败。
    • Linux下的fpm配置目录也存在php.ini文件,不确定fpm读取的是否为该文件。

    相关文章

      网友评论

        本文标题:搭建ThinkPHP开发环境(LNMP/WNOP)

        本文链接:https://www.haomeiwen.com/subject/iqjlsttx.html