总结|在Ubuntu 22.04上设立WordPress
本文只是我对自己安装WordPress过程的一个总结,可能并不准确,欢迎指出。我使用的是 Nginx、MySQL和php-fpm。如果你用的是 Apache2 与 phpMyAdmin/MariaDB 的话,这篇文章可能帮不到你。
如果你嫌麻烦,可以直接用WordPress.com的免费方案,就是可能会有广告。
吐嘈:
- Google到的很多教程(比如wpbeginner.com与freecodecamp.org)都推荐用Bluehost/HostGator/SiteGround/WP Engine/Hostinger等解决方案……但我没法用啊……
- 网上的很多教程在如何设置 PHP 的部分过于模糊了……导致我折腾了很久。
如果你想要更详细的教程,推荐这个:How to Install WordPress with Nginx on Ubuntu 22.04 LTS - LinuxCapable(但是注意该文中提到的PHP 8.1 可能会产生错误,最好使用PHP 8.0)
WordPress官方也有 安装指南 ,不过说得不是很详细,需要借助官方论坛或者Google。
TODO
如果早知道……
WordPress
- WordPress 是一个免费开源的引擎(FOSS),其官网是 WordPress.org
- WordPress.com 是一个商业的 WordPress-hosting 平台。我以前只知道这个,导致我一直以为 WordPress 是个商业软件,一直不想用它……后悔为什么不早知道。
排雷
- 不能用PHP 8.1,需要用PHP 8.0或更低的PHP 7.4(参考1)。
- WordPress除了
php
以外,还需要php-fpm
或php-cgi
——不能只安装php
!
可能的报错(及其解决方案)
这里总结了我在安装过程中出现的报错信息以及我是如何解决它们的。
502
如果是 502 ,说明你 php-fpm
没有安装,或没有设置好 nginx 的配置文件。
Error establishing a database connection
如果你建了数据库,且 wp-config.php
中的参数正确,那么这应该是因为你没有给你的用户足够的权限。
如果你嫌麻烦,可以直接使用
GRANT ALL PRIVILEGES ON * . * TO 'wordpress'@'localhost';
来给予'wordpress'@'localhost'
所有数据库的权限。
白屏
如果你在浏览器中访问时出现了白屏(“white screen of death”),说明你的 PHP 版本不对——不能用最新的 PHP 8.1 。你可以在wp-config.php
中设置
error_reporting(E_ALL); ini_set('display_errors', 1);
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
来输出信息。
安装依赖
sudo apt-get update
Nginx
sudo apt-get install nginx
MySQL
sudo apt-get install mysql-client-core-8.0 mysql-server-core-8.0 mysql-server mysql-client --fix-missing
sudo service mysql start
PHP
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update
sudo apt-get install php7.4 php7.4-cli php7.4-fpm php7.4-mysql php7.4-json php7.4-opcache php7.4-mbstring php7.4-xml php7.4-gd php7.4-curl php7.4-cgi
我使用的是 PHP7.4,如果你安装了 PHP 8.0 的话,需要用sudo apt-get purge php8.*
或者sudo update-alternatives --config php
来更改PHP版本。(参考1)
DNS
如果你用的是腾讯云,在 DNSPod 里加条解析即可。
开始
访问WordPress.org的官网,在远程服务器上下载并解压最新版WordPress:
wget https://wordpress.org/latest.zip
unzip latest.zip
用MySQL建数据库
此部分对应官方指南的 Step 2: Create the Database and a User 以及 Creating Database for WordPress – Using the MySQL Client 。
sudo mysql -u adminusername -p
运行(数据库和用户的名字任意,这里都用了wordpress):
CREATE DATABASE wordpress;
CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON * . * TO 'wordpress'@'localhost';
FLUSH PRIVILEGES;
EXIT;
把password
替换掉,记住它,之后要填在wp-config.php
里。
改wp-config.php
该部分对应Step 3: Set up wp-config.php。(参考 wp-config.php | Common APIs Handbook | WordPress Developer Resources)
cd wordpress
cp wp-config-sample.php wp-config.php
nano wp-config.php
在
// ** Database settings - You can get this info from your web host ** //
下面把 DB_NAME、DB_USER、DB_PASSWORD、DB_HOST根据指南改掉。
如果你根据这个指南完成了上一步,那么改成这个即可(password
是你前一节设置的密码):
/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress' );
/** Database username */
define( 'DB_USER', 'wordpress' );
/** Database password */
define( 'DB_PASSWORD', 'password' );
/** Database hostname */
define( 'DB_HOST', 'localhost' );
然后把
* Authentication Unique Keys and Salts.
下面的AUTH_KEY等替换成用官方的 生成器 生成的secret key。
移动文件
直接
cd ..
sudo mv wordpress /var/www/html/wordpress
chown -R www-data:www-data /var/www/html
sudo find /var/www/html/wordpress -type d -exec chmod 755 {} \;
sudo find /var/www/html/wordpress -type f -exec chmod 644 {} \;
即可(参见 LinuxCapable的教程 )。
搞nginx
/etc/nginx/sites-available/default
:这个文件里应该已经有fastcgi_pass unix:/run/php/php7.4-fpm.sock;
了,不用动就可以了。/etc/nginx/nginx.conf
:不用改。
只需要修改/etc/nginx/sites-available/wordpress
即可,我是直接在 LinuxCapable的模板 上把php8.1-fpm改成了php7.4-fpm。可能也可以直接用 Nginx官网的WordPress recipe 。
我的/etc/nginx/sites-available/wordpress
如下:
server {
listen 80;
listen [::]:80;
server_name example.com;
root /var/www/html/wordpress;
index index.php index.html index.htm index.nginx-debian.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~* /wp-sitemap.*\.xml {
try_files $uri $uri/ /index.php$is_args$args;
}
client_max_body_size 100M;
location ~ \.php$ {
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
include snippets/fastcgi-php.conf;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 128k;
fastcgi_intercept_errors on;
}
gzip on;
gzip_comp_level 6;
gzip_min_length 1000;
gzip_proxied any;
gzip_disable "msie6";
gzip_types
application/atom+xml
application/geo+json
application/javascript
application/x-javascript
application/json
application/ld+json
application/manifest+json
application/rdf+xml
application/rss+xml
application/xhtml+xml
application/xml
font/eot
font/otf
font/ttf
image/svg+xml
text/css
text/javascript
text/plain
text/xml;
# assets, media
location ~* \.(?:css(\.map)?|js(\.map)?|jpe?g|png|gif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv)$ {
expires 90d;
access_log off;
}
# svg, fonts
location ~* \.(?:svgz?|ttf|ttc|otf|eot|woff2?)$ {
add_header Access-Control-Allow-Origin "*";
expires 90d;
access_log off;
}
location ~ /\.ht {
access_log off;
log_not_found off;
deny all;
}
}
之后,运行:(参见 LinuxCapable的教程 )
sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/
sudo nginx -t # 如果这一步不ok,则需要根据提示检查你的nginx配置文件
sudo systemctl restart nginx
即可。现在应该可以在example.com
(你的域名)上看到你的网站了