docker 化的 Wordpress 备份

docker 化的 Wordpress 备份

我想备份一个dockerized wordpress。

通常我会从这样的备份中恢复docker应用程序:

  • 启动一个新的数据库容器
  • 将 SQL 转储恢复到数据库容器
  • 启动新的应用程序容器
  • 将备份文件复制到应用程序容器(例如/var/www/html/

...通常我会像这样升级docker应用程序:

  • 停止应用程序容器
  • 更新应用程序的image: foo:1.23版本号docker-compose.yml
  • 重启应用容器

但对于 wordpress 来说这并不简单 - 它具有自我更新功能,并且文档建议备份所有内容,/var/www/html/*但这太过分和混乱,并且本质上是应用程序本身的备份,而不仅仅是用户的文件。

为了给我提供该工作流程,我计划备份:

  • 主机上的配置文件:.env、、docker-compose.ymldocker 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

相关内容