Last active
August 29, 2015 14:06
-
-
Save korobochkin/3e558d4155ed1a94754a to your computer and use it in GitHub Desktop.
WordPress Backup
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| "use strict"; | |
| module.exports = function(grunt) { | |
| var config = grunt.file.readJSON('config/config.json'); | |
| grunt.initConfig({ | |
| pkg: grunt.file.readJSON('package.json'), | |
| config: config, | |
| rsync: { | |
| /* | |
| * Информация об rsync плагине для Grunt | |
| * https://github.com/jedrichards/grunt-rsync | |
| */ | |
| options: { | |
| //args: ["--verbose -r -l -t -p"], | |
| /* | |
| * Никогда не копируем файлы .DS_Store (маковские скрытые файлы для нужд ОС). | |
| */ | |
| //exclude: [".DS_Store"], | |
| recursive: true, | |
| }, | |
| download_production_uploads: { | |
| /* | |
| * Загружаем wp-uploads с сервера на локальную машину, удаляем на локальной машине все, что пропало на сервере. | |
| * delete: true — удаляет на локальной машине все, что было удалено на сервере. | |
| */ | |
| options: { | |
| ssh: true, | |
| src: | |
| "<%= config.production.ssh.login %>" | |
| + | |
| "@" | |
| + | |
| "<%= config.production.ssh.host %>" | |
| + | |
| ":" | |
| + | |
| "<%= config.production.ssh.path_to_site %>/wp-content/uploads/", | |
| dest: "<%= config.backup.cwd %>/uploads/", | |
| port: "<%= config.production.ssh.port %>", | |
| args: ["--verbose -r -l -t"], | |
| delete: true, | |
| }, | |
| }, | |
| upload_site: { | |
| /* | |
| * Заливаем файлы, которые должны оказаться на сайте, с локальной машины на сервер. | |
| * Обязательно без удаления на сервере, потому что там еще множество разных файлов от WordPress. Их нельзя удалять. | |
| * Здесь можно загрузить favicon для сайта, файлы-подтверждения для поисковиков, файлы-конфигурации для кэширования и т. п. | |
| */ | |
| /* | |
| * ВАЖНО | |
| * При удалении файлов на локальной машине, они не удаляются на сервере. | |
| * Другими словами, команда работает только на upload. | |
| * Удалять файлы на сервере надо вручную. | |
| * Как альтернатива — можно поставить флаг delete: true, но, как описано выше, это удалит все файлы на сервере, | |
| * которых нет в папке на локальной машине. | |
| */ | |
| options: { | |
| src: '<%= config.backup.public_html %>/', | |
| dest: '<%= config.production.ssh.path_to_site %>/', | |
| //dest: '/home4/flextron/sites/test/public_html/', | |
| host: '<%= config.production.ssh.login %>@<%= config.production.ssh.host %>', | |
| port: '<%= config.production.ssh.port %>', | |
| delete: false, | |
| /* | |
| * Обязательно false иначе все удалится с сайта | |
| */ | |
| args: ['--verbose -r -t'], | |
| /* | |
| * Копируем рекурсивно, с сохранением даты создания, без сохранения прав; | |
| * Информация об аргументах | |
| * http://linux.die.net/man/1/rsync | |
| */ | |
| }, | |
| }, | |
| }, | |
| shell: { | |
| listPlugins: { | |
| /* | |
| * Получаем список плагинов, который есть на сервере. | |
| */ | |
| command: 'ssh <%= config.production.ssh.login %>@<%= config.production.ssh.host %> -p <%= config.production.ssh.port %> "ls <%= config.production.ssh.path_to_site %>/wp-content/plugins/" > backup/plugins/pluginsList.txt' | |
| }, | |
| }, | |
| db_dump: { | |
| "download_production": { | |
| /* | |
| * Делаем бекап БД с сервера на локальную машину в виде .sql-файла. | |
| * Для запуска необходимо выполнить команду: | |
| * grunt db_dump:production | |
| */ | |
| "options": { | |
| "title": "Production DB", | |
| "database": "<%= config.production.db.db_name %>", | |
| "user": "<%= config.production.db.username %>", | |
| "pass": "<%= config.production.db.password %>", | |
| "host": "<%= config.production.db.host %>", | |
| "ssh_host": "<%= config.production.ssh.login %>@<%= config.production.ssh.host %> -p <%= config.production.ssh.port %>", | |
| "backup_to": "<%= config.backup.cwd %>/db/production/armyofselenagomez.sql" | |
| }, | |
| }, | |
| }, | |
| compress: { | |
| full: { | |
| options: { | |
| //archive: '<%= config.backup.cwd %>/archives/armyofselenagomez__<%= nowTime %>.zip', | |
| mode: 'zip', | |
| pretty: true, | |
| }, | |
| files: [ | |
| { | |
| expand: true, | |
| cwd: '<%= config.backup.cwd %>/db/', | |
| src: '**', | |
| dest: '<%= pkg.name %>/db/', | |
| dot: false, | |
| }, | |
| { | |
| expand: true, | |
| cwd: '<%= config.backup.cwd %>/plugins/', | |
| src: '**', | |
| dest: '<%= pkg.name %>/plugins/', | |
| dot: false, | |
| }, | |
| { | |
| expand: true, | |
| cwd: '<%= config.backup.cwd %>/public_html/', | |
| src: '**', | |
| dest: '<%= pkg.name %>/public_html/', | |
| dot: true, | |
| }, | |
| { | |
| expand: true, | |
| cwd: '<%= config.backup.cwd %>/uploads/', | |
| src: '**', | |
| dest: '<%= pkg.name %>/uploads/', | |
| dot: false, | |
| }, | |
| ], | |
| }, | |
| }, | |
| }); | |
| /* | |
| * Archive datetime | |
| */ | |
| var nowTime = grunt.template.today ('UTC:yyyy-mm-dd'); | |
| nowTime = nowTime + '__' + grunt.template.today ('UTC:hh*MM*ss'); | |
| console.log (nowTime); | |
| grunt.option ('compress:full:options:archive', '<%= config.backup.cwd %>/archives/armyofselenagomez__<%= nowTime %>.zip') | |
| console.log (grunt.option.flags()); | |
| grunt.loadNpmTasks ('grunt-rsync'); | |
| grunt.loadNpmTasks ('grunt-shell'); | |
| grunt.loadNpmTasks ('grunt-mysql-dump'); | |
| grunt.loadNpmTasks ('grunt-contrib-compress'); | |
| grunt.registerTask ('default', []); | |
| //grunt.registerTask('uploadsdir', ['rsync:download_uploads']); | |
| //grunt.registerTask('backup_db', ['grunt db_pull --target="production"']); | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment