天天看點

laravel開發網站執行個體

#某魔法組織官網實作

這是一篇開源的基于laravel的網站開發項目部落格,涉及的資源、工具、項目源代碼,請通路我的github項目,位址為:​​https://github.com/xielinrui/laravel/tree/master/acmcqupt/html​​​ ###後端

####開發環境的搭建

#####在本機搭建laravel開發環境

######1、安裝 php 7

如果你是windows系統,前往 ​​https://windows.php.net/download​​ 下載下傳 PHP 7 最新版本

如果你是Linux系統,前往 ​​http://www.php.net/downloads.php​​ 下載下傳 php 7 最新版本

下載下傳好了php 7 之後,安裝 php 7。這裡以windows 10 為例(Linux後面部署生産環境的時候再說):

解壓好php 7 下載下傳的檔案之後,呈現出下面的目錄結構:

├─dev
├─ext
├─extras
│  └─ssl
├─lib
│  └─enchant
└─sasl2      

在檔案夾裡面有大量的.lib檔案(靜态資料連接配接庫)

dev:存放php7.lib檔案,是php7的主裝置目錄

ext:extends的縮寫,裡面包含了php 7 自帶的可擴充插件(即插即用,隻需在配置檔案中配置)

extras:

ssl:存放openssl的配置檔案

lib:

enchant:存放了文法檢查的檔案

sasl2:用于驗證身份

在主檔案夾中,找到 php.ini-development 檔案,複制一份備份,然後修改檔案名為php.ini,作為php 7 的配置檔案。

######2、安裝 Nginx 作為服務容器

nginx支援的特性比apache伺服器強一些,是以選擇用nginx。另外,基于nginx配置高性能伺服器也是朋友們可以嘗試的

針對win10:

前往 ​​​http://nginx.org/en/download.html​​ 下載下傳nginx最新版

解壓之後,目錄結構如下:

├─conf
├─contrib
│  ├─unicode2nginx
│  └─vim
│      ├─ftdetect
│      ├─ftplugin
│      ├─indent
│      └─syntax
├─docs
├─html
├─logs
└─temp      

conf:nginx的配置檔案

contrib:

unicode2nginx:

vim:

ftdetect:

ftplugin:

indent:

syntax:

docs:

html:安裝時的預設站點

logs:日志檔案

temp:

ctrl+R 調出指令行視窗後進入到nginx的下載下傳目錄,使用這個指令來開啟nginx

start nginx.exe      

然後在浏覽器輸入 ​​http://localhost/​​ 就可以通路到自己的nginx服務了。如果目前你檢視到自己的nginx沒有任何反應,可以使用下面的方法來檢視問題。

1、進入到conf目錄下,使用 nginx -t,測試自己 nginx 的配置檔案是否有問題。如果沒問題,使用 nginx -s reload 來重新開機nginx服務。
2、開啟服務之後,使用 netstat -ano |findstr "80" (Linux下面為 netstat -lnp |grep "80") 的指令來查找80端口的占用情況,最後一項是占用着的程序ID(PID),然後在使用 tasklist |findstr "pid" 來檢視占用者的資訊。如果發現不是nginx,說明80端口已經被其他的程序占用了,是以nginx服務沒有正常開啟。需要做的就是關閉對應的應用即可。筆者在打開nginx的時候服務沒打開就是因為前段時間部署在iis上的應用占用了80端口。
3、如果上面都沒有問題,那就可以檢視自己的防火牆設定,防火牆包括 Selinux 和 iptables ,可以使用 setenforce 0 ,使得 SElinux 不可用,然後檢視iptables的出入站規則,檢視80端口是否被防火牆攔截了      

解決掉上面的問題之後,就可以看見nginx的歡迎界面了

welcome to nginx !!!

為了友善nginx在windows系統中好打開和關閉,可以把nginx加入到系統服務當中去

(1)、前往 ​​​https://github.com/kohsuke/winsw/releases​​​ 下載下傳 xxxx.NET4 類型的檔案,下載下傳完成後放到nginx的解壓目錄中,與nginx.exe同級。

(2)、編寫 xxxx.xml 檔案(注意 xxxx 指代的是下載下傳的 xxxx.NET4 的那個檔案名)

<?xml version="1.0" encoding="UTF-8"?>
<service>
    <id>Nginx</id>
    <name>Nginx</name>
    <description>Nginx Services</description>
    <executable>C:\Users\laodiao\Downloads\www\nginx-1.15.1\nginx.exe</executable>
</service>      

其中裡面代表的是解壓檔案中 nginx.exe 的絕對路徑

(3)、使用指令 xxxx.exe install 來安裝建立的服務、使用 xxxx.exe start 來啟動服務,啟動服務之後,到計算機服務管理界面就可以看見剛剛安裝的nginx服務了。

(4)、如果想用winsw來安裝其他的服務,也可以用類似的辦法。

安裝好nginx之後,可以到 codepen:​​https://codepen.io/​​ 下載下傳 40x.html 和 50x.html 的頁面,避免使用 nginx 預設的 404.html 和 50x.html 頁面造成伺服器版本洩露。保護伺服器相關屬性的隐私安全也是很重要的。在校園環境中,避免一些同學來對伺服器進行惡意攻擊練手。下載下傳好之後需要去nginx.conf裡面修改相關的配置。

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

如果前面有 # 号,就去掉

如何得到nginx的錯誤提示呢?

開啟nginx的調試模式,當php代碼有問題的時候,nginx服務預設是不提供報錯資訊的,對于開發人員來說,這樣的後果就是增加了更多的調試時間,為了提高效率,在開發的階段開啟nginx的錯誤提示功能是很有必要的。修改配置檔案即可。

######3、nginx中配置支援 php 7

配置php:

修改 php.ini 檔案

cgi.fix_pathinfo=1 //找到這一項,并把前面的#号去掉,這一項開啟了php對nginx的支援
//這樣也可讓php-cgi正常使用SCRIPT_FILENAME這個變量      

配置nginx:

修改 nginx.conf 檔案

location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
            include        fastcgi_params;
}      

去掉前面的所有注釋,使nginx支援php。這裡的Php是以CGI的模式運作的,與在apache伺服器中運作的狀态不一樣,nginx通過監聽9000端口發來的請求做相應的渲染動作。現在有很多技術的實作方法都類似于這種,例如 docker Client 和 docker Server 也是這樣C/S結構的。nginx和php處于不同的程序,兩個程序之間通過Socket連接配接起來。

使用CGI模式啟動php 7:

php-cgi.exe -b 127.0.0.1:9000 -c D:\php-7.1.13\php.ini      

輸入以後沒有反應,但是不能關掉指令行

不過,這種不關閉指令行的操作始終不符合簡便性開發的原則(多一個黑視窗,還不能動,動了就涼了)

開啟php之後,寫一個php的 Hello world 來測試可用性

<?php
  phpinfo();
?>      

從浏覽器通路該檔案,如果能夠看到php的相關介紹,那麼就配置成功了。

常見問題:

(1)、出現 “No input file specified.” 的錯誤提示,原因是由于nginx和php的根目錄不一緻造成的。檢視 access.log 檔案,“GET / HTTP/1.1” 404 36 “-” "Mozilla/5.0 也可以看出的确是沒有找到這個檔案,但是由于php接管了所有Php的東西,是以沒有顯示出預設的404頁面,而是傳回了上面那個錯誤提示。

解決辦法:

修改 nginx.conf 檔案:

fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
//改成
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;      

修改完之後重新開機nginx服務即可。(可以先使用 nginx -t 測試配置檔案的正确性,再使用nginx -s reload 重新開機nginx)。此時問題就解決掉了。

######配置composer

該部分來源于composer中國全鏡像的教程,位址:​​​https://pkg.phpcomposer.com/​​

打開指令行視窗,運作以下指令

php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"      

作用:

下載下傳安裝腳本 - composer-setup.php - 到目前目錄。

執行安裝過程。

删除安裝腳本

全局安裝composer

全局安裝是将 Composer 安裝到系統環境變量 PATH 所包含的路徑下面,然後就能夠在指令行視窗中直接執行 composer 指令了

方法:

1、找到并進入 PHP 的安裝目錄(和你在指令行中執行的 php 指令應該是同一套 PHP)。

2、将 composer.phar 複制到 PHP 的安裝目錄下面,也就是和 php.exe 在同一級目錄。

3、在 PHP 安裝目錄下建立一個 composer.bat 檔案,并将下列代碼儲存到此檔案中。

@php "%~dp0composer.phar" %*      

重新打開一個指令行視窗試一試執行 composer --version 看看是否正确輸出版本号

如果看到類似這樣的結果,就可以确定安裝成功了。

Composer version 1.5.2 2017-09-11 16:59:25      

經常執行 composer selfupdate 以保持 Composer 一直是最新版本

######使用Packagist 鏡像( Composer 中國全量鏡像)

修改 composer 的全局配置檔案

composer config -g repo.packagist composer https://packagist.phpcomposer.com      

試一下 composer install 來體驗飛一般的速度

######建立一個laravel項目

到你的工作目錄下,建立一個Laravel項目

composer create-project laravel/laravel acm      

下載下傳這個laravel需要花一定的時間,耐心等待之後,就可以發現生成了laravel項目,由于篇幅原因,關于Laravel中相關目錄代表的含義就不一一介紹了。感興趣的同學可以自己看源碼。laravel的源碼主要是在vender目錄下的 Illuminate 下的。應用通路的入口是 public 目錄下的 index.php 檔案。通路 laravel 應用前,應該修改 storage 目錄的權限,否則會報錯。

修改本地host檔案,也就是當你在浏覽器中輸入域名的時候,實際上請求的dns首先是到host檔案中去找

127.0.0.1 acm.xxxpt.edu.cn      

配置 nginx 将 ​​acm.xxxpt.edu.cn​​​ 指向目前這個服務

新增一個 server 塊,修改下面這部配置設定置

server_name  acm.xxxpt.edu.cn;
location / {
            root   html/acm/public;
            index  index.php index.html index.htm;
}
location ~ \.php$ {
    root           html/acm/public;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
}