Im 5. Teil meiner Artikelserie beschäftigen wir uns mit WordPress. WordPress ist momentan das wohl am weitesten verbreitete freie Content Managment System. Mein Blog läuft unter WordPress und diesen Blog möchte ich nun auf unseren Cloud Server umziehen. Dazu müssen wir zunächst mit den Voraussetzungen für WordPress auseinander setzen. WordPress benötigt neben einem Webserver, dies kann ein Apache oder auch ein Nginx sein, PHP und die Datenbank MySQL. Prinzipiell läuft WordPress schon mit sehr alten Versionen von Apache, PHP und Mysql, aber aus Sicherheitsgründen werden aktuelle Versionen der Software empfohlen, siehe die Requirements Seite der englischen WordPress.org Webpage.
Schauen wir zuächst was auf unserem Server installiert ist:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | $ dpkg -l | grep apache ii apache2 2.4.7-1ubuntu4.9 amd64 Apache HTTP Server ii apache2-bin 2.4.7-1ubuntu4.9 amd64 Apache HTTP Server (binary files and modules) ii apache2-data 2.4.7-1ubuntu4.9 all Apache HTTP Server (common files) ii apache2-mpm-prefork 2.4.7-1ubuntu4.9 amd64 transitional prefork MPM package for apache2 ii libapache2-mod-php5 5.5.9+dfsg-1ubuntu4.14 amd64 server-side, HTML-embedded scripting language (Apache 2 module) $ dpkg -l | grep php ii libapache2-mod-php5 5.5.9+dfsg-1ubuntu4.14 amd64 server-side, HTML-embedded scripting language (Apache 2 module) ii php5-cli 5.5.9+dfsg-1ubuntu4.14 amd64 command-line interpreter for the php5 scripting language ii php5-common 5.5.9+dfsg-1ubuntu4.14 amd64 Common files for packages built from the php5 source ii php5-json 1.3.2-2build1 amd64 JSON module for php5 ii php5-mysql 5.5.9+dfsg-1ubuntu4.14 amd64 MySQL module for php5 ii php5-readline 5.5.9+dfsg-1ubuntu4.14 amd64 Readline module for php5 $ dpkg -l | grep mysql ii libdbd-mysql-perl 4.025-1 amd64 Perl5 database interface to the MySQL database ii libmysqlclient18:amd64 5.5.47-0ubuntu0.14.04.1 amd64 MySQL database client library ii mysql-client-5.5 5.5.47-0ubuntu0.14.04.1 amd64 MySQL database client binaries ii mysql-client-core-5.5 5.5.47-0ubuntu0.14.04.1 amd64 MySQL database core client binaries ii mysql-common 5.5.47-0ubuntu0.14.04.1 all MySQL database common files, e.g. /etc/mysql/my.cnf ii mysql-server 5.5.47-0ubuntu0.14.04.1 all MySQL database server (metapackage depending on the latest version) ii mysql-server-5.5 5.5.47-0ubuntu0.14.04.1 amd64 MySQL database server binaries and system database setup ii mysql-server-core-5.5 5.5.47-0ubuntu0.14.04.1 amd64 MySQL database server binaries ii php5-mysql 5.5.9+dfsg-1ubuntu4.14 amd64 MySQL module for php5 |
Zur Zeit sind Apache 2.4.7, PHP 5.5.9 und MySQL 5.5.47 installiert. Leider gibt es in den offiziellen Repositories keine neueren Versionen. Deshalb wollen wir hier anders vorgehen. Wir werden Komponenten aus Personal Package Archiven (PPA) auf Launchpad installieren. Ondřej Surý stellt dort in seinem PHP 5.6 PPA aktuelle Versionen von Apache und PHP zur Verfügung.
Bevor wir beginnen legen wir zunächst noch im 1&1 Cloudpanel einen Snapshot unseres Servers an, damit wir, falls etwas schief läuft, unseren Server schnell wiederherstellen können. Details dazu im 1. Teil der Artikelserie geschildert.
Schließlich muss ich noch darauf hinweisen, dass die Benutzung dieser unsupporteten PPAs immer auf eigene Verantwortung und Risiko erfolgt.
Als erstes müssen wir das PPA auf unserem System als Paketquelle hinzufügen. Dies erreichen wir mit folgendem Befehl:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | $ add-apt-repository ppa:ondrej/php5-5.6 This branch follows latest PHP 5.6 packages as maintained by me & rest of the Debian pkg-php team. You can get more information about the packages at https://sury.org For PHP 5.5 use: ppa:ondrej/php5 For PHP 5.4 use: ppa:ondrej/php5-oldstable BUGS&FEATURES: This PPA now has a issue tracker: https://deb.sury.org/pages/bugreporting.html PLEASE READ: If you like my work and want to give me a little motivation, please consider donating: https://deb.sury.org/pages/donate.html WARNING: add-apt-repository is broken with non-UTF-8 locales, see https://github.com/oerdnj/deb.sury.org/issues/56 for workaround: # apt-get install -y language-pack-en-base # LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php5-5.6 More info: https://launchpad.net/~ondrej/+archive/ubuntu/php5-5.6 Press [ENTER] to continue or ctrl-c to cancel adding it gpg: keyring `/tmp/tmpga3csrvf/secring.gpg' created gpg: keyring `/tmp/tmpga3csrvf/pubring.gpg' created gpg: requesting key E5267A6C from hkp server keyserver.ubuntu.com gpg: /tmp/tmpga3csrvf/trustdb.gpg: trustdb created gpg: key E5267A6C: public key "Launchpad PPA for Ond\xc5\x99ej Sur▒" imported gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1) OK |
An der Stelle „Press [ENTER] to continue or ctrl-c to cancel adding it“ werden wir aufgefordert die Return Taste zu drücken, um fortzufahren oder mit Strg und C Taste den Vorgang abzubrechen. Ich habe natürlich die Return Taste gedrückt.
Nun machen wir noch ein update der Packetliste:
1 2 3 4 5 6 7 8 9 10 11 | $ apt-get update Get:1 http://ppa.launchpad.net trusty InRelease [15.4 kB] Get:2 http://ppa.launchpad.net trusty/main amd64 Packages [20.4 kB] Get:3 http://ppa.launchpad.net trusty/main i386 Packages [20.4 kB] Get:4 http://ppa.launchpad.net trusty/main Translation-en [13.6 kB] Ign http://us.archive.ubuntu.com trusty InRelease Get:5 http://security.ubuntu.com trusty-security InRelease [65.9 kB] . . . . |
Wie wir sehen, wird als erstes die Paketliste aus dem neu hinzugefügten PPA aktuaklisiert.
Um bequem die Paketversionen listen zu können, die wir upgraden können installieren wir zunächst noch das Paket apt-show-versions.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | $ apt-get install apt-show-versions Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: libapt-pkg-perl The following NEW packages will be installed: apt-show-versions libapt-pkg-perl 0 upgraded, 2 newly installed, 0 to remove and 20 not upgraded. Need to get 120 kB of archives. After this operation, 438 kB of additional disk space will be used. Do you want to continue? [Y/n] y Get:1 http://us.archive.ubuntu.com/ubuntu/ trusty/main libapt-pkg-perl amd64 0.1.29build1 [85.9 kB] Get:2 http://us.archive.ubuntu.com/ubuntu/ trusty/universe apt-show-versions all 0.22.3 [33.9 kB] Fetched 120 kB in 0s (188 kB/s) Selecting previously unselected package libapt-pkg-perl. (Reading database ... 98726 files and directories currently installed.) Preparing to unpack .../libapt-pkg-perl_0.1.29build1_amd64.deb ... Unpacking libapt-pkg-perl (0.1.29build1) ... Selecting previously unselected package apt-show-versions. Preparing to unpack .../apt-show-versions_0.22.3_all.deb ... Unpacking apt-show-versions (0.22.3) ... Processing triggers for man-db (2.6.7.1-1ubuntu1) ... Setting up libapt-pkg-perl (0.1.29build1) ... Setting up apt-show-versions (0.22.3) ... ** initializing cache. This may take a while ** |
Nun können wir uns bequem anschauen für welche Pakete neuere Versionen vorliegen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | $ apt-show-versions -u apache2:amd64/trusty 2.4.7-1ubuntu4.9 upgradeable to 2.4.18-1+deb.sury.org~trusty+2 apache2-bin:amd64/trusty 2.4.7-1ubuntu4.9 upgradeable to 2.4.18-1+deb.sury.org~trusty+2 apache2-data:all/trusty 2.4.7-1ubuntu4.9 upgradeable to 2.4.18-1+deb.sury.org~trusty+2 apache2-doc:all/trusty 2.4.7-1ubuntu4.9 upgradeable to 2.4.18-1+deb.sury.org~trusty+2 libapache2-mod-php5:amd64/trusty 5.5.9+dfsg-1ubuntu4.14 upgradeable to 5.6.18+dfsg-1+deb.sury.org~trusty+1 libapr1:amd64/trusty 1.5.0-1 upgradeable to 1.5.2-4+deb.sury.org~trusty+1 libaprutil1:amd64/trusty 1.5.3-1 upgradeable to 1.5.4-1+deb.sury.org~trusty+1 libaprutil1-dbd-sqlite3:amd64/trusty 1.5.3-1 upgradeable to 1.5.4-1+deb.sury.org~trusty+1 libaprutil1-ldap:amd64/trusty 1.5.3-1 upgradeable to 1.5.4-1+deb.sury.org~trusty+1 libbsd0:amd64/trusty 0.6.0-2ubuntu1 upgradeable to 0.7.0-2+deb.sury.org~trusty+2 libedit2:amd64/trusty 3.1-20130712-2 upgradeable to 3.1-20140620-2+deb.sury.org~trusty+5 libjson-c2:amd64/trusty 0.11-3ubuntu1.2 upgradeable to 0.11-4+deb.sury.org~trusty+2 libjson0:amd64/trusty 0.11-3ubuntu1.2 upgradeable to 0.11-4+deb.sury.org~trusty+2 libssl-dev:amd64/trusty 1.0.1f-1ubuntu2.17 upgradeable to 1.0.2f-2+deb.sury.org~trusty+1 openssl:amd64/trusty 1.0.1f-1ubuntu2.17 upgradeable to 1.0.2f-2+deb.sury.org~trusty+1 php5-cli:amd64/trusty 5.5.9+dfsg-1ubuntu4.14 upgradeable to 5.6.18+dfsg-1+deb.sury.org~trusty+1 php5-common:amd64/trusty 5.5.9+dfsg-1ubuntu4.14 upgradeable to 5.6.18+dfsg-1+deb.sury.org~trusty+1 php5-json:amd64/trusty 1.3.2-2build1 upgradeable to 1.3.9-1+deb.sury.org~trusty+4 php5-mysql:amd64/trusty 5.5.9+dfsg-1ubuntu4.14 upgradeable to 5.6.18+dfsg-1+deb.sury.org~trusty+1 php5-readline:amd64/trusty 5.5.9+dfsg-1ubuntu4.14 upgradeable to 5.6.18+dfsg-1+deb.sury.org~trusty+1 |
Wir sehen, dass wir den Apache auf Version 2.4.18 und PHP auf die Version 5.6.18 upgraden können. Diese Pakete wollen wir nun upgraden:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | $ apt-get upgrade Reading package lists... Done Building dependency tree Reading state information... Done Calculating upgrade... Done The following packages have been kept back: apache2 apache2-bin apache2-data libapache2-mod-php5 libssl-dev openssl php5-cli php5-common php5-json php5-mysql php5-readline The following packages will be upgraded: apache2-doc libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libbsd0 libedit2 libjson-c2 libjson0 9 upgraded, 0 newly installed, 0 to remove and 11 not upgraded. Need to get 3,084 kB of archives. After this operation, 586 kB of additional disk space will be used. Do you want to continue? [Y/n] y Get:1 http://ppa.launchpad.net/ondrej/php5-5.6/ubuntu/ trusty/main libedit2 amd64 3.1-20140620-2+deb.sury.org~trusty+5 [84.2 kB] Get:2 http://ppa.launchpad.net/ondrej/php5-5.6/ubuntu/ trusty/main libaprutil1-ldap amd64 1.5.4-1+deb.sury.org~trusty+1 [14.5 kB] Get:3 http://ppa.launchpad.net/ondrej/php5-5.6/ubuntu/ trusty/main libaprutil1-dbd-sqlite3 amd64 1.5.4-1+deb.sury.org~trusty+1 [16.4 kB] Get:4 http://ppa.launchpad.net/ondrej/php5-5.6/ubuntu/ trusty/main libaprutil1 amd64 1.5.4-1+deb.sury.org~trusty+1 [80.4 kB] Get:5 http://ppa.launchpad.net/ondrej/php5-5.6/ubuntu/ trusty/main libapr1 amd64 1.5.2-4+deb.sury.org~trusty+1 [90.7 kB] Get:6 http://ppa.launchpad.net/ondrej/php5-5.6/ubuntu/ trusty/main libbsd0 amd64 0.7.0-2+deb.sury.org~trusty+2 [67.3 kB] Get:7 http://ppa.launchpad.net/ondrej/php5-5.6/ubuntu/ trusty/main libjson-c2 amd64 0.11-4+deb.sury.org~trusty+2 [20.8 kB] Get:8 http://ppa.launchpad.net/ondrej/php5-5.6/ubuntu/ trusty/main apache2-doc all 2.4.18-1+deb.sury.org~trusty+2 [2,709 kB] Get:9 http://ppa.launchpad.net/ondrej/php5-5.6/ubuntu/ trusty/main libjson0 amd64 0.11-4+deb.sury.org~trusty+2 [1,044 B] Fetched 3,084 kB in 0s (5,358 kB/s) (Reading database ... 98773 files and directories currently installed.) Preparing to unpack .../libedit2_3.1-20140620-2+deb.sury.org~trusty+5_amd64.deb ... Unpacking libedit2:amd64 (3.1-20140620-2+deb.sury.org~trusty+5) over (3.1-20130712-2) ... Preparing to unpack .../libaprutil1-ldap_1.5.4-1+deb.sury.org~trusty+1_amd64.deb ... Unpacking libaprutil1-ldap:amd64 (1.5.4-1+deb.sury.org~trusty+1) over (1.5.3-1) ... Preparing to unpack .../libaprutil1-dbd-sqlite3_1.5.4-1+deb.sury.org~trusty+1_amd64.deb ... Unpacking libaprutil1-dbd-sqlite3:amd64 (1.5.4-1+deb.sury.org~trusty+1) over (1.5.3-1) ... Preparing to unpack .../libaprutil1_1.5.4-1+deb.sury.org~trusty+1_amd64.deb ... Unpacking libaprutil1:amd64 (1.5.4-1+deb.sury.org~trusty+1) over (1.5.3-1) ... Preparing to unpack .../libapr1_1.5.2-4+deb.sury.org~trusty+1_amd64.deb ... Unpacking libapr1:amd64 (1.5.2-4+deb.sury.org~trusty+1) over (1.5.0-1) ... Preparing to unpack .../libbsd0_0.7.0-2+deb.sury.org~trusty+2_amd64.deb ... Unpacking libbsd0:amd64 (0.7.0-2+deb.sury.org~trusty+2) over (0.6.0-2ubuntu1) ... Preparing to unpack .../libjson-c2_0.11-4+deb.sury.org~trusty+2_amd64.deb ... Unpacking libjson-c2:amd64 (0.11-4+deb.sury.org~trusty+2) over (0.11-3ubuntu1.2) ... Preparing to unpack .../apache2-doc_2.4.18-1+deb.sury.org~trusty+2_all.deb ... Unpacking apache2-doc (2.4.18-1+deb.sury.org~trusty+2) over (2.4.7-1ubuntu4.9) ... Preparing to unpack .../libjson0_0.11-4+deb.sury.org~trusty+2_amd64.deb ... Unpacking libjson0:amd64 (0.11-4+deb.sury.org~trusty+2) over (0.11-3ubuntu1.2) ... Setting up libedit2:amd64 (3.1-20140620-2+deb.sury.org~trusty+5) ... Setting up libapr1:amd64 (1.5.2-4+deb.sury.org~trusty+1) ... Setting up libaprutil1:amd64 (1.5.4-1+deb.sury.org~trusty+1) ... Setting up libaprutil1-ldap:amd64 (1.5.4-1+deb.sury.org~trusty+1) ... Setting up libaprutil1-dbd-sqlite3:amd64 (1.5.4-1+deb.sury.org~trusty+1) ... Setting up libbsd0:amd64 (0.7.0-2+deb.sury.org~trusty+2) ... Setting up libjson-c2:amd64 (0.11-4+deb.sury.org~trusty+2) ... Setting up apache2-doc (2.4.18-1+deb.sury.org~trusty+2) ... apache2_invoke apache2-doc: already enabled * Reloading web server apache2 * Setting up libjson0:amd64 (0.11-4+deb.sury.org~trusty+2) ... Processing triggers for libc-bin (2.19-0ubuntu6.7) ... |
Wir sehen, dass nicht alle Pakete upgegradet werden, speziell die Apache und PHP Pakete fehlen noch, wie auch ein erneuter Aufruf von apt-show-versions zeigt:
1 2 3 4 5 6 7 8 9 10 11 12 | $ apt-show-versions -u apache2:amd64/trusty 2.4.7-1ubuntu4.9 upgradeable to 2.4.18-1+deb.sury.org~trusty+2 apache2-bin:amd64/trusty 2.4.7-1ubuntu4.9 upgradeable to 2.4.18-1+deb.sury.org~trusty+2 apache2-data:all/trusty 2.4.7-1ubuntu4.9 upgradeable to 2.4.18-1+deb.sury.org~trusty+2 libapache2-mod-php5:amd64/trusty 5.5.9+dfsg-1ubuntu4.14 upgradeable to 5.6.18+dfsg-1+deb.sury.org~trusty+1 libssl-dev:amd64/trusty 1.0.1f-1ubuntu2.17 upgradeable to 1.0.2f-2+deb.sury.org~trusty+1 openssl:amd64/trusty 1.0.1f-1ubuntu2.17 upgradeable to 1.0.2f-2+deb.sury.org~trusty+1 php5-cli:amd64/trusty 5.5.9+dfsg-1ubuntu4.14 upgradeable to 5.6.18+dfsg-1+deb.sury.org~trusty+1 php5-common:amd64/trusty 5.5.9+dfsg-1ubuntu4.14 upgradeable to 5.6.18+dfsg-1+deb.sury.org~trusty+1 php5-json:amd64/trusty 1.3.2-2build1 upgradeable to 1.3.9-1+deb.sury.org~trusty+4 php5-mysql:amd64/trusty 5.5.9+dfsg-1ubuntu4.14 upgradeable to 5.6.18+dfsg-1+deb.sury.org~trusty+1 php5-readline:amd64/trusty 5.5.9+dfsg-1ubuntu4.14 upgradeable to 5.6.18+dfsg-1+deb.sury.org~trusty+1 |
Den Upgrade der restlichen Pakete erreichen wir folgendermaßen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | $ apt-get dist-upgrade Reading package lists... Done Building dependency tree Reading state information... Done Calculating upgrade... Done The following packages will be REMOVED: apache2-mpm-prefork The following NEW packages will be installed: apache2-utils liblua5.1-0 libnghttp2-14 libonig2 libqdbm14 libssl1.0.2 The following packages will be upgraded: apache2 apache2-bin apache2-data libapache2-mod-php5 libssl-dev openssl php5-cli php5-common php5-json php5-mysql php5-readline 11 upgraded, 6 newly installed, 1 to remove and 0 not upgraded. Need to get 10.4 MB of archives. After this operation, 6,704 kB of additional disk space will be used. Do you want to continue? [Y/n] y Get:1 http://ppa.launchpad.net/ondrej/php5-5.6/ubuntu/ trusty/main libssl1.0.2 amd64 1.0.2f-2+deb.sury.org~trusty+1 [1,258 kB] Get:2 http://us.archive.ubuntu.com/ubuntu/ trusty-updates/main liblua5.1-0 amd64 5.1.5-5ubuntu0.1 [99.9 kB] Get:3 http://ppa.launchpad.net/ondrej/php5-5.6/ubuntu/ trusty/main libnghttp2-14 amd64 1.7.0-1+deb.sury.org~trusty+1 [71.4 kB] Get:4 http://ppa.launchpad.net/ondrej/php5-5.6/ubuntu/ trusty/main apache2 amd64 2.4.18-1+deb.sury.org~trusty+2 [145 kB] Get:5 http://ppa.launchpad.net/ondrej/php5-5.6/ubuntu/ trusty/main apache2-bin amd64 2.4.18-1+deb.sury.org~trusty+2 [1,017 kB] Get:6 http://ppa.launchpad.net/ondrej/php5-5.6/ubuntu/ trusty/main apache2-utils amd64 2.4.18-1+deb.sury.org~trusty+2 [139 kB] Get:7 http://us.archive.ubuntu.com/ubuntu/ trusty/universe libonig2 amd64 5.9.1-1ubuntu1 [89.1 kB] Get:8 http://ppa.launchpad.net/ondrej/php5-5.6/ubuntu/ trusty/main apache2-data all 2.4.18-1+deb.sury.org~trusty+2 [163 kB] Get:9 http://ppa.launchpad.net/ondrej/php5-5.6/ubuntu/ trusty/main php5-readline amd64 5.6.18+dfsg-1+deb.sury.org~trusty+1 [12.1 kB] Get:10 http://ppa.launchpad.net/ondrej/php5-5.6/ubuntu/ trusty/main php5-mysql amd64 5.6.18+dfsg-1+deb.sury.org~trusty+1 [63.9 kB] Get:11 http://us.archive.ubuntu.com/ubuntu/ trusty/universe libqdbm14 amd64 1.8.78-3 [109 kB] Get:12 http://ppa.launchpad.net/ondrej/php5-5.6/ubuntu/ trusty/main php5-cli amd64 5.6.18+dfsg-1+deb.sury.org~trusty+1 [2,135 kB] Get:13 http://ppa.launchpad.net/ondrej/php5-5.6/ubuntu/ trusty/main libapache2-mod-php5 amd64 5.6.18+dfsg-1+deb.sury.org~trusty+1 [2,164 kB] Get:14 http://ppa.launchpad.net/ondrej/php5-5.6/ubuntu/ trusty/main php5-common amd64 5.6.18+dfsg-1+deb.sury.org~trusty+1 [724 kB] Get:15 http://ppa.launchpad.net/ondrej/php5-5.6/ubuntu/ trusty/main php5-json amd64 1.3.9-1+deb.sury.org~trusty+4 [31.7 kB] Get:16 http://ppa.launchpad.net/ondrej/php5-5.6/ubuntu/ trusty/main libssl-dev amd64 1.0.2f-2+deb.sury.org~trusty+1 [1,525 kB] Get:17 http://ppa.launchpad.net/ondrej/php5-5.6/ubuntu/ trusty/main openssl amd64 1.0.2f-2+deb.sury.org~trusty+1 [672 kB] Fetched 10.4 MB in 1s (5,792 kB/s) Preconfiguring packages ... (Reading database ... 98796 files and directories currently installed.) Removing apache2-mpm-prefork (2.4.7-1ubuntu4.9) ... Selecting previously unselected package libssl1.0.2:amd64. (Reading database ... 98796 files and directories currently installed.) Preparing to unpack .../libssl1.0.2_1.0.2f-2+deb.sury.org~trusty+1_amd64.deb ... Unpacking libssl1.0.2:amd64 (1.0.2f-2+deb.sury.org~trusty+1) ... Selecting previously unselected package liblua5.1-0:amd64. Preparing to unpack .../liblua5.1-0_5.1.5-5ubuntu0.1_amd64.deb ... Unpacking liblua5.1-0:amd64 (5.1.5-5ubuntu0.1) ... Selecting previously unselected package libnghttp2-14:amd64. Preparing to unpack .../libnghttp2-14_1.7.0-1+deb.sury.org~trusty+1_amd64.deb ... Unpacking libnghttp2-14:amd64 (1.7.0-1+deb.sury.org~trusty+1) ... Preparing to unpack .../apache2_2.4.18-1+deb.sury.org~trusty+2_amd64.deb ... Moving obsolete conffile /etc/bash_completion.d/apache2 out of the way... Unpacking apache2 (2.4.18-1+deb.sury.org~trusty+2) over (2.4.7-1ubuntu4.9) ... Preparing to unpack .../apache2-bin_2.4.18-1+deb.sury.org~trusty+2_amd64.deb ... Unpacking apache2-bin (2.4.18-1+deb.sury.org~trusty+2) over (2.4.7-1ubuntu4.9) ... Selecting previously unselected package apache2-utils. Preparing to unpack .../apache2-utils_2.4.18-1+deb.sury.org~trusty+2_amd64.deb ... Unpacking apache2-utils (2.4.18-1+deb.sury.org~trusty+2) ... Preparing to unpack .../apache2-data_2.4.18-1+deb.sury.org~trusty+2_all.deb ... Unpacking apache2-data (2.4.18-1+deb.sury.org~trusty+2) over (2.4.7-1ubuntu4.9) ... Selecting previously unselected package libonig2. Preparing to unpack .../libonig2_5.9.1-1ubuntu1_amd64.deb ... Unpacking libonig2 (5.9.1-1ubuntu1) ... Selecting previously unselected package libqdbm14. Preparing to unpack .../libqdbm14_1.8.78-3_amd64.deb ... Unpacking libqdbm14 (1.8.78-3) ... Preparing to unpack .../php5-readline_5.6.18+dfsg-1+deb.sury.org~trusty+1_amd64.deb ... Unpacking php5-readline (5.6.18+dfsg-1+deb.sury.org~trusty+1) over (5.5.9+dfsg-1ubuntu4.14) ... Preparing to unpack .../php5-mysql_5.6.18+dfsg-1+deb.sury.org~trusty+1_amd64.deb ... Unpacking php5-mysql (5.6.18+dfsg-1+deb.sury.org~trusty+1) over (5.5.9+dfsg-1ubuntu4.14) ... Preparing to unpack .../php5-cli_5.6.18+dfsg-1+deb.sury.org~trusty+1_amd64.deb ... Unpacking php5-cli (5.6.18+dfsg-1+deb.sury.org~trusty+1) over (5.5.9+dfsg-1ubuntu4.14) ... Preparing to unpack .../libapache2-mod-php5_5.6.18+dfsg-1+deb.sury.org~trusty+1_amd64.deb ... Unpacking libapache2-mod-php5 (5.6.18+dfsg-1+deb.sury.org~trusty+1) over (5.5.9+dfsg-1ubuntu4.14) ... Preparing to unpack .../php5-common_5.6.18+dfsg-1+deb.sury.org~trusty+1_amd64.deb ... Unpacking php5-common (5.6.18+dfsg-1+deb.sury.org~trusty+1) over (5.5.9+dfsg-1ubuntu4.14) ... Preparing to unpack .../php5-json_1.3.9-1+deb.sury.org~trusty+4_amd64.deb ... Unpacking php5-json (1.3.9-1+deb.sury.org~trusty+4) over (1.3.2-2build1) ... Preparing to unpack .../libssl-dev_1.0.2f-2+deb.sury.org~trusty+1_amd64.deb ... Unpacking libssl-dev:amd64 (1.0.2f-2+deb.sury.org~trusty+1) over (1.0.1f-1ubuntu2.17) ... Preparing to unpack .../openssl_1.0.2f-2+deb.sury.org~trusty+1_amd64.deb ... Unpacking openssl (1.0.2f-2+deb.sury.org~trusty+1) over (1.0.1f-1ubuntu2.17) ... Processing triggers for man-db (2.6.7.1-1ubuntu1) ... Processing triggers for ureadahead (0.100.0-16) ... ureadahead will be reprofiled on next reboot Processing triggers for ufw (0.34~rc-0ubuntu2) ... Setting up libssl1.0.2:amd64 (1.0.2f-2+deb.sury.org~trusty+1) ... Setting up liblua5.1-0:amd64 (5.1.5-5ubuntu0.1) ... Setting up libnghttp2-14:amd64 (1.7.0-1+deb.sury.org~trusty+1) ... Setting up apache2-bin (2.4.18-1+deb.sury.org~trusty+2) ... Setting up apache2-utils (2.4.18-1+deb.sury.org~trusty+2) ... Setting up apache2-data (2.4.18-1+deb.sury.org~trusty+2) ... Setting up apache2 (2.4.18-1+deb.sury.org~trusty+2) ... Installing new version of config file /etc/logrotate.d/apache2 ... Installing new version of config file /etc/apache2/mods-available/ssl.conf ... Installing new version of config file /etc/apache2/mods-available/mpm_event.load ... Installing new version of config file /etc/apache2/mods-available/mpm_worker.load ... Installing new version of config file /etc/apache2/mods-available/mpm_prefork.load ... Installing new version of config file /etc/apache2/conf-available/security.conf ... Installing new version of config file /etc/init.d/apache2 ... * Restarting web server apache2 [ OK ] Removing obsolete conffile /etc/bash_completion.d/apache2 ... Setting up libonig2 (5.9.1-1ubuntu1) ... Setting up libqdbm14 (1.8.78-3) ... Setting up php5-common (5.6.18+dfsg-1+deb.sury.org~trusty+1) ... Installing new version of config file /etc/cron.d/php5 ... Setting up php5-json (1.3.9-1+deb.sury.org~trusty+4) ... Setting up php5-cli (5.6.18+dfsg-1+deb.sury.org~trusty+1) ... update-alternatives: using /usr/bin/phar5 to provide /usr/bin/phar (phar) in auto mode Replacing config file /etc/php5/cli/php.ini with new version Setting up php5-readline (5.6.18+dfsg-1+deb.sury.org~trusty+1) ... Setting up php5-mysql (5.6.18+dfsg-1+deb.sury.org~trusty+1) ... Setting up libssl-dev:amd64 (1.0.2f-2+deb.sury.org~trusty+1) ... Setting up openssl (1.0.2f-2+deb.sury.org~trusty+1) ... Processing triggers for ureadahead (0.100.0-16) ... Setting up libapache2-mod-php5 (5.6.18+dfsg-1+deb.sury.org~trusty+1) ... Installing new version of config file /etc/apache2/mods-available/php5.conf ... Replacing config file /etc/php5/apache2/php.ini with new version ERROR: php5 module already enabled, not enabling php5 Processing triggers for libc-bin (2.19-0ubuntu6.7) ... |
Das neue PHP Version 5.6.18 und der neue Apache Server Version 2.4.18 sind installiert und der neue Apache Server läuft. Auf die gleiche Weise fügen wir noch das PHP PPA von Ondřej Surý zu unseren Paketquellen hinzu und machen ein Upgrade bzw. Dist-Upgrade. In diesem PPA finden wir auch das neue PHP 7, falls wir es benötigen.
Es wäre nun schön, wenn wir online sehen könnten was unser Apache macht und wie er konfiguriert ist. Dazu gibt es die beiden Apache Module status und info. Wenn wir in das Verzeichnis /etc/apache2/mods-enabled schauen, sehen wir, dass das status Modul sogar aktiviert ist. Es ist jedoch aus Sicherheitsgesichts-punkten keine gute Idee diese beiden Module so zu konfigurieren, dass man die Infomationen von beliebigen Rechnern aus abrufen kann. Deshalb sind beide Module so konfiguriert, dass nur lokal vom Server auf die Seiten zugegriffen werden kann. Wenn wir versuchen auf unsere https://mysubdomain.mydomain.tld/server-status Seite zuzugreifen erhalten wir eine Fehlerseite „403 Forbidden“, wir haben keine Berechtigung auf die Seite zuzugreifen. Für die server-info Seite erhalten wir ein „404 Not Found“, das Modul ist nicht aktiviert.
Werfen wir einen Blick in die beiden Konfigurationsdateien:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $ cat /etc/apache2/mods-available/status.conf <IfModule mod_status.c> # Allow server status reports generated by mod_status, # with the URL of http://servername/server-status # Uncomment and change the "192.0.2.0/24" to allow access from other hosts. <Location /server-status> SetHandler server-status Require local #Require ip 192.0.2.0/24 </Location> . . . |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | $ cat /etc/apache2/mods-available/info.conf <IfModule mod_info.c> # Allow remote server configuration reports, with the URL of # http://servername/server-info (requires that mod_info.c be loaded). # Uncomment and change the "192.0.2.0/24" to allow access from other hosts. # <Location /server-info> SetHandler server-info Require local #Require ip 192.0.2.0/24 </Location> </IfModule> # vim: syntax=apache ts=4 sw=4 sts=4 sr noet |
In beiden Fällen ist der Zugriff, durch die Anweisung „Require local“, lokal auf den Server beschränkt. Wenn wir hinter einer festen IP-Adresse sitzen, können wir diese natürlich hier eintragen. Ich bevorzuge einen anderen Weg, da ich hinter einer AVM Fritzbox am Vodafone Kabelanschluss, ehemals Kabel Deutschland, sitze und keine feste IP-Adresse habe, jedenfalls keine feste IPv4 Adresse. Voraussetzung ist der Einsatz eines DynDNS Dienstes für meine Fritzbox. AVM bietet einen kostenlosen Dienst für seine Kunden an, den man sehr einfach konfigurieren kann. Einmal eingerichtet findet man den DNS Namen für seine Fritzbox in deren Konfigurationsoberfläche unter Internet -> Online-Monitor. Dort sollte dann ein Eintrag MyFRITZ! existieren, mit einer URL der Form https://routerkennung.myfritz.net und einem Benutzernamen. Der DNS Name für unseren Router ist dann routerkennung.myfritz.net und ein „host routerkennung.myfritz.net“ sollte die momentan zugewiesene IP-Adresse unseres Routers zurückliefern. Da sich zumindest bei Vodafone die zugewiesene IP-Adresse selten ändert könnten wir natürlich diese IP-Adresse in die Konfigurationsdateien eintragen. Ich mache es hier etwas anders.
Zunächst lege ich im Apache Konfigurationsverzeichnis ein neues Verzeichnis und darin eine neue leere Datei an:
1 2 | $ mkdir /etc/apache2/misc $ touch /etc/apache2/misc/my-current-admin-host.conf |
In die Datei /etc/apache2/misc/my-current-admin-host.conf schreiben wir später eine passende „Require“ Anweisung. Dann tragen wir in allen Konfigurationen, in denen wir den Zugriff von unserem Heimnetz aus freischalten wollen, eine „Include“ Anweisung ein, die den Inhalt der Datei /etc/apache2/misc/my-current-admin-host.conf in die Konfiguration aufnimmt. Als Beispiel sehen wir hier die Datei /etc/apache2/mods-available/info.conf:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | $ cat /etc/apache2/mods-available/info.conf <IfModule mod_info.c> # Allow remote server configuration reports, with the URL of # http://servername/server-info (requires that mod_info.c be loaded). # Uncomment and change the "192.0.2.0/24" to allow access from other hosts. # <Location /server-info> SetHandler server-info Require local #Require ip 192.0.2.0/24 Include /etc/apache2/misc/my-current-admin-host.conf </Location> </IfModule> # vim: syntax=apache ts=4 sw=4 sts=4 sr noet |
Das gleiche machen wir in der Datei status.conf. Nun haben wir eine zentrale Stelle an der wir die IP-Adresse unseres Admin Hostes, bzw. die unseres Internetrouters eintragen können. Am einfachsten wäre für mich, wenn der 1&1 Cloud Server auch über IPv6 ans Internet angebunden wäre. Dann wäre es jetzt ausreichend in unsere neu angelegte Konfigurationsdatei /etc/apache2/misc/my-current-admin-host.conf meine feste IPv6-Adresse einzutragen. Leider ist dem momentan nicht so.
Die nächste einfach aussehende Option wäre die folgende:
1 2 | $ cat /etc/apache2/misc/my-current-admin-host.conf Require host routerkennung.myfritz.net |
Dies funktioniert leider nicht. Wenn wir einen „host“ angeben, müssen die DNS-Auflösung und die reverse DNS-Auflösung zusammen passen. Das ist bei den DynDNS Namen nicht der Fall, wie man leicht selbst überprüfen kann. Da ich dennoch einen Hosteintrag einem IP-Eintrag vorziehe, wähle ich folgende Vorgehensweise. Ich bestimme mir anhand des DynDNS Namens die IP-Adresse und dann von dieser ausgehend den Hostnamen im Providernetz. Diesen Hostnamen trage ich dann in unsere Konfigurationsdatei ein. Anschliessend müssen wir den Apache noch veranlassen seine Konfiguration neu zu lesen.
Um den ganzen Vorgang zu automatisieren habe ich folgendes script geschrieben:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | $ cat /root/bin/setmyhost.sh #!/bin/bash # # Utility to set a "Require host" record for apache # # You may adopt the following three variables to your needs configdir="/etc/apache2/misc" configfile="my-current-admin-host.conf" comparefile="my-old-admin-host.txt" # # My own name # myname=$0 # # define funktion usage # usage() { echo "Usage: ${myname} [ options ] <hostname>" echo "" echo "Options:" echo " -h, --help print usage" echo " -v, --verbose give verbose output" echo "" } # # parse arguments # dyndnsname="" for arg in "$@"; do case $arg in -h|--help) usage exit 0 ;; -v|--verbose) verbose="true" ;; -*) echo "Error: Unknown option $arg" usage exit 0 ;; *) if [ "${dyndnsname}" == "" ] ; then dyndnsname=${arg} else echo "Error: No extra parameter allowed: $arg" usage exit 0 fi ;; esac done # Check if configdir exists if [ ! -d "${configdir}" ] ; then echo "Error: Configuration directory ${configdir} doesn't exist!" exit 2 fi # Check if comparefile exists if [ ! -f "${configdir}/${comparefile}" ] ; then echo "Warning: File ${configdir}/${comparefile} doesn't exist, creating an empty one" touch "${configdir}/${comparefile}" fi # We are only interested in the A record. Extract the fourth field it's the IP. myipaddress=`host -t A ${dyndnsname} | cut -d " " -f 4` if [ "${myipaddress}" == "found:" ] ; then echo "Error: `host -t A ${dyndnsname}`" exit 2 fi # Now we do a reverse lookup. Extract the fifth field, it's the name. myhostname_tmp=`host ${myipaddress} | cut -d " " -f 5` # Remove the trailing dot. myhostname=`echo ${myhostname_tmp%.}` # Read the old name, stored the last time the name changed. myoldhostname=`cat ${configdir}/${comparefile}` if [ "${myhostname}" != "${myoldhostname}" ] ; then echo "Host has changed." echo "Given hostname is: ${dyndnsname}" echo "IPv4 address is: ${myipaddress}" echo "The old hostname was: ${myoldhostname}" echo "The current hostname is: ${myhostname}" echo "Writing new configuration file and reloading apache!" # Write new configuration file. This file has to be included in the right places. echo "Require host ${myhostname}" >${configdir}/${configfile} # Write new current admin host to text file for easy comparison. echo "${myhostname}" >${configdir}/${comparefile} # Reload apache, suppress normal output. service apache2 reload >/dev/null else if [ $2 ] ; then if [ $verbose ] ; then echo "Host has not changed." echo "Given hostname is: ${dyndnsname}" echo "IPv4 address is: ${myipaddress}" echo "The old hostname was: ${myoldhostname}" echo "The current hostname is: ${myhostname}" echo "Nothing to do!" fi fi fi exit 0 |
Das script erwartet einen existierenden Hostnamen als Argument. Die Optionen -v, –verbose triggern das eine ausführliche Ausgabe, während die Optionen -h, –help die Hilfe zum Script anzeigen. Die Funktionsweise ist wie oben beschrieben. Zunächst wird für den angegebenen Hostnamen die zugehörige IP-Adresse bestimmt und dann per reverse Auflösung der zugehörige Hostnamen. Dieser Hostnamen wird mit dem in der Datei /etc/apache2/misc/my-old-admin-host.txt abgelegten Namen verglichen. Nur wenn die beiden Namen voneinander abweichen, wird unsere Konfigurationsdatei für die Hostauthentifizierung /etc/apache2/misc/my-current-admin-host.conf neu geschrieben und ein Apache Reload durchgeführt. Anschließend wird der neue Namen in die /etc/apache2/misc/my-old-admin-host.txt geschrieben. Dies stellt sicher, dass nur wenn notwendig eine neue Konfigurationsdatei geschrieben und ein Apache Reload durchgeführt wird.
Wir packen das Script nach /root/bin/setmyhost.sh, ändern die Permissions und führen es zunächst an der Kommandozeile aus.
1 2 3 4 5 6 7 8 9 | $ chmod 700 /root/bin/setmyhost.sh $ /root/bin/setmyhost.sh xxxxxxxxxxxxxxxx.myfritz.net Warning: File /etc/apache2/misc/my-old-admin-host.txt doesn't exist, creating an empty one Host has changed. Given hostname is: xxxxxxxxxxxxxxxx.myfritz.net IPv4 address is: xxx.xxx.xxx.xxx The old hostname was: The current hostname is: ipxxxxxxxx.dynamic.kabel-deutschland.de Writing new configuration file and reloading apache! |
Wenn wir das Script erneut ausführen, erhalten wir keine Ausgabe, da nichts zu tun ist. Erst wenn sich IP-Adresse meines Routers ändert, wird die Konfigurationsdatei neu geschrieben und es erfolgt eine Ausgabe. Das hat den angenehmen Nebeneffekt, das wir eine E-Mail-Benachrichtigung mit den Änderungen erhalten, wenn wir das Script in einem cronjob ausführen und sich die IP-Adresse und damit der Hostnamen geändert hat.
Zuletzt tragen wir mit „crontab -e“ einen entsprechenden cronjob in unserer crontab ein.
1 | */5 * * * * /root/bin/setmyhost.sh xxxxxxxxxxxxxxxx.myfritz.net |
Das Apache info Modul müssen wir noch aktivieren und den Apache restarten.
1 2 3 4 5 6 | $ a2enmod info Enabling module info. To activate the new configuration, you need to run: service apache2 restart $ service apache2 restart * Restarting web server apache2 |
Damit können wir die Apache server-status und server-info Seiten nun nutzen. Wenn die beiden Module nicht benötigt werden, sollten wir sie sicherheitshalber jeweils mit a2dismod deaktivieren.
Nun wollen wir uns dem neu installierten PHP 5.6.18 zuwenden. Um bequem unsere PHP Konfiguration überprüfen zu können, werden wir zunächst eine PHP Info Webseite erstellen, auf die nur von unserem Admin-Host zugegriffen werden kann.
Zunächst erstellen wir ein neues Verzeichnis im Webserverbaum.
1 | $ mkdir /var/www/phpinfo |
Dort erstellen wird die folgende Datei:
1 2 3 4 5 6 7 | $ cat /var/www/phpinfo/index.php <?php // Zeigt alle Informationen zu unserer PHP Konfiguration an phpinfo(INFO_ALL); ?> |
Nun brauchen wir noch eine Apache Konfigurationsdatei. Diese erstellen wir im Verzeichnis /etc/apache2/conf-available.
1 2 3 4 5 6 7 8 | $ cat /etc/apache2/conf-available/phpinfo.conf Alias /phpinfo /var/www/phpinfo/ <Directory "/var/www/phpinfo/"> AllowOverride None Require local Include /etc/apache2/misc/my-current-admin-host.conf </Directory> |
Die Include Anweisung bindet unsere Konfiguration zur Zugriffsbeschränkung mit ein, sodass der Zugriff nur von unserem Admin-Host bzw. von unserem Heimnetz möglich ist. Nun müssen wir die Konfiguration noch aktivieren und den Apache anweisen seine Konfiguration neu zu laden.
1 2 3 4 5 6 7 | $ a2enconf phpinfo Enabling conf phpinfo. To activate the new configuration, you need to run: service apache2 reload $ service apache2 reload * Reloading web server apache2 * |
Jetzt können wir unter https://mysubdomain.mydomain.tld/phpinfo, die Platzhalter mit den aktuellen Domain ersetzt, die Details unserer PHP Konfiguration sehen.
Nun wollen wir noch unsere MySQL Datenbank auf eine neuere Version upgraden. Ich möchte die MariaDB einsetzen. Dazu brauchen wir die beiden PPAs MySQL 5.6 PPA und MariaDB 10.0 PPA, ebenfalls von Ondřej Surý. Zunächst fügen wir die beiden PPAs als Paketquellen hinzu.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | $ add-apt-repository ppa:ondrej/mysql-5.6 This branch tracks my attempt to package latest MySQL 5.6 packaging as available in Debian. Feel free to ping me if I am seriously behind Debian or upstream. You can get more information about the packages at https://deb.sury.org. If you are looking for MariaDB 10.0, please use: ppa:ondrej/mariadb-10.0: https://launchpad.net/~ondrej/+archive/mariadb-10.0 If you are looking for MySQL 5.5, please use: ppa:ondrej/mysql-5.5: https://launchpad.net/~ondrej/+archive/mysql-5.5 If you are looking for MySQL 5.6, please use: ppa:ondrej/mysql-5.6: https://launchpad.net/~ondrej/+archive/mysql-5.6 If you are looking for MySQL 5.7, please use: ppa:ondrej/mysql-5.6: https://launchpad.net/~ondrej/+archive/mysql-5.7 If you are looking for Percona XtraDB Cluster 5.5, please use: ppa:ondrej/percona-xtradb-cluster-5.5: https://launchpad.net/~ondrej/+archive/percona-xtradb-cluster-5.5 PLEASE READ: If you like my work and want to give me a little motivation, please consider donating: https://deb.sury.org/pages/donate.html More info: https://launchpad.net/~ondrej/+archive/ubuntu/mysql-5.6 Press [ENTER] to continue or ctrl-c to cancel adding it gpg: keyring `/tmp/tmpsus7_1f5/secring.gpg' created gpg: keyring `/tmp/tmpsus7_1f5/pubring.gpg' created gpg: requesting key E5267A6C from hkp server keyserver.ubuntu.com gpg: /tmp/tmpsus7_1f5/trustdb.gpg: trustdb created gpg: key E5267A6C: public key "Launchpad PPA for Ond\xc5\x99ej Sur▒" imported gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1) OK $ add-apt-repository ppa:ondrej/mariadb-10.0 This branch tracks my attempt to package latest MariaDB 10.0 packaging as available in Debian. Feel free to ping me if I am seriously behind Debian or upstream. You can get more information about the packages at https://deb.sury.org. If you are looking for MariaDB 5.5, please use: ppa:ondrej/mariadb-5.5: https://launchpad.net/~ondrej/+archive/mariadb-5.5 If you are looking for MariaDB 10.0, please use: ppa:ondrej/mariadb-10.0: https://launchpad.net/~ondrej/+archive/mariadb-10.0 If you are looking for MySQL 5.5, please use: ppa:ondrej/mysql-5.5: https://launchpad.net/~ondrej/+archive/mysql-5.5 If you are looking for MySQL 5.6, please use: ppa:ondrej/mysql-5.6: https://launchpad.net/~ondrej/+archive/mysql-5.6 If you are looking for MySQL 5.7, please use: ppa:ondrej/mysql-5.6: https://launchpad.net/~ondrej/+archive/mysql-5.7 If you are looking for Percona XtraDB Cluster 5.5, please use: ppa:ondrej/percona-xtradb-cluster-5.5: https://launchpad.net/~ondrej/+archive/percona-xtradb-cluster-5.5 PLEASE READ: If you like my work and want to give me a little motivation, please consider donating: https://deb.sury.org/pages/donate.html More info: https://launchpad.net/~ondrej/+archive/ubuntu/mariadb-10.0 Press [ENTER] to continue or ctrl-c to cancel adding it gpg: keyring `/tmp/tmp48_pm6ne/secring.gpg' created gpg: keyring `/tmp/tmp48_pm6ne/pubring.gpg' created gpg: requesting key E5267A6C from hkp server keyserver.ubuntu.com gpg: /tmp/tmp48_pm6ne/trustdb.gpg: trustdb created gpg: key E5267A6C: public key "Launchpad PPA for Ond\xc5\x99ej Sur▒" imported gpg: Total number processed: 1 gpg: imported: 1 (RSA: 1) OK |
Danach lesen wir die Paketquellen neu ein.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | $ apt-get update Get:1 http://ppa.launchpad.net trusty InRelease [15.5 kB] Get:2 http://ppa.launchpad.net trusty InRelease [15.4 kB] Hit http://ppa.launchpad.net trusty InRelease Get:3 http://ppa.launchpad.net trusty/main amd64 Packages [4,907 B] Get:4 http://ppa.launchpad.net trusty/main i386 Packages [4,915 B] Get:5 http://ppa.launchpad.net trusty/main Translation-en [2,281 B] Get:6 http://ppa.launchpad.net trusty/main amd64 Packages [3,107 B] Get:7 http://security.ubuntu.com trusty-security InRelease [65.9 kB] Ign http://us.archive.ubuntu.com trusty InRelease Get:8 http://ppa.launchpad.net trusty/main i386 Packages [3,115 B] Get:9 http://ppa.launchpad.net trusty/main Translation-en [1,489 B] Hit http://ppa.launchpad.net trusty/main amd64 Packages Hit http://ppa.launchpad.net trusty/main i386 Packages Hit http://ppa.launchpad.net trusty/main Translation-en Get:10 http://us.archive.ubuntu.com trusty-updates InRelease [65.9 kB] . . . |
Da wir noch keine Daten in unserer Database haben, deinstallieren wir MySQL zunächst komplett.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | $ apt-get remove --purge libmysqlclient18 mysql-client mysql-common mysql-server mysql-client-core-5.5 mysql-server-core-5.5 Reading package lists... Done Building dependency tree Reading state information... Done The following packages will be REMOVED: libdbd-mysql-perl* libmysqlclient18* mysql-client* mysql-client-5.5* mysql-client-core-5.5* mysql-common* mysql-server* mysql-server-5.5* mysql-server-core-5.5* php5-mysql* 0 upgraded, 0 newly installed, 10 to remove and 1 not upgraded. After this operation, 94.5 MB disk space will be freed. Do you want to continue? [Y/n] (Reading database ... 123683 files and directories currently installed.) Removing mysql-server (5.5.47-0ubuntu0.14.04.1) ... Removing mysql-server-5.5 (5.5.47-0ubuntu0.14.04.1) ... Purging configuration files for mysql-server-5.5 (5.5.47-0ubuntu0.14.04.1) ... Removing mysql-client (5.5.47-0ubuntu0.14.04.1) ... Removing mysql-client-5.5 (5.5.47-0ubuntu0.14.04.1) ... Removing libdbd-mysql-perl (4.025-1) ... Removing php5-mysql (5.6.18+dfsg-1+deb.sury.org~trusty+1) ... php5_invoke prerm: Disable module mysql for cli SAPI php5_invoke prerm: Disable module mysql for apache2 SAPI php5_invoke prerm: Disable module mysqli for cli SAPI php5_invoke prerm: Disable module mysqli for apache2 SAPI php5_invoke prerm: Disable module pdo_mysql for cli SAPI php5_invoke prerm: Disable module pdo_mysql for apache2 SAPI Purging configuration files for php5-mysql (5.6.18+dfsg-1+deb.sury.org~trusty+1) ... Removing libmysqlclient18:amd64 (5.5.47-0ubuntu0.14.04.1) ... Purging configuration files for libmysqlclient18:amd64 (5.5.47-0ubuntu0.14.04.1) ... Removing mysql-client-core-5.5 (5.5.47-0ubuntu0.14.04.1) ... Removing mysql-common (5.5.47-0ubuntu0.14.04.1) ... Purging configuration files for mysql-common (5.5.47-0ubuntu0.14.04.1) ... dpkg: warning: while removing mysql-common, directory '/etc/mysql' not empty so not removed Removing mysql-server-core-5.5 (5.5.47-0ubuntu0.14.04.1) ... Processing triggers for man-db (2.6.7.1-1ubuntu1) ... Processing triggers for libapache2-mod-php5 (5.6.18+dfsg-1+deb.sury.org~trusty+1) ... Processing triggers for libc-bin (2.19-0ubuntu6.7) ... |
Bevor wir die Installation der MariaDB durchführen halten wir den Apparmor Dienst an und entladen alle Profile.
1 2 3 4 5 6 7 8 9 10 11 | $ service apparmor stop * Clearing AppArmor profiles cache [ OK ] All profile caches have been cleared, but no profiles have been unloaded. Unloading profiles will leave already running processes permanently unconfined, which can lead to unexpected situations. To set a process to complain mode, use the command line tool 'aa-complain'. To really tear down all profiles, run the init script with the 'teardown' option. $ service apparmor teardown * Unloading AppArmor profiles [ OK ] |
Danach installieren wir die MariaDB.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | $ apt-get install libmariadbd18 mariadb-client mariadb-common mariadb-server Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: libdbd-mysql-perl libmysqlclient18 libpcre3 mariadb-client-10.0 mariadb-client-core-10.0 mariadb-server-10.0 mariadb-server-core-10.0 mysql-common Suggested packages: mariadb-test tinyca The following NEW packages will be installed: libdbd-mysql-perl libmariadbd18 libmysqlclient18 mariadb-client mariadb-client-10.0 mariadb-client-core-10.0 mariadb-common mariadb-server mariadb-server-10.0 mariadb-server-core-10.0 mysql-common The following packages will be upgraded: libpcre3 1 upgraded, 11 newly installed, 0 to remove and 0 not upgraded. Need to get 18.6 MB/19.6 MB of archives. After this operation, 155 MB of additional disk space will be used. Do you want to continue? [Y/n] Get:1 http://ppa.launchpad.net/ondrej/mariadb-10.0/ubuntu/ trusty/main libpcre3 amd64 2:8.35-3.3+deb.sury.org~trusty+1 [313 kB] Get:2 http://ppa.launchpad.net/ondrej/mariadb-10.0/ubuntu/ trusty/main mariadb-common all 10.0.23-2+deb.sury.org~trusty+1 [21.2 kB] Get:3 http://ppa.launchpad.net/ondrej/mariadb-10.0/ubuntu/ trusty/main mariadb-client-core-10.0 amd64 10.0.23-2+deb.sury.org~trusty+1 [793 kB] Get:4 http://ppa.launchpad.net/ondrej/mariadb-10.0/ubuntu/ trusty/main mariadb-client-10.0 amd64 10.0.23-2+deb.sury.org~trusty+1 [4,891 kB] Get:5 http://ppa.launchpad.net/ondrej/mariadb-10.0/ubuntu/ trusty/main mariadb-server-core-10.0 amd64 10.0.23-2+deb.sury.org~trusty+1 [4,726 kB] Get:6 http://ppa.launchpad.net/ondrej/mariadb-10.0/ubuntu/ trusty/main mariadb-server-10.0 amd64 10.0.23-2+deb.sury.org~trusty+1 [3,978 kB] Get:7 http://ppa.launchpad.net/ondrej/mariadb-10.0/ubuntu/ trusty/main libmariadbd18 amd64 10.0.23-2+deb.sury.org~trusty+1 [3,830 kB] Get:8 http://ppa.launchpad.net/ondrej/mariadb-10.0/ubuntu/ trusty/main mariadb-client all 10.0.23-2+deb.sury.org~trusty+1 [20.0 kB] Get:9 http://ppa.launchpad.net/ondrej/mariadb-10.0/ubuntu/ trusty/main mariadb-server all 10.0.23-2+deb.sury.org~trusty+1 [20.1 kB] Fetched 18.6 MB in 1s (13.1 MB/s) Preconfiguring packages ... (Reading database ... 123389 files and directories currently installed.) Preparing to unpack .../libpcre3_2%3a8.35-3.3+deb.sury.org~trusty+1_amd64.deb ... Unpacking libpcre3:amd64 (2:8.35-3.3+deb.sury.org~trusty+1) over (1:8.31-2ubuntu2.1) ... Processing triggers for man-db (2.6.7.1-1ubuntu1) ... Setting up libpcre3:amd64 (2:8.35-3.3+deb.sury.org~trusty+1) ... Processing triggers for libc-bin (2.19-0ubuntu6.7) ... Selecting previously unselected package mysql-common. (Reading database ... 123390 files and directories currently installed.) Preparing to unpack .../mysql-common_5.6.27-2+deb.sury.org~trusty+1_all.deb ... Unpacking mysql-common (5.6.27-2+deb.sury.org~trusty+1) ... Selecting previously unselected package libmysqlclient18:amd64. Preparing to unpack .../libmysqlclient18_5.6.27-2+deb.sury.org~trusty+1_amd64.deb ... Unpacking libmysqlclient18:amd64 (5.6.27-2+deb.sury.org~trusty+1) ... Selecting previously unselected package mariadb-common. Preparing to unpack .../mariadb-common_10.0.23-2+deb.sury.org~trusty+1_all.deb ... Unpacking mariadb-common (10.0.23-2+deb.sury.org~trusty+1) ... Selecting previously unselected package libdbd-mysql-perl. Preparing to unpack .../libdbd-mysql-perl_4.025-1_amd64.deb ... Unpacking libdbd-mysql-perl (4.025-1) ... Selecting previously unselected package mariadb-client-core-10.0. Preparing to unpack .../mariadb-client-core-10.0_10.0.23-2+deb.sury.org~trusty+1_amd64.deb ... Unpacking mariadb-client-core-10.0 (10.0.23-2+deb.sury.org~trusty+1) ... Selecting previously unselected package mariadb-client-10.0. Preparing to unpack .../mariadb-client-10.0_10.0.23-2+deb.sury.org~trusty+1_amd64.deb ... Unpacking mariadb-client-10.0 (10.0.23-2+deb.sury.org~trusty+1) ... Selecting previously unselected package mariadb-server-core-10.0. Preparing to unpack .../mariadb-server-core-10.0_10.0.23-2+deb.sury.org~trusty+1_amd64.deb ... Unpacking mariadb-server-core-10.0 (10.0.23-2+deb.sury.org~trusty+1) ... Processing triggers for man-db (2.6.7.1-1ubuntu1) ... Setting up mysql-common (5.6.27-2+deb.sury.org~trusty+1) ... update-alternatives: using /etc/mysql/my.cnf.fallback to provide /etc/mysql/my.cnf (my.cnf) in auto mode Setting up mariadb-common (10.0.23-2+deb.sury.org~trusty+1) ... update-alternatives: using /etc/mysql/mariadb.cnf to provide /etc/mysql/my.cnf (my.cnf) in auto mode Selecting previously unselected package mariadb-server-10.0. (Reading database ... 123582 files and directories currently installed.) Preparing to unpack .../mariadb-server-10.0_10.0.23-2+deb.sury.org~trusty+1_amd64.deb ... Unpacking mariadb-server-10.0 (10.0.23-2+deb.sury.org~trusty+1) ... Selecting previously unselected package libmariadbd18:amd64. Preparing to unpack .../libmariadbd18_10.0.23-2+deb.sury.org~trusty+1_amd64.deb ... Unpacking libmariadbd18:amd64 (10.0.23-2+deb.sury.org~trusty+1) ... Selecting previously unselected package mariadb-client. Preparing to unpack .../mariadb-client_10.0.23-2+deb.sury.org~trusty+1_all.deb ... Unpacking mariadb-client (10.0.23-2+deb.sury.org~trusty+1) ... Selecting previously unselected package mariadb-server. Preparing to unpack .../mariadb-server_10.0.23-2+deb.sury.org~trusty+1_all.deb ... Unpacking mariadb-server (10.0.23-2+deb.sury.org~trusty+1) ... Processing triggers for man-db (2.6.7.1-1ubuntu1) ... Processing triggers for ureadahead (0.100.0-16) ... ureadahead will be reprofiled on next reboot Setting up libmysqlclient18:amd64 (5.6.27-2+deb.sury.org~trusty+1) ... Setting up libdbd-mysql-perl (4.025-1) ... Setting up mariadb-client-core-10.0 (10.0.23-2+deb.sury.org~trusty+1) ... Setting up mariadb-client-10.0 (10.0.23-2+deb.sury.org~trusty+1) ... Setting up mariadb-server-core-10.0 (10.0.23-2+deb.sury.org~trusty+1) ... Setting up mariadb-server-10.0 (10.0.23-2+deb.sury.org~trusty+1) ... * Stopping MariaDB database server mysqld [ OK ] * Starting MariaDB database server mysqld [ OK ] Setting up libmariadbd18:amd64 (10.0.23-2+deb.sury.org~trusty+1) ... Setting up mariadb-client (10.0.23-2+deb.sury.org~trusty+1) ... Processing triggers for ureadahead (0.100.0-16) ... Setting up mariadb-server (10.0.23-2+deb.sury.org~trusty+1) ... Processing triggers for libc-bin (2.19-0ubuntu6.7) ... |
Bevor wir Apparmor wieder starten müssen wir noch einen Eingriff in die Apparmor Konfiguration vornehmen. Ansonsten wird unsere neue MySQL bzw. MariaDB Datenbank nicht richtig gestartet, da Apparmor den Zugriff auf die Konfigurationsdateien verhindert.
1 2 3 4 | $ cp /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/usr.sbin.mysqld_safe $ service apparmor start * Starting AppArmor profiles Skipping profile in /etc/apparmor.d/disable: usr.sbin.rsyslogd [ OK ] |
Zuletzt installieren wir noch das PHP MySQL Modul php5-mysql.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | $ apt-get install php5-mysql Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: php5-mysql 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 64.0 kB of archives. After this operation, 293 kB of additional disk space will be used. Get:1 http://ppa.launchpad.net/ondrej/php5-5.6/ubuntu/ trusty/main php5-mysql amd64 5.6.18+dfsg-1+deb.sury.org~trusty+1 [64.0 kB] Fetched 64.0 kB in 0s (613 kB/s) Selecting previously unselected package php5-mysql. (Reading database ... 123692 files and directories currently installed.) Preparing to unpack .../php5-mysql_5.6.18+dfsg-1+deb.sury.org~trusty+1_amd64.deb ... Unpacking php5-mysql (5.6.18+dfsg-1+deb.sury.org~trusty+1) ... Processing triggers for libapache2-mod-php5 (5.6.18+dfsg-1+deb.sury.org~trusty+1) ... Setting up php5-mysql (5.6.18+dfsg-1+deb.sury.org~trusty+1) ... Creating config file /etc/php5/mods-available/mysql.ini with new version php5_invoke: Enable module mysql for cli SAPI php5_invoke: Enable module mysql for apache2 SAPI Creating config file /etc/php5/mods-available/mysqli.ini with new version php5_invoke: Enable module mysqli for cli SAPI php5_invoke: Enable module mysqli for apache2 SAPI Creating config file /etc/php5/mods-available/pdo_mysql.ini with new version php5_invoke: Enable module pdo_mysql for cli SAPI php5_invoke: Enable module pdo_mysql for apache2 SAPI Processing triggers for libapache2-mod-php5 (5.6.18+dfsg-1+deb.sury.org~trusty+1) ... |
Damit haben wir die Voraussetzungen geschaffen, meinen WordPress Blog auf die neue Seite umzuziehen. Den Umzug des Blogs wollen wir mit dem WordPress Plugin Duplicator Pro vornehmen. Das Plugin ist zwar kostenpflichtig, für meine Zwecke aber genau das richtige.
Zunächst möchte ich die Vorbereitungen auf unserem Server vornehmen. Dazu gehören die Erstellung einer Apache Site Konfiguration und das Anlegen einer Datenbank für WordPress.
Bevor wir mit der lokalen Konfiguration des Virtualhost auf unserem Server beginnen können, müssen wir sicherstellen, dass die IP-Adresse unseres Servers auch unter den geplanten Hostnamen gefunden wird. Dazu muss ich für die beiden Subdomains blog.emrich-ebersheim.de und www.blog.emrich-ebersheim.de die DNS-Einstellungen im 1&1 Controlcenter meines SharedHosting-Vertrages anpassen und die IP-Adresse unseres Servres eintragen, siehe dazu auch Teil 2 der Artikelserie. Gegebenenfalls müssen wir danach 24 Stunden warten, bis die geänderte Namensauflösung sich im DNS-System aktualisiert hat. Andernfalls können wir unseren Server eventuell nicht unter dem gewählten Namen erreichen. Dies kann sich dann mit Fehlern beim Erstellen eines Let’s Encrypt Zertifikates bemerkbar machen.
Zunächst legen wir ein neues Verzeichnis /var/www/wp_01 an, in das wir WordPress installieren werden. Danach erzeugen wir die Site Konfiguration für den Apache.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | $ cat /etc/apache2/sites-available/002-blog-le-ssl.conf <IfModule mod_ssl.c> <VirtualHost blog.emrich-ebersheim.de:443> # The ServerName directive sets the request scheme, hostname and port that # the server uses to identify itself. This is used when creating # redirection URLs. In the context of virtual hosts, the ServerName # specifies what hostname must appear in the request's Host: header to # match this virtual host. For the default virtual host (this file) this # value is not decisive as it is used as a last resort host regardless. # However, you must set it for any further virtual host explicitly. ServerName blog.emrich-ebersheim.de ServerAlias www.blog.emrich-ebersheim.de ServerAdmin webmaster@emrich-ebersheim.de DocumentRoot /var/www/wp_01 <Directory "/var/www/wp_01"> Options FollowSymLinks AllowOverride FileInfo AuthConfig Limit DirectoryIndex index.php # Require all granted Require local Include /etc/apache2/misc/my-current-admin-host.conf FallbackResource "index.php" <IfModule mod_php5.c> php_flag display_errors Off </IfModule> </Directory> # Available loglevels: trace8, ..., trace1, debug, info, notice, warn, # error, crit, alert, emerg. # It is also possible to configure the loglevel for particular # modules, e.g. #LogLevel info ssl:warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # For most configuration files from conf-available/, which are # enabled or disabled at a global level, it is possible to # include a line for only one particular virtual host. For example the # following line enables the CGI configuration for this host only # after it has been globally disabled with "a2disconf". #Include conf-available/serve-cgi-bin.conf </VirtualHost> # vim: syntax=apache ts=4 sw=4 sts=4 sr noet </IfModule> |
Zugriff ist hier zunächst nur von unserem Adminhost oder lokal auf dem Server möglich. Dies Einstellung ändern wir erst, nachdem wir mit der Installation unserer WordPress Instanz fertig sind.
Nun wollen wir noch ein Zertifikat von Let’s Encrypt installieren. Wir wechseln in das Let’s Encrypt Verzeichnis und fordern das Zertifikat an.
1 2 3 4 5 | $ cd /root/letsencrypt $ ./letsencrypt-auto --apache --expand -d blog.emrich-ebersheim.de -d www.blog.emrich-ebersheim.de Checking for new version... Requesting root privileges to run letsencrypt... /root/.local/share/letsencrypt/bin/letsencrypt --apache --expand -d blog.emrich-ebersheim.de -d www.blog.emrich-ebersheim.de |
Am Ende gibt das Let’s Encrypt Wrapper-Script eine Warnung aus, dass in unserem Konfiguationsfile keine key oder cert Direktive gefunden wurde. Das ist weiter kein Problem. Wir ergänzen diese Zeilen entsprechend der Konfiguration unserer Default Seite. Die fertige Sitekonfiguration sieht dann wie folgt aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | $ cat 002-blog-le-ssl.conf <IfModule mod_ssl.c> <VirtualHost blog.emrich-ebersheim.de:443> # The ServerName directive sets the request scheme, hostname and port that # the server uses to identify itself. This is used when creating # redirection URLs. In the context of virtual hosts, the ServerName # specifies what hostname must appear in the request's Host: header to # match this virtual host. For the default virtual host (this file) this # value is not decisive as it is used as a last resort host regardless. # However, you must set it for any further virtual host explicitly. ServerName blog.emrich-ebersheim.de ServerAlias www.blog.emrich-ebersheim.de ServerAdmin webmaster@emrich-ebersheim.de DocumentRoot /var/www/wp_01 <Directory "/var/www/wp_01"> Options FollowSymLinks AllowOverride FileInfo AuthConfig Limit DirectoryIndex index.php # Require all granted Require local Include /etc/apache2/misc/my-current-admin-host.conf FallbackResource "index.php" <IfModule mod_php5.c> php_flag display_errors Off </IfModule> </Directory> # Available loglevels: trace8, ..., trace1, debug, info, notice, warn, # error, crit, alert, emerg. # It is also possible to configure the loglevel for particular # modules, e.g. #LogLevel info ssl:warn ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined # For most configuration files from conf-available/, which are # enabled or disabled at a global level, it is possible to # include a line for only one particular virtual host. For example the # following line enables the CGI configuration for this host only # after it has been globally disabled with "a2disconf". #Include conf-available/serve-cgi-bin.conf SSLCertificateFile /etc/letsencrypt/live/blog.emrich-ebersheim.de/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/blog.emrich-ebersheim.de/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf SSLCertificateChainFile /etc/letsencrypt/live/blog.emrich-ebersheim.de/chain.pem </VirtualHost> # vim: syntax=apache ts=4 sw=4 sts=4 sr noet </IfModule> |
Nun kommen wir zurück zur Datenbank MariaDB. Zunächst wollen wir unsere MariaDB Installation absichern. Hierzu führen wir das Script mysql_secure_installation aus.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | $ mysql_secure_installation NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we'll need the current password for the root user. If you've just installed MariaDB, and you haven't set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. You already have a root password set, so you can safely answer 'n'. Change the root password? [Y/n] n ... skipping. By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] ... Success! By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] - Dropping test database... ERROR 1008 (HY000) at line 1: Can't drop database 'test'; database doesn't exist ... Failed! Not critical, keep moving... - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] ... Success! Cleaning up... All done! If you've completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB! |
Als nächstes müssen wir eine Datenbank und einen Datenbankbenutzer für WordPress erstellen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | $ mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 39 Server version: 10.0.23-MariaDB-2+deb.sury.org~trusty+1 Ubuntu 14.04 Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> create database wp_mydatabase; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> create user wp_myuser; Query OK, 0 rows affected (0.01 sec) MariaDB [(none)]> set password for wp_myuser = password("mypasswd"); Query OK, 0 rows affected (0.01 sec) MariaDB [(none)]> grant all PRIVILEGES on wp_mydatabase.* to wp_myuser@localhost identified by 'mypasswd'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> flush PRIVILEGES; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> exit; Bye |
Auf WordPress selbst, werde ich hier nicht weiter eingehen. Im Netz gibt es jede Menge Informationen zur Installation, Plugins und Sicherheitseinstellungen.
Wie bereits vorher erwähnt, werden wir nun das WordPress Plugin Duplicator Pro einsetzen, um meinen Blog umzuziehen. Wir loggen uns als Administrator auf unserer WordPress Seite ein. Das Duplicator Pro Plugin habe ich bereits installiert. Wir wählen links im Menü die Seite Duplicator Pro -> Packages, siehe nächste Abbildung.
Zur Zeit gibt existiert noch kein Package. Wir wollen nun ein neues Package mit dem derzeitigen Stand der WrodPress Seite erstellen. Dazu klicken wir auf den Button rechts oben Erstellen.
In einem ersten Schritt überprüft das Plugin, ob alle Voraussetzungen erfüllt sind. Das ist hier der Fall. Als Erstellungsmodus wählen wir Manuell. Den vorgeschlagenen Namen für das Package können wir übernehmen. Storage steht defaultmäßig auf lokalem Filesystem. Das können wir ebenfalls übernehmen. Dann klicken wir einfach auf den blauen Button Next.
Im zweiten Schritt checkt das Plugin die Datenbank und die Verzeichnisstruktur. Hier klicken wir den blauen Button Build um das Package zu erzeugen. Im dritten und letzten Step erzeugt das Plugin einen Installer und ein Package das die Datenbankdaten und die Verzeichnisstruktur inkl. aller Dateien unserer WordPress Seite enthält. Wenn die Erzeugung des Packages erfolgreich beendet wurde, kehrt das Plugin zur Packageliste zurück und wir sehen unser neu erzeugtes Package.
Mit Hilfe der beiden Buttons Installer und Archive, können wir die beiden Dateien auf unseren Rechner lokal herunterladen. Im nächsten Schritt kopieren wir diese beiden Dateien mit scp auf unserem Cloud Server. Wir loggen uns auf dem Server ein und verschieben die beiden Dateien ins DocumentRoot Verzeichnis unsers virtuellen Hostes für WordPress, in unserem Falle /var/www/wp_01. Dass der installer die Dateien entpacken kann, müssen wir den Besitzer für das Verzeichnis und die beiden darin enthaltenen Dateien ändern. Der Owner muss dem Account entsprechen unter dem der Apache Server läuft, das ist unter ubuntu der user www-data.
1 | $ chown -R www-data /var/www/wp_01 |
Dann öffnen wir mit unerem Webbrowser die URL https://mysubdomain.mydomain.tld/installer.php. Der Installer meldet sich mit der folgenden Seite:
Hier müssen wir unsere WordPress Datenbank, den Datenbank User sowie dessen Passwort angeben. Anschließend sollte man die Datenbankverbindung testen, siehe folgende Abbildung.
Hier tragen wir die Datenbankinformationen der weiter oben erzeugten Datenbank ein drücken den Button Test Connection. Nach erfolgreichem Verbindungsversuch setzen wir den Haken bei „I have read all warnings & notices“ und klicken den Button Run Deployment. Wir erhalten ein Popup das Nochmals nachfragt, ob wir das Deployment wirklich durchführen wollen. Den Dialog müssen wir bestätigen.
Nach kurzer Zeit kehrt der Installer mit der Seite für den 2. Step zurück.
Im zweiten Step ersetzt der Installer alle Verweise auf die alte URL und den alten Pfad mit der neuen URL bzw. dem neuen Pfad. Durch Drücken des Buttons Run Update starten wir den Vorgang. Anschließend gelangen wir zum 3. und letzten Schritt Test.
Diese Schritte sollten wir unbedingt durchführen. Klicken auf „Review Install Report“ zeigt uns Details des Installationsvorgangs. Danach klicken wir auf „Save Permalinks„. Dies bringt uns zur Login Seite, wo wir uns mit einem Administrator Account einloggen. Darauf landen wir in den Einstellungen im Abschnitt Permalinks.
Hier klicken wir auf Änderungen übernehmen. Anschließend sollten wir unseren Blog ausgiebig testen. Speziell die Bilder und Links sind zu überprüfen.
Im letzten Schritt führen wir den Security Cleanup aus.
Wir bestätigen die Nachfrage und erhalten dann die folgende Ausgabe.
Damit haben wir den Blog auf den Cloud Server umgezogen. Es bleibt jedoch noch die Aufgabe die WordPress Installation gegen Angriffe abzusichern. Hierzu findet man etliche Anregungen auf der WordPress.org Codex Seite unter Hardening WordPress. Nachdem wir die notwendigen Maßnahmen durchgeführt haben, können wir den Blog live schalten, indem wir die Beschränkung des Zugriffs von lokal und von unserem Adminhost aufheben. Dazu kommentieren wir die folgenden beiden Zeilen in unserer Siteconfiguration aus.
1 2 | # Require local # Include /etc/apache2/misc/my-current-admin-host.conf |
Danach führen wir noch ein „service apache2 reload“ aus, fertig.
Schließlich wollen wir noch ein Backup unserer Datenbank einrichten. Leider können wir das 1&1 Cloud Server Backup dafür nicht direkt einsetzen, da dieses unsere MariaDB nicht unterstützt. Wir gehen daher einen kleinen Umweg und machen den Datenbankdump mit einem eigenen Script in ein lokales Verzeichnis und sichern dieses dann mit dem 1&1 Cloud Server Backup. Mein Datenbank-Backupscript sieht wie folgt aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | $ cat /root/bin/backup-mysql.sh #!/bin/bash # # Define number of backups to keep let numbackup=30 # Define backup directory BACKUPDIR="/root/database-backup" cd ${BACKUPDIR} STARTTIME=`date +%Y%m%d-%H%M` mysqldump -u root -pmy_mysqlpassword -v --all-databases --single-transaction >all_databases_${STARTTIME}.sql 2>all_databases_${STARTTIME}.log xz all_databases_${STARTTIME}.* let numfiles=1; for file in `ls -1t all_databases_*.sql*`; do # echo $numfiles # echo $file if [ $numfiles -gt $numbackup ] ; then filebase=`basename ${file} .sql.xz` /bin/rm -f ${filebase}.* fi let numfiles=$numfiles+1 done |
Mit der Variablen numbackup legen wir fest wieviele Datenbankdumps maximal vorgehalten werden. Die Variable BACKUPDIR gibt das Verzeichnis an, in das die Datenbankdumps geschrieben werden sollen. Nach dem Dump der Datenbank prüft das Script die Anzahl der momentan vorhandenen Dumps und löscht, falls mehr als die angegebene Anzahl Dumps vorhanden sind, die ältesten der überzähligen Dumps.
Unser Datenbank-Backupverzeichnis müssen wir dann noch der 1&1 Cloud Server Backup Selection hinzufügen. Das WordPress Verzeichnis sollten wir ebenfalls in das Backup aufnehmen.
1 2 3 4 | $ ./ClientTool control.selection.modify -datasource FileSystem -include /root/database-backup Backup selection successfully modified. $ ./ClientTool control.selection.modify -datasource FileSystem -include /var/www/mywordpressdirectory Backup selection successfully modified. |
Das Backup wollen wir automatisiert einmal täglich durchführen. Dazu legen wir noch zwei Scripts an. Das erste startet das 1&1 Cloud Server Backup für die aktuelle Filesystem Selection.
1 2 3 4 5 | $ cat /root/bin/backup.start.sh #!/bin/bash cd /opt/1UND1EU/bin ./ClientTool control.backup.start -datasource FileSystem |
Das zweite Script führt den Datenbankdump und das Filesystembackup nach einander aus.
1 2 3 4 5 | $ cat /root/bin/cronjob-backup.sh #!/bin/bash /root/bin/backup-mysql.sh /root/bin/backup.start.sh |
Dieses Script tragen wir als Cronjob mit einer zusätzlichen Zeile in der Crontab ein. Damit wird das Backup einmal täglich um 2:11 Uhr ausgeführt.
1 | 11 2 * * * /root/bin/cronjob-backup.sh >/dev/null |
Dieser Artikel ist nun doch viel länger geworden, als ursprünglich geplant. Man könnte jetzt noch etliche Seiten zu WordPress und dessen Absicherung gegen Spam und Angriffe aus dem Netz schreiben. Dazu ist allerdings auch eine Vielzahl an Informationen bereits im Internet verfügbar.
Im 6. Teil meiner Artikel Serie werden wir uns mit einem Tool zur Auswertung unserer Apache Log Files und zur Erzeugung von Statistiken der Nutzung unseres Webservers beschäftigen.