diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..bdf7397 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,48 @@ +FROM docker:23.0.1-cli-alpine3.17 + +# Installiere docker-compose +RUN apk add --no-cache docker-compose + +# Arbeitsverzeichnis +WORKDIR /app +RUN mkdir -p /app/icons +RUN mkdir -p /app/database +RUN mkdir -p /app/files + +# Kopiere die docker-compose.yml und die Nginx-Konfiguration +COPY docker-compose.yml . +COPY nginx.conf ./nginx.conf +COPY ./icons ./icons + +ENV DOCKER_HOST=unix:///var/run/docker.sock + +ENV SERVERADDRESS="" +ENV APPNAMEOVERWRITE="" +ENV IMPRINTLINK="" +ENV PRIVACYLINK="" +ENV CUSTOMLOGINMESSAGE="" + +ENV JWT_SECRET="" +ENV JWT_EXPIRATION="" +ENV REFRESH_EXPIRATION="" +ENV PWA_REFRESH_EXPIRATION="" +ENV MAIL_USERNAME="" +ENV MAIL_PASSWORD="" +ENV MAIL_HOST="" +ENV MAIL_PORT="" +ENV MAIL_SECURE="" +ENV CLUB_NAME="" +ENV CLUB_WEBSITE="" +ENV BACKUP_INTERVAL="" +ENV BACKUP_COPIES="" +ENV BACKUP_AUTO_RESTORE="" + +ENV MYSQL_DATABASE="" +ENV MYSQL_USER="" +ENV MYSQL_PASSWORD="" +ENV MYSQL_ROOT_PASSWORD="" + +EXPOSE 80 3306 + +# Standardbefehl: docker-compose starten +CMD ["docker-compose", "up"] diff --git a/README.md b/README.md index 53e9b2e..00c1655 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,72 @@ # ff-admin-aio -All in One Repository to ff-admin \ No newline at end of file +Administration für Feuerwehren und Vereine (all-in-one). + +## Einleitung + +Dieses Projekt, `ff-admin-aio`, ist das Gesamt-Projekt zur Verwaltung von Mitgliederdaten.\ +Die zugehörige Webapp ist im Repository [ff-admin-ui](https://forgejo.jk-effects.cloud/Ehrenamt/ff-admin) zu finden.\ +Der zugehörige Server ist im Repository [ff-admin-server](https://forgejo.jk-effects.cloud/Ehrenamt/ff-admin-server) zu finden. + +Eine Demo zusammen mit der `ff-admin` finden Sie unter [https://admin-demo.ff-admin.de](https://admin-demo.ff-admin.de). + +## Installation + +Das Image exposed die Ports 80 und 3306. + +### Docker Compose Setup + +Um den Container hochzufahren, erstellen Sie eine `docker-compose.yml` Datei mit folgendem Inhalt: + +```yaml +version: "3" + +services: + ff-admin-aio: + image: docker.registry.jk-effects.cloud/ehrenamt/ff-admin/aio:latest + container_name: ff_member_administration_aio + restart: unless-stopped + environment: + - SERVERADDRESS="" + - APPNAMEOVERWRITE="" + - IMPRINTLINK="" + - PRIVACYLINK="" + - CUSTOMLOGINMESSAGE="" + + - JWT_SECRET="" + - JWT_EXPIRATION="" + - REFRESH_EXPIRATION="" + - PWA_REFRESH_EXPIRATION="" + - MAIL_USERNAME="" + - MAIL_PASSWORD="" + - MAIL_HOST="" + - MAIL_PORT="" + - MAIL_SECURE="" + - CLUB_NAME="" + - CLUB_WEBSITE="" + - BACKUP_INTERVAL="" + - BACKUP_COPIES="" + - BACKUP_AUTO_RESTORE="" + + - MYSQL_DATABASE="" + - MYSQL_USER="" + - MYSQL_PASSWORD="" + - MYSQL_ROOT_PASSWORD="" + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro # verpflichtende Angabe + - :/app/files + - :/app/database + - :/app/icons +``` + +Führen Sie dann den folgenden Befehl im Verzeichnis der compose-Datei aus, um den Container zu starten: + +```sh +docker-compose up -d +``` + +## Fragen und Wünsche + +Bei Fragen, Anregungen oder Wünschen können Sie sich gerne melden.\ +Wir freuen uns über Ihr Feedback und helfen Ihnen gerne weiter.\ +Schreiben Sie dafür eine Mail an julian.krauser@jk-effects.com. diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..0a0391d --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,84 @@ +version: '3.8' + +services: + ff_admin_aio_reverse_proxy: + image: nginx:alpine + container_name: ff_admin_aio_reverse_proxy + ports: + - "80:80" + volumes: + - ./nginx.conf:/etc/nginx/nginx.conf:ro + depends_on: + - ff_admin_aio_backend + - ff_admin_aio_frontend + + ff_admin_aio_frontend: + image: docker.registry.jk-effects.cloud/ehrenamt/ff-admin/app:latest + container_name: ff_admin_aio_frontend + restart: unless-stopped + ports: + - "80" + environment: + - SERVERADDRESS=${SERVERADDRESS} + - APPNAMEOVERWRITE=${APPNAMEOVERWRITE} + - IMPRINTLINK=${IMPRINTLINK} + - PRIVACYLINK=${PRIVACYLINK} + - CUSTOMLOGINMESSAGE=${CUSTOMLOGINMESSAGE} + volumes: + - ./icons/favicon.ico:/usr/share/nginx/html/favicon.ico + - ./icons/favicon.png:/usr/share/nginx/html/favicon.png + - ./icons/Logo.png:/usr/share/nginx/html/Logo.png + + + ff_admin_aio_backend: + image: docker.registry.jk-effects.cloud/ehrenamt/ff-admin/server:latest + container_name: ff_admin_aio_backend + restart: unless-stopped + ports: + - "5000" + environment: + - DB_TYPE=mysql + - DB_HOST=ff_admin_aio_database + - DB_PORT=3306 + - DB_NAME=${MYSQL_DATABASE} + - DB_USERNAME=${MYSQL_USER} + - DB_PASSWORD=${MYSQL_PASSWORD} + - JWT_SECRET=${JWT_SECRET} + - JWT_EXPIRATION=${JWT_EXPIRATION} + - REFRESH_EXPIRATION=${REFRESH_EXPIRATION} + - PWA_REFRESH_EXPIRATION=${PWA_REFRESH_EXPIRATION} + - MAIL_USERNAME=${MAIL_USERNAME} + - MAIL_PASSWORD=${MAIL_PASSWORD} + - MAIL_HOST=${MAIL_HOST} + - MAIL_PORT=${MAIL_PORT} + - MAIL_SECURE=${MAIL_SECURE} + - CLUB_NAME=${CLUB_NAME} + - CLUB_WEBSITE=${CLUB_WEBSITE} + - BACKUP_INTERVAL=${BACKUP_INTERVAL} + - BACKUP_COPIES=${BACKUP_COPIES} + - BACKUP_AUTO_RESTORE=${BACKUP_AUTO_RESTORE} + volumes: + - ./files:/app/files + networks: + - ff_admin_aio_internal + depends_on: + - ff_admin_aio_database + + ff_admin_aio_database: + image: mariadb:11.2 + container_name: ff_admin_aio_database + restart: unless-stopped + ports: + - "3306:3306" + environment: + - MYSQL_DATABASE=${MYSQL_DATABASE} + - MYSQL_USER=${MYSQL_USER} + - MYSQL_PASSWORD=${MYSQL_PASSWORD} + - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} + volumes: + - ./database:/var/lib/mysql + networks: + - ff_admin_aio_internal + +networks: + ff_admin_aio_internal: \ No newline at end of file diff --git a/icons/Logo.png b/icons/Logo.png new file mode 100644 index 0000000..a2760bc Binary files /dev/null and b/icons/Logo.png differ diff --git a/icons/favicon.ico b/icons/favicon.ico new file mode 100644 index 0000000..2f7aa89 Binary files /dev/null and b/icons/favicon.ico differ diff --git a/icons/favicon.png b/icons/favicon.png new file mode 100644 index 0000000..39a8174 Binary files /dev/null and b/icons/favicon.png differ diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..cde0f9d --- /dev/null +++ b/nginx.conf @@ -0,0 +1,27 @@ +events { } + +http { + server { + listen 80; + + # Weiterleitung von /api/* an das Backend + location /api/ { + proxy_pass http://ff_admin_aio_backend:5000/; # Verweise auf den internen Backend-Service + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection 'upgrade'; + proxy_set_header Host $host; + proxy_cache_bypass $http_upgrade; + } + + # Weiterleitung aller anderen Anfragen an das Frontend + location / { + proxy_pass http://ff_admin_aio_frontend:80/; # Verweise auf den internen Frontend-Service + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection 'upgrade'; + proxy_set_header Host $host; + proxy_cache_bypass $http_upgrade; + } + } +}