最好的 Linux 桌面版---- Windows 10 安裝體驗

minororange發表於2019-05-14

簡介

適用於 Windows 的 Linux 子系統(英語:Windows Subsystem for Linux,簡稱 WSL )是一個為在 Windows 10 和 Windows Server 2019 上能夠原生執行 Linux 二進位制可執行檔案(ELF 格式)的相容層。( WSL 釋出有一段時間了,本人也是上週看了 WSL2 的宣傳才知道有這麼個好東西

安裝

開啟 Windows 10 應用商店搜尋 Linux

clipboard.png

搜尋結果中有可用的 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 用不了 systemctlservice ,所以就不加入系統服務了,下面列出 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 初始頁面即代表成功。

總結

  1. WSL 替代了虛擬機器和雙系統,用於開發應該是足夠了,特別是子系統和主系統公用 IP 和資料夾,十分方便,免去了配置對映關係這一步

  2. WSL 目前還在完善中,聽說年中要釋出 WSL2 測試版,看宣傳也是非常酷炫

  3. 作為 Windows 的忠實擁躉,不得不說一句:世界上最好的 Linux 桌面版 ---- Windows 10 ,那麼世界上最好的語言是_____

  4. 第一次嘗試寫類教程文章,有不足之處,歡迎大佬指教

相關文章