Public Repository

Last pushed: 20 days ago
Short Description
Admidio Vereinsverwaltungssystem in einem Docker Container mit Apache2 und PHP
Full Description

Admidio is a free open source user management system for websites of organizations and groups. The system has a flexible role model so that it’s possible to reflect the structure and permissions of your organization.

GitHub docker Admidio

Docker Versionen

Debian Jessie

Debian Stretch PHP7

Was ist Admidio

Admidio ist eine kostenlose Online-Mitgliederverwaltung, die für Vereine, Gruppen und Organisationen optimiert ist.
Sie besteht neben der klassischen Mitgliederverwaltung aus einer Vielzahl an Modulen, die in eine neue oder bestehende
Homepage eingebaut und angepasst werden können.

Registrierte Benutzer eurer Homepage haben durch Admidio u.a. Zugriff auf vordefinierte und frei konfigurierbare Mitgliederlisten,
Personenprofile und eine Terminübersicht. Außerdem können Mitglieder in Gruppen zusammengelegt, Eigenschaften zugeordnet
und nach diesen gesucht werden. (c) Admidio.org 2017

Container starten

Den Container mit folgendem Befehl starten.
Der Download startet falls der Container nicht vorhanden ist automatisch.

docker run -d -it --restart always --name admidio_test -p 8080:80 -v /var/admidio_files:/var/www/admidio/adm_my_files -v /var/admidio_themes:/var/www/admidio/adm_themes -v /var/admidio_plugins:/var/www/admidio/adm_plugins admidio/admidio:latest

Falls eine Docker basierte Datenbank vorhanden ist, kann man sie gleich mit dem Container verlinken.

docker run -d -it --restart always --name admidio_test -p 8080:80 --link dockermysql:mysql -v /var/admidio_files:/var/www/admidio/adm_my_files -v /var/admidio_themes:/var/www/admidio/adm_themes -v /var/admidio_plugins:/var/www/admidio/adm_plugins admidio/admidio:latest

Dabei kann jetzt im Admidio Setup bei der Datenbank statt die IP-Addresse der Containername dockermysql eingeben werden und als Datenbank mysql.

Danach über den Browser die Seite http://localhost:8080/ aufrufen und das Admidio Setup durchführen.

Erklärung zu dem Start Befehl

docker run -d -it --restart always --name admidio_test -p 8080:80 --link dockermysql:mysql -v /var/admidio_files:/var/www/admidio/adm_my_files -v /var/admidio_themes:/var/www/admidio/adm_themes -v /var/admidio_plugins:/var/www/admidio/adm_plugins admidio/admidio:latest
  • --restart always => auch nach einem Server Neustart den Container starten
  • --name => gib dem Container einen Namen (sonst wird einer Automatisch generiert)
  • -p 8080:80 => Einen Port angeben, über dem man danach zugreifen kann (lokal am Server:apache2 Port im Container).
    Dadurch könnte man z.B.: den Container auch über Port 8081 erreichen indem man es so angibt -p 8081:80.

Die Volume -v macht man aus dem Grund, damit man einfacher ein Backup bzw. Update durchführen kann.
Es ist aber kein muss.

  • -v /var/admidio_files:/var/www/admidio/adm_my_files => Uploads und config von Admidio Lokal in einen Ordner speichern.
  • -v /var/admidio_themes:/var/www/admidio/adm_themes => Admidio Themes
  • *-v /var/admidio_plugins:/var/www/admidio/adm_plugins => Admidio Plugins

Info: Prüft ab jetzt automatisch und kopiert gegebenfalls vom Provisions Ordner.
Erklärung zu Docker Volume in diesem Beitrag Docker Data Volumes

  • --link dockermysql:mysql => Docker Datenbank Server MySQL oder PostgreSQL mit dem Container Admidio verbinden. dockermysql = Name vom Docker Container, mysql = Name der Datenbank.
  • admidio/admidio:latest => Image Name mit Versions Tag.

Container updaten

Falls man es mit dem Docker Hub Repo verwendet, kann man folgende schritte durchführen.

  • Download aktuelles Repo vom Docker Hub
    docker pull admidio/admidio:latest
    
  • Den aktuellen Admidio_test Container anhalten
    docker stop admidio_test
    
  • Container entfernen (Docker löscht dabei die Daten im adm_my_files nicht, wenn es als eigenes Volume definiert wurde)
    docker rm admidio_test
    
  • Mit folgendem Befehl den neuen Container Provisionieren und Starten (dabei kann der alte Befehl verwendet werden).
    docker run -d -it --restart always --name admidio_test -p 8080:80 --link dockermysql:mysql -v /var/admidio_files:/var/www/admidio/adm_my_files -v /var/admidio_themes:/var/www/admidio/adm_themes -v /var/admidio_plugins:/var/www/admidio/adm_plugins admidio/admidio:latest
    
  • Über einen Browser auf die Admidio Seite gehen und wie im Admidio Wiki die Migration durchführen

Wiki zu Admidio

Admidio Wiki

Docker Compose

Mit Docker-Compose kann man sich die Container automatisch erstellen lassen und Verwalten.

Hier eine kleine Beispieldatei wie automatisch eine MySQL Datenbank erstellt wird und verlinkt auf den Admidio Container.

docker-compose.yaml

version: '3'

services:
  mysql:
    restart: always
    image: mysql:5.6
    environment:
      - MYSQL_ROOT_PASSWORD=secret-password
      # mit diesen 3 zusätzlichen Zeilen wird eine Datenbank und Benutzer erstellt.
      - MYSQL_DATABASE=admidio
      - MYSQL_USER=admidio
      - MYSQL_PASSWORD=secret-password
    volumes:
      - <Lokaler-pfad-zum-Verzeichnis>/mysqlconfd:/etc/mysql/conf.d
      - <Lokaler-pfad-zum-Verzeichnis>/mysqldata:/var/lib/mysql
    ports:
      - 3306:3306


  admidio:
    restart: always
    image: admidio/admidio:v3.2
    depends_on:
      - mysql
    volumes:
      - <Lokaler-pfad-zum-Verzeichnis>/admidio_files:/var/www/admidio/adm_my_files
      - <Lokaler-pfad-zum-Verzeichnis>/admidio_plugins:/var/www/admidio/adm_plugins
      - <Lokaler-pfad-zum-Verzeichnis>/admidio_themes:/var/www/admidio/adm_themes
    ports:
      - 80:80

Mit dem folgendem Befehl werden die Container erstellt und als Dienst gestartet.

docker-compose up -d

Mit docker-compose down werden die Container beendet und gelöscht, die Volumes bleiben dabei erhalten.

Ein update kann auch mit docker-compose up -d gemacht werden, dabei wird geprüft ob sich was im docker-compose.yaml geändert hat, und
gegebenfalls wird der jeweilige Container neu erstellt.

Admidio mit Docker-Compose und SSL Reverse Proxy

Bei diesem Beispiel wird der Nginx Proxy von jwilder mit JrCs docker-letsencrypt-nginx-proxy-companion verwendet.

  • Zuerst wird der Nginx Proxy und der Let's Encrypt dienst über docker-compose eingerichtet.
    Gist
version: '2.0'

services:
  nginx-proxy:
    restart: always
    image: jwilder/nginx-proxy:latest
    ports:
      - '80:80'
      - '443:443'
    volumes:
      - nginxcerts:/etc/nginx/certs:ro
      - nginxvhostd:/etc/nginx/vhost.d
      - /usr/share/nginx/html
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - nginxconfd:/etc/nginx/conf.d
    networks:
      - nginx-proxy

  letsencrypt-nginx-proxy-companion:
    restart: always
    image: jrcs/letsencrypt-nginx-proxy-companion
    # environment:  # remove this fake certificate in production
    # - ACME_CA_URI=https://acme-staging.api.letsencrypt.org/directory
    volumes:
      - nginxcerts:/etc/nginx/certs:rw
      - /var/run/docker.sock:/var/run/docker.sock:ro
    volumes_from:
      - nginx-proxy

networks:
  nginx-proxy:
    external: true

volumes:
  nginxcerts:
  nginxvhostd:
  nginxconfd:
  • Danach kann Admidio mit einer Datenbank und einem extra Netzwerk eingerichtet werden.
version: '3'

services:
  mysql:
    restart: always
    image: mysql:5.6
    environment:
      - MYSQL_ROOT_PASSWORD=secret-password
      # mit diesen 3 zusätzlichen Zeilen wird eine Datenbank und Benutzer erstellt.
      - MYSQL_DATABASE=admidio
      - MYSQL_USER=admidio
      - MYSQL_PASSWORD=secret-password
    volumes:
      - <Lokaler-pfad-zum-Verzeichnis>/mysqlconfd:/etc/mysql/conf.d
      - <Lokaler-pfad-zum-Verzeichnis>/mysqldata:/var/lib/mysql
    networks:
      - backend

  admidio:
    restart: always
    image: admidio/admidio:v3.2
    environment:
    # mit diesen 4 Variablen wird dem NGINX-Proxy die Notwendigen Infos übermittelt.
      - VIRTUAL_HOST=<Domain z.b.: admidio.example.com> # wird für Port 80 verwendet
      - LETSENCRYPT_HOST=<Domain z.b.: admidio.example.com> # wird für Port 443 verwendet und um das erstellen vom Zertifikat
      - LETSENCRYPT_EMAIL=office@example.com # wird für das erstellen vom Zertifikat verwendet
      - VIRTUAL_PROTO=http # Kommunikation zwischen Nginx-proxy und Admidio
    depends_on:
      - mysql
    networks:
    # zuweisung zu den Netzwerken.
      - backend
      - nginx-proxy
    volumes:
      - <Lokaler-pfad-zum-Verzeichnis>/admidio_files:/var/www/admidio/adm_my_files
      - <Lokaler-pfad-zum-Verzeichnis>/admidio_plugins:/var/www/admidio/adm_plugins
      - <Lokaler-pfad-zum-Verzeichnis>/admidio_themes:/var/www/admidio/adm_themes

networks:
  backend:
  nginx-proxy:
    external: true

Mit docker-compose up -d werden die Container erstellt und nach ein paar Sekunden ist Admidio über admidio.example.com per HTTPS erreichbar.
Der HTTP verkehr wird automatisch auf HTTPS umgeleitet.

Docker Pull Command
Owner
guenterbailey