sqlite3 – Kurz und bündig (in a Nutshell) unter Ubuntu 20.04
sqlite3 unter Ubuntu: Installation per apt, CLI-Cheat-Sheet mit Dot-Commands sowie ein Web-Frontend per Docker hinter Apache-Reverse-Proxy mit Basic Auth.
Bei vielen DevOps Themen kann man die sqlite rasch e.g. fürs Testen verwenden. Anders als bei einem klassischen Server-Setup wie MySQL und phpMyAdmin auf Docker ist bei sqlite eine Datenbank (mit allen Tabellen) in einer Datei. Dies macht das Backup sehr einfach! Du kannst die Datei sogar direkt als Zip oder Tar archivieren.
Installation
Ganz einfach mittels apt:
sudo apt install -y sqlite3
Nutzung Cheat Sheet
Du startest die Datenbank einfach indem Du den Dateinamen angiebst. e.g. Für die Asterisk CDR Datenbank:
sqlite3 /var/log/asterisk/master.db
Nun kannst Du Deine SQL Befehla absetzen. Wer beim Filtern oft mit Mustern arbeitet, findet im regex Cheat Sheet eine praktische Ergänzung. Hier ein paar Beispiele:
SELECT * FROM cdr LIMIT 10;
DROP TABLE cdr;
Alternativ kannst Du Kommandos (dot-commands) absetzen:
# um alle Tables anzuzeigen
.tables
# um das DB Schema anzuzeigen
.schema
Beenden Sie die sqlite3 Kommandozeile, indem Sie das End-Of-File-Zeichen des Systems eingeben (normalerweise ein Strg-D). Verwenden Sie das Unterbrechungszeichen (in der Regel ein Strg-C), um eine lange laufende SQL-Anweisung zu beenden.
Mehr Info zu den CLI Kommandos und zu sqlite generell gibt es hier.
Frontend
Es gibt ein Frontend-Tool (sqlitebrowser), welches Ich allerdings noch nie verwendet habe. Da die Server üblicherweise Headless irgendwo in der CLoud stehen macht es für mich mehr Sinn eine Web-basierte Lösung zu nutzen.
SQlite-web
https://github.com/coleifer/sqlite-web
sqlite-web Installation mittels Docker
Erstelle ein Verzeichnis und wechsle hinein:
mkdir ~/sqlite-web
cd ~/sqlite-web
Nun erzeuge ein Dockerfile:
nano Dockerfile
Und paste folgenden Inhalt:
FROM python:3
RUN pip install sqlite-web
VOLUME /db
WORKDIR /db
EXPOSE 8080
# --read-only ... to ensure nobody can change the DB via this installation
ENTRYPOINT ["sqlite_web", "--host=0.0.0.0", "--port=8080", "--no-browser", "--read-only"]
Nun erzeuge ein die docker-compose.yml Datei:
nano docker-compose.yml
Und paste folgenden Inhalt. Du musst dabei den Dateinamen der sqlite Datenbank angeben. in Folgendem Beispiel habe ich die CDR Datenbank von Asterisk angegeben Weiters kannst Du den Port auf Deiner Maschine ändern:
version: '3'
services:
sqliteweb:
container_name: sqlite-web
build:
context: .
ports:
# expose the port only on localhost. Access to 8080 via apache and reverse proxy
- 127.0.0.1:8080:8080
volumes:
- /var/log/asterisk/master.db:/db/master.db
command: master.db
restart: unless-stopped
healthcheck:
test: bash -c ">/dev/tcp/127.0.0.1/8080"
In diesem Beispiel ist der Webserver NUR auf localhost unter dem Port 8080 (127.0.0.1:8080) erreichbar. Nimmst Du die 127.0.0.1: weg ist sqliteweb vom public internet auf Deinem Server unter dem Port 8080 erreichbar. -> Sicherheitsproblem!
Nun konfiguriere einen VirtualHost am apacheserver:
nano /etc/apache2/sites-available/sqlite-web.conf
Mit folgendem Inhalt (dabei musst Du den Domainnamen Deines servers verwenden):
<VirtualHost *:80>
ServerName sqlite.meinserver.at
ProxyPreserveHost On
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
</VirtualHost>
Mittels a2ensite sqlite-web und anschließendem systemctl reload apache2 kannst Du den neuen VirtualHost enablen und Apache neu laden.
Achtung Sicherheit!
In diesem Beispiel habe ich im Dockerfile den Parameter –read-only mitgegeben. Somit kannst Du die DB nicht verändern. Allerdings kann JEDER die Daten einsehen.
Nachtrag 1:
Basic Auth hinzufügen (in diesem Fall für den Benutzer neuerbenutzer):
sudo htpasswd -c /etc/apache2/.htpasswd neuerbenutzer
Nun musst Du das Passwort (incl. Wiederholung) für den Webbenutzer eingeben.
Füge folgenden code noch vor dem closing-tag </VirtualHost> in /etc/apache2/sites-available/sqlite-web.conf ein.
<Proxy *>
Order deny,allow
Allow from all
Authtype Basic
Authname "Password Required"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user
</Proxy>
Nachtrag 2:
Natürlich sollte / könnte man noch ein Let’s Encrypt Zertifikat für Apache installieren um mittels https auf den Server zuzugreifen.
Mehr aus „Linux, DevOps & Systeme"
Docker Speicherplatz freigeben
Docker Speicherplatz freigeben: mit docker system df die Belegung sehen und mit prune ungenutzte Images, Container, Volumes, Netzwerke und Build-Cache löschen.
WeiterlesenWindows Core Prozesse verstehen
Windows Core-Prozesse verstehen: was smss.exe, csrss.exe, lsass.exe und svchost.exe wirklich tun und woran Du getarnte Malware im Prozessbaum erkennst.
WeiterlesenUbuntu LTS Release Update
Ubuntu LTS sicher aktualisieren: Snapshot bei Contabo oder Netcup anlegen, mit apt update und do-release-upgrade hochziehen und den SSH-Port bestätigen.
WeiterlesenÜber diesen Blog
Ein Sammelsurium an Denkanstößen.
Hier sammle ich Wissen, Argumente und Links zu allem, was mich beschäftigt — von Technik über Küche bis Nachhaltigkeit. Beruflich berate ich zu Cybersecurity.