Servidor
Autogestionat
Atzavara

enric@musaik.net

Abril 2017

Servidor
autogestionat

Autonomia

Autogestió

Dades pròpies

Serveis propis

Dins de Mataró Sensefils

Història

  • Hacklab Nòmada
  • Llistes de correu
  • Servidor Web a sindominio
  • Comptes de correu

Proxmox

Dos Discs durs en RAID1 de 2TB

Més un de 3TB per la Sopa i el P2P

Més un de 2TB i un de 750GB per copies.

Una màquina <-> un servei

Màquina Virtual i Contenidors

Màquina Virtual

  • PfSense

Contenidors

  • Mldonkey
  • Sopa de Pedres
  • Servidor de Correu
  • Tor
  • Cacti
  • Matrix
  • NextCloud

Proxmox Xarxa

eth0 OVS Port

vmbr0 Switch connectat a eth0
vmbr1 Switch entre Contenidors

Els contenidors connectats
només a vmbr1

PfSense connectat a vmbr0 i vmbr1

Cal crear una interfície més a PfSense

Connectada a vmbr0 per Xarxa Sensefils

Esquema d'interfícies

Mldonkey

Versió poc actualitzada

Permet accés Web

Gestió d'usuaris

Permisos

Grups

Avisos amb correu electrònic

Existeix el substitut? Cal?

Sembla que falla una mica alguns magnet o torrents.

Sopa de Pedres

Servidor Web: Nginx

Sopa de Pedres amb 1670 Pelis

ILP educació amb 95.000 signatures

Banc del Temps Coromines

CanFugarolas, wikis de gestió

Cronopis i companyies de Circ

Cooperatives de Consum

Contra la Festa al Cel

Gestió Econòmica Coromines: FacturaScripts

Wiki.legido.com

...

Drupal multisite

Actualitzacions automàtiques amb drush

Update Drupal

#!/bin/bash
if [ $# -eq 0 ] then
    echo "Cal que diguis el Directori:"
    echo "UpdateDrupal.sh /var/www/CMS/canfugarolas.org"
    exit
fi
echo "###### Anem al Directori"
cd $1
echo "###### Posa tots els sites en mode manteniment"
sudo -u www-data drush -y @sites variable-set maintenance_mode 1 
echo "###### Buida catxes"
sudo -u www-data drush @sites cache-clear all -y
echo "###### Actualitza el codi i la BD"
sudo -u www-data drush @sites pm-update -y
echo "###### Posa tots els sites en mode manteniment OFF"
sudo -u www-data drush @sites variable-set maintenance_mode 0 -y
echo "###### Buida caches"
sudo -u www-data drush @sites cache-clear all -y
echo "###### Tornem a casa"
cd -

Tor

Servidor amb Hidden_Services

De moment, un nginx i un ssh.

Es pot entrar sense saber a on vas.

https://www.torproject.org/docs/tor-hidden-service.html.en

Necessites el TorBrowser o torify per entrar-hi.

  • torify ssh admin@gxamjbnu7uknahng.onion
  • start-tor-browser http://gxamjbnu7uknahng.onion

Cacti

Monitorització dels servidors:

  • Xarxa
  • Disc Dur
  • CPU
  • ...

Matrix

Utilitzem servidor federat de missatgeria instantània

Podem crear sales

Usuaris a matrix.org o
a musaik.net

Multiconferència veu i vídeo

Sales Encriptades

Servidors Propis

Riot

Altres clients

http://matrix.org/docs/projects/try-matrix-now.html

Enllaç amb altres xarxes

Com fer-ho amb el servidor a guifi?

http://musaik.net/riot

Com instal·lar-se el servidor?

https://github.com/guifi-exo/doc/blob/master/knowledge/chat.md#matrix

NextCloud

Nova generació de OwnCloud, han fet un fork

Et permet compartir arxius entre usuaris i de fora

Pots habilitar enllaços a fitxer temporitzat

Pots sincronitzar amb mòbil i escriptori

Calendari, Contactes, ... i molts mòduls

Pots editar de forma
Col·laborativa

Incorporar el correu

Dropbox+Drive

Servidor de
Correu: Burriac

Postfix

  • main.cf --> SPF
  • /var/log/mail.log
  • MirarLogCorreuTOT.sh
  • Transport
  • Treure les IP's des d'on s'envia

Dovecot

PostfixAdmin

Mailman

  • CrearLlista.py
  • BuscarCorreuATot.sh
  • MirarLogCorreuLlistes.sh
  • Podem exportar i importar fitxers de configuració de les llistes
  • Nom de les llistes: llista_matarosensefils.net@llistes.anem.be

Copies de Màquines

Copiem tota la màquina virtual i la guardem en lzo

  • Diàries, 4 últimes
  • Setmanals, la setmana anterior
  • Mensuals, un i dos mesos anteriors

Cron.Daily

LPATH=/mnt/Copia1TB/copies

vzdump -maxfiles 3 --compress lzo --mode snapshot -dumpdir $LPATH/vz/images/103/ 103
vzdump -maxfiles 4 --compress lzo --mode snapshot -dumpdir $LPATH/vz/images/104/ 104
vzdump -maxfiles 3 --compress lzo --mode snapshot -dumpdir $LPATH/vz/images/106/ 106
vzdump -maxfiles 3 --compress lzo --mode snapshot -dumpdir $LPATH/vz/images/107/ 107

#Fem Copia de tot al Disc Dur de 750GB
/usr/bin/rsync -arz -H --delete /mnt/Copia1TB/copies/ /storage/copies/

Cron.Weekly

LPATH=/mnt/Copia1TB/copies/vz/images

for i in {103,104,106,107};
  do
     /bin/rm $LPATH/$i/CopiaSetmanal*;
     NOM=`ls -t $LPATH/$i/vzdump-lxc*.lzo | tail -1`;
     /bin/mv $NOM $LPATH/$i/CopiaSetmanal1_`basename $NOM`;
     NOM=`ls -t $LPATH/$i/vzdump-lxc*.log | tail -1`;
     /bin/mv $NOM $LPATH/$i/CopiaSetmanal1_`basename $NOM`;
  done

Cron.Monthly

LPATH=/mnt/Copia1TB/copies/vz/images

for i in {103,104,106,107};
   do
      /bin/rm `ls $LPATH/$i/CopiaMensual2_*`;
      NOM=`find $LPATH/$i -name "CopiaMensual1*"`;
      /bin/mv `ls $LPATH/$i/CopiaMensual1_*` $LPATH/$i/`basename $NOM | sed -e 's/CopiaMensual1/CopiaMensual2/g'`;
      NOM=`ls -t $LPATH/$i/vzdump-lxc*.lzo | tail -1`;
      /bin/mv $NOM $LPATH/$i/CopiaMensual1_`basename $NOM`;
      NOM=`ls -t $LPATH/$i/vzdump-lxc*.log | tail -1`;
      /bin/rm $NOM;
   done

No hem separat les dades del servidor

No guardem diferències

Fem copia al RAID1 i a un altre disc

Copies de Webs

/etc/cron.daily/copiawebs.sh

## Copiem les webs: base de dades i fitxers.
## Fem enllaços durs, diferents dels típics link tous.
## Enllaços durs: si esborres la copia o l'original és el mateix.

#Afegeix una línia per cada web que vulguis guardar.
#WEB, BD, DIRECTORI, REFERÈNCIA MULTISITE
#BD: Posa el nom de la Basededades. Si poses un 0 a Base de dades vol dir que no té base de dades. 
#DIRECTORI: Posa el nom del directori on està al servidor web, sense posar el /var/www/. Si poses 
#           un 0 a Directori vol dir que no cal guardar-ne els fitxers
#REFERÈNCIA MULTISITE: En el cas que no calgui guardar el fitxers, fem referència a quina base de
#                      de dades el guarda. Si posem un 0, vol dir que no és multisite. I si posem
#                      un 1, vol dir que és el que guardarà els fitxers del multisite.


copies=('lestrella commerce CMS/commerce 1' 
        'ecoopirativa ecopirativa 0 lestrella'

        'canfugarolas fuga CMS/canfugarolas.org 0' 

        'ilpeducacio ilp CMS/ilpeducacio.cat 0' 

        'cronopis cronopis_drupal cronopis.org 0'

        'gestioAFA facturascripts AFACoromines 0'

        'sopa sopa CMS/drupal7 1'
        'banc banc 0 sopa'
        'futbol futbol 0 sopa' 
        'gen gen 0 sopa'
        'niudous niudous_drupal 0 sopa'
        'teatrepo teatrepo_drupal 0 sopa'
        'volavol_factura volavol_factura 0 sopa'
        'volavol_drupal volavol_drupal 0 sopa'
        'festacelno festacelno 0 sopa'

        'volavol_sucre volavol_sucre volaquivol.com/sucre/public 0'
        'volavol_gestio volavol_gestio volaquivol.com/gestio 0'

        'tecno.canfugarolas.org tecno Wikis/tecno.canfugarolas.org 0'
        'energia.canfugarolas.org energia Wikis/energia.canfugarolas.org 0'
        'wiki.legido.com 0 Wikis/wiki.legido.com 0'

        'lasopadepiedra.com lasopadepiedra CMS/lasopadepiedra.com 0')


#***********************************************************************************

for linia in "${copies[@]}";
  do
     var=( $linia )
     WEB=${var[0]}
     BD=${var[1]}
     DIRECTORI=${var[2]}
     REF=${var[3]}
     if [ $BD != '0' ]
     #Si tenim base de dades ...
then
        #Creem el directori si no exiteix
        $MKDIR -p $LPATH/$WEB/BasesDeDades

        #Fem un dump de la base de dades $WEB del servidor web, el comprimim i el copiem al directori de copies
        $MYSQLDUMP --defaults-file=/root/.my.cnf -u root $BD -r /tmp/last.sql
        $BZIP -f /tmp/last.sql
        $CP /tmp/last.sql.bz2 $LPATH/$WEB/BasesDeDades/

        #Copiem la base de dades actual i la guardem amb el nom amb la data actual
        $MV $LPATH/$WEB/BasesDeDades/last.sql.bz2 $LPATH/$WEB/BasesDeDades/$WEB`date +%y%m%d%H%M`.sql.bz2

        #Esborrem qualsevol copia de la base de dades més antiga de 40 dies
        $FIND $LPATH/$WEB/BasesDeDades/$WEB* -mtime +40 -exec rm '{}' \;

      fi

     if [ $DIRECTORI != '0' ]
     #Si tenim directori a copiar ...
      then
        #Creem el directori si no exiteix
        $MKDIR -p $LPATH/$WEB/Fitxers

        #Esborrem copies dels fitxers de drupal de la web si tenen més de 40 dies
        while true; do
           num=$($LS -rt $LPATH/$WEB/Fitxers | wc -l);
           if [ "$num" -le "41" ]; then
              break;
           else
              $RM -rf $LPATH/$WEB/Fitxers/$($LS -t $LPATH/$WEB/Fitxers | $TAIL -1);
           fi
        done

        #Ara guardem copia dels fitxers de drupal utilitzant enllaços durs

        #Fem un enllaç dur (excepte pels directoris) de la nova copia
        UltimaCopia=$($LS -rt $LPATH/$WEB/Fitxers/ | $TAIL -1);
        Hora=$(date +%y%m%d%H%M)
        if [ $UltimaCopia ]
           then
              $CP -al $LPATH/$WEB/Fitxers/$UltimaCopia $LPATH/$WEB/Fitxers/$WEB$Hora;
        fi

        #Fem un rsync entre la copia baixada del servidor web i la nova copia generada
        $RSYNC -arz --delete /var/www/$DIRECTORI/ $LPATH/$WEB/Fitxers/$WEB$Hora;
        $TOUCH $LPATH/$WEB/Fitxers/$WEB$Hora;
     else
     #Si tenim un cas de multisite que no cal guardar els fitxers perquè ja els té una altra web ...
      if [ ! -h $LPATH/$WEB/Fitxers ]
        then
           ln -s ../$REF/Fitxers $LPATH/$WEB/Fitxers
    fi
     fi
  done

Preguntes?

Moltes gràcies a

  • Can Fugarolas
  • Hacklab Nòmada
  • Guifi.net