Skip to content

Instantly share code, notes, and snippets.

@korobochkin
Last active August 29, 2015 14:06
Show Gist options
  • Select an option

  • Save korobochkin/3e558d4155ed1a94754a to your computer and use it in GitHub Desktop.

Select an option

Save korobochkin/3e558d4155ed1a94754a to your computer and use it in GitHub Desktop.
WordPress Backup
"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