環境
操作系統:openEuler 歐拉 20.03 LTS SP1、22.03 LTS
適用架構:ARM64(鯤鵬、飛騰)、AMD64(海光、兆芯)
前言
Wordpress 是最流行的內容管理系統之一,也是常用的 CMS(內容管理系統)程序之一。Wordpress 可以多種方式安裝,本次講解同樣非常流行的軟件環境 LEMP(Linux + Nginx + MySQL + PHP)或 LAMP(Linux + Apache + MySQL + PHP)。
數據庫
這裏使用 MariaDB。
sudo dnf install mariadb mariadb-server
允許開機啓動並立即啓動。
sudo systemctl enable mariadb --now
MySQL 的安裝與此類似,執行 dnf 安裝命令時,將 mariadb-server 改爲 mysql-server 就可以了。需要了解更多內容,請參考《MySQL 8.0 的安裝部署》,https://my.oschina.net/chipo/blog/4341579
創建對應數據庫及帳號用於安裝 WordPress 使用。
sudo mysql
創建 Wordpress 運行需要的數據庫和帳號,這裏使用的數據庫名 wdpsdb,用戶名 wdpsusr,密碼 wdpswd 可以根據自己需要修改。
CREATE USER 'wdpsUsr'@'localhost' IDENTIFIED BY 'wdpsWd';
GRANT ALL PRIVILEGES ON *.* TO 'wdpsUsr'@'localhost';
CREATE DATABASE wdpsDb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL ON wdpsDb.* TO 'wdpsUsr'@'localhost' IDENTIFIED BY 'wdpsWd';
需要注意,這裏使用的默認安裝的 MariaDB 10。
成功創建完成後,輸入以下命令,更新變更。
flush privileges;
退出數據庫管理界面。
quit
PHP
要顯示動態內容,正常運行 Wordpress 我們需要安裝 PHP,安裝命令如下:
sudo dnf install php php-fpm php-opcache php-cli php-mysqlnd php-curl php-dom php-exif php-fileinfo php-gd php-hash php-json php-mbstring php-mysqli php-openssl php-pcre php-xml libsodium
修改一下 PHP 的上傳限制,不然,WordPress 的一些超過 2M 的主題或者圖片,會無法上傳。
sudo nano /etc/php.ini
查找 post_max_size = 2M 改爲:100M
查找 upload_max_filesize,默認爲 2M 改爲:100M
解決上傳超時
默認是 30 秒 改爲:max_execution_time = 0
0 代表不限制
max_input_time = 600 ;每個 PHP 頁面接收數據所需的最大時間,默認 60 秒
memory_limit = 128M ;每個 PHP 頁面所喫掉的最大內存,默認 128M,其實默認就夠用了。
另外要確認上傳的 <form> 裏沒有類似下面的這行 < input type="hidden"name="MAX_FILE_SIZE" value="1000000"> 這樣也是限制上傳大小用的
如果是 apache 2 需要修改:
/etc/httpd/conf.d/php.conf 中的 LimitRequestBody 524288 將 524288(=512×1024)改大,比如 5M(=5×1024×1024)這樣上傳就不會出現如上問題,上傳不響應,上傳顯示該頁無法現實也將得到解決。
允許開機啓動,並立即啓動服務。
sudo systemctl enable php-fpm --now
至此,PHP 及可能用到的擴展安裝完成。
方法 1、 Nginx
Nginx 是一個開源的,非常流行,使用非常廣泛的網頁服務器軟件。我們可以通過以下命令安裝 Nginx。
sudo dnf install nginx
修改一下文件上傳的限制。
sudo nano /etc/nginx/nginx.conf
在 http {} 段中加入 “client_max_body_size 20m;”,其中 20m 爲允許最大上傳的大小。
允許開機啓動,並立即啓動。
sudo systemctl enable nginx --now
啓動完成後,可以輸入以下命令查看 nginx 運行狀態
systemctl status nginx
方法 2、Apache
默認情況下,PHP 安裝時會依賴這個軟件包,也就是會同時安裝,不需要單獨設置。如果要手動安裝,請執行以下命令。
sudo dnf install httpd
允許開機啓動,並立即啓動。
sudo systemctl enable httpd --now
防火牆
默認情況,openEuler 20.03 TLS 中使用 firewall 管理防火牆。防火牆需要允許 http (80) 和 https (443) 通訊,可以通過以下命令配置:
sudo firewall-cmd --add-service=http --permanent
或者
sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
重啓防火牆。
sudo firewall-cmd --reload
可以通過 http://localhost 或本機的其他 IP 訪問,您將看到 openEuler 默認的 Nginx 或 Apache 歡迎頁面。
Nginx 或 Apache 可以正常工作了。
Wordpress
安裝之前,我們需要先從 https://cn.wordpress.org/ 下載。
1、Nginx 的 web 文件目錄
cd /usr/share/nginx/html
2、Apache 的 web 文件目錄
cd /var/www/html/
使用 curl 命令下載最新版本的 wordpress。下載壓縮包。
sudo curl -O https://cn.wordpress.org/latest-zh_CN.tar.gz
下載完成後,通過 tar 命令解壓軟件包。這裏以 Nginx 爲例。
sudo tar -xzvf latest-zh_CN.tar.gz && sudo mv wordpress/* /usr/share/nginx/html && sudo rm -rf wordpress
爲避免任何權限問題,我們可以將域文檔根目錄的所有權使用 chown 命令更改爲 apache 或 nginx 用戶:
sudo chown -R nginx:nginx /usr/share/nginx/html
賦權,
sudo chmod -R 777 /usr/share/nginx/html
sudo systemctl restart nginx
至此,配置完成,下一步我們將進入 Wordpress 運行配置界面。
SELINUX
如果遇到訪問網頁時提示 “Access denied”,嘗試關閉 selinux(需要重啓服務器)
sudo nano /etc/selinux/config
設置內容修改爲,SELINUX=disabled
或者配置 selinux 上下文:
chcon -R -t httpd_sys_content_t /path/to/phpfiles
訪問主頁
通過瀏覽器訪問主頁,比如,http://localhost,系統會自動跳轉至 WordPress 配置頁面。輸入配置信息就好了。如果失敗請手工修改配置文件。
手工生成配置文件。
使用 cp 命令複製出一份配置文件 wp-config.php
。
sudo cp wp-config-sample.php wp-config.php
編輯配置文件,
sudo nano wp-config.php
內容如下
// ** MySQL 設置 - 具體信息來自您正在使用的主機 ** //
/** WordPress 數據庫的名稱 */
define( 'DB_NAME', 'database_name_here' );
/** MySQL 數據庫用戶名 */
define( 'DB_USER', 'username_here' );
/** MySQL 數據庫密碼 */
define( 'DB_PASSWORD', 'password_here' );
/** MySQL 主機 */
define( 'DB_HOST', 'localhost' );
/** 創建數據表時默認的文字編碼 */
define( 'DB_CHARSET', 'utf8' );
/** 數據庫整理類型。如不確定請勿更改 */
define( 'DB_COLLATE', '' );
Primary script unknown
PHP 環境可能會遇到這個惱人的問題:
- 瀏覽器訪問 php 文件,報錯。
- 查看 /var/log/nginx/error.log ,有 “Primary script unknown”,類似如下:
FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream,
client: 127.0.0.1, server: _, request: "GET /info.php HTTP/1.1", upstream: "fastcgi://unix:/run/php-fpm/www.sock", host: "127.0.0.1"
原因有兩個,一個是 php-fpm 找不到 php 文件,另一個是 php-fpm 沒有權限讀取和執行文件。
1. 找不到文件問題
nginx 的站點配置文件 /etc/nginx/default.d/php.conf 中 php 段要這樣:
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
#root 路徑配置必須要有,而且必須要寫對(別笑,真的能寫錯)
root /usr/share/nginx/html;
fastcgi_pass php-fpm;
fastcgi_index index.php;
#SCRIPT_FILENAME用$document_root,而不是具體路徑
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
2. 權限問題
也是坑最多的。
1) 進程用戶
nginx.conf 裏的 user 配置要跟 php-fpm.d/www.conf 一致,比如都用 nginx。
/etc/nginx/nginx.conf :這個一般不用改,默認就是 nginx。
user nginx;
worker_processes auto;
/etc/php-fpm.d/www.conf :
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
user = nginx
group = nginx
nginx 和 php-fpm 進程 / 監聽信息:
ps -ef|grep php-fpm
root 19107 0.0 0.1 207644 5852 ? Ss 1月02 0:03 php-fpm: master process (/usr/local/etc/php-fpm.conf)
phpuser 19108 0.0 0.1 207644 7108 ? S 1月02 0:00 php-fpm: pool www
phpuser 19109 0.0 0.1 207644 7112 ? S 1月02 0:00 php-fpm: pool www
root 24676 0.0 0.0 56660 1024 ? Ss 13:08 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
phpuser 24677 0.0 0.7 84680 29976 ? S 13:08 0:00 nginx: worker process
phpuser 24678 0.0 0.7 84324 29236 ? S 13:08 0:00 nginx: worker process
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 19107/php-fpm: mast
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 24676/nginx: master
tcp6 0 0 :::80 :::* LISTEN 24676/nginx: master
如果修改了 nginx 運行用戶還必須要改些目錄權限:
chown -R phpuser:phpuser /var/log/nginx
chown -R phpuser:phpuser /var/cache/nginx
chown -R phpuser:phpuser /usr/share/nginx/html
還有 logrotate.d/nginx,create 640 nginx adm
這行要改:
create 640 phpuser adm
2) 目錄和文件權限
php 文件不必非得設爲 777,讓人怪擔心的,只要是 nginx 和 php-fpm 運行用戶可讀寫執行即可,一般可以 770 。
php 文件目錄和文件樣例:
drwxrwx--- 6 phpuser phpuser 4.0K 2019-01-03 13:09 /usr/share/nginx/html
-rwxrwx--- 1 phpuser phpuser 40 2019-01-03 13:09 /usr/share/nginx/html/phpinfo.php
這裏有個深坑,對於使用其他目錄放置 php 文件的很可能中招,就是 /path/to/phpfiles 的每一層目錄都要允許 phpuser 訪問,缺一層就會 Permission denied。
本例,/usr/share/nginx/html 之上的每一層目錄,所有者都是 root,都有 o+rx ,即所有人都有讀取和執行權限(讀取和執行權限是目錄訪問的根本),因此 phpuser 可以訪問到 html 目錄。
drwxr-xr-x. 13 root root 155 2018-07-10 15:42 /usr
drwxr-xr-x. 86 root root 4.0K 2018-12-17 07:33 /usr/share/
drwxr-xr-x 4 root root 40 2018-12-17 08:06 /usr/share/nginx/
drwxrwx--- 6 phpuser phpuser 4.0K 2019-01-03 13:11 /usr/share/nginx/html/
測試方法:
sudo -u phpuser ls -l /usr/share/nginx/html/
3. 最後
echo "<p align='center'>Good Luck :)</p><?php phpinfo(); ?>" > /usr/share/nginx/html/phpinfo.php
在瀏覽器中輸入 https://example.com
(你自己的域名),你會看到如下配置界面:
這裏就輸入站點名稱,管理帳號名稱及密碼,email 等內容後,點擊 “安裝 WordPress” 完成安裝。
登錄
進入控制檯
設置域名。如果是互聯網訪問,請修改 DNS 的解析。本地訪問,請修改 hosts 文件。
sudo vi /etc/hosts
在 “設置” 中,填寫好域名。
至此,我們完成了 Wordpress 的安裝,來看下默認的效果界面。
地址輸入:https://example.com
,效果如下:
(這裏的域名僅做驗收使用,實際情況下需要你配置自己的域名)
剩下的事情就是登錄 Wordpress 的管理界面,安裝你喜歡的主題。
開始你的 Wordpress 之旅吧。
寫在最後
本教程詳細講解了如何在 openEuler 上搭建 LEMP 環境運行 WordPress 的方法,通過本教程你應該學會了如何使用 Wordpress 建站。
如果你有不清楚的地方,歡迎留言討論。