Ich wollte schon länger ein Beitrag über Nextcloud erstellen. Ich biete bereits seit längerem bei Bedarf meine Dienstleistungen für Nextcloud Instanzen.
Nextcloud weiterlesenKategorie: Informatik
Fehlermeldung
Bei der Installation einer meiner Anwendungen bin ich auf die folgende Fehlermeldung gestoßen:
PDOStatement: Specified key was too long; max key length is 767 bytes
Lag schlussendlich daran, dass meine Standartkodierung der Datenbank utf8mb4 war, und ich bei dieser Kodierung andere Limits habe, als unter utf8. Das ist im Nachhinein auch logisch.
Die Erklärung fand ich in diesem Stackoverflow-Thread.
When you hit the limit. Set the following.
- INNODB
utf8
VARCHAR(255)
- INNODB
utf8mb4
VARCHAR(191)
Anschließend habe ich mich ein wenig mit utf8 beschäftigt, um den genauen unterschied zwischen utf8_general_ci utf8_binary und utf8_unicode_ci herauszufinden.
Die Antwort dafür ist hier:
In general, utf8_general_ci is faster than utf8_unicode_ci, but less correct.
Here is the difference:
For any Unicode character set, operations performed using the _general_ci collation are faster than those for the _unicode_ci collation. For example, comparisons for the utf8_general_ci collation are faster, but slightly less correct, than comparisons for utf8_unicode_ci. The reason for this is that utf8_unicode_ci supports mappings such as expansions; that is, when one character compares as equal to combinations of other characters. For example, in German and some other languages “ß” is equal to “ss”. utf8_unicode_ci also supports contractions and ignorable characters. utf8_general_ci is a legacy collation that does not support expansions, contractions, or ignorable characters. It can make only one-to-one comparisons between characters.
Quoted from: http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html
For more detailed explanation, please read the following post from MySQL forums: http://forums.mysql.com/read.php?103,187048,188748
As for utf8_bin: Both utf8_general_ci and utf8_unicode_ci perform case-insensitive comparison. In constrast, utf8_bin is case-sensitive (among other differences), because it compares the binary values of the characters.
Entwicklung eines eigenen „CMS“
In diesem Post werde ich ein wenig über mein eigenes „CMS“ schreiben. Ja, trotz zahlreicher Meinungen, die gegen eigene CMS-Lösungen sprechen, habe ich beschlossen, ein eigenes System aufzustellen.
Warum?
Ich nutze selber ziemlich gerne WordPress und Joomla, habe für beide auch (einfache) Componenten/Plugins entwickelt. Genau genommen, basiert Proxer bekanntlich auf Joomla und alles außer das Forum sind selbstentwickelte Komponenten. Dennoch habe ich im Laufe der Zeit festgestellt, dass ich von Systemen wie WordPress und Joomla nur sehr weniges brauche und dass die Kosten für die „unbenutzten“ Elemente dieser Systeme zu hoch sind. Ich bin ein minimalistischer Mensch: Ich möchte nicht mehr haben, als ich brauche.
Was ich für mein CMS alles brauche:
- Datenbankverwaltung
- Benutzerverwaltung
- Sessionverwaltung
- Unterschiedliche Schnittstellen für Seite, Administration und API
- Templates für Seite und Administration
- Model/View/Controller-Ähnliche Architektur für alle Schnittstellen
Da diese Sachen ziemlich einfache Sachen sind, hatte ich auch in einem Tag mein „CMS“ zur Hand. Verwendet habe ich ein Framework namens „Fatfree“, welches meine Anforderungen perfekt erfüllt hat. Ich kann benötigte Funktionen (z.B. ein Blogsystem) jederzeit Entwickeln und dranschalten. Besonders erfreulich ist für mich die API-Schnittstelle: Hiermit möchte ich zukünftig viele tolle neue Anwendungen basteln 🙂
[( )] = BANANA IN A BOX
Proxer Serverumzug 10.08.17
In diesem Sommer haben sich ein zwei Probleme auf Proxer angehäuft:
- Der Speicher vom Datenbank-Server ist voll
- Es gibt eine neue Debian-Version
Aus diesem Grund habe ich beschlossen, neue Server zu bestellen und mal eine vollständige Neuinstallation der zwei Hauptserver durchzuführen. Ich habe mich für den folgenden Server für Proxer entschieden:
Fujitsu PRIMERGY RX2510 M2 1U Rack
2x Intel Xeon E5-2620v4 2.4GHz
32GB ECC DDR4 RAM
Drive 1 :240GB SSD
Drive 2 :1TB HDD
Drive 3: 1TB HDD
Auf der SSD läuft das Betriebssystem, die 2 HDDs sind in einem Raid 1-Verbund (Hardware) und dienen dazu, regelmäßig die Backups zwischenzuspeichern, aber auch um größere Daten zu lagern, die immer wieder mal auftreten.
Welche Software kommt bei diesen Proxer-Servern ins Spiel?
- nginx + php: Für den Webserver
- htop, iftop, vnstat, screen: kleinere Tools
- rsync: Zum Synchronisieren von Daten mit dem Backup-Server
- git: Versionsverwaltung
- munin-node: Monitoring
- mysql-server: Für die Datenbank.
- gd3: Bildverarbeitung.
- zip, unzip: (Ent-)Packen von Zip-Dateien.
Um keine Angriffsfläche zu bieten, ist es von Nöten, dass man den Server möglichst minimal belässt. Die oben genannten Pakete inklusive der bereits bei Debian 9 enthaltenen Pakete (und abhängige) reichen für Proxer vollkommen aus. Alles weitere findet auf der Webserver-Anwendungsebene statt, die im Grunde durch das Deaktivieren vieler PHP-Funktionen wie eine Sandbox ist. Meine Techniker-Kollegen beschweren sich deswegen, weil ich für Git beispielsweise aus diesem Grund keine Web-Oberfläche zur Verfügung stellen kann, mit der sie bei Änderungen einfach git-pull machen können 😀 Die Sicherheit wiegt für mich jedoch an dieser Stelle mehr als der Nutzen einer PHP-Funktion, die Systemfunktionen ausführen kann.
Durch den Wechsel auf Debian 9 (Stretch) kamen ein paar Änderungen. Seit heute nutzt Proxer nicht mehr Mysql, sondern MariaDB. Es sollte keine große Änderung darstellen, ich bin gespannt, wie sich der Wechsel auf die Performance auswirken wird.
Am Meisten Zeit nimmt das Einspielen des Datenbank-Dumpes ein. Dies ist 35GB groß und nimmt eingespielt unter Mysql um die 100GB an Speicherplatz ein (wegen den ganzen Indexen usw). Es gibt hier durchaus viel Freiraum für Verbesserungen, doch ich bekomme es noch nicht so richtig auf die Reihe aufgrund der großen Datenbank-Größe. Demnächst werde ich mal Optimierungsarbeiten daran durchführen.
Sonst ist es das gleiche Spiel: Konfigurationen prüfen, und in dem neuen Server einbauen. Es gibt bei neuen Betriebssystem-Versionen oft Änderungen an Einstellungen. Hier müssen ehemalige Änderungen nachgeschlagen werden. Gibt es eine Änderung des Variablennamen? Gibt es die Variable überhaupt? Gabs diesbezüglich intern Änderungen?
Alles in allem macht mir jeder Serverumzug sehr viel Spaß. Ich lerne mit der Zeit immer neues, und ich habe hier die Möglichkeit dieses Wissen sauber einzubauen.
Sysadmin Day 2017
Auf dem Teppich bleiben
Stundenlang sitzt du an einem Problem, du denkst: Buah, ich glaube ich habe ein übelst internes Problem in der Software entdeckt… 10 Jahre Programmiererfahrung kannst du vorweisen! Was kann es auch anderes sein?
Und irgendwann fällt dir auf, dass du einen Tippfehler im Variabelnamen hattest.
Ubuntu Ram Upgrade
Heute ist mir aufgefallen, dass Ubuntu ein service namens „hud-service“ laufen lässt, der sehr viel Ram verbraucht. Nach etwas Recherche ist dieser Dienst so sinnlos für mich. Nach dem Deaktivieren lief alles so viel besser! Es hat sich wie ein Softwareupdate angefühlt XD
Man lernt nie aus!
Heute wieder HTML gelernt: https://stackoverflow.com/a/41943819