Kako migrirati nextcloud na linuxu između servera

Article Image

Kada i zašto premestiti Nextcloud između Linux servera

Možda želiš da promeniš hosting, unaprediš hardver, konsoliduješ servise ili prebaciš instancu na sigurnije okruženje. Migracija Nextclouda između Linux servera nije samo kopiranje fajlova — zahteva planiranje da bi podatci, podešavanja i korisničke privilegije ostali netaknuti. U ovom prvom delu pokrićemo šta treba da proveriš pre nego što kreneš sa tehničkim koracima i kako da organizuješ sve potrebne komponente.

Pripremni koraci i proveravanje okruženja

Napraviti listu komponenata koje koristiš

Pre nego što pređeš na akciju, identifikuj sve komponente tvoje Nextcloud instance:

  • Verzija Nextcloud-a (važno za kompatibilnost pri restoranu).
  • Tip baze podataka (MySQL/MariaDB ili PostgreSQL) i njena verzija.
  • Web server (Apache, Nginx) i PHP verzija sa instaliranim ekstenzijama.
  • Lokacija data direktorijuma (npr. /var/www/nextcloud/data ili bind mount).
  • Crontab ili systemd timer koji pokreće cron zadatke Nextclouda.
  • Specijalne aplikacije ili ekstenzije (external storage, encryption).
  • SSL sertifikati, load balancer i DNS podešavanja.

Provere kompatibilnosti i pristupa

Trebaš da osiguraš da ciljni server podržava iste ili kompatibilne verzije softvera. Ako planiraš nadogradnju tokom migracije, dokumentuj trenutnu verziju i plan nadogradnje. Proveri da li imaš root ili sudo pristup na oba servera i da možeš da koristiš alatke kao što su ssh, rsync, mysqldump/pg_dump.

Izolovanje i backup podataka

Pre operacije obavezno napravi potpuni backup:

  • Dump baze pomoću mysqldump ili pg_dump.
  • Arhiviraj ili sinhronizuj data direktorijum (koristi rsync za očuvanje prava i linkova).
  • Sacuvaj config/config.php i sve prilagođene fajlove (cron fajlovi, systemd/service fajlovi, SSL certifikati).

Preporučljivo je staviti Nextcloud u održavanje (maintenance mode) pre finalnog dump-a kako bi sve transakcije bile dosledne.

Precizno odredjivanje šta preneti i kako to organizovati

Organizuj svoj plan prenosa tako da imaš jasne korake: 1) backup na izvoru, 2) transfer podataka na odredište, 3) import baze i podataka, 4) testiranje. Posebno obrati pažnju na permision-e (vlasništvo i grupu fajlova) i na konfiguraciju PHP-a (memory_limit, upload_max_filesize, opcache), jer greške ovde često uzrokuju nefunkcionalnost posle migracije.

U sledećem delu ćemo praktično pokazati komande za stavljenje sistema u održavanje, pravljenje dump-a baze, sigurnu sinhronizaciju data direktorijuma pomoću rsync i prenos konfiguracionih fajlova na ciljnu mašinu, korak po korak.

Praktični koraci: maintenance mode, dump baze i sigurna sinhronizacija data direktorijuma

Sad prelazimo na konkretne komande i redosled. Pretpostavimo da je Nextcloud instaliran u /var/www/nextcloud i da je web server korisnik www-data (zameni po potrebi za apache/nginx korisnika na tvom sistemu).

1) Stavi Nextcloud u maintenance mode (na izvoru):

sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on

Ovo sprečava promene tokom dump-a i kopiranja.

2) Dump baze (MySQL/MariaDB):

mysqldump --single-transaction --quick --lock-tables=false -u root -p nextcloud > nextcloud-sqlbkp.sql

Za PostgreSQL:

pg_dump -U postgres -Fc -f nextcloud-sqlbkp.dump nextcloud

Koristi –single-transaction za InnoDB da bi dobio dosledan snapshot bez zabravljivanja tabela.

3) Sinhronizuj data direktorijum sa rsync-om. Primer koji čuva prava, linkove, extended attributes i SELinux kontekst:

rsync -aHAX --delete --numeric-ids --progress -e "ssh -p 22" /var/www/nextcloud/data/ user@target:/var/www/nextcloud/data/

Objašnjenje bitnih opcija:

  • -a: arhiva (rekurzivno, čuva prava i vlasništvo).
  • -H: čuva hard linkove.
  • -A: čuva ACL-ove.
  • -X: čuva xattr (važno za nogle storage/preview meta podatke).
  • –numeric-ids: čuva numeričke UID/GID i izbegava mapiranje imena preko nss/pam.

4) Kopiraj konfiguraciju i dodatne fajlove:

scp /var/www/nextcloud/config/config.php user@target:/var/www/nextcloud/config/
scp -r /etc/letsencrypt/live/ user@target:/etc/letsencrypt/live/   # ako koristiš Let's Encrypt

Sačuvaj i cron ili systemd jedinice:

sudo crontab -u www-data -l > nextcloud-cron
scp nextcloud-cron user@target:/tmp/

5) Isključi maintenance mode na izvoru tek nakon što si potvrdio da su dump i rsync uspešno završeni i sigurnosno kopirani na drugi disk (ne obriši izvor dok ne potvrdiš cilj):

sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off
Article Image

Obnova na ciljnom serveru: import baze, podešavanje prava i finalne provere

Nakon transfera, idi na ciljni server i pripremi okruženje: instaliraj iste PHP ekstenzije, web server i odgovarajuću verziju baze (ili kompatibilnu verziju). Zatim importuj bazu i postavi prava.

1) Import baze (MySQL/MariaDB):

mysql -u root -p
CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost' IDENTIFIED BY 'tvoja_lozinka';
EXIT;
mysql -u nextcloud -p nextcloud < nextcloud-sqlbkp.sql

Za PostgreSQL:

pg_restore -U postgres -d nextcloud nextcloud-sqlbkp.dump

2) Postavi prava i vlasništvo:

chown -R www-data:www-data /var/www/nextcloud
find /var/www/nextcloud -type d -exec chmod 750 {} ;
find /var/www/nextcloud -type f -exec chmod 640 {} ;

Ako koristiš SELinux, izvrši restorecon:

sudo restorecon -R /var/www/nextcloud

3) Prilagodi config.php: ažuriraj dbhost, dbuser, dbpassword i trusted_domains da odgovaraju novom serveru/IP adresi. Ako si promenio putanje (npr. data direktorijum), izmeni ‘datadirectory’.

4) Import cron-a ili registruj systemd timer, pa pokreni jedinice:

sudo crontab -u www-data /tmp/nextcloud-cron
sudo systemctl daemon-reload
sudo systemctl enable --now apache2

5) Pokreni provizorne Nextcloud komande za proveru i popravku:

sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --on
sudo -u www-data php /var/www/nextcloud/occ db:convert-filecache-bigint   # ako je potrebno
sudo -u www-data php /var/www/nextcloud/occ maintenance:repair
sudo -u www-data php /var/www/nextcloud/occ files:scan --all
sudo -u www-data php /var/www/nextcloud/occ maintenance:mode --off

6) Testiranje: prijavi se u web interfejs, proveri da li su svi korisnici, fajlovi i deljenja tu, proveri logove (data/nextcloud.log i web server logove) i proveri background jobove (cron/systemd) da rade. Ako koristiš eksterne storage backende, proveri konekcije i kredencijale.

U narednom delu ćemo obraditi uobičajene greške koje se javljaju pri migraciji i kako ih brzo dijagnostifikovati.

Article Image

Uobičajene greške i brzi koraci za dijagnostiku

  • Problem sa dozvolama: proveri vlasništvo i permisije (npr. chown -R www-data:www-data i podesite 750/640). Ako se pojave greške pri pristupu fajlovima, pogledaj web server log i data/nextcloud.log.
  • Greška pri povezivanju na bazu: potvrdi da su dbhost, dbuser i dbpassword tačno podešeni u config.php i da je baza importovana bez grešaka. Proveri da li su portovi i socket dostupni.
  • Nedostaju PHP ekstenzije: ako Nextcloud prijavljuje zahteve za ekstenzijama, instaliraj potrebne pakete (npr. php-mysql, php-gd, php-xml) i restartuj web server.
  • Nevide fajlovi nakon prekopiranja: pokreni sudo -u www-data php /var/www/nextcloud/occ files:scan –all i proveri da li su skenovani svi korisnici.
  • Razlike u UID/GID: ako koristiš –numeric-ids sa rsync, uveri se da su isti numerički UID/GID na cilju ili prilagodi vlasništvo posle kopiranja.
  • Problemi sa eksternim storage-om: ponovo autorizuj konekcije i proveri kredencijale; proveri journal/web server log za specifične greške.

Završne napomene

Pri migraciji drži se principa “priprema-preverifikacija-bezbednost”: napravi backup, testiraj restore na izolovanom okruženju i ne briši izvor dok se ne uveriš da sve radi. Ako nisi siguran u verzije softvera ili specifične opcije, konsultuj zvaničnu dokumentaciju kao dodatnu meru: Nextcloud Admin Manual.

Frequently Asked Questions

Koliko dugo treba držati Nextcloud u maintenance mode?

Drži maintenance mode samo tokom dump-a baze i dok rsync ne završi i dok ne potvrdiš da je backup na sigurnom mestu. Isključi ga čim import i osnovne provere na ciljnom serveru uspešno prođu.

Šta ako se fajlovi pojave kao “missing” nakon kopiranja?

Pokreni sudo -u www-data php /var/www/nextcloud/occ files:scan –all da regenerišeš filecache. Proveri i prava, vlasništvo i da li su svi xattr/ACL-ovi sačuvani pri rsync kopiranju.

Kako da migriram korisnike bez gubitka deljenja i grupnih dozvola?

Pobrini se da dump baze uključuje sve tabele (bez izostavljanja) i da importuješ istu verziju baze na cilj. Deljenja i grupne konfiguracije se čuvaju u bazi; nakon restore-a pokreni maintenance:repair i files:scan da bi se sinhronizovale reference.