2023-10-22
首先要安装mysql和php,这是wordpress必备项。
由于wordpress默认的数据库配置是mysql,因此需要在新主机提前安装。
首先需要确保 Ubuntu 的包列表是最新的:
sudo apt update
安装 MySQL 服务器:
sudo apt install mysql-server
配置 MySQL:
这个工具将会提示你设置 root 用户的密码、删除匿名用户、禁止 root 远程登录和删除测试数据库。对于大多数情况,推荐选择默认配置(通常是输入 “y”)。
我在这里设置用户是root,密码是”,你可以根据实际情况设置。
sudo mysql_secure_installation
启动和启用 MySQL 服务:
sudo systemctl status mysql
确保 MySQL 服务在开机时自动启动:
sudo systemctl enable mysql
登录 MySQL:
sudo mysql -u root -p
输入你在 mysql_secure_installation 中设置的密码。
可选:这里可以选择在安全组里面打开3306,这是mysql默认使用的端口,暂没发现如果没打开这个端口会有什么问题。
在mysql界面,直接创建:
CREATE DATABASE wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
这里的[database_name]通常是wordpress,注意要带上分号;,不然命令会不成功。
CHARACTER和COLLATE其实是输出的是默认项,即utf8,上面mb4不影响。
登录mysql后,连接数据库:
USE wordpress;
显示表格:
SHOW TABLES;
这一步就会显示出所有的表名。
退出MYSQL:
EXIT #或者quit
如果在mysql输入错误,点击ctrl+c可以返回上一步。
更新包列表:
sudo apt update
安装php:
使用以下命令安装PHP及其常用模块:
sudo apt install php php-cli php-fpm php-json php-common php-mysql php-zip php-gd php-mbstring php-curl php-xml php-pear
验证安装:
php -v
如果你把备份的wordpress拷贝过去,一般不需要操作这一步。但是如果你发现新的文件有各种各样的问题,或者文件损坏,这时候最好就安装新的wordpress,再把wp-content和wp-admin文件夹的内容拷贝过去。
下载WordPress:
cd /tmp
wget https://wordpress.org/latest.tar.gz
tar xzvf latest.tar.gz
将WordPress文件复制到web服务器的文档根目录下:
sudo cp -a /tmp/wordpress/. /var/www/html
配置文件权限:
为了确保WordPress能够正确地工作,您需要更改文件和目录的所有权:
sudo chown -R www-data:www-data /var/www/html
注:wordpress默认用户是www-data,所以在给它设置文件夹的权限。这个用户名也会体现在Nginx的配置中。
针对原主机上,在terminal上执行下面的操作以备份数据库到本地:
scp [email protected]:/home/admin/backup.sql /Users/lxz/Desktop
执行下面操作备份wordpress文件夹:
scp [email protected]:/data/wwwroot/wordpress/wordpress_backup.tar.gz /Users/lxz/Downloads
这个步骤会比较久,因为文件比较大。
数据库备份:
scp /Users/lxz/Downloads/backup.sql [email protected]:/root
wordpress备份:
scp /Users/lxz/Downloads/wordpress_backup.tar.gz [email protected]:/root
同样,文件大了,这个过程会比较久。
当然,有人肯定注意到了,其实不需要经过本地这个“二道贩子”,直接云主机间传输的。我这次没有尝试这个方式,下次会试一下。
好了,这样一来,新主机就有源主机的wordpress配置信息和数据库了。下面的操作都是在新主机完成的了。
上面的流程,我们把备份文件放在了root文件夹,这不是最佳实际,最好是放在/var/www/html文件夹内。移动文件夹:
sudo mv /root/* /var/www/html/
如果你需要的是拷贝:
sudo cp -r /root/* /var/www/html
将root下面的文件全部复制到/var/www/html中去。
设置适当的权限:
sudo chown -R www-data:www-data /var/www/html/
sudo find /var/www/html/ -type d -exec chmod 755 {} \;
sudo find /var/www/html/ -type f -exec chmod 644 {} \;
由于我使用的nginx,所以下面都是Nginx的配置,aphache请自行GPT。
我的nginx.conf配置如下:
关键点有三个:
设定server_name,root文件夹,和要用作主页的index
设定location里的index.php
设定php的路径
user www-data;
#user root;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
server {
#listen 443 ssl;
listen 80;
#server_name 183441.xyz;
server_name 183441.xyz;
root /var/www/html;
index index.php;
#index index.html index.php;
location / {
try_files $uri $uri/ /index.php?$args;
# proxy_pass http://localhost:3000;
# proxy_pass https://commonlearner.com;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header X-Forwarded-Proto $scheme;
}
#处理php
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # 请注意这里使用了 8.1 的套接字
# fastcgi_index index.php;
}
location /phpMyAdmin {
root /var/www/html;
index index.php index.html index.htm;
}
##
# Logging Settings
##
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
##
# Gzip Settings
##
gzip on;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
注:phpmyadmin可以根据需要设置,非必要
确认Nginx是否正在运行:
ps aux | grep nginx
如果不是active的状态,启动Nginx:
sudo systemctl start nginx
重新加载nginx配置:
sudo nginx -s reload
如果问题还存在,检查nginx配置中的错误:
sudo nginx -t
通常是别的服务占用了80端口,可能是apache,找出正在使用端口80的进程:
sudo netstat -tuln | grep :80
杀死占用端口80的进程:
sudo kill -9 [PID]
再次查看占用的程序:
sudo lsof -i :80
再次启动Nginx:
sudo systemctl start nginx
这一步非常关键!!!!特别是Ubuntu系统要看。我在这一步卡了两天。
因为连接到主机IP地址后,总是显示“数据库连接错误”,各种排查都找不到原因。最后还是无意中GPT提到的这个方法——改变数据库默认登录方式,从私钥验证改成密码验证,就成功了。
首先登录mysql,这里username是root,-p是输入密码的意思。我的密码是空,所以接着按回车就可以;
mysql -u root -p
接着将mysql默认的身份验证方式改成密码验证,我没设置密码,因此是空字符”;
ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY '';
因为发现首页会自动跳转到以前的旧网址,一排查原因发现是主题内设定了自定义链接。
在后台进入主题设置,改变主页地址,从www.linxiaozhong.club改到183441.xyz就可以了。
通常是wp_options的问题,这个可以在mysql里面改。
主机登录mysql后,
检查当前siteurl和home的值:
SELECT option_name, option_value FROM wp_options WHERE option_name='siteurl' OR option_name='home';
更新siteurl和home值:
UPDATE wp_options SET option_value='http://your_domain_or_IP' WHERE option_name='siteurl';
UPDATE wp_options SET option_value='http://your_domain_or_IP' WHERE option_name='home';
退出MySQL:
exit;
通常这就搞定了。
可以通过日志了解。
将wp-config.php文件里的debug设置为true,可以给你更多的信息。
define('WP_DEBUG', true);