簡介
適用於 Windows 的 Linux 子系統(英語:Windows Subsystem for Linux,簡稱 WSL )是一個為在 Windows 10 和 Windows Server 2019 上能夠原生執行 Linux 二進位制可執行檔案(ELF 格式)的相容層。( WSL 釋出有一段時間了,本人也是上週看了 WSL2 的宣傳才知道有這麼個好東西
安裝
開啟 Windows 10 應用商店搜尋 Linux
搜尋結果中有可用的 Linux 各個版本,選擇一個進行安裝即可。
啟用 WSL 功能
用管理員模式開啟 PowerShell,執行命令:Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
執行完命令需要重啟電腦
重啟完成後在 Windows 選單中搜尋剛剛安裝的 Linux 程式,點選開啟,WSL 進入初始化,初始化完成後即可開始開發之旅
安裝 Nginx PHP
之前一直用的 centOS 系統,Windows 10 上沒有,所以安裝的 Ubuntu 18
安裝 Nginx
安裝依賴(以下依賴是 Nginx 和 PHP 所需的一些依賴,對 apt 的包不熟,找了一下午)
apt-get install build-essential
apt-get install libpcre3-dev
apt-get install zlib1g-dev
apt-get install libssl-dev
apt-get install libgd-dev
apt-get install libxml2 libxml2-dev libbz2-dev libcurl4 libcurl4-gnutls-dev
apt-get install libreadline-dev
apt-get install libxslt1-dev
下載解壓 Nginx 編譯包
# 如果沒有 wget 就先 apt install wget 一下
wget -q http://nginx.org/download/nginx-1.15.0.tar.gz
tar -zxvf nginx-1.15.0.tar.gz
新增 Nginx 使用者
groupadd nginx
useradd nginx -s /sbin/nologin -g nginx -M
編譯安裝
cd nginx-1.15.0
./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-http_stub_status_module \
--with-http_ssl_module \
--with-http_sub_module \
--with-http_realip_module \
--with-http_image_filter_module \
--with-pcre
make
make install
如果在編輯過程中提示缺少什麼依賴,把報錯資訊複製到谷歌就會得到依賴包,不過谷歌一般搜到的都是 centOS 的 yum 包,可以去 這個網站 進行搜尋 apt 的包名
編譯完後建立軟連線
ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
# 輸入 nginx -t
nginx -t
# nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
# nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
因為 WSL 用不了
systemctl
和service
,所以就不加入系統服務了,下面列出 nginx 開啟、重啟、停止的命令
# 啟動
nginx
# 重啟
nginx -s reload
# 停止
nginx -s quit
# 檢視 nginx 程式
ps -ef | grep nginx
啟動後檢視 http://localhost ,顯示 nginx 頁面即代表 nginx 安裝成功
安裝 PHP
下載解壓 PHP 編譯包
# 下載的 7.1 版本的,如果有需要,可以去 PHP 官網下載其他版本
wget -q http://jp2.php.net/distributions/php-7.1.26.tar.gz
tar -zxvf php-7.1.26.tar.gz
配置、編譯安裝
# 以下配置是大部分 PHP 擴充套件,沒有 MySQL 擴充套件(因為懶),可以根據需要配置初始化 PHP 擴充套件,後續新增擴充套件也很方便
./configure \
--prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/lib/etc \
--enable-fpm \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--enable-inline-optimization \
--disable-debug \
--disable-rpath \
--enable-shared \
--enable-soap \
--with-libxml-dir \
--with-xmlrpc \
--with-openssl \
--with-mcrypt \
--with-mhash \
--with-pcre-regex \
--with-sqlite3 \
--with-zlib \
--enable-bcmath \
--with-iconv \
--with-bz2 \
--enable-calendar \
--with-curl \
--with-cdb \
--enable-dom \
--enable-exif \
--enable-fileinfo \
--enable-filter \
--with-pcre-dir \
--enable-ftp \
--with-gd \
--with-openssl-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib-dir \
--with-freetype-dir \
--enable-gd-native-ttf \
--enable-gd-jis-conv \
--with-gettext \
--with-mhash \
--enable-json \
--enable-mbstring \
--enable-mbregex \
--enable-mbregex-backtrack \
--with-libmbfl \
--with-onig \
--with-zlib-dir \
--with-readline \
--enable-session \
--enable-shmop \
--enable-simplexml \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-wddx \
--with-libxml-dir \
--with-xsl \
--enable-zip \
--with-pear \
--enable-opcache
# 安裝
make -j4 //據說 -j4 會快一點
make install
# 配置 ini
cp php.ini-development /usr/local/php/lib/etc/php.ini
# 加入環境變數
echo "export PATH=$PATH:/usr/local/php/bin" >> /etc/profile
source /etc/profile
和安裝 Nginx 一樣,如果缺少什麼依賴,谷歌一下(
面向谷歌程式設計
配置 php-fpm
如果上述步驟沒有問題了,接下來就開始配置 php-fpm 了
# 複製 php-fpm.conf
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
# 複製 www.conf
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
上述兩個配置檔案只用複製一下就行了,因為 WSL unix socket 貌似用不了,所以只能用埠通訊
啟動 PHP-FPM
/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf
上面這個命令,會有一些報錯資訊,谷歌了也沒有得到解決方案,但是不影響正常使用,後續繼續研究下
[14-May-2019 12:59:12] ERROR: failed to retrieve TCP_INFO for socket: Protocol not available (92)
命令列太長了,不好記,所以建立一個 php-fpm 的 shell
touch /usr/bin/php-fpm
chmod a+x /usr/bin/php-fpm
vim /usr/bin/php-fpm
在檔案中寫入以下內容:
#!/bin/bash
nohup /usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf &
後面使用 php-fpm
即可啟動了
建立專案
# /mnt 是 windows 的“我的電腦”目錄,/mnt/d 就是 D 盤
cd /mnt/d
# 安裝 composer
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/bin/composer
# 建立 www 目錄
mkdir www
# 建立 laravel 專案
cd www
composer create-project --prefer-dist laravel/laravel laravel
# 更改許可權和所屬人
chmod 0755 -R laravel/storage
chown -R nginx.nginx laravel/
配置 nginx
vim /usr/local/nginx/conf/nginx.conf
在這個檔案尾部(最後一個 }
前面)加入
# 這個是每個專案的 nginx 配置,根據個人喜好放置
include /etc/nginx/conf.d/*.conf;
配置專案的 nginx
mkdir -p /etc/nginx/conf.d
touch /etc/nginx/conf.d/laravel.conf
vim /etc/nginx/conf.d/laravel.conf
laravel.conf
server {
listen 81; ## listen for ipv4
root /mnt/d/www/laravel/public/ ;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
重啟 nginx
nginx -s reload
檢視 http://localhost:81 ,顯示 laravel 初始頁面即代表成功。
總結
-
WSL 替代了虛擬機器和雙系統,用於開發應該是足夠了,特別是子系統和主系統公用 IP 和資料夾,十分方便,免去了配置對映關係這一步
-
WSL 目前還在完善中,聽說年中要釋出 WSL2 測試版,看宣傳也是非常酷炫
-
作為 Windows 的忠實擁躉,不得不說一句:世界上最好的 Linux 桌面版 ---- Windows 10
,那麼世界上最好的語言是_____ - 第一次嘗試寫類教程文章,有不足之處,歡迎大佬指教