Marvin Pascale

[B.Log]

14 Giugno 2023

Seafile

Seafile Seafile è una soluzione di sincronizzazione e condivisione di file open-source pensata per un’alta affidabilità. Con Seafile puoi sincronizzare, condividere e collaborare.

Costruire un prodotto di sincronizzazione dei file altamente efficiente e affidabile non è un compito banale. Il modello di dati e il protocollo di sincronizzazione di Seafile sono progettati appositamente per implementare una sincronizzazione dei file rapida e affidabile. Grazie a questo design, Seafile può sincronizzare 10 mila piccoli file in 1 minuto. Con oltre 6 anni di utilizzo nel mondo reale da parte di oltre 1 milione di utenti, Seafile è diventato molto stabile e affidabile. Le cronologie dei file e le istantanee delle librerie consentono di ripristinare facilmente qualsiasi file e cartelle, in un momento specifico.

Tra le funzionalità offerte da Seafile troviamo:

  • sincronizzazione file;
  • cifratura lato client;
  • prestazioni scalabili;
  • wiki intergrata;
  • applicazioni mobile, desktop;
  • drive virtuale.

Mani in pasta

E’ possibile installarla on premise e tra le modalità troviamo anche docker.

Sul sito del produttore troviamo un file docker-compose che è facilmente adattabile per essere utilizzato avviato con portainer.

Esempio per portainer

version: '3.0'
services:
  db:
    image: mariadb:10.6
    environment:
      - MYSQL_ROOT_PASSWORD=db_dev  # Requested, set the root's password of MySQL service.
      - MYSQL_LOG_CONSOLE=true
    volumes:
      - /opt/docker/seafile-mysql/db:/var/lib/mysql  # Requested, specifies the path to MySQL data persistent store.
    networks:
      - seafile-net

  memcached:
    image: memcached:1.6.18
    entrypoint: memcached -m 256
    networks:
      - seafile-net

  seafile:
    image: seafileltd/seafile-mc:latest
    ports:
      - "80:80"
    volumes:
      - /opt/docker/seafile-data:/shared   # Requested, specifies the path to Seafile data persistent store.
    environment:
      - DB_HOST=db
      - DB_ROOT_PASSWD=db_dev  # Requested, the value shuold be root's password of MySQL service.
      - TIME_ZONE=Etc/UTC  # Optional, default is UTC. Should be uncomment and set to your local time zone.
      - [email protected] # Specifies Seafile admin user, default is '[email protected]'.
      - SEAFILE_ADMIN_PASSWORD=asecret     # Specifies Seafile admin password, default is 'asecret'.
      - SEAFILE_SERVER_LETSENCRYPT=false   # Whether to use https or not.
      - SEAFILE_SERVER_HOSTNAME=files.dominio.it # Specifies your host name if https is enabled.
    depends_on:
      - db
      - memcached
    networks:
      - seafile-net

networks:
  seafile-net:

NB: Mi raccomando le password e l’email del primo admin.

Backup

Sono disponibili delle linee guida per chi utilizza docker-compose. In pratica si tratta di fare dei dump dei db e copia dei file su file system.

## Databases
# docker exec -it seafile-mysql mysqldump  -uroot --opt ccnet_db > ccnet_db.sql
# docker exec -it seafile-mysql mysqldump  -uroot --opt seafile_db > seafile_db.sql
# docker exec -it seafile-mysql mysqldump  -uroot --opt seahub_db > seahub_db.sql

## Files
# rsync -az /opt/seafile-data/seafile /opt/seafile-backup/data/
# cd /opt/seafile-backup/data && rm -rf ccnet

Ripristino

## Databases
# docker cp /opt/seafile-backup/databases/ccnet_db.sql seafile-mysql:/tmp/ccnet_db.sql
# docker cp /opt/seafile-backup/databases/seafile_db.sql seafile-mysql:/tmp/seafile_db.sql
# docker cp /opt/seafile-backup/databases/seahub_db.sql seafile-mysql:/tmp/seahub_db.sql

# docker exec -it seafile-mysql /bin/sh -c "mysql -uroot ccnet_db < /tmp/ccnet_db.sql"
# docker exec -it seafile-mysql /bin/sh -c "mysql -uroot seafile_db < /tmp/seafile_db.sql"
# docker exec -it seafile-mysql /bin/sh -c "mysql -uroot seahub_db < /tmp/seahub_db.sql"

## Files
# cp -R /opt/seafile-backup/data/* /opt/seafile-data/seafile/

Extra

Dalla versione 10.0 è possibile eseguire Seafile come utente non privilegiato e per farlo basta aggiungere la property “NON_ROOT=true” nel file docker-compose. Se avete utilizzato docker-compose vi basterà modificare il file

seafile:
    ...
    environment:
        ...
        - NON_ROOT=true
        ...

creare l’utente sulla macchina host

# useradd --home-dir /home/seafile --create-home --uid 8000 --gid 8000 --shell /bin/sh --skel /dev/null seafile

e riavvialo lo stack

# docker-compose down
# docker-compose up -d

Extra (bis)

Non dimentichiamoci mai di mettere al sicuro le nostre installazioni esposte con Crowdsec .


Le opinioni in quanto tali sono opinabili e nulla ti vieta di approfondire l’argomento.

Risorse: