= Kopie zapasowe (backupy) systemu eDokumenty w Linux = Poniższy artykuł przedstawia 1. Backup bazy danych 2. Backup files 3. Backup public_html 4. Backup repos 5. Backup repository 6. Backup public_ftp oraz users - Opcjonalnie 7. Backup na zewnętrznym nośniku Skrypty backupów umieszczamy w katalogu /etc/cron.daily '''1. Backup bazy danych'''[[BR]] {{{ #!/bin/bash # Tworzy zrzut bazy danych 5 razy w tygodniu (uruchamiany z crona) # od 1-pon do 5-pia # WDAY=$(date +%w) DST="/mnt/backup/db/${WDAY}" #[ -d $DST ] || umask 007 && mkdir $DST if [ "$WDAY" -lt 1 -o "$WDAY" -gt 6 ] then exit 1 fi su - postgres -c "pg_dump -f ${DST}/edokumenty.sql -d edokumenty" gzip -f ${DST}/edokumenty.sql }}} '''2. Backup files'''[[BR]] {{{ #!/bin/bash DST="/mnt/backup/files" if [ -d $DST ] then sleep 1 else mkdir $DST fi rsync -a /home/edokumenty/files/ /mnt/backup/files/ }}} '''3. Backup public_html'''[[BR]] W przypadku tworzenia kopii kodu systemu eDokumenty należy dodać skrypt czyszczący zawartość plików tymczasowych {{{ rm -rf /home/edokumenty/public_html/apps/edokumenty/var/tmp/* }}} {{{ #!/bin/bash cd /home/edokumenty/ tar -pczf public_html.tar.gz public_html/ mv public_html.tar.gz /mnt/backup/system }}} '''4. Backup repos'''[[BR]] {{{ #!/bin/bash svnadmin dump /home/edokumenty/repos > /mnt/backup/repos/repos.dump }}} '''5. Backup repository'''[[BR]] Poniższy skrypt wykonuje kopię plików z katalogu repository - plików wersjonowanych {{{ #!/bin/bash DST="/mnt/backup/repository" if [ -d $DST ] then sleep 1 else mkdir $DST fi rsync -a /home/edokumenty/repository/ /mnt/backup/repository/ }}} '''6. Backup public_ftp oraz users - Opcjonalnie'''[[BR]] Poniższy skrypt wykonuje kopię plików z katalogu public_ftp oraz users {{{ #!/bin/bash DST="/mnt/backup/user_files" if [ -d $DST ] then sleep 1 else mkdir $DST fi rsync -a /home/edokumenty/public_ftp/ /mnt/backup/user_files/ rsync -a /home/edokumenty/users/ /mnt/backup/user_files/ }}} '''7. Backup na zewnętrznym nośniku'''[[BR]] Poniższy skrypt wykonuje kopię danych z serwera eDokumentów na dysk zewnętrzny {{{ FTP_HOST=[ADRES_IP_SERVERA]:21 FTP_USER=[LOGIN] FTP_PWD=[HASŁO] LOCAL_SOURCE_PATH=/home/edokumenty/backup/${1} #param 1 from script for example REMOTE_DEST_PATH=/edokumenty EXCLUDE_FILES_LIST=".svn empty anotherDirectory" # Construct excludes for exclude in ${EXCLUDE_FILES_LIST}; do EXCLUDES="-x ${exclude} ${EXCLUDES}" done # -R, --reverse reverse mirror (put files) # mirror -e #--delete delete files not present at remote site lftp ftp://${FTP_USER}:${FTP_PWD}@${FTP_HOST} -e "mirror ${EXCLUDES} -R ${LOCAL_SOURCE_PATH} ${REMOTE_DEST_PATH} ; quit" }}} FTP_HOST - adres serwera na którym mają zostać zapisane pliki[[BR]] FTP_USER - login użytkownika który ma dostęp do serwera plików[[BR]] FTP_PWD - hasło użytkownika[[BR]] LOCAL_SOURCE_PATH - lokalizacja z której będzie wykonywany backup plików[[BR]] REMOTE_DEST_PATH - lokalizacja do której będzie wykonywany backup plików[[BR]] W przypadku gdy serwera na który będziemy wysłać dane odrzuci połączenie z powodu braku zgodności certyfikatu ostatnia linijka kodu powinna wyglądać następująco {{{ lftp ftp://${FTP_USER}:${FTP_PWD}@${FTP_HOST} -e "set ftp:ssl-allow no; mirror ${EXCLUDES} -R ${LOCAL_SOURCE_PATH} ${REMOTE_DEST_PATH} ; quit" }}} Drugim programem do przeniesienia backupów na zewnętrzny nośnik jest curlftpfs. Instalujemy pakiety {{{ apt-get install curlftpfs }}} Tworzymy punkt montowania {{{ mkdir /mnt/my_ftp }}} Kolejnym krokiem jest pomontowanie zasobu {{{ curlftpfs ftp-user:ftp-pass@my-ftp-location.local /mnt/my_ftp/ }}} - użytkownik: ftp-user - hasło: ftp-pass - host/IP: my-ftp-location.local Możemy także podmontować zasób automatycznie w fstab. W tym celu tworzymy plik /root/.netrc {{{ machine my-ftp-location.local login ftp-user password ftp-pass }}} oraz ustawiamy uprawnienia 600 {{{ chmod 600 /root/.netrc }}} w fstab dodajemy wpis {{{ curlftpfs#my-ftp-location.local /mnt/my_ftp fuse allow_other,uid=1000,gid=1000,umask=0022 0 0 }}} a następnie montujemy zasób {{{ mount -a }}} W przypadku komunikatu '''bash: ./configure: /bin/sh^M: bad interpreter: No such file or directory''' - edytując plik za pomocą vim należy zmienić format pliku {{{ :set fileformat=unix }}}