Websites op afstand onderhouden met Sitecopy op Ubuntu 18.04

Sitecopy is een hulpmiddel om lokaal opgeslagen websites naar een remote webserver te kopiëren (via FTP of WebDAV). Het helpt je om de remote site synchroon te houden met je lokale kopie door gewijzigde lokale bestanden te uploaden en remote bestanden te verwijderen die op de lokale computer zijn verwijderd. Deze handleiding laat zien hoe je je remote site vanaf je lokale Ubuntu 18.04 bureaublad kunt beheren met Sitecopy.

1 Opmerking vooraf

Ik gebruik de gebruikersnaam till op mijn lokale Ubuntu bureaublad (ik ben op mijn lokale Linux bureaublad ingelogd als die gebruiker – log alsjeblieft niet in als root). De bestanden voor de remote web site example.com staan in de directory /home/till/sites/example.com/ op de lokale computer. De root van de remote documenten is /var/www/example.com/web/.

Je kunt sitecopy gebruiken met FTP en WebDAV, dus je moet of een FTP of een WebDAV account op de externe server hebben. Ik gebruik hier de FTP gebruikersnaam defaulttill en het wachtwoord howtoforge.

De externe website die ik voor deze voorbeelden gebruik is gemaakt met ISPConfig. Maar elke site waar je FTP of WebDAV toegang toe hebt zal werken.

2 Sitecopy installeren

Sitecopy kan als volgt op het lokale bureaublad geïnstalleerd worden (we hebben root privileges nodig, daarom gebruiken we sudo):

sudo apt-get -y install sitecopy

Je bekijkt nu best de man pagina van sitecopy om vertrouwd te raken met de mogelijkheden ervan:

man sitecopy

3 Sitecopy instellen

Ga naar je thuismap op het lokale bureaublad…

cd ~

… en maak de directory .sitecopy aan met rechten van 700 (sitecopy gebruikt die directory om bestandsgegevens op te slaan):

mkdir -m 700 .sitecopy

Maak vervolgens het sitecopy configuratiebestand .sitecopyrc:

touch .sitecopyrc
chmod 600 .sitecopyrc

Open het bestand …

nano .sitecopyrc

… en vul de configuratie in voor de example .com site. Hier zijn twee voorbeelden, een voor FTP…

site example.com
  server example.com
  username defaulttill
  password howtoforge
  local /home/till/sites/example.com/
  remote ~/web/
  exclude *.bak
  exclude *~

… en een voor WebDAV:

site example.com
  server example.com
  protocol webdav
  username defaulttill
  password howtoforge
  local /home/till/sites/example.com/
  remote /var/www/example.com/web/
  exclude *.bak
  exclude *~

(Je kunt een stanza definiëren voor elke website die je met sitecopy wilt beheren.)

De site richtlijn moet gevolgd worden door een naam voor de web site – je kunt er vrij een kiezen, bv. example.com of mysite. Deze naam zal later in de sitecopy commando’s gebruikt worden. De volgende configuratie-opties die bij die site horen moeten worden ingesprongen!

De meeste van de volgende configuratie-opties spreken voor zich. Het standaard protocol is FTP; als je WebDAV wilt gebruiken, geef dan protocol webdav op. De richtlijn local bevat het lokale pad van de web site kopie, remote bevat het pad van de web site op de externe server – het kan absoluut of relatief zijn. Als je gebruiker ge-chroot is (zoals gewoonlijk het geval is bij FTP gebruikers), gebruik je een relatief pad (zoals ~/ of ~/web). Gebruik anders een absoluut pad.

De exclude regels zijn optioneel, ze staan hier alleen om te demonstreren hoe je bestanden kunt uitsluiten van onderhoud door sitecopy.

Meer over de configuratie van sitecopy kun je vinden op zijn man pagina:

man sitecopy

4 Eerste gebruik

Voordat je sitecopy voor het eerst gebruikt, moet je beslissen welke van de volgende drie scenario’s bij je situatie past:

  1. Bestaande remote site en lokale kopie, beide in sync.
  2. Bestaande remote site, geen lokale kopie.
  3. Nieuwe remote site, bestaande lokale kopie.

4.1 Bestaande externe site en lokale kopie, beide in sync

Als zowel de remote site als de lokale kopie bestaan en in sync zijn, voer dan

sitecopy --catchup example.com

om sitecopy te laten denken dat de lokale site precies dezelfde is als de remote kopie. Vervang example.com door de naam van de site die je gebruikt in het .sitecopyrc bestand.

[email protected]:~$ sitecopy --catchup example.com
sitecopy: Catching up site `example.com' (on example.com in ~/web/)
sitecopy: All the files and and directories are marked as updated remotely.

4.2 Bestaande site op afstand, geen lokale kopie

Als je geen lokale kopie hebt van de bestaande remote web site, voer dan eerst

sitecopy --fetch example.com

eerst zodat sitecopy de lijst met bestanden van de externe server ophaalt (vervang example.com door de naam van de site die je gebruikt in het .sitecopyrc bestand):

[email protected]:~$ sitecopy --fetch example.com
sitecopy: Fetching site `example.com' (on example.com in ~/web/)
File: error/503.html - size 1906
File: error/502.html - size 1881
File: error/500.html - size 1851
File: error/405.html - size 1810
File: error/404.html - size 1806
File: error/403.html - size 1809
File: error/401.html - size 1806
File: error/400.html - size 1792
File: stats/.htaccess - size 128
File: robots.txt - size 14
File: index.html - size 1861
File: favicon.ico - size 7358
File: .htaccess - size 26
Directory: error/
Directory: stats/
sitecopy: Fetch completed successfully.

Voer dan

sitecopy --synch example.com

om de lokale site bij te werken vanaf de kopie op afstand.

sitecopy: Synchronizing site `example.com' (on example.com in ~/web/)
Creating error/: done.
Creating stats/: done.
Downloading error/503.html: [.] done.
Downloading error/502.html: [.] done.
Downloading error/500.html: [.] done.
Downloading error/405.html: [.] done.
Downloading error/404.html: [.] done.
Downloading error/403.html: [.] done.
Downloading error/401.html: [.] done.
Downloading error/400.html: [.] done.
Downloading stats/.htaccess: [.] done.
Downloading robots.txt: [.] done.
Downloading index.html: [.] done.
Downloading favicon.ico: [.] done.
Downloading .htaccess: [.] done.
sitecopy: Synchronize completed successfully.

4.3 Nieuwe site op afstand, bestaande lokale kopie

Als de lokale kopie bestaat, maar je hebt een lege remote site, voer dan

sitecopy --init example.com

eerst om de site te intialiseren. Vervang example.com door de naam van de site die je gebruikt in het .sitecopyrc bestand.

[email protected]:~$ sitecopy --init example.com
sitecopy: Initializing site `example.com' (on example.com in ~/web/)
sitecopy: All the files and directories are marked as NOT updated remotely.

Voer dan uit:

sitecopy --update example.com

om de lokale kopie naar de remote site te uploaden:

[email protected]:~$ sitecopy --update example.com
sitecopy: Updating site `example.com' (on example.com in ~/web/)
Creating stats/: done.
Creating data/: done.
Creating error/: done.
Uploading stats/.htaccess: [.] done.
Uploading data/index.html: [.] done.
Uploading error/403.html: [.] done.
Uploading error/401.html: [.] done.
Uploading error/404.html: [.] done.
Uploading error/503.html: [.] done.
Uploading error/400.html: [.] done.
Uploading error/502.html: [.] done.
Uploading error/405.html: [.] done.
Uploading error/500.html: [.] done.
Uploading index.html: [.] done.
Uploading robots.txt: [.] done.
Uploading .htaccess: [.] done.
Uploading favicon.ico: [.] done.
sitecopy: Update completed successfully.

5 Gebruik van sitecopy

Daarna is het gebruik van sitecopy heel eenvoudig. Je kunt met je lokale kopie werken en bestanden bijwerken, maken en verwijderen. Een eerste, maar optionele stap is het uitvoeren van

sitecopy example.com

uit te voeren om te zien welke bestanden plaatselijk veranderd zijn (vervang example.com door de naam van de site die je gebruikt in het .sitecopyrc bestand):

[email protected]:~$ sitecopy example.com
sitecopy: Showing changes to site `example.com' (on example.com in ~/web/)
* These items have been added since the last update:
info.php
sitecopy: The remote site needs updating (1 item to update).

Om je remote web site te synchroniseren met je lokale kopie (d.w.z. nieuwe en veranderde bestanden naar de remote server te uploaden en bestanden op de remote server te verwijderen die lokaal verwijderd zijn), voer je eenvoudigweg

sitecopy --update example.com
[email protected]:~$ sitecopy --update example.com
sitecopy: Updating site `example.com' (on example.com in ~/web/)
Uploading info.php: [] done.
sitecopy: Update completed successfully.

Dat is het! Veel plezier met sitecopy!

6 Links