Categorieën
Hosting Linux WordPress

Savvii VPS productie en staging

Gebruikers van een Savvii VPS hebben de mogelijkheid om SSH toegang te krijgen. Dit kan erg handig zijn om bijvoorbeeld snel een backup te maken of een kopie te maken van een website. Voor het opzetten van een nieuwe actuele staging omgeving kun je als volgt te werken gaan:

Productie | staging

Allereerst is het handig dat productie en staging omgevingen met elkaar kunnen communiceren via SSH. Hiervoor is het handig om een nieuwe SSH key aan te maken op de productie omgeving en deze toe te voegen aan de staging omgeving.

Productie

ssh user1@user1.savviihq.com

ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -f ~/.ssh/pronamic_rsa

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/pronamic_rsa

Localhost

scp user1@user1.savviihq.com:~/.ssh/pronamic_rsa.pub ~/Downloads/pronamic_rsa.pub

scp ~/Downloads/pronamic_rsa.pub user2@user2.savviihq.com:~/tmp/pronamic_rsa.pub

Staging

ssh user2@user2.savviihq.com

cat ~/tmp/pronamic_rsa.pub >> ~/.ssh/authorized_keys

rm ~/tmp/pronamic_rsa.pub

Productie » staging

ssh user1@user1.savviihq.com

cd ~/wordpress/current

echo "wp-config.php" > staging-exclude.txt
echo "wp-content/infinitewp/backups" >> staging-exclude.txt
echo "wp-content/mu-plugins" >> staging-exclude.txt
echo "wp-content/mysql" >> staging-exclude.txt
echo "wp-content/uploads/2002" >> staging-exclude.txt
echo "wp-content/uploads/2003" >> staging-exclude.txt
echo "wp-content/uploads/2004" >> staging-exclude.txt
echo "wp-content/uploads/2005" >> staging-exclude.txt
echo "wp-content/uploads/2006" >> staging-exclude.txt
echo "wp-content/uploads/2007" >> staging-exclude.txt
echo "wp-content/uploads/2008" >> staging-exclude.txt
echo "wp-content/uploads/2009" >> staging-exclude.txt
echo "wp-content/uploads/2010" >> staging-exclude.txt
echo "wp-content/uploads/2011" >> staging-exclude.txt
echo "wp-content/uploads/2012" >> staging-exclude.txt
echo "wp-content/uploads/2013" >> staging-exclude.txt
echo "wp-content/uploads/2014" >> staging-exclude.txt
echo "wp-content/uploads/2015" >> staging-exclude.txt
echo "wp-content/uploads/backwpup*" >> staging-exclude.txt
echo "wp-content/uploads/gravity_forms" >> staging-exclude.txt
echo "wp-content/uploads/sites" >> staging-exclude.txt

# wp db export current.sql
mysqldump --user=user1 --password=******** --add-drop-table user1 > current.sql

rsync -avuz --exclude-from=staging-exclude.txt . user2@user2.savviihq.com:~/wordpress/current

Het staging-exclude.txt bestand kun je in principe eenmalig aanmaken en in bijhouden welke mappen niet mee hoeven naar de staging omgeving. In bovenstaand voorbeeld heb ik veel uploads mappen uitgesloten.

Staging omgeving

ssh user2@user2.savviihq.com

cd ~/wordpress/current

# wp db reset
# wp db import current.sql
# wp search-replace 'http://user1.savviihq.com' 'http://user2.savviihq.com'

mysql --user=user2 --password=******** user2 < current.sql

WP-CLI

Helaas werkt WP-CLI momenteel niet op onze Savvii VPS’en. Hierdoor is het exporteren en importeren van de database nog wat omslachtig. Met WP-CLI zou dit vereenvoudig kunnen worden wp db export, wp db reset, wp db import en wp search-replace.

Resources

Categorieën
Linux PHP

OpenSSL fout Twinfield API

Een aantal weken terug wilde ik bij Pronamic wat experimenteren met de Twinfield API. De Twinfield API werkt met behulp van SOAP over een beveiligde HTTP verbinding. Volgens Twinfield zou je op de volgende manier een verbinding moeten kunnen maken:

$soapClient = new SoapClient('https://login.twinfield.com/webservices/session.asmx?wsdl', array('trace' => 1));

Helaas resulteerde het uitvoeren van bovenstaande PHP code in een foutmelding:

Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:
error:14092073:SSL routines:SSL3_GET_SERVER_HELLO:bad packet length in Twinfield.php on line 8

Call Stack:
    0.0002     651112   1. {main}() Twinfield.php:0
    0.0003     651896   2. file_get_contents() Twinfield.php:8

Warning: file_get_contents(): Failed to enable crypto in Twinfield.php on line 8

Call Stack:
    0.0002     651112   1. {main}() Twinfield.php:0
    0.0003     651896   2. file_get_contents() Twinfield.php:8

Warning: file_get_contents(https://login.twinfield.com/webservices/session.asmx?wsdl): failed to open stream: operation failed in Twinfield.php on line 8

Call Stack:
    0.0002     651112   1. {main}() Twinfield.php:0
    0.0003     651896   2. file_get_contents() Twinfield.php:8

Fatal error: SoapClient::SoapClient(): 'uri' option is required in nonWSDL mode in Twinfield.php on line 13

Call Stack:
    0.0002     651112   1. {main}() Twinfield.php:0
    0.0686     653888   2. SoapClient->SoapClient() Twinfield.php:13

Dezelfde code werkte echter wel op een andere server, maar helaas niet op mijn ontwikkel- en test server. Dat was toch wel erg vervelend, daarom ben ik opzoek gegaan naar een oplossing. Ik kwam na een speurtocht al snel anderen tegen met vergelijkbare problemen. Zo rapporteerde ns@centralservices.nl een vergelijkbare fout in PHP’s bug tracking systeem.

Ik kon echter erg lastig een oplossing vinden voor het probleem. Ik las wel op verschillende websites dat het om een probleem in het OpenSSL pakket ging. Op mijn Debian ontwikkel- en test server had ik OpenSSL/0.9.8g geïnstalleerd. Dit is momenteel de stabiele versie van het OpenSSL pakket op het debian platform. Aangezien ik geen concrete oplossing kon vinden voor het probleem heb ik de test versie van OpenSSL geïnstalleerd.

Hiervoor heb ik eerst de volgende regels toegevoegd aan /etc/apt/sources.list.

deb http://ftp.nl.debian.org/debian squeeze main
deb-src http://ftp.nl.debian.org/debian/ squeeze main

Vervolgens heb ik OpenSSL en Apache opnieuw geïnstalleerd met behulp van de volgende commando’s:

# apt-get install openssl

# apt-get install apache

Sindsdien heb ik OpenSSL/0.9.8o draaien op mijn server en is mijn probleem opgelost. Ik kan nu zonder problemen de Twinfield SOAP API aanroepen.