在 Windows 10 的 WSL2 Ubuntu 上安裝 WordPress
這篇文章會一步步教導如何在 Windows 10 的 WSL2 Ubuntu 上安裝 WordPress,解決一些可能會遇到的問題,且在本機 Windows 10 上使用瀏覽器直接連上 WordPress 操作。
之前的佈落格是放在 Pixnet,但是在受不了它對瀏覽者不友善的彈出廣告及操作介面,決定出走。 先是試了 Medium,它的編輯介面很直覺陽春,瀏覽者觀看起來也很順暢,但是可以客製化的東西太少,而且除非自行發表到社群平台,否則很少會有使用搜尋引擎的讀者搜到。
因此,我決定使用 WordPress 自己架站,在真正開始之前,我想先在我自己的電腦上先架起來試用看看,熟悉介面後,再正式使用公開的 WordPress。
在 Windows 10 上安裝 WSL2 Ubuntu
WSL (Windows Subsystem for Linux),中文為 Windows 子系統 Linux 版,是適用於 Linux 的 Windows 子系統可讓開發人員執行 GNU/Linux 環境 (包括大部分的命令列工具、公用程式和應用程式),直接在 Windows 上執行,不需進行修改,不會造成傳統虛擬機器或 dualboot 設定的額外負荷。
而 WSL 2 是「Windows 子系統 Linux 版」架構的新版本,可讓 Windows 子系統 Linux 版在 Windows 上執行 ELF64 Linux 二進位檔。 其主要目標是增加檔案系統效能,以及新增完整的系統呼叫相容性
本篇安裝 WSL2 的步驟,主要按照 Windows 10 上適用於 Linux 的 Windows 子系統安裝指南 文件來安裝。
安裝 WSL2 需要滿足 Windows 10 已更新為 2004 版,組建 19041 或更高版本。
在命令提示字元裡查看我的 Windows 版本為 10.0.19041.450 。
C:\WINDOWS\system32>ver
Microsoft Windows [版本 10.0.19041.450]
先啟用「Windows 子系統 Linux 版」選用功,才可以在 Windows 上安裝任何 Linux 發行版本。
以系統管理員身分開啟 PowerShell 並執行:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
在安裝 WSL2 之前,您必須啟用「虛擬機器平台」選用功能。
以系統管理員身分開啟 PowerShell 並執行:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
重新啟動電腦,以完成 WSL 安裝並更新至 WSL2。
以系統管理員身分開啟 PowerShell,然後執行下列命令,以將 WSL2 設定為預設版本:
wsl --set-default-version 2
執行該命令之後,您可能會看到此訊息:WSL2 requires an update to its kernel component. For information please visit https://aka.ms/wsl2kernel。 請遵循連結 (https://aka.ms/wsl2kernel),以在您的電腦上安裝 Linux 核心供 WSL2 使用。
以上完成後,開敵 Microsoft Store,搜尋 “Ubuntu”,選取 “Ubuntu” 套件,點擊”取得”來安裝 Ubuntu。
安裝完畢後,啟動 Ubuntu,當您第一次啟動新安裝的 Linux 發行版本時,主控台視窗會隨即開啟,而系統會要求您等候一到兩分鐘,讓檔案解壓縮並儲存在您的電腦上。
筆者在第一次啟動 Ubuntu 時,遇到報錯:
WslRegisterDistribution failed with error: 0xc03a001a
在網路搜尋後,找到可用的解決方法,如果您也遇到上面報錯,可以嘗試在檔案總管進入 “%USERPROFILE%\AppData\Local\Packages\CanonicalGroupLimited…”
右鍵點擊”LocalState” –> 內容 –> 進階 –> 取消勾選 “壓縮內容,節省磁碟空間(C)”
之後再次啟動 Ubuntu,應該就可以順利啟動,並為新的 Linux 發行版本設定使用者帳戶和密碼。
若要查看 WSL 版本是否為 WSL2 ,可以在命令提示字元裡輸入:
C:\WINDOWS\system32>wsl -l -v
NAME STATE VERSION
* Ubuntu Running 2
到此,您已經順利安裝完成 WSL 2 的 Ubuntu 系統了。
在 WSL2 Ubuntu 上安裝 WordPress
接下來要在 WSL2 Ubuntu 安裝 WordPress,我主要是按照 Ubuntu Tutorial 裡的步驟來安裝。
在 Ubuntu 裡輸入下列指令來安裝相關套件:
sudo apt update
sudo apt install wordpress php libapache2-mod-php mysql-server php-mysql
啟動 apache2 及 mysql:
sudo service apache2 start
sudo service mysql start
在 Apache 建立一個 WordPress 網站。新增檔案 /etc/apache2/sites-available/wordpress.conf 並複製貼上下列內容:
Alias /blog /usr/share/wordpress
<Directory /usr/share/wordpress>
Options FollowSymLinks
AllowOverride Limit Options FileInfo
DirectoryIndex index.php
Order allow,deny
Allow from all
</Directory>
<Directory /usr/share/wordpress/wp-content>
Options FollowSymLinks
Order allow,deny
Allow from all
</Directory>
之後,輸入下列指令來指修改生效並重啟 apache2:
sudo a2ensite wordpress
sudo a2enmod rewrite
sudo service apache2 reload
在開始配置 WordPress 之前必須要先配置 mysql 資料庫,由於新安裝的 mysql 為 mysql-server-8.0,所以 SQL 指令和 Ubuntu 文件裡的 mysql-server-5.7 有些不同,我做了些修改才能運行:
$ sudo mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1082
Server version: 8.0.21-0ubuntu0.20.04.4 (Ubuntu)
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> CREATE DATABASE wordpress;
Query OK, 1 row affected (0,00 sec)
mysql> CREATE USER 'wordpress'@'localhost' IDENTIFIED BY '<your-password>';
Query OK, 0 rows affected (0.02 sec)
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON wordpress.* TO wordpress@localhost;
Query OK, 0 rows affected (0.01 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 1 row affected (0,00 sec)
mysql> quit
Bye
注意,請把 ‘<your-password>’ 改成你要新建的 mysql wordpress 使用者的密碼。
若按照原 Ubuntu 文件的這個指令:
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER
-> ON wordpress.*
-> TO wordpress@localhost
-> IDENTIFIED BY '<your-password>';
會出現報錯:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTIFIED BY 'your-password'' at line 1
稍微研究後,我先新建新一個 mysql wordpress 使用者,再使用 GRANT 指令來給予權限,就可以了。
接下來配置 WordPress 連接 mysql 資料庫的設定檔,建立檔案 /etc/wordpress/config-localhost.php
<?php
define('DB_NAME', 'wordpress');
define('DB_USER', 'wordpress');
define('DB_PASSWORD', '<your-password>');
define('DB_HOST', 'localhost');
define('DB_COLLATE', 'utf8_general_ci');
define('WP_CONTENT_DIR', '/usr/share/wordpress/wp-content');
?>
注意,請將 ‘<your-password>’ 改為你之前建立的 mysql wordpress 使用者密碼。
重啟 mysql:
sudo service mysql restart
到此,你已經在 WSL2 Ubuntu 上安裝完 WordPress了。
連上建立的 WordPress 網站做第一次配置
在同一台電腦的 Windows 10 打開瀏覽器,連上 “localhost/blog”。要注意,如果你用 Google Chrome 瀏覽器,可能會遇到連不上,而且報錯ERR_CONNECTION_REFUSED
這是因為 Google Chrome 因為安全考慮,會強制使用 HTTPS 連線,而不是 HTTP 連線,就算你直接在網址列打 http://localhost/blog,它還是會轉成 HTTPS 連線。
解決辦法1:使用其他瀏覽器,如 Fireox,Edge…。
解決辦法2:在 Google Chrome 瀏覽器,連上 “chrome://net-internals/#hsts” , 在”Delete domain security policies” 下面的 domain 欄位,填上 “localhost” 再按 “Delete” 鈕。
接著,使用 Google Chrome,連到 “http://localhost/blog”,你應該就可以看到 WordPress 的設定頁面了。
使用 WordPress 遇到跟 Ubuntu apache2 設定相關的問題
在開始使用 WordPress 後,我遇到 2 個跟 Ubuntu apache2 設定相關的問題。下面說明我遇到的問題和我的解決辦法,給跟我一樣遇到問題的讀者參考:
- 在安裝佈景主題時,Wordpress 要求提供 FTP 帳號:
欲執行此動作, WordPress 需要訪問你的網頁伺服器。請輸入 Ftp 密碼繼續。若你記不得密碼,你應該向你的主機商聯繫。
這個問題主要是因為目錄的權限不足,我執行以下指令將 WordPress 的 wp-content 和 wp-includes 目錄的 owner 改為 www-data.
sudo chown -R www-data:www-data /usr/share/wordpress/wp-content/
sudo chown -R www-data:www-data /usr/share/wordpress/wp-includes/
再修改 /etc/wordpress/config-localhost.php,加入
define('FS_METHOD', 'direct');
之後,就可以用不提供 FTP 帳號,直接安裝佈景主題及外掛了。
2. 在新建立及編輯文章時,出現以下報錯:
wordpress Updating failed. Error message: The response is not a valid JSON response.
上網搜尋後,有許多不同的解決方法,我嘗試跟著修改一些東西後,就沒有看到這個問題了,但我不確定是哪個方法真正解決這個問題的,以下提供我修改的東西給讀者做參考:
修改 htaccess 權限
sudo chown -R www-data:www-data /etc/wordpress/htaccess
修改 /etc/apache2/apache2.conf,將相關的 AllowOverride 都設為 All。
<Directory />
Options FollowSymLinks
AllowOverride All
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride All
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
重啟 apache2
sudo service apache2 restart
在 WordPress –> 設定 –> 永久連結 (Permalinks) 裡調整一般設定成”文章名稱” (你也可以嘗試其他選項) –> 儲存設定
之後新建立和編輯文章就沒有再出現那個問題了。
希望以上的步驟能夠幫助到想在 Windows 10 的 WSL2 Ubuntu 上架 WordPress 的讀者。
延伸閱讀:
- 自架 WordPress 網站在 Google 上一直搜尋不到?自行提交 sitemap,讓 Google 建立索引
- 將 WordPress 從 Bluehost 搬移到 Amazon Lightsail
- Tuning Linux maximum TCP connections and test on Amazon Linux
- What’s Asymmetric Routing? Dealing with Two ENIs and Asymmetric Routing on AWS EC2 Linux instances