教程 | 轻松上手网站搭建与迁移

前情提要

临近毕业季,又有很多人的网站需要从middcreate平台上迁移出来了。至于这个平台什么时候不让毕业生继续使用,应该是和邮箱的保质期绑定在一起的。于是我就需要尽快写一篇教程出来,要不等我写完了大家网站已经没了,那还迁移个锤子呢。

这篇文章叫做快速上手,我会先从简单的方式来展示如何最快地达到目标,至于方式的细节不太重要。如果你真的很想研究明白每一个细节,我会过段时间重新写一套完整的从租vps到网站搭建再到维护/迁移等等的内容。之前是有的,但是那篇文章已经有点年久失修,我不推荐完全参考那里。

Middcreate/CPanel 快速上手

这一部分是为了让在基于CPanel搭建的,middcreate上已有内容的大家快速进行本地备份与部署、迁移到新平台所作。如果你没有middreate,但你使用CPanel作为网站的管理平台,或许也可以进行部分参考,因为核心内容都是一样的:下载网站,下载数据库,上传网站,连接数据库,结束。

开始:

网站文件下载

  1. 前往Middcreate.net,并点击右上角dashboard,在验证登录后进入Cpanel控制面板。
  2. 在“域名”(domains)下找到”域名”(domains)图标,点击进入域名管理页面。此处你可以看到你所有创建过的域名,它们可能有内容,也可能没有内容。不论如何,先全部打开来看一遍,在心里(或者纸上)记住你要选的那个,后面要考。
  3. 点开相应需要迁移内容的“文件路径”(document root),页面会切换至CPanel 文件管理页面(CPanel File Manager),你会在左上角看到一个“CP File Manager”的网站logo。
  4. 左键+shift点击列表第一个项目(可能是文件,可能是文件夹),然后左键+shift点击列表最后一个项目,这时你会全选所有根目录下的列表内容。
  5. 右键,并选择“压缩”(compress)。在弹出的窗口中,选择“Tar 归档”(tar archive),然后点击“压缩这些文件”(compress files)。
  6. 你的列表会出现一个新的,以.tar为结尾的文件,这个文件的默认命名似乎是以你选择的第一个项目为目标命名的。这不是说它仅仅打包了第一个项目。此时,假设你的第一个项目为cgi-bin,那么你的压缩归档名字就是cgi-bin.tar。我们最好给它改个名字,但是不要改掉.tar的文件后缀。我选择将其改名为site.tar
  7. 为什么使用.tar?因为它可以保证你的权限架构和打包时一样,这样就不用导入后反复设置权限组了。
  8. 打包并更改文件名完成后,将你的.tar文件使用“下载”(download)按钮下载到本地。
  9. 下载完成后,在你喜欢的地方新建一个目录,命名为你喜欢的名字(我选择命名为middcreate)。将你下载好的tar包放进去。
  10. 让我们做一个简单的验证:将该.tar包解压到当前目录下,会出现一个site目录,与你的site.tar包并列。(为什么你的不叫site?因为我给tar包改名字叫site,你可能没有)。打开这个解压好的目录,就可以看到里面的内容和你在CPanel里看到的列表内容是一样的。

到这里,你的网站数据就下载完成了。如果你的网站没有数据库,只是通过不同的前端/后端代码组成的内容,你可以不需要下一步。但wordpress不仅仅需要这些框架上的内容,它还需要数据库来真正储存你的页面,用户信息等等的核心内容。所以接下来我们来下载数据库。

网站数据库下载

首先,让我们回到middcreate控制面版(dashboard)页面。我们可以在“数据库”(databases)中找到不同访问数据库的方法,比如有phpmyadmin, mysql, 等等。

  1. 在你刚刚解压过的网站内容里,找到wp-config.php。该文件是wordpress的设定文件。
  2. 在20行开始左右的位置,你可以看到数据库设定。这里,我们需要记住:
    1. DB_USER的值;
    2. DB_PASSWORD的值;
    3. DB_NAME的值;
  3. 在middcreate控制板中,找到数据库(database)部分,选择phpMyAdmin并点击进入。
  4. 此时你会面对一个很丑陋的UI,左上角显示phpMyAdmin。这就是你的数据库控制面板。
  5. 你可以在左侧看到不同的数据库标题,还记得刚刚你记下来的DB_NAME吗?找到它,点一下(鼠标放上去会显示下划线)。
  6. 此时,在这个页面的顶部,会显示 Server: localhost:3306 » Database: [你的数据库名称],这说明你选中了它。
  7. 接下来我们导出这个数据库。点击页面顶部的“导出”(Export)标签。然后,我们看一眼确认现在在默认设置上,也就是快速导出被选中(Quick),导出格式是SQL。
  8. 此时,我们点击“导出”(Export),你的浏览器就会自动下载这份sql文件。下载完成后,我们还是将其放置在和我们网站文件刚刚解压的位置。

恭喜你,当你拥有了一个.tar文件和.sql文件的时候,你的整个wordpress站点已经被导出完毕了。接下来,你可以选择把它们永远地放在你的硬盘上不再碰它,也可以选择在本地或者自己租赁的云服务器上部署,或者你也可以找一家网站托管商,把它迁移进去。

本地部署

接下来,我会演示如何在本地部署一个属于你自己的网站。相比于把它扔在硬盘上老死不相往来,你至少还可以没事看看它(只是别人看不到,除非把你电脑偷走)。另外相比于云端部署或者迁移到其它平台,你可以暂时剩下租赁服务器和/或域名的钱。我们先一步一个脚印,把你的网站成功地在本地跑起来再说。要不然搞不清楚这一步的话,后续也没什么搞头了。你很有可能白租一个云服务器/域名。

准备工作:

  1. 你的网站文件与数据库;
  2. 一个装有MacOS/Linux发行版操作系统的电脑(也可以使用WSL),我推荐使用Ubuntu;

让我们开整!

首先,我们要找到一台能用的电脑。这台电脑至少有1GB运行内存,以及10GB的磁盘空间,CPU的发布年份不可以老于2005年。然后,我们就可以决定给它安装ubuntu,还是给它(或者你现成的电脑)上安装Windows+WSL的组合了。

在一台电脑上安装 Ubuntu (或其它Linux发行版)

  1. 使用rufus向你的移动存储介质中(u盘,硬盘…)烧录一个系统映像;
  2. 通过移动存储介质启动并安装系统。

在Windows电脑上安装WSL

  1. 确保你的Windows系统是Windows10 2004或更新版本;
  2. 打开Power Shell,输入 wsl --install。这会默认给你安装WSL2。
  3. 打开Windows应用商店(你以为用命令行装系统?没想到吧!)寻找Ubuntu发行版,并且找一个顺眼的安装(我选择最新的LTS版本)
  4. 安装完成后,打开命令提示符(cmd)或者Power Shell,直接输入“wsl”即可启动你唯一的Linux发行版(你要是有多个我觉得你不用看这篇东西)。启动完成的命令行大概长这个样子:

    Welcome to Ubuntu 24.04.1 LTS (GNU/Linux 5.15.167.4-microsoft-standard-WSL2 x86_64)
    ….
    This message is shown once a day. To disable it please …

  5. 不要忘记给系统安装最基础的更新 sudo apt update && sudo apt full-upgrade -y

小标题

安装LNMP

什么是LNMP?LNMP是由Nginx/MySQL/PHP构成的一套框架、这是一个让你的Wordpress网站能够运行起来的基础设施。类似的还有LAMP(Apache/MySQL/PHP)。接下来,让我们先安装LNMP。

  1. 使用sudo apt update && sudo apt upgrade -y进行更新;
  2. 安装必要的软件,例如wget sudo apt install wget -y(如果你缺了什么都可以通过apt install来解决);
  3. 安装Nginx sudo apt install nginx -y
  4. 设置Nginx自启动 sudo systemctl enable nginx && sudo systemctl start nginx
  5. 安装MySQL sudo apt install mysql-server -y
  6. 确认安装无误 sudo mysql_sequre_installation
  7. 安装PHP-FPM和插件 sudo apt install php-fpm php-mysql php-xml php-gd php-curl php-mbstring php-zip php-xmlrpc -y,并确认安装版本无误(当前Wordpress推荐使用PHP8.3,你也可以选择其它版本)。

到这里,你的基础环境已经搭建完毕,接下来我们要进行一些软件上的设置,例如nginx,mysql等等。

配置数据库(MySQL)

使用 sudo mysql -u root -p [你的密码] 命令以管理员身份启动MySQL后,输入以下命令来创建一个新的数据库。还记得你之前使用的数据库名称,用户和密码吗?看一眼下面的代码块,然后用:

  1. 你的数据库名称替换database_db
  2. 你的数据库用户名称替换 database_user
  3. 你的数据库用户密码替换 database_pw

为什么要先drop?因为我想着如果你不小心创建了一个同名数据库,但是不知道怎么处理掉它,我帮你写好了先删掉那个同名数据库/用户的指令。你可以完全把这几行先贴到一个txt里,然后全部编辑好了之后,全部粘贴到你的命令行当中,然后回车执行。理论上讲,不应该有任何报错。结束后,在MySQL命令行里输入EXIT;回到上一层。

DROP DATABASE IF EXISTS dabase_db;
CREATE DATABASE dabase_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
DROP USER IF EXISTS 'database_user'@'localhost';
CREATE USER 'database_user'@'localhost' IDENTIFIED BY 'database_pw';
GRANT ALL PRIVILEGES ON database_db.* TO 'database_user'@'localhost';
FLUSH PRIVILEGES;

祝贺你,在解决了数据库创建之后,你离网站运行又近了一步!

配置网页服务器(Nginx)

接下来,我们要创建网站的根目录,赋予其相应的权限,以及给网页服务器进行配置。

  1. 创建一个网站的根目录,我们可以使用sudo mkdir -p /var/www/your-site来在 /var/www 路径下创建一个名为“your-site”的目录(文件夹)。这里建议将你的文件夹改为你喜欢的名字,然后记住它。我在后面都会使用“your-site”,所以当你执行这行命令的时候,记得更新。
  2. 接下来,我们赋予这个目录权限:sudo chown -R www-data:www-data /var/www/your-site
  3. 然后,我们要给网页服务器进行配置信息的编写。首先使用nano打开/新建一个位于 “/etc/nginx/sites-available/your-site”路径下(记得替换你的相应文件夹名称)的配置文件。使用 sudo nano /etc/nginx/sites-available/your-site,然后你会进入一个编辑器页面。接下来,复制、编辑、然后粘贴以下内容:
  server {
      listen 80;
      server_name your-site.local;
      root /var/www/your-site;
      index index.php index.html index.htm;
      location / {
          try_files $uri $uri/ /index.php?$args;
      }
      location ~ \.php$ {
          include snippets/fastcgi-php.conf;
          fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
      }
      location ~ /\.ht {
          deny all;
      }
      client_max_body_size 100M;
      fastcgi_buffers 16 512k;
      fastcgi_buffer_size 512k;
      fastcgi_busy_buffers_size 4096k;
  }

编辑完后,使用Ctrl+O,回车保存,Ctrl+X退出。

然后,我们通过新建链接将这份配置文件启用。刚刚我们在sites-avaliable里创建了这个文件,接下来我们让它在sites-enabled里出现:sudo ln -s /etc/nginx/sites-available/your-site /etc/nginx/sites-enabled/。这之后,只需要重新启动并加载nginx即可生效。sudo nginx -t && sudo systemctl reload nginx

只要这里没有报错,那么恭喜你,Ngnix已经配置完毕!

配置本机主机解析(hosts文件)

如果你没有使用另一台机器进行局域网部署,你可以直接在网页浏览器里输入localhost:80进行查看了。但假设你使用了另一台机器进行了局域网部署,请做以下几个简单的步骤。

  1. 打开并编辑你的/etc/hosts (windows上是\etc\hosts)文件 (至于这玩意在哪 百度一下你就知道)
  2. 新建一行,内容是127.0.0.1 your-site.local。这里的域名和你刚刚所新建的nginx配置文件的第四行(server_name)的值一样,而前面的ip地址,如果你使用了局域网部署,则和你部署了LNMP的机器ip地址一样。你可以在ssh或那台电脑上使用ifconfig/ipconfig来查询那台电脑的本机ip。

导入网站文件和数据库文件

使用直接将你刚刚做过备份的.tar包解压至 /var/www/your-site,然后将数据库的.sql文件也进行导入。使用mysql -u root -p dbname < db.sql以管理员身份进行数据库同步。这行执行后,需要输入数据库密码(不是本机登陆密码。另外注意替换-p后面的dbname为你的数据库名称,小于符号“<“后面的db.sql替换为你刚刚备份好的.sql文件名称)。

此时,我们应该不需要更新wp-config.php的文件内容(指数据库用户名,密码之类,因为我们用的是同样的内容)。我们只需要启动sql,在里面更新我们的网站地址即可。抄作业前,不要忘记根据你自己的情况更改。(例如database_db,以及你的网站域名)

27.0

  USE database_db;
  UPDATE wp_options SET option_value = 'http://your-site.local' WHERE option_name = 'siteurl';
  UPDATE wp_options SET option_value = 'http://your-site.local' WHERE option_name = 'home';

最终检查

理论上讲,现在你已经可以直接访问你的网站了。为了检查权限问题,我们可以再次使用 sudo chown -R www-data:www-data /var/www/your-site 命令来确保权限正确。

如果你发现原来的素材消失了,可能是因为数据库没有完全更新素材链接,例如图片,音频视频,字体等等。

在你能正确访问并登录你的WordPress管理员页后,前往“插件”>“安装新插件”搜索Better Search Replace”。这个插件可以帮你解决一些数据库的遗留问题。安装并激活插件后,前往“工具”>“Better Search Replace”插件页面,将“查找”部分填入你的老域名(例如our-old-domain.com)然后“替换”部分填入你的新域名(例如your-site.local)。在此之后,我们可以先勾选Dry Run来检查网站是否出现问题(或者解决了你的问题)。如果解决了问题,取消勾选Dry Run再运行一次以使变更生效。

到这里,你的网站已经被成功迁移到本地部署,现在所有数据都由你自己保管了!

云端部署

云端部署和本地部署有类似之处。当然,这取决于你选用的平台。或许你自己租了vps,寻找了某家托管平台,还是使用了什么别的方式。如果你使用了某家托管平台,他们会有相应的导入机制,你需要做的就是询问客服或者查阅该平台/服务供应商的文档。如果你自己租赁vps,那么你只需要做跟上面本地部署类似的事情,只是你现在拥有了公网IP,因此你不需要在本地客户端上更改hosts文件即可访问。

不论如何,你总不能一直访问一个IP地址,你需要一个域名。因此,我们先从如何挑选和购买域名入手。

选择和租赁属于你自己的域名

首先我们要知道的是,这个世界分为“中国”和“外国”(包括地区)。在“中国”,域名需要经过ICP备案,你才能使用域名访问一个网站。而在“外国”,你不需要。这里我没有收任何人的钱,境外域名注册可以使用NameSilo或者其它主要平台,境内则可以选择阿里云旗下的万网,以及各大主机供应商提供的域名注册服务,选择很多。

然后,就是选择顶级域名。你可以选择一个大家都喜欢的.com,也可以选择一个能整活的.icu (例如 996.icu)每个顶级域名(TLD)价格不一样,长短也会影响尤其是.com之类的抢注情况。因此,你可以多花一些时间,想一个你喜欢的,大家好记的域名。

接下来就是付款交钱然后拿到域名。你的域名需要每年续费来供着,另外域名也有域名服务器。假设你使用了一些服务供应商或者CDN服务,你可能需要更改域名服务器到该公司旗下,这样才能更好地使用他们的服务(例如cloudflare等)。

再说回大陆境内备案,我备案一分钱没掏,只花了15天(比我预想的90天要短),作为参考。

连接域名

这里的方式多种多样,我只举一个使用自建+cloudflare的方式达到目标的例子。
  1. 拿到你的vps ip地址;
  2. 更改nginx相应的配置文件,编辑访问地址和你接下来要使用的域名;
  3. 将你的域名从原域名交易网站转到服务供应商的旗下,这里我选择cloudflare做我的dns;
  4. 添加@(root)和 www的A解析,将域名指向你vps的ip地址;
  5. 回到vps上,打开443的防火墙;
  6. 使用Let's Encrypt增加一个SSL证书
大功告成!现在你已经有一个可以让所有人(如果在大陆或者你ip被GFW墙了的话不一定)访问的网站了!
滚动至顶部