我想备份一个dockerized wordpress。
通常我会从这样的备份中恢复docker应用程序:
- 启动一个新的数据库容器
- 将 SQL 转储恢复到数据库容器
- 启动新的应用程序容器
- 将备份文件复制到应用程序容器(例如
/var/www/html/
)
...通常我会像这样升级docker应用程序:
- 停止应用程序容器
- 更新应用程序的
image: foo:1.23
版本号docker-compose.yml
- 重启应用容器
但对于 wordpress 来说这并不简单 - 它具有自我更新功能,并且文档建议备份所有内容,/var/www/html/*
但这太过分和混乱,并且本质上是应用程序本身的备份,而不仅仅是用户的文件。
为了给我提供该工作流程,我计划备份:
- 主机上的配置文件:
.env
、、docker-compose.yml
docker secrets、ini/conf 文件等。 - mariadb 容器:sql 转储
- wordpress 容器:自定义主题来自
/var/www/html/wp-content/themes/custom/
我必须备份哪些其他文件(在应用程序容器的/var/www/html/
路径中),以便我可以安全地恢复备份并执行 docker 样式的升级?我应该包含哪些文件以确保所有插件的设置等也都备份了?
答案1
我的 Wordpress 使用一个单独的容器来存储数据库,我在 docker-compose.yml 文件中进行了配置:
version: '3'
services:
db:
container_name: ${CONTAINER_DB_NAME}
image: mariadb:latest
restart: unless-stopped
volumes:
- ${DB_PATH}:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
wordpress:
depends_on:
- db
container_name: ${CONTAINER_WP_NAME}
image: wordpress:latest
restart: unless-stopped
volumes:
- ${WP_CORE}:/var/www/html
- ${WP_CONTENT}:/var/www/html/wp-content
- ./conf.d/uploadsize.ini:/usr/local/etc/php/conf.d/uploadsize.ini
environment:
WORDPRESS_DB_HOST: ${CONTAINER_DB_NAME}:3306
WORDPRESS_DB_NAME: ${MYSQL_DATABASE}
WORDPRESS_DB_USER: ${MYSQL_USER}
WORDPRESS_DB_PASSWORD: ${MYSQL_PASSWORD}
WORDPRESS_TABLE_PREFIX: ${WORDPRESS_TABLE_PREFIX}
VIRTUAL_HOST: ${DOMAINS}
LETSENCRYPT_HOST: ${DOMAINS}
LETSENCRYPT_EMAIL: ${LETSENCRYPT_EMAIL}
networks:
default:
external:
name: ${NETWORK}
然后我每天使用同一容器的另一个实例连接到数据库:
sudo docker exec db /usr/bin/mysqldump -u my_db_user --password=my_db_pass my_wp_database > /var/wp_backups/my_wp_database_backup.sql
wp_backups 文件夹是一个 git repo,因此在运行转储后,我将文件添加到 git 并提交/推送。如果文件未更改,则此操作不执行任何操作,如果文件已更改,则将推送更改:
git add .
git commit -a -m "$(date '+%Y-%m-%d')"
git push