我有兩臺阿里云上的服務器是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 andworking. 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
<?phpphpinfo();
?>