Drifta din egen molnlagring med Seafile
Seafile är ett program med öppen källkod för att synkronisera och lagra filer. Det kan liknas med ett privat Dropbox. Seafile har både en webbklient och klienter för Linux, Windows, macOS, Android och iPad/iPhone.
Bild: Pete Linforth
Att drifta sin egen molnlagring har flera säkerhetsfördelar, särskilt om den driftas bakom brandväggen, oåtkomlig från internet (eller bara tillgänglig via en VPN-anslutning). Särskilt aktuellt kan det vara för företag och organisationer nu efter Schrems II-domen.
Oavsett anledning att drifta sin egen molnlagring är Seafile både snabbt och stabilt. Nextcloud, som Seafile ofta liknas med, har betydligt mer funktioner. Nextcloud är dock inte lika snabbt vid synkronisering, men det är inte heller deras mål. Nextcloud och Seafile riktar sig till olika målgrupper.
Om man jämför Seafile med Dropbox, är Nextcloud mer som Google Workspace – en hel svit med webbapplikationer så som e-post, bildvisning, textredigering, kontaktbok, kalender och mycket mer. Seafile är mer avskalat. I princip finns det bara en enkel textredigerare för markdown-filer. Istället har man fokuserat på synkronisering och lagring av filer, vilket är riktigt snabbt med Seafile.
När jag satte upp min första Seafile-server synkroniserade jag cirka 5 000 filer, sammanlagt 2 gigabyte data, på ett par minuter över mitt lokala nätverk.
Förutom den snabba synkroniseringen har Seafile även deduplicering av data. Det innebär att data som är exakt lika inte lagras. Bara unik data lagras. Det håller nere utrymmet som Seafile behöver för de lagrade filerna. Dedupliceringen är möjlig tack vare att filerna inte lagras som filer på Seafile-servern, utan som block (ungefär som Git lagrar filer).
Dedupliceringen gör dock säkerhetskopiering av filerna lite svårare. Man kan självklart ta en säkerhetskopia på hela katalogen med blockdatan, men den går då bara att öppna med en Seafile-server. Vill man istället ha en säkerhetskopia av sina faktiska filer kan man synkronisera filerna med deras klient. Därefter kan man ta en säkerhetskopia på de synkroniserade filerna. Detta går att skripta och schemalägga då det finns en kommandobaserad klient för Seafile.
Sätta upp Seafile-servern över vanliga HTTP
Det enklaste är att köra Seafile med deras Docker-avbild och en
docker-compose.yml
-fil. Nedanstående är en fullt fungerande
docker-compose.yml
-fil för Seafile över HTTP.
version: '3.8'
services:
db:
image: mariadb:10.5
container_name: seafile-mysql
environment:
- MYSQL_ROOT_PASSWORD=super-secret # Root-lösenordet för MariaDB-databasen
- MYSQL_LOG_CONSOLE=true
volumes:
- /opt/seafile-mysql/db:/var/lib/mysql # Var på värddatorn MariaDB-databasen ska sparas
memcached:
image: memcached:1.5.6
container_name: seafile-memcached
entrypoint: memcached -m 256
seafile:
image: seafileltd/seafile-mc:9.0.4
container_name: seafile
ports:
- 80:80
volumes:
- /opt/seafile-data:/shared # Var alla filerna ska lagras på värddatorn
environment:
- DB_HOST=db
- DB_ROOT_PASSWD=super-secret # Ska matcha root-lösenordet för MariaDB-databasen
- TIME_ZONE=Europe/Stockholm # Din lokala tidszon
- SEAFILE_ADMIN_EMAIL=user@example.com # Administratörskontot för Seafile (för att logga in)
- SEAFILE_ADMIN_PASSWORD=secret123 # Administratörskontot lösenord
- SEAFILE_FILE_SERVER_ROOT=http://knatte.nixnet.jke # Sätt till adressen som Seafile kan nås på
- SEAFILE_SERVICE_URL=http://knatte.nixnet.jke # Sätt till adressen som Seafile kan nås på
depends_on:
- db
- memcached
Nu är det bara att starta Docker Compose-projektet:
#> docker-compose up -d
Därefter kan du surfa in på Seafile på det värdnamn eller IP-adress som
värddatorn har. Du loggar in med den e-postadress du angav som
SEAFILE_ADMIN_EMAIL
. Lösenordet är det du angav i
SEAFILE_ADMIN_PASSOWRD
.
Om man vill installera någon av synkroniseringsklienterna finns de på Seafiles webbsida.
Om något inte skulle fungera, ta en titt på loggarna med docker-compose logs
.
Sätt upp Seafile med HTTPS och Let’s Encrypt
Om du planerar att köra Seafile över internet rekommenderar jag starkt att använda HTTPS! Något annat vore oansvarigt. Det finns dessutom inbyggt stöd för Let’s Encrypt i Seafiles Docker-avbild, så det finns ingen ursäkt att inte använda HTTPS.
Det finns dock en bugg i Seafiles Docker-avbild i skrivande stund som gör att
Let’s Encrypt inte fungerar. Felet är att Seafile försöker ladda hem ett
program från GitHub över det gamla Git-protokollet, git://
, som inte längre
stöds av GitHub. Vi behöver därför kopiera en fil från avbilden, ändra
git://
till https://
i den filen och montera den som en bunden volym. Därefter
fungerar allting.
Först och främst behöver vi utöka Docker Compose-filen något.
Utökningarna är en ny port som måste exponeras, 443:443
. Vi måste också
aktivera Let’s Encrypt med SEAFILE_SERVER_LETSENCRYPT=true
. Därefter måste
vi sätta det riktiga värdnamnet för Seafile (det värdnamn som används på
internet) med SEAFILE_SERVER_HOSTNAME
. Vi behöver också montera den
modifierade ssl.sh
-filen. Det gör vi med ${PWD}/ssl.sh:/scripts/ssl.sh
under
volumes
-sektionen.
Den nya docker-compose.yml
-filen visas här i sin helhet:
version: '3.8'
services:
db:
image: mariadb:10.5
container_name: seafile-mysql
environment:
- MYSQL_ROOT_PASSWORD=super-secret # Root-lösenordet för MariaDB-databasen
- MYSQL_LOG_CONSOLE=true
volumes:
- /opt/seafile-mysql/db:/var/lib/mysql # Var på värddatorn MariaDB-databasen ska sparas
memcached:
image: memcached:1.5.6
container_name: seafile-memcached
entrypoint: memcached -m 256
seafile:
image: seafileltd/seafile-mc:9.0.4
container_name: seafile
ports:
- 80:80
- 443:443 # För HTTPS
volumes:
- /opt/seafile-data:/shared # Var alla filerna ska lagras på värddatorn
- ${PWD}/ssl.sh:/scripts/ssl.sh # En fix för att Let's Encrypt ska fungera
environment:
- DB_HOST=db
- DB_ROOT_PASSWD=super-secret # Ska matcha root-lösenordet för MariaDB-databasen
- TIME_ZONE=Europe/Stockholm # Din lokala tidszon
- SEAFILE_ADMIN_EMAIL=user@example.com # Administratörskontot för Seafile (för att logga in)
- SEAFILE_ADMIN_PASSWORD=secret123 # Administratörskontot lösenord
- SEAFILE_SERVER_LETSENCRYPT=true # Detta aktiverar Let's Encrypt
- SEAFILE_SERVER_HOSTNAME=seafile.example.com # Värdnamnet som ska användas för Let's Encrypt
- SEAFILE_FILE_SERVER_ROOT=https://seafile.example.com # Sätt till adressen som Seafile kan nås på
- SEAFILE_SERVICE_URL=https://seafile.example.com # Sätt adressen som Seafile kan nås på
depends_on:
- db
- memcached
Skapa därefter en fil med namnet ssl.sh
i samma katalog som
docker-compose.yml
. Innehållet i ssl.sh
ska vara:
#!/bin/bash
set -e
ssldir=${1:?"error params"}
domain=${2:?"error params"}
letsencryptdir=$ssldir/letsencrypt
letsencrypt_script=$letsencryptdir/acme_tiny.py
ssl_account_key=${domain}.account.key
ssl_csr=${domain}.csr
ssl_key=${domain}.key
ssl_crt=${domain}.crt
mkdir -p /var/www/challenges && chmod -R 777 /var/www/challenges
mkdir -p $ssldir
if ! [[ -d $letsencryptdir ]]; then
git clone https://github.com/diafygi/acme-tiny.git $letsencryptdir
else
cd $letsencryptdir
git pull origin master:master
fi
cd $ssldir
if [[ ! -e ${ssl_account_key} ]]; then
openssl genrsa 4096 > ${ssl_account_key}
fi
if [[ ! -e ${ssl_key} ]]; then
openssl genrsa 4096 > ${ssl_key}
fi
if [[ ! -e ${ssl_csr} ]]; then
openssl req -new -sha256 -key ${ssl_key} -subj "/CN=$domain" > $ssl_csr
fi
python3 $letsencrypt_script --account-key ${ssl_account_key} --csr $ssl_csr --acme-dir /var/www/challenges/ > ./signed.crt
curl -sSL -o intermediate.pem https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem
cat signed.crt intermediate.pem > ${ssl_crt}
nginx -s reload
echo "Nginx reloaded."
Nu kan du starta Seafile:
#> docker-compose up -d
Ett certifikat från Let’s Encrypt kommer automatiskt att utfärdas för det
värdnamnet du angav i variablen SEAFILE_SERVER_HOSTNAME
. Notera att
värdnamnet måste vara nåbart från internet för att detta ska fungera.
Kontrollera gärna så att allt fungerar med docker-compose logs -f
.
Du kan därefter surfa in på Seafile på den adress vi angav i
docker-compose.yml
-filen, i det här fallet https://seafile.example.com.
Notera att buggen troligen kommer att fixas inom en snar framtiden, och då
kommer inte längre den modifierade ssl.sh
att behövas. Det finns redan en
buggrapport på problemet på
GitHub.
Kommentarer
Kommentarsfältet är modererat. Det innebär att alla kommentarer granskas av ansvarig utgivare före publicering.
Du väljer själv om du vill ange ditt riktiga namn, en pseudonym eller vara helt anonym. Ingen registrering behövs.
Relaterade artiklar
-
Var försiktig med att curl:a skript som root
Att installera program i Linux genom att omdirigera utdata från Curl till skalet är snabbt och smidigt. Men det är ack så farligt om du inte känner till programmet eller dess ursprung.
-
Vidarebefordran av SSH-agenten
SSH agent forwarding, eller vidarebefordran av SSH-agenten, innebär att man kan vidarebefordra SSH-agenten till ett fjärrsystem. På så sätt behöver man inte kopiera sin privata SSH-nyckel till fjärrsystemet, eller skapa flera nycklar för olika system. Men det finns risker med det.
-
Jenkins som ett alternativ till Ansible Tower
Ansible Tower kommer med en stor prislapp, speciellt för ett mindre företag eller en privatperson. AWX å andra sidan är helt fritt, men kräver numera Kubernetes. För den som vill automatisera sina Ansible Playbooks går det dock bra att använda Jenkins som en ersättning för Tower och AWX.
-
Hämta data från API:er med cURL och jq
Med cURL och jq går det att extrahera data från API:er direkt från kommandoraden. Jq är en JSON-tolkare och beskrivs av utvecklarna som sed och awk för JSON.
-
Det nya Docker Compose
Sedan i mitten av förra året har det gamla Python-baserade
docker-compose
-kommandot sakta ersatts av det nyare Go-baseradedocker compose
. Det nya kommandot är ett plugin till Docker istället för ett fristående kommando som tidigare.
Senaste nyheterna och inläggen
-
Författarintervju med Josefin Hansson
År 2022 debuterade hon med boken “Ur askan en drake”. Boken tar upp duktiga flickan-syndromet och psykisk ohälsa. Hon har också varit ambassadör för Hjärnkoll och föreläst på bland annat Medborgarskolan. Idag driver hon eget företag inom samtalscoaching.
-
En chans att vinna Demonerna på internet
Företaget GleSYS lottar ut tre exemplar av vår bok Demonerna på internet i en tävling på LinkedIn. Passa på att tävla du också för en chans att vinna!
-
Störning hos SEBs internetbank
På söndag eftermiddag gick det inte logga in på SEBs internetbank. Webbsidan Downdetector hade vid klockan 14:30 fått in 240 rapporter om den pågående störningar. På SEBs kundtjänst är man medveten om problemet och meddelar att tekniker arbetar med att åtgärda det.
-
Datorparty i Landskrona
I helgen höll Syntax Society sitt årliga sommarparty. Platsen var en källarlokal i Landskrona där ett femtontal personer medverkade.
-
Titta på C64-demos
Med Commodore-emulatorn VICE går det att spela gamla C64-spel och titta på demos från demonpartyn. Men VICE under Debian Linux saknar några nödvändiga filer som vi behöver leta upp själva.
Utvalda artiklar
-
Datorparty i Landskrona
I helgen höll Syntax Society sitt årliga sommarparty. Platsen var en källarlokal i Landskrona där ett femtontal personer medverkade.
-
Det första Pågadata har ägt rum
I helgen ägde det första Pågadata rum – uppföljaren till Gubbdata. Platsen var Folkets Hus i Kvidinge. Organisatör av partyt var Johan “z-nexx” Osvaldsson med hjälp från Jesper “Skuggan” Klingvall. Partyt hade över 100 anmälda deltagare.
-
Även hovrätten fäller poliserna för att ha satt dit oskyldig
Hovrätten fastställer straffet för de två poliser som förra året dömdes till vardera ett års fängelse av Lunds tingsrätt för att ha misshandlat och satt dit en oskyldig man. De båda poliserna ska även betala skadestånd till mannen.
-
Retroloppis i Påarp
Idag var det retroloppis hos Andreas Nilsson i Påarp. På baksidan av huset fanns hundratals spel uppradade på långa bord. Trots friska vindar och sval temperatur var loppisen välbesökt.
-
Stort deltagande på årets Gubbdata
I helgen var det Gubbdata i Lund – ett av Sveriges största demoparty. På plats fanns cirka ett hundra deltagare, alla med en passion för retrodatorer.
CyberInfo Sverige är ett it- och medieföretag i nordvästra Skåne som tillhandahåller böcker, utbildningar, nyheter och konsulttjänster inom Linux, säkerhet och programmering.
CyberInfo Sverige är godkänd för F-skatt, är momsregistrerat och innehar
utgivningsbevis för webbplatsen www.cyberinfo.se.