Compare commits

..

4 Commits

Author SHA1 Message Date
Philipp Lang 20c9b84e6e Lint
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details
2023-09-07 14:40:46 +02:00
Philipp Lang c554e506ea Update README 2023-09-07 14:40:44 +02:00
Philipp Lang 80dfebf63b Add Host-ENV for nginx webservice 2023-09-07 14:40:31 +02:00
Philipp Lang 6c9c27d6ab Add volume to redis container 2023-09-07 14:38:21 +02:00
5 changed files with 88 additions and 59 deletions

125
README.md
View File

@ -1,6 +1,6 @@
# Adrema # Adrema
__Schön, dass du den Weg hierhin gefunden hast!__ **Schön, dass du den Weg hierhin gefunden hast!**
Da du diese Seite besuchst, gehörst du sicherlich zu den Leuten, die möglichst einfach die Daten ihrer Mitglieder pfelgen wollen. Das ist offiziell in der DPSG nur mit NaMi möglich. Da du diese Seite besuchst, gehörst du sicherlich zu den Leuten, die möglichst einfach die Daten ihrer Mitglieder pfelgen wollen. Das ist offiziell in der DPSG nur mit NaMi möglich.
@ -12,78 +12,109 @@ AdReMa kann von jedem und jeder genutzt werden, die einen NaMi-Account besitzt u
## Was kann ich mit AdReMa machen? ## Was kann ich mit AdReMa machen?
* Basisdaten von Mitgliedern anzeigen und bearbeiten - Basisdaten von Mitgliedern anzeigen und bearbeiten
* Einfacher Filter nach Gruppierung, Tätigkeit, etc - Einfacher Filter nach Gruppierung, Tätigkeit, etc
* Detailansichten mit allen zugehörigen Daten - Detailansichten mit allen zugehörigen Daten
* Führungszeugnisse und Präventionssulungen nachhalten - Führungszeugnisse und Präventionssulungen nachhalten
* Beitragszahlungen eintragen - Beitragszahlungen eintragen
* Automatisches Rechunungssystem - Automatische Rechunungserstellung
* Eigene Beiträge hinterlegen (z.B. interner Stammes-Jahresbeitrag) - Eigenen Beitragssatz hinterlegen (z.B. interner Stammes-Jahresbeitrag)
* Generieren von Zuschusslisten (aktuell RdP NRW) - Generieren von Zuschusslisten (aktuell RdP NRW)
* Einpflegen von internen Tätigkeiten, die nicht in NaMi vorhanden sind (um z.B. stammes-interne AGs / AKs zu verwalten) - Einpflegen von internen Tätigkeiten, die nicht in NaMi vorhanden sind (um z.B. stammes-interne AGs / AKs zu verwalten)
* Automatisches Erstellen und managen von E-Mail-Verteilern mittels Mailman 3.0 - Automatisches Erstellen und Managen von E-Mail-Verteilern mittels Mailman 3.0
* eFz-Bescheinigung abrufen für alle Leitenden (das kann normalerweise nur jede*r einzelne für sich selbst) - eFz-Bescheinigung abrufen für alle Leitenden (das kann in NaMi nur jede\*r für sich selbst)
* Ausbildungen eintragen (WBK-Bausteine) - Ausbildungen eintragen (WBK-Bausteine)
* Abrufen von Kontakten ins eigene Telefonbuch (mittels CardDAV) - Abrufen von Kontakten ins eigene Telefonbuch (mittels CardDAV)
Ziel dieses Projektes ist es, viele Dinge, die man normalerweise manuell zu tun hat so gut es geht zu automatisieren oder zumindest zu vereinfachen. So kann man sich als Leitende*r / Vorstand auf die wichtigeren Dinge konzentrieren wie Gruppenstunden, Lager, Leiterrunden, etc. Ziel dieses Projektes ist es, viele Dinge, die man normalerweise manuell zu tun hat so gut es geht zu automatisieren oder zumindest zu vereinfachen. So kann man sich als Leitende\*r / Vorstand auf die wichtigeren Dinge konzentrieren wie Gruppenstunden, Lager, Leiterrunden, etc.
Außerdem ist AdReMa auch problemlos auf Handys und Tablets bedienbar ("mobiles Design") Außerdem ist AdReMa auch problemlos auf Handys und Tablets bedienbar ("mobiles Design")
# Installation ## Installation des Produktivsystems
## App Key generieren 1. Herunterladen der Beispiel Docker-Compose
Kopiere .app.env.example nach .app.env ```cmd
curl https://git.zoomyboy.de/silva/adrema/raw/branch/master/docker-compose.prod.yml -o docker-compose.yml
```
``` 2. Herunterladen der Beispiel Environmentvariablen-Datei
cp .app.env.example .app.env
```
Services starten: ```cmd
curl https://git.zoomyboy.de/silva/adrema/raw/branch/master/.app.env.example -o .app.env
```
``` 3. In der `.app.env` notwendige Einstellungen vornehmen:
docker compose up
```
Es wird die ein App Key generiert: ``Keinen APP KEY gefunden. Key wird generiert: base64:..........`` - `APP_URL`: Hier sollte die URL (mit HTTPS) stehen, unter der Adrema erreichbar sein soll (z.B. `https://adrema.stamm-bipi.de`)
- Mail-Server Einstellungen `MAIL_PORT`, `MAIL_HOST`, `MAIL_USERNAME`, `MAIL_PASSWORD` und `MAIL_ENCRYPTION` anpassen
- `MAIL_FROM_NAME`: Der Name, der als Absender von E-Mails gesetzt wird (z.B. `Stamm Bipi Service`)
- `MAIL_FROM_ADDRESS`: Die dazu gehörige E-Mail-Adresse, die natürlich für antworten erreichbar sein sollte (z.B. `vorstand@stamm-bipi.de`)
- `DB_PASSWORD` und `MYSQL_PASSWORD`: Mit dem selben sicheren Passwort für die Datenbank versehen
- `USER_EMAIL` und `USER_PASSWORD`: Einstellen des standard Adrema Logins
Kopiere diesen App key und setze in in .app.env als APP_KEY ein (APP_KEY=base64:........). 4. Container zur Gennerierung des App-Key starten
## Einstellungen ```cmd
docker compose up php
```
Passe in der .app.env dann folgende Einstellungen an: Nach einiger zeit wird ein App-Key generiert:
### APP_URL ```cmd
Keinen APP KEY gefunden. Key wird generiert: base64:xxx
```
Hier sollte die URL (mit HTTPS) stehen, unter der Adrema erreichbar sein soll (z.B. https://adrema.stamm-bipi.de) Container herunterfahren und entfernen
### Mail ```cmd
docker compose down
```
Setze nun die Einstellungen für den Mail-Versand ein. Du solltest mindestens MAIL_PORT, MAIL_HOST, MAIL_USERNAME, MAIL_PASSWORD und MAIL_ENCRYPTION setzen. 5. Der generierte App-Key muss als Environmentvariable (`APP_KEY`) mit in den Docker-Container gegeben werden. Kopiere den App-Key in die Datei `.app.env`
MAIL_FROM_NAME ist der Name, der als Absender von E-Mails gesetzt wird. z.B. "Stamm Bipi Service". ```env
APP_KEY=base64:xxx
```
MAIL_FROM_ADDRESS die dazu gehörige E-Mail-Adresse, die natürlich erreichbar sein sollte (z.B. "vorstand@stamm-bipi.de"). 6. Alle Container starten
### DB Passwort ```cmd
docker compose up -d
```
Setze die beiden letzten Variablen (da wo "secret_db_password" steht) auf ein generiertes sicheres Passwort. Bei beiden Variablen muss der gleiche Wert eingestellt werden (also so wie vorher, nur sicherer :D ) 7. Nach kurzer Zeit ist AdReMa über <http://localhost:8000> erreichbar und es kann sich mit dem zuvor festgelegten Login eingeloggt werden
## Starten ## Nutzen des Entwicklungssystmes
Führe nun den DB Container aus, um eine erste Version der Datenbank zu erstellen. 1. Klonen des Reposetories
``` ```cmd
docker-compose up db -d git clone https://git.zoomyboy.de/silva/adrema.git
``` ```
Nun kannst du auf localhost:8000 die App öffnen, einen LB verwenden, den Port mit CLI Optionen ändern, etc. 2. Kopieren der Beispiel Docker-Compose für das Entwickeln und nach Wünschen anpassen
## Standard Login ```cmd
cp docker-compose.dev.yml docker-compose.yml
```
Beim ersten Starten wird ein Benutzer mit folgenden Zugangsdaten erstellt: 3. Kopieren der Beispiel Environmentvariablen-Datei
* E-Mail-Adresse: admin@example.com ```cmd
* Passwort: admin cp .app.env.example .app.env
```
4. Submodule aktuallisieren
```cmd
git submodule update --init
```
5. Container erstellen
```cmd
docker compose build
```
6. Mit Schritt 3 und den folgenden der [Installation des Produktivsystems](#installation-des-produktivsystems) fortfahren

View File

@ -110,11 +110,6 @@ class BdkjHesse extends ContributionDocument
return $member->birthYear(); return $member->birthYear();
} }
public function memberDays(MemberData $member): string
{
return $this->durationDays();
}
public function basename(): string public function basename(): string
{ {
return 'zuschuesse-bdkj-hessen'; return 'zuschuesse-bdkj-hessen';

View File

@ -15,6 +15,8 @@ services:
restart: always restart: always
depends_on: depends_on:
- db - db
- redis
- socketi
command: /bin/entrypoint app command: /bin/entrypoint app
env_file: env_file:
- .app.env - .app.env
@ -34,7 +36,6 @@ services:
image: zoomyboy/adrema-app:latest image: zoomyboy/adrema-app:latest
restart: always restart: always
depends_on: depends_on:
- db
- php - php
command: /bin/entrypoint horizon command: /bin/entrypoint horizon
env_file: env_file:
@ -49,13 +50,12 @@ services:
REDIS_HOST: redis REDIS_HOST: redis
volumes: volumes:
- ./data/storage:/app/storage/app - ./data/storage:/app/storage/app
- ./cookies:/app/packages/laravel-nami/.cookies - ./data/cookies:/app/packages/laravel-nami/.cookies
schedule: schedule:
image: zoomyboy/adrema-app:latest image: zoomyboy/adrema-app:latest
restart: always restart: always
depends_on: depends_on:
- db
- php - php
command: /bin/entrypoint schedule command: /bin/entrypoint schedule
env_file: env_file:
@ -95,3 +95,5 @@ services:
redis: redis:
image: redis:alpine3.18 image: redis:alpine3.18
restart: always restart: always
volumes:
- ./data/redis:/data

View File

@ -17,6 +17,8 @@ services:
dockerfile: ./.docker/php.Dockerfile dockerfile: ./.docker/php.Dockerfile
depends_on: depends_on:
- db - db
- redis
- socketi
command: /bin/entrypoint app command: /bin/entrypoint app
env_file: env_file:
- .app.env - .app.env
@ -37,7 +39,6 @@ services:
context: . context: .
dockerfile: ./.docker/php.Dockerfile dockerfile: ./.docker/php.Dockerfile
depends_on: depends_on:
- db
- php - php
command: /bin/entrypoint horizon command: /bin/entrypoint horizon
env_file: env_file:
@ -59,7 +60,6 @@ services:
context: . context: .
dockerfile: ./.docker/php.Dockerfile dockerfile: ./.docker/php.Dockerfile
depends_on: depends_on:
- db
- php - php
command: /bin/entrypoint schedule command: /bin/entrypoint schedule
env_file: env_file:
@ -96,4 +96,5 @@ services:
redis: redis:
image: redis:alpine3.18 image: redis:alpine3.18
container_name: redis volumes:
- ./data/redis:/data

View File

@ -26,7 +26,7 @@
\node[anchor=base, text width=18.5mm, align=center] at ($(96.85mm, 50.0mm + 6.1mm * <<<$j%20>>>)$) {<<<$memberGender($member)>>>}; \node[anchor=base, text width=18.5mm, align=center] at ($(96.85mm, 50.0mm + 6.1mm * <<<$j%20>>>)$) {<<<$memberGender($member)>>>};
\node[anchor=base, text width=67.2mm, align=center] at ($(140.0mm, 50.0mm + 6.1mm * <<<$j%20>>>)$) {<<<$memberCity($member)>>>}; \node[anchor=base, text width=67.2mm, align=center] at ($(140.0mm, 50.0mm + 6.1mm * <<<$j%20>>>)$) {<<<$memberCity($member)>>>};
\node[anchor=base, text width=17.2mm, align=center] at ($(182.5mm, 50.0mm + 6.1mm * <<<$j%20>>>)$) {<<<$memberBirthYear($member)>>>}; \node[anchor=base, text width=17.2mm, align=center] at ($(182.5mm, 50.0mm + 6.1mm * <<<$j%20>>>)$) {<<<$memberBirthYear($member)>>>};
\node[anchor=base, text width=17.2mm, align=center] at ($(199.6mm, 50.0mm + 6.1mm * <<<$j%20>>>)$) {<<<$memberDays($member)>>>}; \node[anchor=base, text width=17.2mm, align=center] at ($(199.6mm, 50.0mm + 6.1mm * <<<$j%20>>>)$) {<<<$durationDays>>>};
@endforeach @endforeach
\node[anchor=base, text width=17.2mm, align=center] at ($(199.6mm, 50.0mm + 6.1mm * 20)$) {<<<$membersDays($chunk)>>>}; \node[anchor=base, text width=17.2mm, align=center] at ($(199.6mm, 50.0mm + 6.1mm * 20)$) {<<<$membersDays($chunk)>>>};