Handige tips voor SSH!

Op Valentijnsdag hadden we een cadeautje voor jullie: SSH-toegang op onze pakketten. Mogelijk heb je als een kind zo blij het cadeaupapier er gelijk afgescheurd en ben je er vol mee aan de slag gegaan. Wellicht ook niet, bijvoorbeeld omdat je niet goed weet wat voor mogelijkheden dit je biedt. Vandaar een aantal SSH tips, graag licht ik je een aantal situaties toe waar SSH goed van pas komt.

SSH tips: Nu SSH-toegang bij Antagonist

Zoals mijn collega Erik Jan twee weken geleden aangaf, was het plan dat ik nu wat zou vertellen over een aantal mogelijkheden die SSH je geeft. De onderwerpen die die ik aan bod wilde laten komen, had ik zelfs als klaarstaan. Het zou gaan over Composer, Magento, Git en SFTP.

Het is gebleken dat SSH een welkome toevoeging was. Er is zelfs een klant die nog dezelfde dag een handleiding schreef over hoe je Composer bij Antagonist gebruikt. Aangezien ik daar niets aan heb toe te voegen, schrap ik Composer hier van mijn lijstje. Daniël, bedankt! In plaats daarvan wil ik het graag met jullie ook over Drush hebben.

Het menu is daardoor als volgt:

SSH tips voor Magento

We beginnen met de welbekende e-commerce-applicatie Magento. Het komt voor dat je graag de index van Magento opnieuw wilt bouwen. Met SSH is dit heel gemakkelijk te regelen. Je logt eerst in middels SSH:

$ ssh <username>@<mijnsite.nl>

Vervolgens ga je naar de map waar je Magento-installatie staat:

$ cd public_html

Of, als je Magento-installatie niet rechtstreeks in de /public_html/-map staat:

$ cd public_html/<magento_map>

Nu kun je afhankelijk van de Magento-versie je indexes beheren. Voor Magento 1 staan in de map /shell/ de verschillende bestanden. Voor het indexeren, gebruik je ‘indexer.php’ als volgt:

$ php shell/indexer.php --status
Product Attributes:             	Pending
Product Prices:                 	Pending
Catalog URL Rewrites:           	Pending
Category Products:              	Pending
Catalog Search Index:           	Pending
Stock Status:                   	Pending
Tag Aggregation Data:           	Pending
$  php shell/indexer.php --reindexall
Product Attributes index was rebuilt successfully in 00:00:01
Product Prices index was rebuilt successfully in 00:00:00
Catalog URL Rewrites index was rebuilt successfully in 00:00:07
Category Products index was rebuilt successfully in 00:00:00
Catalog Search Index index was rebuilt successfully in 00:00:01
Stock Status index was rebuilt successfully in 00:00:00
Tag Aggregation Data index was rebuilt successfully in 00:00:00

Voor Magento 2 is het vergelijkbaar, met het verschil dat daar een script genaamd ‘magento’ in de map /bin/ staat:

$ php bin/magento indexer:status
Customer Grid:                                 	Ready
Category Products:                             	Reindex required
Product Categories:                            	Reindex required
Product Price:                                 	Reindex required
Product EAV:                                   	Reindex required
Stock:                                         	Reindex required
Catalog Rule Product:                          	Reindex required
Catalog Product Rule:                          	Reindex required
Catalog Search:                                	Ready
$ php bin/magento indexer:reindex
Customer Grid index has been rebuilt successfully in 00:00:01
Category Products index has been rebuilt successfully in 00:00:00
Product Categories index has been rebuilt successfully in 00:00:00
Product Price index has been rebuilt successfully in 00:00:00
Product EAV index has been rebuilt successfully in 00:00:00
Stock index has been rebuilt successfully in 00:00:00
Catalog Rule Product index has been rebuilt successfully in 00:00:01
Catalog Product Rule index has been rebuilt successfully in 00:00:00
Catalog Search index has been rebuilt successfully in 00:00:00
$ php bin/magento indexer:status
Customer Grid:                                 	Ready
Category Products:                             	Ready
Product Categories:                            	Ready
Product Price:                                 	Ready
Product EAV:                                   	Ready
Stock:                                         	Ready
Catalog Rule Product:                          	Ready
Catalog Product Rule:                          	Ready
Catalog Search:                                	Ready

Natuurlijk kun je meer met Magento op de console. Als je de scripts zonder verdere argumenten aanroept, zul je de andere beschikbare opties zien.

Tips voor SSH: Magento

Pro-tip! Voeg in het bestand /home/.bashrc de volgende regel toe:

PATH=$PATH:$HOME/domains/public_html/bin/

Vanaf de volgende keer dat je op SSH inlogt, heb je het commando ‘magento’ tot je beschikking, zonder dat je het pad erbij hoeft te typen. Je kunt dan alle commando’s die Magento hier in de documentatie heeft beschreven aanroepen zonder dat je daarbij het pad hoeft te gebruiken.

Dus in plaats van:

$ php bin/magento indexer:status

Gebruik je dan:

$ magento indexer:status

Het maakt dan niet uit wat je huidige werkpad is.

Dit werkt natuurlijk vooral goed als je “maar” één Magento-installatie hebt. Wanneer je er meerdere hebt, zul je het iets anders moeten aanpakken. Je kunt dan bijvoorbeeld een symlink in $home/bin zetten voor elke installatie:

$ mkdir -p $HOME/bin
$ ln -s $HOME/domains/public_html/bin/magento $HOME/bin/magento1
$ ln -s $HOME/domains/public_html/bin/magento $HOME/bin/magento2
$ ln -s $HOME/domains/public_html/bin/magento $HOME/bin/magento3

Op die manier heb je de beschikking over de commando’s ‘magento1’, ‘magento2’ en ‘magento3’. Een andere manier om dat te bereiken is met ‘alias’. Je zet dan het volgende in $HOME/.bashrc:

alias magento2="$HOME/domains/public_html/bin/magento"

SSH tips voor Drupal met Drush

Voor Drupal is er Drush, de Drupal Shell. Deze kun je eenvoudig installeren. Drush heeft zelf een goede installatiehandleiding beschikbaar gesteld. Graag vat ik het voor je samen:

Begin met het downloaden van het Drush PHP-archief:

$ wget http://files.drush.org/drush.phar

Test of de PHP-configuratie in orde is:

$ php drush.phar core-status

Het is mogelijk dat je op dit punt tegen één van de volgende meldingen krijgt:

exec() has been disabled for security reasons preflight.inc:380
The following restricted PHP modes have non-empty values: disable_functions.

Is dat het geval, dan moet je ‘system,exec,shell_exec’ uit de ‘disable_functions’ halen. Je kunt dit doen bij de PHP-selector in DirectAdmin.

Het wijzigen van de disable_functions in de PHP-selector

In de PHP-selector klik je op de knop ‘Show PHP Settings’. Daar haal je dan ‘system,exec,shell_exec’ bij de ‘disable_functions’ weg en klik je op ‘Apply’ om de wijziging te bevestigen. Maak vervolgens het bestand uitvoerbaar:

$ chmod +x drush.phar

Verplaats Drush naar de /bin/-directory, zodat je hem kunt uitvoeren zonder het pad te hoeven gebruiken.

$ mkdir -p $HOME/bin
$ mv drush.phar $HOME/bin/drush

Eventueel kun je nu ‘drush init’ typen voor tab-completion en handige aliassen:

$ drush init

Als je bij het opnieuw inloggen nu een melding krijgt die met “/usr/bin/which: no drush” begint, voeg dan in de file $HOME/.bashrc het volgende toe boven de Drush specifieke dingen die zojuist door “drush init” zijn toegevoegd:

PATH=$PATH:$HOME/bin

Je hebt nu een werkende Drush-installatie zodat je jouw Drupal-applicatie kunt beheren als een pro!

Je website updaten met Git

Leuk natuurlijk, die Magento en Drupal commando’s, maar wat als je zelf een website hebt gebouwd? Dit kan zoals ik lang geleden deed: de PHP-code die ik schreef, zette ik via FTP naar de webserver. Kleine wijzigingen deed ik snel lokaal, waarna ik via FTP de pagina weer ging uploaden.

Als ik een grotere wijziging wilde doen, dan maakte ik eerste een kopie van alles, zodat ik zeker wist dat ik terug kon als ik iets fout deed. Daarna weer de wijziging maken en uploaden met FTP.

Het werkte (redelijk). Echter, het gevolg was dat ik op mijn computer tientallen mapjes had die een kopie waren van de website, allemaal met net iets andere versies. Niet heel handig, maar ter verdediging: Git bestond toen niet.

Nu Git wel bestaat, zullen we eens kijken hoe we wat ik vroeger deed op een betere manier kunnen doen. Laten we beginnen met een lege Git-repository op de webhostingserver. Deze bevat uiteindelijk alle versies van je website.

Het aanmaken van een Git-repository op de hostingserver gaat als volgt:

$ ssh <username>@<mijnsite.nl>
$ git init --bare mijnsite.git

Dit doe je dus niet binnen je /public_html/-map, maar daarbuiten. In dit voorbeeld is ‘mijnsite.git’ een zogenaamde “bare repository”. Dit kun je zien als een soort van database waarin alle versies van je website-code staat.

Maak nu een post-receive-bestand aan met behulp van de twee commando’s die hieronder staan:

$ cat <<EOF > mijnsite.git/hooks/post-receive
#!/bin/sh
GIT_WORK_TREE=/home/<username>/domains/<mijnsite.nl>/public_html git checkout -f
EOF
$ chmod +x mijnsite.git/hooks/post-receive

Dit zorgt ervoor dat je naar je Git-repository pusht, wanneer je website in de /public_html/-map ook daadwerkelijk verandert.

Als je alleen een submap van /public_html/-map wilt beheren, dan kan dat natuurlijk ook. Je past dan het pad achter ‘GIT_WORK_TREE=’ erop aan.

Wat we nu hebben, is een lege Git-repository die elke keer als je de code er naartoe pusht de laatste versie in je /public_html/-map zet.

Tips voor SSH: logo Git

Nu kun je vanaf je eigen werkstation de repository clonen:

$ git clone <username>@<mijnsite.nl>:mijnsite.git
$ cd mijnsite

Je hebt nu een kopie van de lege Git repository lokaal op je werkstation. Stel, je creëert een bestand genaamd ‘git.html’ met de inhoud “Hello git!”:

$ cat <<EOF > git.html
Hello git!
EOF

Je kunt dat vervolgens toevoegen in Git en er een ‘commit’ van maken.

$ git add git.html
$ git commit -m “Mijn eerste commit”

Dit toevoegen en ‘commiten’ kun je ruwweg vergelijken met hoe ik vroeger een kopie van de hele map maakte.

Vervolgens moet de commit nog worden geüpload naar de webserver:

$ git push

Dit kun je vergelijken met via FTP je website uploaden, maar dan op een gave manier waarbij je alleen de wijzigingen uploadt en al je versies (commits) op de server (en lokaal) bewaard blijven. Als je nu http://<mijnsite.nl>/git.html bekijkt, zie je dat ook jij met Git kunt werken!

SFTP: veilig bestanden overzetten

In plaats van FTP kun je ook via SSH je bestanden naar de server kopiëren, wel zo veilig! Met Mac en Linux gaat dit makkelijk via de command-line met ‘scp’:

$ scp bestand.html <username>@<mijnsite.nl>:<pad>

Belangrijk is de dubbele punt tussen je domeinnaam en het pad. Je kunt ook het pad weglaten, je bestand zal dan in je ‘home-dir ‘ worden gezet. Dit is /home/<username>.

Wil je meerdere bestanden en/of een hele directory met inhoud kopiëren, dan kun je dat met ‘scp -r’ realiseren, bijvoorbeeld:

$ scp -r bestand1.html bestand2.php map1 <username>@<mijnsite.nl>:<pad>

Houd je niet zo van de command-line dan kun je bijvoorbeeld Cyberduck (Mac/Windows), WinSCP (Windows) of FileZilla (Linux/Mac/Windows) gebruiken om bestanden over te zetten. Bij WinSCP gebruik je standaard SFTP, bij Filezilla en Cyberduck moet je er zelf even goed op letten dat je voor SFTP kiest en niet voor gewoon FTP of FTPS.

En nog meer SSH tips!

Natuurlijk zijn er veel meer mogelijkheden met SSH, denk bijvoorbeeld aan WordPress met WP-CLI. Daarnaast is rsync ook een goede optie om je website-bestanden veilig te synchroniseren tussen de webserver en je werkstation.

Bekijk hostingpakketten →

Wil jij ook een webhostingpakket dat je in staat stelt om met SSH en deze tips aan de slag te gaan? Goed nieuws! SSH is nu beschikbaar op Slim, Plus, Pro en bij reseller-hosting op aanvraag.

P.S. Op de hoogte blijven van alle artikelen, updates, tips en trucs die op ons blog verschijnen? Volg ons via Facebook, Twitter, Instagram, RSS en e-mail!

Deel Deel Deel Deel

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *