Crater ist ein quelloffenes Rechnungsstellungsprogramm.
Ich nutze ein Synology NAS. Es handelt sich um ein DS220+(Amazon Affiliate-Link) mit 10 GB RAM(Amazon Affiliate-Link).
So viele Ressourcen sind jedoch nicht für Crater nötig. Die Anleitung lässt sich auch analog auf andere Geräte mit Docker anwenden.
Ein Reverse-Proxy-Manager im Netzwerk ist hilfreich, unabhängig davon, ob er sich auf einem anderen Gerät oder dem Synology NAS befindet. Ebenso dementsprechend eine Domain.
Docker sollte auf dem NAS installiert sein. Zur Einrichtung einer Synology DiskStation habe ich hier mehr geschrieben.
Ich richte zunächst für eine bessere Rechteverwaltung eine Gruppe Docker ein.
Und ich erstelle einen neuen Benutzer, der am Ende die Rechte am Crater Container haben soll.
Ich füge diesen Nutzer in die Docker-Gruppe ein.
Für jeden Dienst einen einzelnen Benutzer zu erstellen, ist zu aufwendig, deshalb habe ich nur einen Docker Benutzer.
Als Nächstes benötige ich einen Ordner, in den ich alle Dateien speichern möchte. Bei mir landet der Ordner im Freigabeordner docker. Ich merke mir den Pfad des Ordners, in meinem Fall ist es /volume1/docker/crater
und erteile alle Berechtigungen für den Benutzer docker.
Ich setze auch den Haken, dass es für Unterordner gelten soll.
Ich installiere mir den Git Server aus dem Paket Zentrum.
Damit kann ich einfacher das Repository klonen.
Als nächstes möchte ich Crater herunterladen. Dazu schaue ich auf der Release-Seite nach, welche Version gerade die aktuellste ist. Jetzt gerade ist es Version 6.0.6.
Als Nächstes aktiviere ich den SSH-Dienst und verbinde mich mit dem NAS über SSH.
ssh adminbenutzername@{ip-adresse-vom-nas}
Ich bewege mich in den Crater Ordner
cd /volume1/docker/crater
Dann clone ich das Repository.
git clone -b 6.0.6 https://github.com/crater-invoice/crater --single-branch .
Jetzt dürften sich in meinem Ordner alle nötigen Dateien befinden.
Ich möchte noch die UserID vom Nutzer docker erfahren.
id -u docker
Diese Zahl merke ich mir als UserID.
Als nächstes kopiere ich die Umgebungsdatei.
cp .env.example .env
Und dann bearbeite ich diese:
vim .env
Zu Vim: Das ist ein Texteditor, der schon standardmäißig vorinstalliert ist. Wenn man auf i drückt, welchselt man in den Bearbeitungsmodus. Mit esc verlässt man den Bearbeitungsmodus wieder. Ist man nicht im Bearbeitungsmodus, kann man mit :q den Editor wieder verlassen, wenn man nichts geändert hat. Hat man was geändert, kann man entweder mit :x speichern oder mit :q! verlassen ohne zu speichern.
https://crater.meinedomain.de
https://
) ein.Wenn man localhost oder die IP-Adresse nutzt, sieht es so ungefähr aus:
SANCTUM_STATEFUL_DOMAINS=localhost:8080SESSION_DOMAIN=localhost
Den Rest lasse ich so wie er ist und verlasse die Datei mit :x
.
Ich erstelle zwei neue Ordner.
mkdir docker-compose/dbmkdir docker-compose/db-backup
Dann bearbeite ich das Dockerfile und ändere zwei Abschnitte
vim Dockerfile
[...]# Install system dependenciesRUN apt-get update && apt-get install -y \git \curl \libpng-dev \libonig-dev \libxml2-dev \zip \unzip \libzip-dev \libmagickwand-dev \mariadb-client \libpq-dev[...]# Install PHP extensionsRUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl bcmath gd pdo_pgsql[...]
Nächster Schritt ist die Bearbeitung der docker-compose.yml.
vim docker-compose.yml
version: '3'networks:internal:external: falseservices:app:container_name: crater-appbuild:args:user: dockeruid: 1234context: ./dockerfile: Dockerfileimage: crater-apprestart: unless-stoppedworking_dir: /var/www/volumes:- ./:/var/www- ./docker-compose/php/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini:rw,delegatednetworks:- internaldb:container_name: crater-dbimage: postgres:14restart: alwaysvolumes:- ./docker-compose/db:/var/lib/postgresql/data:rw,delegatedenvironment:POSTGRES_USER: craterPOSTGRES_PASSWORD: qwertzSMO4Yaqx7tUHhXPOSTGRES_DB: craternetworks:- internaldb-backup:container_name: crater-db-backupimage: postgres:14volumes:- ./docker-compose/db-backup:/dump- /etc/localtime:/etc/localtime:roenvironment:PGHOST: dbPGDATABASE: craterPGUSER: craterPGPASSWORD: qwertzSMO4Yaqx7tUHhXBACKUP_NUM_KEEP: 10BACKUP_FREQUENCY: 7dentrypoint: |bash -c 'bash -s <<EOFtrap "break;exit" SIGHUP SIGINT SIGTERMsleep 2mwhile /bin/true; dopg_dump -Fc > /dump/dump_\`date +%d-%m-%Y"_"%H_%M_%S\`.psql(ls -t /dump/dump*.psql|head -n $$BACKUP_NUM_KEEP;ls /dump/dump*.psql)|sort|uniq -u|xargs rm -- {}sleep $$BACKUP_FREQUENCYdoneEOF'networks:- internalredis:container_name: crater-redisimage: redisrestart: unless-stoppednetworks:- internalnginx:image: nginx:1.17-alpinerestart: unless-stoppedports:- 8011:80volumes:- ./:/var/www- ./docker-compose/nginx:/etc/nginx/conf.d/networks:- internalcron:build:context: ./dockerfile: ./docker-compose/cron.dockerfilevolumes:- ./:/var/wwwnetworks:- internal
Die UID, sowie das Passwort für die Datenbank können angepasst werden. Auch der Port kann von 8011 auf irgendwas geändert werden. Befindet sich der Proxy Manager auf der Synology, kann man ihn auch komplett rausnehmen, sofern man nginx dem Netzwerk des Proxy Managers hinzufügt.
Danach noch sudo docker-compose up -d
ausführen und warten.
Als Letztes muss das Startskript ausgeführt werden.
sudo ./docker-compose/setup.sh
Ich verlasse danach das Terminal.
exit
Außerdem schalte ich SSH wieder aus.
Jetzt rufe ih entweder die IP-Adresse vom NAS mit Port 8011 auf oder ich richte einen Proxy Host ein.
Ich passe ein paar der Werte an.
Die Datenbank ist pgsql, Port 5432 und Host db
. Der Rest sollte sich von selbst erklären.
Möchte man seine Daten in der Cloud sichern, lässt sich das auf einer Synology DiskStation einfach bewerkstelligen. Dazu das Programm Cloud Sync aus dem Paket-Zentrum installieren.
Damit richte ich eine neue Aufgabe ein, dass mir den Ordner docker-compose/db-backup
und docker/compose/php
mit Google Drive oder Microsoft One Drive usw. synchronieiseren soll.
Bitte die Kommentarfunktion nutzen bei Fragen / Verbesserungsvorschlägen / Kritik usw.