Crater auf Synology
Crater auf Synology NAS installieren. Das ist ein Programm um Ausgaben und Zahlungen verfolgen und Rechnungen zu erstellen.
Inhaltsverzeichnis
Crater
Crater ist ein quelloffenes Rechnungsstellungsprogramm.
Voraussetzungen
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.
Vorbereitung
Docker sollte auf dem NAS installiert sein. Zur Einrichtung einer Synology DiskStation habe ich hier mehr geschrieben.
Benutzer Docker
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.
Crater Ordner
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.
Git Server
Ich installiere mir den Git Server aus dem Paket Zentrum.

Damit kann ich einfacher das Repository klonen.
Crater Download
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.
Crater Installation
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.
Crater Umgebungsvariablen

- APP_DEBUG ändere ich auf false
- APP_LOG_LEVEL ändere ich auf info
- APP_URL ändere ich auf meine
https://crater.meinedomain.de - DB_CONNECTION ändere ich auf pgsql
- DB_PORT ändere ich auf 5432
- DB_PASSWORD ändere ich auf mein Passwort
- Mail Argumente sind optional
- Bei SANCTUM_STATEFUL_DOMAINS und SESSION_DOMAIN trage ich meine Domain (ohne
https://) ein.
Wenn man localhost oder die IP-Adresse nutzt, sieht es so ungefähr aus:
SANCTUM_STATEFUL_DOMAINS=localhost:8080
SESSION_DOMAIN=localhost
Den Rest lasse ich so wie er ist und verlasse die Datei mit :x.
Datenbankordner
Ich erstelle zwei neue Ordner.
mkdir docker-compose/db
mkdir docker-compose/db-backup
Postgresql hinzufügen
Dann bearbeite ich das Dockerfile und ändere zwei Abschnitte
vim Dockerfile
[...]
# Install system dependencies
RUN 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 extensions
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl bcmath gd pdo_pgsql
[...]
Crater Docker Compose
Nächster Schritt ist die Bearbeitung der docker-compose.yml.
vim docker-compose.yml
version: "3"
networks:
internal:
external: false
services:
app:
container_name: crater-app
build:
args:
user: docker
uid: 1234
context: ./
dockerfile: Dockerfile
image: crater-app
restart: unless-stopped
working_dir: /var/www/
volumes:
- ./:/var/www
- ./docker-compose/php/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini:rw,delegated
networks:
- internal
db:
container_name: crater-db
image: postgres:14
restart: always
volumes:
- ./docker-compose/db:/var/lib/postgresql/data:rw,delegated
environment:
POSTGRES_USER: crater
POSTGRES_PASSWORD: qwertzSMO4Yaqx7tUHhX
POSTGRES_DB: crater
networks:
- internal
db-backup:
container_name: crater-db-backup
image: postgres:14
volumes:
- ./docker-compose/db-backup:/dump
- /etc/localtime:/etc/localtime:ro
environment:
PGHOST: db
PGDATABASE: crater
PGUSER: crater
PGPASSWORD: qwertzSMO4Yaqx7tUHhX
BACKUP_NUM_KEEP: 10
BACKUP_FREQUENCY: 7d
entrypoint: |
bash -c 'bash -s <<EOF
trap "break;exit" SIGHUP SIGINT SIGTERM
sleep 2m
while /bin/true; do
pg_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_FREQUENCY
done
EOF'
networks:
- internal
redis:
container_name: crater-redis
image: redis
restart: unless-stopped
networks:
- internal
nginx:
image: nginx:1.17-alpine
restart: unless-stopped
ports:
- 8011:80
volumes:
- ./:/var/www
- ./docker-compose/nginx:/etc/nginx/conf.d/
networks:
- internal
cron:
build:
context: ./
dockerfile: ./docker-compose/cron.dockerfile
volumes:
- ./:/var/www
networks:
- 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.
Composer installieren
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.
![]()
Crater WebGUI
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.
Backup
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.