我有两台阿里云上的服务器是CentOS7.9,由于CentOS7已经停止支持,后续使用的话会有安全漏洞,所以需要尽快迁移,个人使用的话目前兼容性好的还是RockyLinux8,很多脚本改改就能用了。
查看当前系统发行版版本
cat /etc/os-release
盘点迁移清单
服务器 | 应用 | 部署方式 | docker镜像来源 |
v1 | wordpress | docker | dockerhub |
v1 | zdir | docker | dockerhub |
v1 | nps | docker | dockerhub |
v1 | nginx | docker | dockerhub |
v1 | 定时任务 | crontab | - |
v2 | 小程序后端 | docker | 私有仓库 |
v2 | epg后端 | docker | 私有仓库 |
v2 | nest后端 | docker | 私有仓库 |
v2 | php后端 | docker | 私有仓库 |
v2 | Docusaurus文档 | nginx静态目录 | - |
docker 映射目录备份
zip -r abc.zip abc
crontab定时任务备份
crontab -l >>cron.txt
docker镜像备份
docker save > nginx.tar nginx:latest
静态目录
zip -r webroot.zip webroot
docker和docker-compose离线安装包准备
由于docker.com从2023.5月开始无法访问,dockerhub国内镜像从2024.6开始无法访问,建议先下载好这两个离线安装包。
docker安装包
建议安装docker20及以上版本
软件包名
- containerd.io-1.6.32-3.1.el8.x86_64.rpm
- docker-buildx-plugin-0.14.0-1.el8.x86_64.rpm
- docker-ce-26.1.3-1.el8.x86_64.rpm
- docker-ce-cli-26.1.3-1.el8.x86_64.rpm
- docker-ce-rootless-extras-26.1.3-1.el8.x86_64.rpm
- docker-compose-plugin-2.6.0-3.el8.x86_64.rpm
- docker-scan-plugin-0.9.0-3.el8.x86_64.rpm
下载地址
- https://download.docker.com/linux/centos/8/x86_64/stable/Packages/containerd.io-1.6.32-3.1.el8.x86_64.rpm
- https://download.docker.com/linux/centos/8/x86_64/stable/Packages/docker-buildx-plugin-0.14.0-1.el8.x86_64.rpm
- https://download.docker.com/linux/centos/8/x86_64/stable/Packages/docker-scan-plugin-0.9.0-3.el8.x86_64.rpm
- https://download.docker.com/linux/centos/8/x86_64/stable/Packages/docker-compose-plugin-2.6.0-3.el8.x86_64.rpm
- https://download.docker.com/linux/centos/8/x86_64/stable/Packages/docker-ce-rootless-extras-26.1.3-1.el8.x86_64.rpm
- https://download.docker.com/linux/centos/8/x86_64/stable/Packages/docker-ce-cli-26.1.3-1.el8.x86_64.rpm
- https://download.docker.com/linux/centos/8/x86_64/stable/Packages/docker-ce-26.1.3-1.el8.x86_64.rpm
安装命令
- rpm -ivh containerd.io-1.6.32-3.1.el8.x86_64.rpm
- rpm -ivh docker-ce-26.1.3-1.el8.x86_64.rpm
- rpm -ivh docker-ce-cli-26.1.3-1.el8.x86_64.rpm
大部分情况只需要安装上面这三个其他rpm包按需安装。
docker-compose安装包
软件包名
docker-compose-linux-x86_64
下载地址
https://github.com/docker/compose/releases/download/v2.28.1/docker-compose-linux-x86_64
安装命令
- cp docker-compose-linux-x86_64 /usr/local/bin/docker-compose
- chmod +x /usr/local/bin/docker-compose
重装系统后先将离线安装包进行安装
然后将备份的数据恢复到对应目录
unzip data.zip
对于部分目录可能需要处理权限问题(没错,说的就是wordpress)
临时解决先用(docker 终端使用)
- chmod -R 755 /var/www/html
- chown -R www-data:www-data /var/www/html/
后续迁移还是tar.gz包吧,至少权限不会丢,zip经常丢权限,755这个可能不需要执行。
目前迁移后的wordpress总是挂掉,然后带着服务器一起挂掉,排查之后发现是官方wordpress使用了apache的问题。所以花了点时间打了个nginx版本的镜像。这个镜像不含推荐组件里的webpack,其他组件都包含
Dockerfile
- # 更改基础镜像为PHP 8.x FPM Alpine
- FROM php:8-fpm-alpine
-
- # 更新并安装PHP依赖,注意检查扩展与PHP 8.x的兼容性
- RUN apk update && \
- apk add zlib-dev libpng-dev jpeg-dev expat-dev libzip-dev icu-libs icu-dev && \
- apk add m4 autoconf make gcc g++ linux-headers && \
- docker-php-ext-install pdo_mysql opcache mysqli && \
- docker-php-ext-install gd && \
- docker-php-ext-install exif zip intl && \
- apk del m4 autoconf make gcc g++ linux-headers
-
- # 安装nginx依赖
- RUN apk add nginx && \
- if [ ! -d "/run/nginx" ]; then mkdir /run/nginx; fi && \
- touch /run/nginx/nginx.pid
-
- # nginx配置文件和初始静态文件
- ADD default.conf /etc/nginx/http.d/default.conf
- ADD index.html /var/www/html/index.html
-
- # 安装wget unzip tar 后续下载wordpress使用
- RUN apk add --no-cache wget unzip tar
- # 下载并解压 WordPress
- RUN wget https://wordpress.org/latest.tar.gz -O /tmp/wordpress.tar.gz && \
- tar zxvf /tmp/wordpress.tar.gz -C /tmp/ && \
- mv /tmp/wordpress/* /var/www/html && \
- rm /tmp/wordpress.tar.gz
-
- # 拷贝源代码到容器内
- COPY src /var/www/html/
-
- # 更改/var/www/html目录的所有权
- RUN apk add coreutils && \
- chown -R www-data:www-data /var/www/html
-
- # 添加自定义脚本
- ADD run.sh /
- RUN chmod 755 /run.sh
-
- # 暴露端口
- EXPOSE 80
- EXPOSE 9000
-
- # 入口点设置为自定义脚本
- ENTRYPOINT ["/run.sh"]
default.conf
- server {
- listen 80;
- server_name localhost;
-
- root /var/www/html;
- index index.php index.html index.htm index.nginx-debian.html;
-
- error_log /var/log/nginx/error.log;
- access_log /var/log/nginx/access.log;
-
- location / {
- try_files $uri $uri/ /index.php?$args;
- }
-
- location ~ \.php$ {
- fastcgi_pass 127.0.0.1:9000;
- fastcgi_index index.php;
- fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
- include fastcgi_params;
- }
-
- # 新增规则来保护以点号开头的隐藏文件
- location ~ /\. {
- deny all;
- }
-
- location ~ /\.ht {
- deny all;
- }
-
- location = /favicon.ico {
- log_not_found off;
- access_log off;
- }
-
- location = /robots.txt {
- allow all;
- log_not_found off;
- access_log off;
- }
-
- location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
- expires max;
- log_not_found off;
- access_log off;
- }
- }
index.html
- <!DOCTYPE html>
- <html>
- <head>
- <title>Welcome to nginx!</title>
- <style>
- body {
- width: 35em;
- margin: 0 auto;
- font-family: Tahoma, Verdana, Arial, sans-serif;
- }
- </style>
- </head>
- <body>
- <h1>Welcome to nginx!</h1>
- <p>If you see this page, the nginx web server is successfully installed and
- working. Further configuration is required.</p>
-
- <p>For online documentation and support please refer to
- <a href="http://nginx.org/">nginx.org</a>.<br/>
- Commercial support is available at
- <a href="http://nginx.com/">nginx.com</a>.</p>
-
- <p><em>Thank you for using nginx.</em></p>
- </body>
- </html>
run.sh
- #!/bin/sh
-
- # 后台启动
- php-fpm -D
- # 关闭后台启动,hold住进程
- nginx -g 'daemon off;'
src/info.php
- phpinfo();
- ?>