Script de backup de site para VHCS2.

Dúvidas, dicas e sugestões relacionadas ao painel de controle VHCS2

Script de backup de site para VHCS2.

Mensagempor bitebit.solucoes » Qui Ago 28, 2008 11:38 pm

Pessoal,

Gostaria de saber se alguem tem um script para fazer backup de um site, seria algo parecido com o que tem no whm/cpanel, contudo tem que ser para VHCS2.

Preciso, fazer backup dos arquivos, bancos de dados e contas de e-mail.

Se alguem puder ajudar agradeço.
Atenciosamente,

BiteBit Soluções - http://www.bitebitsolucoes.com
Soluções em Loja Virtual, e-commerce
bitebit.solucoes
 
Mensagens: 4
Registrado em: Qui Ago 28, 2008 11:24 pm

Mensagempor bruce » Dom Out 12, 2008 12:26 pm

O VHCS2 não fornece por padrão uma ferramenta de backup completo como o painel de controle CPanel/WHM.

Desenvolvemos o seguinte script para criação de um backup dos sites/e-mails/bancos de dados:

Código: Selecionar todos
#!/bin/bash
# VirtuaServer - http://www.VirtuaServer.com.br - 29/08/2008

MYSQL_ROOT_PASSWORD="SENHA_DE_ROOT_MYSQL"
ADMIN_EMAIL1="seu_email@seudominio.com"

# Definições Iniciais
DATA_ATUAL=`/bin/date +%Y_%m_%d-%H_%M_%S`
TEMP_DIR=/tmp/vs_bk_/
MYSQL_OUTPUT=$TEMP_DIR/mysql-dump-$DATA_ATUAL
BACKUPS=/root/backups/
BACKUP_FILE=$BACKUPS/backup.tar.bz2

# Arquivos que estarão no banco
ARQUIVOS_BACKUP="/var/spool/mail/virtual /var/www/virtual $MYSQL_OUTPUT"

mkdir -p $TEMP_DIR
mkdir -p $BACKUPS
export MYSQL_PWD=$MYSQL_ROOT_PASSWORD

mysqldump --all-databases > $MYSQL_OUTPUT

if [ ! $? -eq 0 ]
then
        MSG="Erro gerando backup do MySQL - $DATA_ATUAL"
        echo $MSG
        echo "$MSG" | mail -s "$MSG" $ADMIN_EMAIL1
        exit 0
fi

tar --numeric-owner -cvjpf $BACKUP_FILE $ARQUIVOS_BACKUP

if [ ! $? -eq 0 ]
then
        MSG="Erro gerando backup completo - $DATA_ATUAL"
        echo $MSG
        echo "$MSG" | mail -s "$MSG" $ADMIN_EMAIL1
        exit 0
fi

# Removendo temporario do MySQL
rm $MYSQL_OUTPUT

# Backup concluído! Buscando dados
TMP=`ls -lah $BACKUP_FILE`
TMP_DISCO=`df -h | grep -vi tmp`

# Enviando e-mail de confirmação
MSG="BACKUP CONCLUÍDO - $DATA_ATUAL - Disponível em $BACKUP_FILE "
echo $MSG
echo -e "$MSG\r\n\r\n$TMP\r\n\r\nUtilização de Disco:\r\n$TMP_DISCO" | mail -s "$MSG" $ADMIN_EMAIL1


bruce
Site Admin
 
Mensagens: 14
Registrado em: Ter Mar 22, 2005 11:06 pm

Ajuste no script.

Mensagempor darkstarlinux » Ter Nov 18, 2008 10:51 am

Como fazer para datar os backups?

Existe alguma maneira para fazer ele gerar os backups separados, dominio a dominio com suas respectivas informações, bancos, e-mails, etc, como o WHM faz?

Aguardo retorno.

Joabes
darkstarlinux
 
Mensagens: 3
Registrado em: Ter Nov 18, 2008 10:47 am

Mensagempor virtuaserver » Ter Nov 18, 2008 5:34 pm

Olá darkstarlinux!

Seja bem vindo ao nosso forum!

Para datar os backups, tente alterar a seguinte linha:

Código: Selecionar todos
BACKUP_FILE=$BACKUPS/backup.tar.bz2


Por:

Código: Selecionar todos
BACKUP_FILE=$BACKUPS/backup-$DATA_ATUAL.tar.bz2


Após esta alteração, esteja atento ao espaço em disco. Caso não exclua os backups antigos seu hd irá "estourar".

Com relação a geração do backup de forma similar ao WHM, é possível ("tudo é possível" :) ), porém mais complexo. É necessário um estudo da estrutura do BD de forma a separar os bancos que pertencem a determinado domínio e informações específicas de cada domínio, além de preparar sua restauração de forma independente. No momento nossa equipe está focada em outras implementações e sem disponibilidade para esta implementação.
virtuaserver
 
Mensagens: 122
Registrado em: Qua Jul 20, 2005 7:03 pm

Mensagempor darkstarlinux » Ter Nov 18, 2008 7:52 pm

Legal, isso é de grande valia.

Apenas mais uma pergunta.

E se precisar restaurar os e-mails de uma determinada conta, é só descompactar, pegar os arquivos de e-mails e colocar no /var/mail /pastadousuario?

Atenciosamente
Joabes
darkstarlinux
 
Mensagens: 3
Registrado em: Ter Nov 18, 2008 10:47 am

Mensagempor virtuaserver » Ter Nov 18, 2008 8:13 pm

Para recuperar os e-mails precisa descompactar e copiar os arquivos para:

/var/spool/mail/virtual
virtuaserver
 
Mensagens: 122
Registrado em: Qua Jul 20, 2005 7:03 pm

Mensagempor darkstarlinux » Sáb Nov 22, 2008 12:55 pm

Boa tarde.

Hoje fui testar os backups e pra minha surpresa não autenticava os e-mails, nem ftp.

Sendo assim, fiz uma modificação na linha:

# Arquivos que estarão no banco
ARQUIVOS_BACKUP="/var/spool/mail/virtual /var/www/virtual $MYSQL_OUTPUT"

Ficando assim:

# Arquivos que estarão no banco
ARQUIVOS_BACKUP="/var/spool/mail/virtual /var/www/virtual /etc/vhcs2 /var/cache/bind $MYSQL_OUTPUT"

Com isso ele copia todos os arquivos, postifix, apache, crontab, etc.

Já no caso do /var/cache/bind, copia as zonas de dns,

Resumindo, por fim, e-mails recuperados, entradas do apache e zonas de dns, evita um trabalhão de ter que refazer na mão, pois é só copiar no lugar e por pra rodar.

Com calma e tempo vou ver se consigo umas implementações no painel, separar os backups por usuários, e por ai vai, havendo exito contribuo aqui com o sistema.

Abraços
Joabes
darkstarlinux
 
Mensagens: 3
Registrado em: Ter Nov 18, 2008 10:47 am

Mensagempor Juan Basso » Qui Dez 04, 2008 9:33 pm

Eu fiz um código em PHP para o meu VPS, segue abaixo:

Código: Selecionar todos
#!/usr/bin/php
<?php

// CONFIGURACOES

$arquivosBackup = array(
        '/etc',
        '/home',
        '/root',
        '/var/www',
        '/var/svn'
);

$mysql = array(
        'user' => 'root',
        'pass' => '*****' // Ponha sua senha aqui
);

define('EMAIL', '****@gmail.com');

// Ver: http://mail.google.com/support/bin/answer.py?answer=8770&topic=13281
define('TAM_PARTE_EMAIL', 15728640);

// Não editar daqui para baixo

if (php_sapi_name() !== 'cli') {
        echo "Este script deve ser executado via linha de comando (shell).\n";
}

new Backup($arquivosBackup);

class Backup {

        var $data;
        var $backupFile;

        function __construct($arquivos) {
                global $mysql;

                $this->data = date('Y-m-d-Hi');
                $this->dump($mysql);
                $this->arquivos = $arquivos;
                $this->arquivos[] = 'mydump-' . $this->data . '.sql';
                $this->backupFile = '/tmp/backup-' . $this->data . '.tgz';
                $this->tgz();
                $this->sendMail();
        }

        function dump($info) {
                exec("mysqldump -u{$info['user']} -p{$info['pass']} --all-databases > mydump-{$this->data}.sql");
        }

        function tgz() {
                if (!is_array($this->arquivos) || empty($this->arquivos)) {
                        return false;
                }
                exec("tar zcpf {$this->backupFile} " . implode(' ', $this->arquivos));
        }

        function sendMail() {
                chdir('/tmp');
                exec("split backup-{$this->data}.tgz -d -b " . TAM_PARTE_EMAIL . " -a 2 backup-{$this->data}-");
                for ($i = ceil(filesize($this->backupFile) / TAM_PARTE_EMAIL) - 1; $i >= 0; $i--) {
                        $j = sprintf("%02d", $i);
                        exec("echo \"Anexo em tgz\" | mutt -s \"[Backup {$this->data}] $j\" -a /tmp/backup-{$this->data}-$j " . EMAIL);
                }
                exec("rm /tmp/backup-{$this->data}*");
        }

}

?>


Basicamente, ele faz um tgz dos diretórios que você escolher e do banco de dados, feito isso, ele quebra em partes e envia para um e-mail. Coloquei este código no cron.

Para utilizar, é necessário o pacote php5-cli e mutt.
Juan Basso
 
Mensagens: 2
Registrado em: Sex Jul 11, 2008 7:53 am


Voltar para VHCS2 - Painel de controle OpenSource

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron