平台迁移
如果涉及到平台的迁移,比如更换服务器,可以参考下面的步骤进行操作。
数据备份
平台需要备份的数据包括两部分:数据库,静态文件。
可以直接参考备份脚本,在平台上面设置成定时任务进行自动备份。
首先是静态文件备份脚本:
#!/bin/bash
# crontab -e
# 0 05 * * * sh /home/zero/scripts/backup_media.sh
input_dir=/opt/cloud/izone-docker/web
backup_dir=/home/zero/backup
maxnum=15
backup_name=media_$(date +'%Y%m%d_%H%M%S').zip
# 备份 media 目录到指定目录
cd $input_dir
zip -r $backup_dir/$backup_name ./media
function check_files()
{
cd $backup_dir
local file_lis=$(ls | grep media.*zip)
for file in ${file_lis[@]}
do
num=$(ls | grep media.*zip | wc -l)
if [[ $num -lt $maxnum ]]; then
break
else
rm -f $file && echo "remove ${file}"
fi
done
echo "$(ls)"
}
check_files
然后是数据库备份脚本:
#!/bin/bash
# crontab -e
# 0 05 * * * sh /home/zero/scripts/backup_mysql.sh
backup_dir=/home/zero/backup
backup_name=izone_$(date +'%Y%m%d_%H%M%S').sql
maxnum=15
db_name=izone_db
# 执行 db 容器的备份命令
docker exec $db_name sh -c 'exec mysqldump -uroot -p$MYSQL_ROOT_PASSWORD $MYSQL_DATABASE' > ${backup_dir}/${backup_name}
[[ $? -eq 0 ]] && echo "backup $backup_name successfully." || echo "backup $backup_name failed."
# 检查备份文件数量,如果多余最大保存数量,就删除多余的备份
function check_files()
{
cd $backup_dir
local file_lis=$(ls | grep izone.*sql)
for file in ${file_lis[@]}
do
num=$(ls | grep izone.*sql | wc -l)
if [[ $num -lt $maxnum ]]; then
break
else
rm -f $file && echo "remove ${file}"
fi
done
echo "$(ls)"
}
check_files
拷贝备份数据
将备份数据拷贝到新的平台中,包括数据库备份和静态资源备份,还有项目的环境变量文件(.env和izone.env),这里只有izone.env是自定义的配置,所以只拷贝这个就行。当然,你也应该把备份脚本、Nginx配置等拷贝到新平台。
这里只说平台的备份文件:
[root@zero-0 ~]# ll
total 148300
-rw-------. 1 root root 1244 Sep 15 21:26 anaconda-ks.cfg
-rw-r--r--. 1 root root 979 Sep 18 13:35 docker_install.sh
drwxr-xr-x. 8 root root 264 Sep 18 14:23 izone
-rw-r--r--. 1 root root 149309999 Sep 18 16:25 izone_20230918_050001.sql
drwxr-xr-x. 6 root root 222 Sep 18 14:39 izone-docker
-rw-r--r--. 1 root root 2195 Sep 18 16:52 izone.env
-rw-r--r--. 1 root root 2531706 Sep 18 16:06 media_20230918_050001.zip
数据还原
1、还原配置文件
将izone.env文件覆盖项目的izone.env
mv -f izone.env
2、还原静态文件
执行还原命令,注意根据实际的目录修改命令:
unzip /root/media_20230918_050001.zip -d /root/izone-docker/web
这个解压会把压缩包中的media目录解压到/root/izone-docker/web中的media,可以解压后查看验证。
3、还原数据库
首先将数据库备份文件复制到mysql容器中,直接放到/tmp目录下面即可:
docker cp /root/izone_20230918_050001.sql izone_db:/tmp/
然后登录数据库容器:
docker exec -it izone_db bash
然后执行数据库还原命令:
mysql -uroot -p$MYSQL_ROOT_PASSWORD -D $MYSQL_DATABASE --default-character-set=utf8 < /tmp/izone_20230918_050001.sql
执行完成输入exit后退出容器即可。
以上几个命令的输入输出如下:
[root@zero-0 media]# docker cp /root/izone_20230918_050001.sql izone_db:/tmp/
Successfully copied 149MB to izone_db:/tmp/
[root@zero-0 media]# docker exec -it izone_db bash
bash-4.2# mysql -uroot -p$MYSQL_ROOT_PASSWORD -D $MYSQL_DATABASE --default-character-set=utf8 < /tmp/izone_20230918_050001.sqlmysql: [Warning] Using a password on the command line interface can be insecure.
bash-4.2# exit
exit
[root@zero-0 media]#
更新资源
由于静态文件和数据都是导入的,所以需要在Django里面进行更新,执行静态资源收集和搜索索引更新命令:
docker exec -it izone_web python manage.py collectstatic
docker exec -it izone_web python manage.py update_index
然后进入izone-docker的项目中,重启容器:
docker-compose down
docker-compose up -d
输入输出如下:
[root@zero-0 izone-docker]# docker-compose down
/usr/lib/python2.7/site-packages/paramiko/transport.py:33: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
from cryptography.hazmat.backends import default_backend
Stopping izone_nginx ... done
Stopping izone_web ... done
Stopping izone_db ... done
Stopping izone_redis ... done
Removing izone_nginx ... done
Removing izone_web ... done
Removing izone_db ... done
Removing izone_redis ... done
Removing network izone-docker_frontend
Removing network izone-docker_backend
[root@zero-0 izone-docker]# docker-compose up -d
/usr/lib/python2.7/site-packages/paramiko/transport.py:33: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
from cryptography.hazmat.backends import default_backend
Creating network "izone-docker_frontend" with driver "bridge"
Creating network "izone-docker_backend" with driver "bridge"
Creating izone_db ... done
Creating izone_redis ... done
Creating izone_web ... done
Creating izone_nginx ... done
此时再访问一下服务器IP看看效果,可以看到数据已经完美还原:
版权声明:如无特殊说明,文章均为本站原创,转载请注明出处
本文链接:http://jiangyudong.top/subject/article/Environmental_migration/
许可协议:署名-非商业性使用 4.0 国际许可协议