目前寫PHP程式的測試環境是用uniform server,架設及操作使用皆十分方便,唯一的缺點是執行效能,點個網頁得等上2-3秒的時間,爬文也沒找到解決的方案。最近WSL2興起,於是想想是不是可以用來架設測試環境,經過幾天的嘗試,發現效能竟然不錯。以下是架設的過程。
手動下載 Windows 子系統 Linux 版散發版本套件 https://docs.microsoft.com/zh-tw/windows/wsl/install-manual
使用ubuntu 16.04
安裝散發版本 PowerShell Add-AppxPackage .\app_name.appx
★★★安裝相關套件
apt update
apt install tasksel
安裝LAMP server
apt install phpmyadmin
★★★在 Windows 10 中將 WSL(Ubuntu) 重設
https://blog.0t2.me/reset-wsl-in-windows-10/
windows設定 –>應用程式 –>ubuntu16.04 –> 進階選項–>重設
★★★Ubuntu 14.04更改Apache網站根目錄 https://www.itread01.com/p/163145.html
修改檔案:/etc/apache2/sites-enabled/000-default
在文件中找到 DocumentRoot 在後面修改你要放置網頁檔案的目錄
DocumentRoot /mnt/d/sport
大多數教程只是到了這一步!!然而這樣是有問題的。
還需要配置Apache2.conf檔案![這裡寫圖片描述](http://img.blog.csdn.net/20160407143221995)
<Directory /mnt/d/sport/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
修改完後重啟apache2伺服器即可,重啟命令: sudo /etc/init.d/apache2 restart
★★★WSL檔案放在
%LOCALAPPDATA%\Packages\<PackageFamilyName>\LocalState\<disk>.vhdx
CanonicalGroupLimited.Ubuntu16.04onWindows_79rhkp1fndgsc
C:\Users\sairwolf\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu16.04onWindows_79rhkp1fndgsc\LocalState
★★★https://blog.miniasp.com/post/2020/07/26/Multiple-Linux-Dev-Environment-build-on-WSL-2
關閉 WSL Distro 執行
關閉特定 WSL Distro 執行
wsl -t WLinux
關閉所有 WSL Distro 執行(等同於關閉 VM 執行)
wsl –shutdown
移除 WSL Distro 版本
注意:所有該 WSL Distro 下所有的檔案,都會被全數刪除,刪除後無法復原喔!
wsl.exe –unregister WLinux2
★★★安裝php5.6
http://dchesmis.blogspot.tw/2016/09/ubunt-1604php5x.html
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php5.6
sudo apt-get install php5.6-mbstring php5.6-mcrypt php5.6-mysql php5.6-xml php5.6-gd php5.6-zip
從 php7 切換到 php5:
sudo a2dismod php7.0 ; sudo a2enmod php5.6 ; sudo service apache2 restart
用 phpinfo(); 查看版本
CLI:
sudo update-alternatives -set php /usr/bin/php5.6
sudo php -v
ppa:ondrej/php 已不支援ubuntu 16.04(2022/10/29補記)
https://launchpad.net/
★★★設定mysql 模式
關閉Ubuntu預設mysql5.7版的strict mode設定方法(嚴格模式)
1、SSH連線到伺服器的root,找到以下路徑,並建立一個disable_strict_mode.cnf檔案
/etc/mysql/conf.d/disable_strict_mode.cnf <-建立檔案
2、打開文件並寫入以下語法:
[mysqld]
sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
3、輸入指令重新啟用mysql
sudo service mysql restart
為了確認strict mode模式是不是已經被關閉了,可以在phpMyAdmin的sql中輸入SELECT @@GLOBAL.sql_mode進行測試
如果顯示IGNORE_SPACE,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FO則表示strict mode模式已經被關閉,恭喜您可以脫離苦海了。
★★★phpmyadmin設定連線時間
一、修改 /etc/php.ini
設定系統逾時的秒數
session.gc_maxlifetime = 86400
重啟 apache 生效
二、修改 /path/to/phpmyadmin 設定檔
到你安裝phpmyadmin的目錄/etc/phpmyadmin
理論上在 phpmyadmin的根目錄下應該有 config.inc.php 這個檔案,如果沒有的話,請將sample設定檔拿來用:
# cp config.sample.inc.php config.inc.php
修改config.inc.php
最上面加入一行,設定時間(秒數)即可
$cfg[‘LoginCookieValidity’] = 86400;
★★★目前未解決的問題
1.無法設定固定IP:暫時用hEdit_x64編輯hosts檔,新增wsl 指向動態IP來解決
2.ssh連入時無法用密碼登入,只能用public key [修改/etc/sshd_config 設定 PasswordAuthentication yes 就可以了]
3..sh檔無法執行 解決方法寫bat
例service_start.bat
REM wsl.exe --shutdown wsl.exe -u root service ssh start wsl.exe -u root service mysql start wsl.exe -u root service apache2 start PAUSE
hosts
127.0.0.1 localhost ::1 localhost ::1 lo ::1 w.lo
localhost 會自動導向wsl主機,如要少打一些字記得加入 ::1 的轉向。
w.lo可以讓瀏覽器認得這是一個網址,直接打lo瀏覽器會當成搜尋字串。
在windows 的CMD命令提示字元視窗執行wsl指令就可以進ubuntu
目前WSL2沒有像VM那樣的網路橋接器功能,所以其他機器無法透過IP存取WSL2裡的資源,翻了github找到一個解法,用windows的netsh把port映射到WSL2。
參考文件:Joe Huang
1.開啟power shell 執行外部script的權限
以系統管理員身份執行power shell並執行以下指令
PS C:\> Set-ExecutionPolicy RemoteSigned
選擇全部皆是
2.執行下面的script
其他的機器可以成功的連入,檔案通知的機制也能正常運作
$remoteport = bash.exe -c "ifconfig eth0 | grep 'inet '" $found = $remoteport -match '\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}'; if( $found ){ $remoteport = $matches[0]; } else{ echo "The Script Exited, the ip address of WSL 2 cannot be found"; exit; } #[Ports] #All the ports you want to forward separated by coma $ports=@(80,443,10000,3000,5000); #[Static ip] #You can change the addr to your ip config to listen to a specific address $addr='0.0.0.0'; $ports_a = $ports -join ","; #Remove Firewall Exception Rules iex "Remove-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' "; #adding Exception Rules for inbound and outbound Rules iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Outbound -LocalPort $ports_a -Action Allow -Protocol TCP"; iex "New-NetFireWallRule -DisplayName 'WSL 2 Firewall Unlock' -Direction Inbound -LocalPort $ports_a -Action Allow -Protocol TCP"; for( $i = 0; $i -lt $ports.length; $i++ ){ $port = $ports[$i]; iex "netsh interface portproxy delete v4tov4 listenport=$port listenaddress=$addr"; iex "netsh interface portproxy add v4tov4 listenport=$port listenaddress=$addr connectport=$port connectaddress=$remoteport"; }
更換預設語系
阿舍的隨手記記 Ubuntu 用指令設定終端機顯示中文訊息
sudo locale-gen zh_TW sudo locale-gen zh_TW.UTF-8 sudo dpkg-reconfigure locales sudo update-locale LANG="zh_TW.UTF-8" LANGUAGE="zh_TW"
用locale指令可以查得目前的語系設定