#某魔法組織官網實作
這是一篇開源的基于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;
}