Ontwikkelomgeving opzetten

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen

Casus: Eind 2013 - Oriëntatie

November 2013, met Linux Mint vers geinstalleerd op m'n laptop met een SSD. LAMP-server voor ontwikkelwerk? Nieuwe ronde, nieuwe kansen!

XAMPP vs. zelf doen

Het afgelopen half jaar gebruikte ik een Xampp-instantie. Dat beviel best aardig. Maar toch vraag ik me af of dat is wat ik wil.

Voordelen Xampp

  • Snel klaar

Nadelen Xampp

  • Niet te upgraden of te onderhouden [1]
  • Monolithisch
  • Het forum op de site vind ik onprettig. Een van de ontwikkelaars lijkt me een nare vent
  • Ik betwijfel of het wel zo effectief is: Drupal-sites zijn vreselijk traag. Chantal van Webcat liet doorschemeren dat het althans op Windows, geen geslaagd platform is.

Voordelen zelf doen

  • Ik leer er nog wat van
  • Potentieel kan het een goed geoptimaliseerd systeem opleveren

Nadelen zelf doen

  • Veel werk, al zeggen de meeste bronnen dat dat tegenwoordig flink meevalt.

Zelf doen: Overzicht

Tasksel

Installatie mbv. tasksel:

sudo apt-get install tasksel
sudo tasksel

Etc.

Linode Guide

Linode Library heeft een aardige handleiding om het zelf te doen op Ubuntu 12.04.

Casus: Eind 2013 - Installatie

Het eigenlijke werk. Zonder specifieke bron, temeer daar ik er achter kwam dat er al een Lamp-server geïnstalleerd was.

Komt-ie:

Bepaal de hostname

Wat ik krijg:

strompf@Katwijk ~ $ hostname
Katwijk
strompf@Katwijk ~ $ hostname -f
Katwijk

Zal wel goed zijn.

Apache installeren

sudo apt-get update
sudo apt-get upgrade --show-upgrades

Of in één commando:

sudo apt-get update && sudo apt-get upgrade --show-upgrades

Met apt-get update wordt de package list bijgewerkt. Met apt-get upgrade wordt programmatuur daadwerkelijk bijgewerkt naar de nieuwste versie. Ik weet niet goed het verschil met apt-get dist-upgrade. Misschien dat-ie in dat laatste geval alles bijwerkt, of op een slimmere manier.

En nu het echte werk:

sudo apt-get install apache2

Apache bleek trouwens al geïnstalleerd te zijn. Enkele gegevens:

  • Web root: /var/www
  • Configuratiebestanden: /etc/apache2. Ihb.: /etc/apache2/httpd.conf

Probleem CleanURLs

Ik bleek al een LAMP-stack geïnstalleerd te hebben. Waarom zegt niemand me dat? Anyhow, de fun begint bij CleanURLs aan de praat krijgen. Alleen een .htaccess-bestand plaatsen, bleek geen oplossing te zijn. Maar dit artikel biedt uitkomst:

Rewrite-module activeren

Terminalcommando

apache2ctl -M

geeft:

/usr/sbin/apache2ctl: 87: ulimit: error setting limit (Operation not permitted)
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
Loaded Modules:
 core_module (static)
 log_config_module (static)
 logio_module (static)
 mpm_prefork_module (static)
 http_module (static)
 so_module (static)
 alias_module (shared)
 auth_basic_module (shared)
 authn_file_module (shared)
 authz_default_module (shared)
 authz_groupfile_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 cgi_module (shared)
 deflate_module (shared)
 dir_module (shared)
 env_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 php5_module (shared)
 reqtimeout_module (shared)
 setenvif_module (shared)
 status_module (shared)
Syntax OK

Hier staat

rewrite

niet in de lijst. Installatie:

sudo a2enmod rewrite

Geeft:

[sudo] password for strompf: 
Enabling module rewrite.
To activate the new configuration, you need to run:
  service apache2 restart

Gevolgd door:

sudo service apache2 restart
 * Restarting web server apache2                                                
apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
 ... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName

Nog een keer het overzicht van geïnstalleerde modules opgevraagd:

Loaded Modules:
 core_module (static)
 log_config_module (static)
 logio_module (static)
 mpm_prefork_module (static)
 http_module (static)
 so_module (static)
 alias_module (shared)
 auth_basic_module (shared)
 authn_file_module (shared)
 authz_default_module (shared)
 authz_groupfile_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 cgi_module (shared)
 deflate_module (shared)
 dir_module (shared)
 env_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 php5_module (shared)
 reqtimeout_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 status_module (shared)
Syntax OK

Rewrite-module configureren

Standaard-instellingen staan in /etc/apache2/apache2.conf. Aanpassingen kun je beter in httpd.conf plaatsen [2]. Dat bestand is standaard leeg. Voorbeeld:

<Directory /var/www>
   RewriteEngine on
   RewriteBase /
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</Directory>

Zie [3] voor uitleg tav. RewriteBase /. Dit lijkt ok te zijn.

Verifiëren dat .htaccess-bestanden gebruikt worden

Apache leest geen .htaccess-bestanden. Dat kon ik testen door een bestand met een fout te plaatsen.

.htaccess-bestanden in gebruik nemen: AccessFileName .htaccess

Er schijnen twee directives nodig te zijn om .htaccess-bestanden aan de praat te krijgen. Dit is de eerste, in apache2.conf:

#
# AccessFileName: The name of the file to look for in each directory
# for additional configuration directives.  See also the AllowOverride
# directive.
#

AccessFileName .htaccess

.htaccess-bestanden in gebruik nemen: AllowOverride

Het tweede betreft de AllowOverride All-directive. Als ik

AllowOverride All

toevoeg aan apache2.conf, krijg ik een foutmelding:

sudo /etc/init.d/apache2 restart
Syntax error on line 239 of /etc/apache2/apache2.conf:
AllowOverride not allowed here
Action 'configtest' failed.
The Apache error log may have more information.
   ...fail!

Uiteindelijk bracht dit de oplossing (/etc/apache2/httpd.conf):

<Directory /var/www/DrupalTest>

AllowOverride All

   RewriteEngine on
   RewriteBase /
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</Directory>

Dit lijkt te suggereren dat ik voor elke site apart zo'n directive moet toevoegen. Lijkt me ongewenst.

WSOD: PHP Error-reporting aanzetten

In

/etc/php5/apache2/php.ini

de volgende zaken aangepast:

display_errors = On
display_startup_errors = On

Tjakka. Gelijk relevante informatie:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 70864175 bytes) 
in /var/www/carbon4/includes/database.mysql-common.inc on line 34

Geheugenlimieten aanpassen (1)

En dat heb ik al eerder gedaan. Zie artikel Xampp:

max_execution_time = 36000 ; Strompf - was 3600 (1 uur). Nieuwe waarde is 10 uur
max_input_time = -1; Strompf - onbeperkt
memory_limit = 1024M; Strompf - was 128
post_max_size = 256M ; Strompf - was 8. [3]
upload_max_filesize = 256M; Strompf. Was 2M. Een reguliere backup is 36M
date.timezone = Europe/Amsterdam; Strompf, was Berlin

Geheugenlimieten aanpassen (2)

Toch nog een foutmelding:

Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 109097243 bytes) in 
/var/www/carbon4/modules/filter/filter.module on line 1006 Warning: MySQL server has gone away query: 
UPDATE sessions SET uid = 1, cache = 0, hostname = '127.0.0.1', session = 'update_results|a:0:{}
update_success|b:1;updates_remaining|a:0:{}', timestamp = 1386333485 WHERE sid = '2cs2j5mru0duuatbkteb0c5hd0' 
in /var/www/carbon4/includes/database.mysqli.inc on line 134 Warning: MySQL server has gone away query: 
UPDATE users SET access = 1386333485 WHERE uid = 1 in /var/www/carbon4/includes/database.mysqli.inc on line 134 

Aanpassing:

memory_limit = 2048M

Casus: Maart 2015

In maart 2015 wil ik het werkstation met Linix Mint, waarop ik dit tik, uitbreiden tot een LAMP-ontwikkelserver. Ik doe het 'handmatig', zodat ik iets beter weet wat er gebeurd.

Webserver

Installeren als mezelluf:

sudo apt-get install apache2

Pagina's worden geserveerd vanuit /var/www. Da's prima, maar dan wil ik daar wel de eigenaar van zijn:

sudo chown -R strompf /var/www
sudo chgrp -R strompf /var/www

MySQL

sudo apt-get install mysql-server

Geen hardening nodig. Een wachtwoord werd gevraagd gedurende de procedure. Een installatie zonder wachtwoord geeft zo'n gedoe met waarschuwingen.

PHP

sudo apt-get install php5 php-pear php5-mysql

Deze tutorial installeert ook libapache2-mod-php5, maar eerst zien of ik dat nodig heb.

Getest door phpinfio() in een programma'tje te laten uitvoeren. Ging prima.

PMA

sudo apt-get install phpmyadmin

Configuratie ging interactief. Super! PMA is gelijk beschikbaar:

http://localhost/phpmyadmin/

Virtuele hosts enablen

Volgens mij gaat dat gelijk al goed:

apache2ctl -S

CleanURLs

Da's de rewrite-module van Apache. Effe checken:

apache2ctl -M

Nope. Installatie:

sudo a2enmod rewrite
sudo service apache2 restart
apache2ctl -M

Server-scripts hierheen fietsen

scp -r dvb01:scripts .

Er ging iets mis, maar de scripts zaten er wel bij. Perfect!

Casus: Kerstvakantie 2016

Situatie

  • Nieuwe laptop met Linix Mint 18.1!
  • Graag de database draaien binnen Dropbox, zodat ik altijd een manier heb om bij de meest recente versie van een db te komen (én als backup). Dat zou worden: home/Dropbox/rolling_stone/.mysql - Graag als dotmap, om fouten te voorkomen
  • Graag pagina's serveren vanuit Dropbox-map www. Voluit: /Dropbox/rolling_stone/www (dan zou /var/www een link worden naar die map)

→ Laat maar zitten: Nu geen tijd voor.

Installatie MySQL

MySQL kun je los installeren van LAMP-server. Op geen enkele manier moeten er dingen aan MySQL aangepast worden omdat het een LAMP-server betreft (itt. Apache vs PHP). Daarom begin ik hiermee.

Installatie Apache

sudo apt-get install apache2

Verbinding Apache <> PHP

In eerste instantie leek enkel dit nodig te zijn:

sudo apt-get install libapache2-mod-php7.1

en dat bestand bleek zelfs al geinstalleerd te zijn. Vervolgens gaf een Drupal-foutmelding deze toevoeging aan:

sudo apt-get install php7.1-mysql

Test: phpinfo.php

  • De standaard-servermap is /var/www. Daarin zit een map html, maar dat is de vangpagina
  • Aan denken: Een php-executeerbaar bestand moet de extentie .php hebben, niet .html of zo. Snel gedaan, en het werkte gelijk!

Downgrade php 7.1

PHP 7.1 geeft een foutmelding in Drupal, en een patch leek niet te helpen → Downgraden naar PHP 7.0 of desnoods 5.x.

dpkg --get-selections | grep php
libapache2-mod-php7.1				install
php-common					install
php7.1						install
php7.1-cli					install
php7.1-common					install
php7.1-json					install
php7.1-mysql					install
php7.1-opcache					install
php7.1-readline					install

Paketten verwijderen:

sudo apt-get remove php7.1
sudo apt-get remove php-common
sudo apt-get remove phh7.1-common

Nieuwe status (beetje onduidelijk wat dit precies inhoudt):

dpkg --get-selections | grep php
libapache2-mod-php7.1				deinstall
php-common					deinstall
php7.1-cli					deinstall
php7.1-common					deinstall
php7.1-json					deinstall
php7.1-mysql					deinstall
php7.1-opcache					deinstall
php7.1-readline					deinstall

Installatie php 7.0

sudo apt-get install php7.0

Installeert:

  • Libapache2-mod-php7.0
  • php-common
  • php7.0
  • php7.0-cli
  • php7.0-common
  • php7.0-json
  • php7.0-opcache
  • php7.0-readline

Het lijkt erop dat alleen nog iets met MySQL ontbreekt:

sudo apt-get install php7.0-mysql

Note to self: Apache restarten

  • Standaard Apache-vangpagina werkt
  • phpinfo.php werkt
  • Drupal-site werkt helaas niet.
  • Paar instellingen in php.ini aangepast + sudo service apache2 restart. Waarschijnlijk was dit laatste het missende onderdeel, want nu werkt-ie!

php7.0-xml

Regelmatig kreeg ik foutmeldingen zoals hier beschreven. Oplossing:

sudo apt-get update
sudo apt-get install php7.0-xml
sudo service apache2 restart

Probleem verholpen!

Bronnen

Casus: Eind 2013

Casus: Maart 2015

Casus: Kerstvakantie 2016