Creare il proprio office online con Nextcloud
TL;DR
Nextcloud è la soluzione opensource che permette di trasformare molti device nella propria soluzione di storage online (come Dropbox). Ma non solo perchè grazie a molti app è possibile espandere le funzionalità e creare la propria soluzione di office online, come Office 365 di Microsoft o Drive di Google.
In questa guida veloce ho cercato di descrivere i passaggi per ottenere un’istanza di base di Nextcloud e sfruttare ONLYOFFICE per poter modificare i documenti online. Il tutto reso disponibile tramite Traefik reverse proxy, così da garantire una connessione sicura tramite https.
Tutti i file necessari sono disponibili sul mio repository GitHub.
Requisiti
Non è possibile in un unico articolo mostrare tutti i dettagli legati ai vari sistemi, alcune conoscenze di base sono richieste.
- sistema Linux con Docker e diriti amministrativi
- configurazione di base di Traefik (guida)
- due sotto dominio che punti all’istanza di Traefik, per esempio drive.example.com e office.example.com. Se Nextcloud deve essere raggiungibile da internet, entrambi i domini devo essere raggiungibili.
Nextcloud
ATTENZIONE: seguire i passaggi così come sono indicati. Se il file di configurazione viene creato le variabili di docker non sono più elaborate.
Il primo passo dopo aver configurato Traefik con l’accesso alla rete
net_nextcloud
Prima di creare il container Nextcloud e il relativo database, si devono completare tutte le variabili nel file
.env
...
NEXTCLOUD_TRUSTED_DOMAINS="drive.example.com drive.example2.com"
NEXTCLOUD_TRUSTED_PROXIES=172.20.0.3/32
NEXTCLOUD_DB_PASSWORD=Super$ecretPassword12345
...
- Il valore del campo
NEXTCLOUD_TRUSTED_PROXIES
può essere individuato con il comando seguente. Nel risultato del comando eseguito cercate l’indirizzo ip della retexyz_net_nextcloud
e aggiungete/32
sudo docker inspect reverse-proxy
- Adesso è possibile creare il container Nextcloud e il suo database con il comando
sudo docker-compose up -d nextcloud
- Accedendo al dominio
https://drive.example.com
è possibile verificare se Nextcloud funziona correttamente
Passaggi da eseguire dopo aver creato il container Nextcloud
Ammesso che il vostro Nextcloud sia raggiungibile è possibile procedere con i prossimi passaggi. I seguenti passaggi non sono obbligatori, ma consigliati da Nextcloud.
Prefisso telefonico
Sotto le impostazioni nel menu Riepilogo
appare un avviso che vi chiedere di aggiungere il condice di default per la tua regione, questo passaggio (non si può fare tramite docker-compose) e richiede un’aggiunta manuale al file di configurazione config.php
.
È possibile aggiungere il codice con il seguente comando (potrebbe essere necessario anteporre sudo
al comando), oppure aggiungere al file di configurazione la chiave default_phone_region
e relativo valore.
docker-compose exec --user www-data nextcloud php occ config:system:set default_phone_region --value="CH"
Installare php-imagick
Sempre nel menu Riepilogo
sotto impostazioni appare un messaggio per la mancanza della libreria php-imagick
. Eseguire i comandi seguinti per risolvere il messaggio (anche qui può essere necessario aggiungere sudo
).
docker-compose exec nextcloud apt -y update
docker-compose exec nextcloud apt -y install libmagickcore-6.q16-6-extra
Aggiungere un server email
L’ultimo messaggio che appare nel menu Riepilogo
richiede l’inserimento di un server per poter inviare notifiche agli amministratori o il reset della password per gli utenti.
Attivare cron job con uptime-kuma
Questo forse è l’unica impostazione utile da eseguire, ma qui non posso descrivere completamente la soluzione. Io ho sfruttato un servizio già a disposizione nel mio docker: uptime-kuma
(vedi guida).
ONLYOFFICE
- Adesso che Nexcloud è funzionante si può procedere con la creazione del server ONLYOFFICE , con il comando:
sudo docker-compose up -d onlyoffice
- Verificare che il server ONLYOFFICE sia funzionante, provare a collegarsi all’indirizzo:
https://office.example.com
. Se appare una pagina di ONLYOFFICE è tutto ok.
Collegare Nextcloud al server ONLYOFFICE
In Nextcloud si deve installare una app dallo “store” per poter aprire i documenti office direttamente in Nextcloud. Per farlo si deve aprire lo store cliccando in alto a destra e cliccare su + Applicazioni
e poi cercare ONLYOFFICE. Cliccare su scarica e installa e poi passare alle impostazioni.
Nel tab ONLYOFFICE
sulla sinistra e inserire i valori in questi campi:
- indirizzo di ONLYOFFICE DOCS: https://office.example.com
- aprire le impostazioni avanzate
- indirizzo per richieste interne: https://office.example.com
- Salvare
Nella schermata dei file è possibile aprire un documento .docx
o altri per testare se ONLYOFFICE funziona correttamente.
ATTENZIONE: anche il server di ONLYOFFICE deve essere raggiungibile tramite internet se volete usare Nextcloud e ONLYOFFICE fuori dalla vostra rete casalinga.
Update (23.9.2022)
Con l’ultimo aggiornamento di ONLYOFFICE server è necessario configurare un token con la variabile JWT_SECRET
. Lo stesso valore deve essere configurato in Nextcloud nelle impostazioni di ONLYOFFICE.
docker-compose
nextcloud:
image: nextcloud:latest
container_name: nextcloud
networks:
- net_nextcloud
- net_nextcloud_db
labels:
- 'traefik.enable=true'
- 'traefik.http.routers.nextcloud.rule=Host(`drive.${DOMAIN}`)'
- 'traefik.http.routers.nextcloud.entrypoints=web-secure'
- 'traefik.http.routers.nextcloud.tls=true'
- "traefik.http.routers.nextcloud.tls.certresolver=certificato"
- "traefik.http.routers.nextcloud.tls.domains[0].main=*.${DOMAIN}"
- "traefik.http.routers.nextcloud.service=nextclouddService"
- "traefik.http.services.nextclouddService.loadBalancer.server.port=80"
- "traefik.http.routers.nextcloud.middlewares=nc-rep,nc-header"
- "traefik.http.middlewares.nc-rep.redirectregex.regex=https://(.*)/.well-known/(card|cal)dav"
- "traefik.http.middlewares.nc-rep.redirectregex.replacement=https://$$1/remote.php/dav/"
- "traefik.http.middlewares.nc-rep.redirectregex.permanent=true"
- "traefik.http.middlewares.nc-header.headers.frameDeny=true"
- "traefik.http.middlewares.nc-header.headers.sslRedirect=true"
- "traefik.http.middlewares.nc-header.headers.contentTypeNosniff=true"
- "traefik.http.middlewares.nc-header.headers.stsIncludeSubdomains=true"
- "traefik.http.middlewares.nc-header.headers.stsPreload=true"
- "traefik.http.middlewares.nc-header.headers.stsSeconds=31536000"
- "traefik.http.middlewares.nc-header.headers.referrerPolicy=same-origin"
- "traefik.http.middlewares.nc-header.headers.browserXssFilter=true"
- "traefik.http.middlewares.nc-header.headers.customRequestHeaders.X-Forwarded-Proto=https"
- "traefik.http.middlewares.nc-header.headers.customResponseHeaders.X-Robots-Tag=none"
- "traefik.http.middlewares.nc-header.headers.customFrameOptionsValue=SAMEORIGIN"
- "traefik.docker.network=net_nextcloud"
volumes:
- /path/to/docker/nextcloud/data:/var/www/html
environment:
- NEXTCLOUD_TRUSTED_DOMAINS=${NEXTCLOUD_TRUSTED_DOMAINS}
- APACHE_DISABLE_REWRITE_IP=1
- TRUSTED_PROXIES=${NEXTCLOUD_TRUSTED_PROXIES}
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=${NEXTCLOUD_DB_PASSWORD}
- MYSQL_HOST=nextcloud-db
- OVERWRITEPROTOCOL=https
#- DEFAULT_PHONE_REGION=CH not working see: https://github.com/nextcloud/docker/issues/1465
depends_on:
- nextcloud-db
restart: unless-stopped
nextcloud-db:
container_name: nextcloud-db
image: mariadb
networks:
- net_nextcloud_db
environment:
MYSQL_DATABASE: nextcloud
MYSQL_PASSWORD: ${NEXTCLOUD_DB_PASSWORD}
MYSQL_USER: nextcloud
MYSQL_ROOT_PASSWORD: ${NEXTCLOUD_DB_PASSWORD}
TZ: ${TIME_ZONE_ZUERICH}
logging:
driver: "none"
restart: unless-stopped
volumes:
- /path/to/docker/nextcloud/db/:/var/lib/mysql
onlyoffice:
image: onlyoffice/documentserver
container_name: onlyoffice
networks:
- net_nextcloud
labels:
- 'traefik.enable=true'
- 'traefik.http.routers.onlyoffice.rule=Host(`office.${DOMAIN}`)'
- 'traefik.http.routers.onlyoffice.entrypoints=web-secure'
- 'traefik.http.routers.onlyoffice.tls=true'
- "traefik.http.routers.onlyoffice.tls.certresolver=certificato"
- "traefik.http.routers.onlyoffice.tls.domains[0].main=*.${DOMAIN}"
- "traefik.http.routers.onlyoffice.service=onlyofficeService"
- "traefik.http.routers.onlyoffice.middlewares=onlyoffice-headers"
- "traefik.http.services.onlyofficeService.loadBalancer.server.port=80"
- "traefik.http.middlewares.onlyoffice-headers.headers.customrequestheaders.X-Forwarded-Proto=https"
- "traefik.http.middlewares.onlyoffice-headers.headers.accesscontrolalloworiginlist=*"
- "traefik.docker.network=net_nextcloud"
environment:
- JWT_SECRET=${ONLYOFFICE_SECRET}
restart: unless-stopped
Crediti foto: Pix4free