這兩天把項目部署到線上,還不太懂Linux的操作,所以在Windows下折騰了一番環(huán)境。
瑣碎的配置太多,在這里記錄下防止忘記,文筆不好,請見諒。
文章主要講下部署的整體過程以及一些個人遇到的坑:
1)windows版本選擇
2)安裝Nginx及配置;
3)安裝mysql5.7;
4)安裝php7;
5)安裝composer
6)配置yii2;
7)遇到的一些坑、優(yōu)化及基本需要做的事情
8)配置SVN
<strong>一、windows</strong>
我選的是阿里云2008 R2 企業(yè)標準版 64位中文版(因為數據中心版貌似有些服務會占用80端口)
下載并安裝sublime(編輯器)、ietester(可以使用各版本的IE瀏覽器進行測試)、winrar(解壓工具)、Navicat for mysql(數據庫管理軟件)這幾個軟件
<strong>二、Nginx</strong>
<ol>
<li>在<a>https://nginx.org/en/download.html</a>下“stable version”中選擇<a>nginx/Windows-1.10.3</a></li>
<li>下載,解壓到C盤,文件夾名稱改為“nginx”,其中:
<ul>
<li>配置文件在/conf/nginx.conf;
(其中yii2部署到Nginx上的配置,詳情可以看<a>https://github.com/yiisoft/yii2-app-advanced/blob/master/docs/guide/start-installation.md</a>)</li>
<li>目錄詳情可以參考:<a>https://www.cnblogs.com/nick-huang/p/4638398.html</a></li>
</ul></li>
<li>在server下需要注意的幾個點:
<ul>
<li>server_name:這個與域名對應,這里可設為localhost或www.domain.com來對應frontend應用;
域名解析(記錄類型:A;主機記錄:www;解析線路:默認;記錄值:服務器IP地址,同理,分別給backend、api等主機記錄都設好)</li>
<li>root:為<code>/path/to/yii-application/frontend/web/</code>表示指向frontend應用</li>
<li>瀏覽器選項卡中圖標,在conf文件下server中添加:
<pre>
location ~ ^/favicon.ico$ {
root C:/htdoc;//把ico文件放入目錄內即可
}
</pre>
</li>
<li>一般來說為了安全性,我們還需要隱藏Nginx版本號以防請求被人截取,通過版本號知道版本漏洞來攻擊網站,在conf文件下server中添加:<code>server_tokens off;</code></li>
<li>記得配置環(huán)境變量</li>
</ul>
</li>
<strong>三、mysql5.7.16</strong>
雖然5.7我搜到的資料說有很多坑,但基本使用還是沒問題的,且性能會對比5.6有優(yōu)化且漏洞會有對應修復。
在這里我嫌麻煩,是選擇msi的格式來快速安裝(且msi文件可以直接配置root密碼;若選擇直接下載壓縮包,則需要重置root密碼)
部分參考地址:
<ul>
<li>mysql5.7官方下載地址</li>
<li>最新Mysql5.7安裝教程(圖文版本)</li>
<li>mysql5.7安裝教程(windows)</li>
<li>MySQL 5.7 for Windows 解壓縮版配置安裝</li>
<li>mysql5.7查看初始密碼和修改</li>
注:安裝完記得配置環(huán)境變量
</ul>
<strong>四、安裝php7</strong>
<ol>
<li>先安裝VC14(用來解析php,已上傳百度云,下載安裝即可);</li>
<li>官網php7下載地址:Nginx下要選擇Non Thread Safe版本的VC14 X64 ZIP(具體原因參考:<a>windows 下選擇php版本 是選Non Thread Safe還是Thread Safe?</a>)</li>
<li>安裝后可以選擇把php.ini-development或php.ini-production復制一份,然后改名php.ini;</li>
<li>打開php.ini,把以下幾句的注釋(即前面“;”)去掉:
<pre>
extension=php_curl.dll
extension=php_mbstring.dll
extension=php_mysqli.dll
extension=php_openssl.dll
extension=php_pdo_mysql.dll
</pre>
</li>
<li>為了安全性,我們一般也隱藏php的版本號,在php.ini中添加:<code>expose_php = Off</code></li>
<li>記得配置環(huán)境變量</li>
<li>安裝完成;</li>
</ol>
<strong>五:安裝composer</strong>
<ol>
<li>從百度云中拿到composer-setup.exe,雙擊跟著步驟安裝即可;(需先安裝好php)
</li>
<li>記得配置環(huán)境變量</li>
</ol>
<strong>六、配置Yii2</strong>
<ol>
<li>把代碼文件夾放到根目錄下(我設的根目錄是C:/htdoc);</li>
<li>如果執(zhí)行yii命令無效,可以嘗試在程序文件夾中打開yii文件,把第一行<code>/usr/bin/env</code>中路徑改為你的php.exe的絕對路徑;或把yii.bat文件中<code>PHP_COMMAND=php.exe</code>中<code>php.exe</code>改成php.exe的絕對路徑;</li>
<li>運行cmd,輸入<code>cd path\to\yii-application</code>;</li>
<li>輸入<code>php init</code>,把環(huán)境設為生產環(huán)境;</li>
<li>完成;</li>
</ol>
<strong>七、遇到的一些坑、優(yōu)化及基本需要做的事情</strong>
<ol>
<li>yii2官方文檔性能優(yōu)化官方文檔</li>
<li>yii2提速:參考文章</li>
<li>數據庫定時備份:
<ul>
<li>mysql自動備份</li>
</ul>
我選擇的是直接備份sql,新建bat文件,添加以下代碼,然后用計劃任務定時執(zhí)行即可:
數據庫賬號:root
數據庫密碼:123456
需要備份的數據庫:bbs
<pre>
@echo off
mysqldump --opt -uroot -p123456 bbs > C:/db_backup/bk.sql
@echo on
</pre>
</li>
<li>Nginx是一個反向代理服務器,但還需要考應用服務器來支撐我們網站,在Linux下使用的是php-fpm(php7已經寫入了內核),在Windows下使用的是php-cgi:
詳情可以具體參考Windows下配置Nginx+php7
</li>
<li>但我們經常會遇到監(jiān)聽端口不穩(wěn)定導致崩潰關閉的情況,具體解決方案可以參考:解決windows下php-cgi進程經常自動關閉</li>
<li>綜合4、5點,在nginx目錄下,有:

其中:RunHiddenConsole主要是為了隱藏cmd窗口,且為了方便開啟關閉nginx,分別建了start_nginx_php.bat和stop_nginx_php.bat;
最后,兩個文件的內容分別是
<a>start_nginx_php.bat</a>:
<pre>
@echo off
REM Windows 下無效
REM set PHP_FCGI_CHILDREN=5
REM 每個進程處理的最大請求數,或設置為 Windows 環(huán)境變量
set PHP_FCGI_MAX_REQUESTS=1000
echo Starting PHP FastCGI...
RunHiddenConsole C:\nginx\xxfpm\bin\xxfpm.exe "C:/php/php-cgi.exe -c C:/php/php.ini" -n 5 -i 127.0.0.1 -p 9000
echo Starting nginx...
RunHiddenConsole C:\nginx\nginx.exe -p C:\nginx
exit
</pre>
<a>stop_nginx_php.bat</a>:
<pre>
@echo off
echo Stopping nginx...
taskkill /F /IM nginx.exe > nul
echo Stopping PHP FastCGI...
taskkill /F /IM xxfpm.exe > nul
exit
</pre>
使用的時候直接雙擊即可;
</li>
<li>有時候我們也需要為程序執(zhí)行相關的定時任務,可以新建bat文件,然后添加上:
<pre>
C:\php\php C:\htdoc\yii-application\yii site/index
</pre>
這里<code>C:\php\php</code>即php.exe的路徑、<code>C:\htdoc\yii-application\yii</code>為yii文件的路徑、<code>
site/index</code>為控制器/方法;然后用計劃任務定時執(zhí)行此bat文件即可
</li>
<li>在官方文檔性能優(yōu)化中,第一點是優(yōu)化我們的php環(huán)境,即啟用字節(jié)碼緩存 Opcache(PHP 5.5或更高版本),在php.ini下設置:
<pre>
zend_extension=php_opcache.dll//此句要添加
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.fast_shutdown=1
opcache.file_cache=C:/htdoc/yii-application//此處是因為定時任務執(zhí)行程序的時候會出現警告提示,需要設置;
opcache.file_cache_only=1
opcache.file_cache_fallback=1//同上
</pre>
參考資料:
黃聰:PHP5.6+7代碼性能加速-開啟Zend OPcache-優(yōu)化CPU
使用 OpCache 提升 PHP 5.5+ 程序性能
</li>
<li>郵件發(fā)送,如果選擇的是香港的主機,然后使用阿里郵箱作為smtp郵箱,那么需要設置port為465,encryption為ssl;如果是國內的主機,port為25,encryption為tls即可;</li>
</ol>
</ol>
<strong>八、配置SVN</strong>
有些公司的項目代碼需要保密,不好放在git上,大部分還是用SVN作為項目管理;這樣方便管理線上與線下,不用每次整個項目代碼上傳出現問題。
<ol>
<li>我們一般用tortoiseSVN作為SVN服務器,詳細使用功能步驟參考
用VisualSVN做項目版本控制
</li>
<li>然后phpstorm內置SVN客戶端,只需要配置好即可使用,很強大
PhpStorm中如何配置SVN,詳細操作方法</li>
<li>可能會遇見的錯誤:
SVN commit:remains in tree-conflict錯誤的解決辦法,其實只需從SVN先同步一份代碼下來即可。
</li>
</ol>
相關軟件百度云
密碼:4mcc
謝謝。