服务器快到期了,所以在阿里云又从新买了一台。这两天一直在忙新服务器环境的搭建,和数据迁移的处理。
购买的服务器
部署服务器环境
- 在阿里云控制台初始化,设置好 root 密码后。用终端连接服务器。先进行安全更新,并重启。连带 yum 也更新了。
dnf upgrade-minimal --security
dnf update
// 记得这样重启,要不登录系统后,还是会提醒你进行安全更新
reboot
- 在服务端设置连接心跳。防止终端连接服务器后,一段时间不操作,会断开连接。(也可以在客户端电脑上设置)
vim /etc/ssh/sshd_config
// 末尾追加(数字自己定义合适的)
ClientAliveInterval 60
ClientAliveCountMax 5
// 重启 ssh
service sshd restart
-
如果登录进去,显示的主机名是一堆字母数字组成的杂乱的名字。你可以通过阿里云控制台进行设置主机名。也可以在服务器,通过命令行来完成。这么做,一方面是好看,二方面如果服务器多,好知道是哪台服务器。
-
禁用 root 用户远程登录服务器。使用密匙+密码的方式进行登录。这样可以增加服务器的安全。
-
做好这些,记得进行做镜像。方便后边出错了,不好解决的时候,进行回滚处理。
-
安装开发环境。
安装开发环境
- 安装 git(yum 安装即可。如果版本不够,可以源码编译安装。比如新的命令 git init -b main。 这个命令是新版本才支持的)。
- 安装 composer。 直接 wget 下载,然后移动到 /usr/bin/ 下,并设置权限。或建立软链到这里,设置权限也可以。
- 安装 ftp 工具。 需要设置。用来方便上传文件到服务器或从服务器下载文件。为了安全性,我仅设置 /var/ftp/xxx 目录,只有该目录的权限。
- 源码编译安装最新版本的 nginx。安装前需要装一堆的依赖,有的 yum 安装,有的也需要源码安装。编译报错需要啥就装啥。
- 源码编译最新版本的 php。当前是 php8.2.3。安装前需要装一堆的依赖,有的 yum 安装,有的也需要源码安装。编译报错需要啥就装啥。
- 源码编译安装最新版本的 mysql。当前是 8.0.32。
- 源码安装 redis。 当前最新版本是 redis7 了。
- 安装 node.js,安装 pnpm。
暂时先装了这么多。为了性能以及可靠性,数据库也可以单独阿里云购买。只是这个要单独花钱啊。
wordpress 博客系统迁移
wordpress 用来做博客和cms系统都还不错。这些年,虽然也想着自己用 laravel 写一个博客系统起来。后来还是搁浅了。 wordpress 可以很方便使用主题和插件。一个好的主题的好,用过就知道。
不得不换服务器了。在做迁移之前在想,我现在的服务器环境安装的开发环境都是最新的,曾经的 wordpress 还能迁移过来吗。之前一种思路是只要把数据弄过来就行。其实,还真行。后来尝试了下,在旧的服务器上,将 wordpress 直接更新到最新版本,也就是当前的 6.1 版本。再做迁移也是可以的。
操作。
方式一(对于不是太旧的 wordpress 系统)
- 在旧的服务器上,通过控制台将 wordpress 版本直接升级到最新版本。
- 将升级后的文件(就是整个站点文件)压缩。通过各种方式(我这里使用 ftp)将文件移到新的服务器,解压。
- 将旧的服务器上的数据库数据复制到新的服务器的数据库里。这里使用的 navicat。
- 在新的服务器上修改配置 nginx。
- 在域名运营商后台那修改域名解析。解析到新的服务器地址。
- 如果数据库相关配置有更改,请在项目跟目录的 wp-config.php 中进行修改配置。
- 然后访问域名,进行测试。如果有错误,可以修改 wp-config.php 的 debug 模式为 true。进行跟踪修改。一般修修错误就行,警告啥的可以忽略。
方式二(对于太旧的 wordpress 系统)
我有两套博客。最久的那套是 2013 年左右安装的。太旧没更新了。以为更新不了,没想到更新几次竟然能更新成功。于是按照上边的方法进行操作,结果有好几个地方修改不好。于是就有这个方式。
https://wordpress.org/download/
- 在新服务器对应的位置,去wordpress 官网下载最新的 wordpress。当前是 6.1, 对 php 版本要求最低是 7.4。解压。
- 在新的服务器上修改配置 nginx。
- 在域名运营商后台那修改域名解析。解析到新的服务器地址。
- 将旧的服务器上的数据库数据复制到新的服务器的数据库里。这里使用的 navicat。
- 项目跟目录准备 wp-config.php 文件。 就是从 wp-config-sample.php 复制过去就可以。
- 这里在浏览器中打开 'wp-admin/install.php',填入数据库信息,下一步就好了。
后来想想。wordpress 的更新应该不是所有的代码都更新。要不也不会出现之前的错误还需要修复。既然方式二能实现版本更新,那方式一似乎不是很有用。
不过很重要一点。要备份好文件和数据库。这样方便多次试错。还有如果域名有更换了,媒体文件或某些链接会失效。这个方面的确做不好。不过好在是很容易升级更新。
debug、多语言、主题、ftp相关
如果遇到错误,可以在 wp-config.php 中打开 debug 模式,进行查看跟踪。
如果后台只有英文,可以在 wp-config.php 中增加 define('WPLANG', 'zh_CN') 配置,然后在后台多语言那设置下就好。
对于主题,可以去网上找,觉得好看的好用的都可以,不过代码都是别人的,也要注意安全性相关的东西。还有代码是别人的,也要注意别人的使用说明。下载好主题后,将主题文件包放在 wp-content/themes 下,然后在后台中设置激活,再进行细致化设置就好。
还有,如果对主题部分不满意,你也可以修改源码。如果仅仅是样式方面的问题,可以通过增加 css,来覆盖样式来解决。比如隐藏一些不需要 div,修改某些div 的布局等等。
对于插件更新,默认是要你配置 ftp。这个不是太方便也不太安全。单独给它配个有点麻烦,把权限大的给它又觉得不放心。干脆就不使用 ftp 的方式来安装更新就好了。在配置文件 wp-config.php 中增加 define('FS_METHOD','direct');
配置。然后将项目的用户和组都是设置成 php 对应的用户组。比如我的php 和 nginx 都公用 nginx:nginx 用户组。 使用 chown nginx:nginx xxx 就好了。
laravel 项目迁移
博客是一方面,我的主要服务端逻辑,都是通过 laravel 开发的。 laravel 的依赖包比较多,对 php 的版本都有很严格的控制。我之前的 php 版本是 7.4 不是太古老,但也是不好使。现在都是 php8.2.3。是大版本的更新。不过好在,一般的功能语法都会有向下兼容。开始吧。
# 将代码拉到新的服务器对应位置
git clone xxx
composer install
这个时候,如果遇到 Your lock file does not contain a compatible set of packages. Please run composer update.
可以加上 --ignore-platform-reqs
参数来忽略版本的匹配。但只是尝试,如果即使安装成功了,并不一定能使用成功。
composer install --ignore-platform-reqs
这次是成功安装了。
但发现报个错误。
Carbon\Carbon::setLastErrors(): Argument #1 ($lastErrors) must be of type array
果然某些依赖还是有改变。这个单独更新 carbon 包就可以。
composer update nesbot/carbon
composer install --ignore-platform-reqs
到此,框架算是安装好了。
cp .env .example .env
php artisan key:generate
php artisan migrate --seed
laravel 常规安装流程操作是上边边这样的。而我们这里都是完整的项目,里边配置很多,通过上边边这种方式要修改的太多了。我是直接创建一个 .env 文件,然后将旧的文件内容复制过来就好。
vim .env
# 复制配置过来就行
先进行不需要历史数据的迁移
.env 中数据库的配置正确后
php artisan migrate --seed
对相关报错进行处理。
composer update facade/ignition --ignore-platform-reqs
文件权限操作
chmod 777 storage -R
chmod bootstrap/cach -R
安装前端脚手架
yarn
yarn dev
发现有版本等相关信息报错。一种方式是直接删除 yarn.lock 文件,删除 node_modules 文件夹。再进行安装。
安装后台环境。
cd resources/admin
yarn
报 error @achrinza/node-ipc@9.2.2: The engine "node" is incompatible with this module. Expected version "8 || 10 || 12 || 14 || 16 || 17". Got "18.14.2"
我们直接设置
忽略。再继续。yarn config set ignore-engines true
yarn
yarn run build:prod
发现报错 Building for production...Error: error:0308010C:digital envelope routines::unsupported。出现这个错误是因为 node.js V17版本中最近发布的OpenSSL3.0, 而OpenSSL3.0对允许算法和密钥大小增加了严格的限制,可能会对生态系统造成一些影响。
再继续
export NODE_OPTIONS=--openssl-legacy-provider
yarn run build:prod
然后又是 *These dependencies were not found: core-js/modules/es.array.push.js** 错误。
yarn add core-js --dev
yarn run build:prod
到此,总算是好了。凡是遇到问题解决问题就好。
配置 nginx,修改域名映射。检查测试。
其实,还有一种方式
就是将整个项目打包,复制过去,解压。然后配置下。