Skip to main content


Installation erfolgreich - und jetzt?


!Friendica Admins

Werte Entitäten - ich mache gerade meine ersten Schritte mit einer eigenen Friendica-Instanz auf Basis von #Docker. Alles noch extrem rudimentär, experimentell und just-for-fun. Weiss noch nicht, ob ich es bald wieder einstelle oder die #Weltherrschaft erringen werde. Vielen Dank für Eure Hilfe bis hier hin.

Gibt es eine hilfreiche Anleitung für die ersten Steps nach der Installation? Momentan scheint es etwas einsam hier zu sein - meine 'globale Community' umfasst nur bekannte Nachrichten und ist extrem statisch.
TNX

Friendica Admins reshared this.

in reply to utzer [Friendica]

Mir ist momentan noch nicht klar, wie/wo das konfiguriert wird. Aber morgen ist ja auch noch ein Abend...
TNX
in reply to Captain Yellow-Turtle

@Captain Yellow-Turtle in /admin und da bei Site und dann Relay oder so.

Kann auch sein, dass dein Cronjob etwas häufiger ausgeführt werden sollte, die Posts brauche recht lange. Vielleicht liegt es aber auch an mir.
Edit: Hmm liegt wohl an meinem Server, morgen mal schauen was da nicht stimmt.

Wichtig ist, mach regelmäßig nen Backup, wenn die Datenbank weg ist, dann kannst du die Domain nicht nochmal für Friendica nutzen, bzw. die Nutzer nicht nochmal anlegen, weil die Keys sich ändern oder so. Wie auch immer, Backup machen. 😉
This entry was edited (2 years ago)
in reply to utzer [Friendica]

@utzer
Danke, das hatte tatsächlich noch gefehlt.

Unter '/admin/site' fehlten noch diese Einträge:
Nachrichten-Relais
* Verwende Relais-Server
*Geltungsbereich des Relais: Alle

Screenshot Settings

Damit füllt sich jetzt auch meine Community-Seite mit wichtigen GuMo-Posts und ich bin nicht mehr so einsam.

Jetzt fehlt aber eigentlich nur noch eine Dokumentation, wo solche Steps nach der Installation dargestellt werden.

Hinsichtlich cronjob und Backup und sonstigem Zeugs habe ich noch ganz viel zu tun. Ich gehe auch davon aus, dass ich das System noch mehrfach platt machen werde, bevor ich das ernsthaft ins Netz stellen werde.

in reply to Captain Yellow-Turtle

Das mit dem Plattmachen wäre blöde, wenn Du die gleichen Usernamen verwenden würdest. So würdest Du dann z.B. Kommunikationsprobleme mit Diaspora bekommen, weil sich der Schlüssel geändert hat.

Bezüglich des Cronjobs: Du kannst auch den Daemon verwenden. Einfach bin/daemon.php start auf der Kommandozeile eingeben. Dann benötigst Du nicht mehr den Cronjob.

BTW: Es gibt auch ein Addon, damit man Markdown verwenden kannst. Vielleicht ist das was für Dich?
in reply to Michael Vogel

@Michael Vogel Eigenwerbung? :P
Das Markdown ist dann aber zusätzlich zum BBCode? Oder kann man das ersetzen?
in reply to Tealk

Ich nutze ständig Markdown. Es muss halt nur aktiviert werden (sowohl auf der Admin- als auch User-Seite)
in reply to Michael Vogel

TNX - nehm ich alles als Anregungen mit.

Hinsichtlich der Warnungen zu den Usern: Das muss ich so akzeptieren - ich sehe das hier noch alles als experimentell an und mache noch keine festen Bindungen. Dann sind die halt weg und ich mache es neu.
Wichtiger ist mir ein wirklich sauber aufgesetztes System zum Start.
in reply to Captain Yellow-Turtle

Eigentlich gibt es nicht viel zu vergurken.

BTW: Das Einfachste ist, das System über "git" aktuell zu halten. Wenn Du das machst, reicht ein regelmäßiges "git fetch", um immer auf dem letzten Stand zu sein. Datenbankupdates führt das System automatisch aus.
in reply to Steffen K9 🐰

@Steffen K9 🐰 @Michael Vogel @Captain Yellow-Turtle ich denke auch es wäre besser regelmäßig Backups zu machen, dass sollte recht einfach gehen.

Bei der Dockervariante zieht man sicher eher neue Docker Images, wobei ich mich da leider nicht auskenne und die Anleitung für Friendica mit Docker sehr wenig umfangreich ist. 😔
in reply to utzer [Friendica]

Stimmt, das ist ja Docker. Ich weiß gar nicht, wie das aktuell gehalten wird.
in reply to Michael Vogel

Eigentlich gibt es nicht viel zu vergurken.

Welch fundamentale Fehleinschätzung meiner Fähigkeiten. ;-)

Bin mir hinsichtlich das Updates auch noch nicht sicher. Eigentlich verstehe ich ein System mit Docker eher als etwas, was man während des Build-Prozesses als Image-Erneuerung durchzieht und ausrollt.

Da ist sicher noch viel Potential für Probleme.
in reply to Captain Yellow-Turtle

@Captain Yellow-Turtle @utzer @Michael Vogel im endeffekt kümmert sich ja docker um die updates oder ist das docker compose?
bei docker zieht man einfach das image und startet das, die Einstellungen werden dann im start command mitgegeben
bei docker compose wird das quasi lokal erstellt und die Einstellungen findet man in der docker-compose.yml
in reply to Tealk

@Tealk @Michael Vogel @Captain Yellow-Turtle ja, so sollte das sein, ist nicht ganz trivial, bisher habe ich nur Docker Images die keine Daten speichern, wie das bei solchen mit Datenbanken ist habe ich noch nicht so ganz verstanden, es verteilt da eben Daten überall im System. Aber egal, Docker ist nen anderes Thema.
in reply to Tealk

@Tealk @Michael Vogel @utzer @Captain Yellow-Turtle
Für die persistente Datenspeicherung benötigt man in Docker sogenannte Volumes. Die werden entweder im Filesystem unter /var/lib/docker (hängt von der distribution ab) angelegt und sind nur schwer zu finden...

Oder man configuriert explizit ein Volume und kann es irgendwo im Filesystem eingehängt haben. Das kann dann auch ein NFS-Share oder ähnliches sein.
Wenn man eine ganze Friendica-Umgebung mit Datenbank und sonstigem Pipapo möchte, dann macht man das am Besten mit docker-compose. Da werden die Container auch gleich in der richtigen Reihenfolge gestartet usw.

Ansonsten, wenn man auf externe Filesysteme speichern möchte, kann man - und das ist die noch schönere Variante - ein z.B. NFS-Share direkt in den docker-container an der entsprechenden Stelle mounten - ohne den Umweg zu gehen, dass das NFS-Share im Lokalen Filesystem eingehängt, und dieses Verzeichnis dann als Volume in den Container gehängt wird.

Für automatisierte Deployments via Docker ist natürlich die Variante mit einem klar definierten Volume am Lokalen Filesystem, welches im Vorfeld entsprechend gemountet wird (oder eben nicht, weil das FS groß genug ist) die deutlich praktikablere.

Updates?

Nun ja... Die Maintainer bauen ein neues Docker Image, welches am Docker Hub bereitgestellt wird.
Der Instanz-Admin holt sich diese(s) Images z.B. bei docker-compose mit pull und build. Geht mit Docker ganz ähnlich.

Migrationen der Datenbank, weil sich die Schemata geändert haben, müssen mit Postinstall-Skripten bzw. Build-Skripten durchgeführt werden - soweit ich das verstanden habe.
in reply to Jakob

@jakob danke für die Erklärung. Für Friendica scheint es mir eher sinnvoll, wenn da die Daten in Verzeichnissen liegen, also sowohl die Datenbank als auch der Webroot. Oder wenn alternative gut dokumentiert ist wie man bspw. ein mysqldump/mariabackup machen kann. Muss das nochmal anschauen bei dem Docker.
in reply to utzer [Friendica]

@utzer Was ich so gesehen habe, werden bei docker-installationen keine expliziten Volumes für Daten und Datenbank-Daten angegeben., wenn man sich docker-compose-Files downloadet.

Volumes innerhalb hingegen schon. Ohne der Volumes wäre sowas nämlich nicht persistent. Und das will man ja verhindern. Solange der Container besteht, gibts die Daten, beendet man den Container (z.B. start mit docker mit der Option --rm, damit der Container "aufgeräumt wird" am Ende) ist alles weg. Das verhindern eben die Volumes. Die muss man aber für die Daten und Datenbank-Verzeichnisse innerhalb des Containers in docker-compose explizit definieren.

Datenbank-Dumps und auch Datendumps lassen sich mit Docker natürlich auch machen. Ich glaub, in der Installationsanleitung von Pleroma ist das sehr genau und detailliert erklärt, wie man die Datensicherung von Pleroma aus Docker heraus macht. Oder wars Lemmy... Muss ich schauen. Dann poste ich den Link noch hier.

Was die Lemmy-Leute meiner Meinung nach ungünstig machen... da wird "nur" ein docker-compose-File ausgeliefert. Darin ist "alles" konfiguriert. Unter anderem eben auch die Datenbank-Connection mit Username und Passwort... welches auf "lemmy" und "lemmy" gesetzt ist...

Die Snikket-Developers haben das "besser" gelöst. So eine Datenbankverbindung ist ja doch durchaus sensibel und sollte nicht mit Standard-Passwort abgesichert sein.
In einem extra Config-File, welches in docker-compose dann eingelesen wird, werden DB_PASSWORT, DB_USER, DB_CONNECTION und DB_DATABASE definiert und können so instanz-spezifisch und deployment-unabhängig abgelegt werden.

Wenn ihr vorhabt, Friendica per docker/docker-compose vorkonfiguriert auszuliefern, dann würde ich auf jeden Fall solche instanzspezifischen Werte in ein extra (per .gitignore ignoriertes) File legen. In Git für die Docker-installation kann man allerdings ein config.example-File ausliefern, welches Default/Beispielwerte für alle konfigurierbaren Werte enthält.

Die Admin-Adresse(n) z.B. könnten da rein, und ob Föderation aktiviert ist, oder nicht. und eben die Datenbank-Zugangsdaten.

Wenn man dann geübter ist mit docker/docker-compose, könnten natürlich auch Volumedefinitionen für ein NFS- oder Glusterfs-Share für die Daten-Verzeichnisse rein. Mit S2-Shares von Amazon bin ich nicht vertraut, aber auch sowas könnte dort natürlich rein, wo die Daten abgelegt werden können.

nextcloud z.B. hat schöne Vorlagen für docker-compose, wo auch ein Proxy mit an Bord ist, der die Domain auch gleich per Lets Encrypt automatisch absichert und sich ums erneuern des Zertifikates selbst kümmert. Das ist sehr komfortabel für ein einfaches Deployment für ungeübte Admins.

Ich kann gern mit meiner Erfahrung, die ich in den letzten Jahren diesbezüglich gesammelt habe, behilflich sein. Von "Experte" bin ich zwar auch weit weg, konnte aber durchaus wesentliches lernen.
in reply to Jakob

@jakob Deine Erklärung hat mir jedenfalls nochmal geholfen besser zu verstehen, was da bezüglich Docker gemacht wurde, hauptsächlich hat das glaube ich der @Philipp Holzer gemacht.

Ich glaube er freut sich da sicher auch über Pullrequests oder Tipps oder besser noch Austausch. Hoffe ich schreibe da jetzt nicht irgendwas und er findet das blöd.

Repo:
https://github.com/friendica/docker

Mein Traum wäre ja, das es etwas N00b tauglicher wäre, vieles oder das meiste Vorkonfiguriert mit klaren Angaben was man noch anpassen muss.
This entry was edited (2 years ago)
in reply to utzer [Friendica]

@utzer Snikket macht da einen ausgezeichneten Job für XMPP. Das ist ein fix-fertig vorkonfigurierter Prosody, wo man nur mehr die Domain in ein Konfig-File eintragen muss und den DNS konfigurieren.
Dazu gibts eine auf conversations basierende App, welche du für die Registrierung als Useraccount benötigst. Dann hast du mit einem
docker-compose up
einen fix fertigen XMPP-Server, der gleichwertig mit allen anderen im Netz nutzbar ist.
Für noobs ausgezeichnet, für mich zu wenig konfigurierbar :)

Aber ja... friendica ist ganz sicher auch so hinzukriegen.

Und ich werd mich da gerne beteiligen.
in reply to Jakob

@jakob ja, Konfigurierbarkeit wäre mir schon wichtig, man kann ja die Beispielkonfig so ausliefern, dass unten steht:
# Expert settings, only change if you know what you're doing

oder so.
in reply to utzer [Friendica]

Meine idee war, unter https://github.com/friendica/docker/tree/stable/.examples fix fertige Beispiele abzulegen, die man "einfach" starten kann .. Da fehlt aber leider noch fleisch ..
in reply to Jakob

Vieles von den Empfehlungen (nicht alles in einem container, Beispiele, ...) habe ich versucht abzubilden.

Mein Vorbild war auch Nextcloud, die hier schon einen guten Job gemacht haben/machen. D.h. viele der Friendica-README / Einstellungen sollten aus Nextcloud-Sicht wiedererkennbar sein *gg*
in reply to Michael Vogel

Zwei sind scheinbar kaputt, zwei liessen sich hinzufügen:
[root@vj3 ~]# docker exec -it friendica_friendica_1 /var/www/html/bin/console relay add https://relay.chemnitz.social/actor
https://relay.chemnitz.social/actor couldn't be added
[root@vj3 ~]# docker exec -it friendica_friendica_1 /var/www/html/bin/console relay add https://ap-relay-ger.650thz.de/actor
Successfully added https://ap-relay-ger.650thz.de/actor
[root@vj3 ~]# docker exec -it friendica_friendica_1 /var/www/html/bin/console relay add https://relay.libranet.de/actor
Successfully added https://relay.libranet.de/actor
[root@vj3 ~]# docker exec -it friendica_friendica_1 /var/www/html/bin/console relay add https://de.relay.friendi.ca/actor
https://de.relay.friendi.ca/actor couldn't be added

Dann suche ich jetzt mal, was ich damit denn eigentlich feines getan habe. Relay-Server - WTF!?!
TNX
in reply to Jakob

@jakob
bin/console relay add https://relay.chemnitz.social/actor

Im Basisverzeichnis von Friendica ausführen und als Nutzer den vom Webserver nutzen.
in reply to Tealk

@Tealk am einfachsten ist es den Post zu öffnen und dann die URL aus der Adressleiste zu kopieren, oder Rechtsklick auf die Zeit unter dem Nutzernamen und den Link davon kopieren.
in reply to utzer [Friendica]

@Tealk ich meine ich kann den Link schon rekonstruieren, aber mit redir drin geht das nur wenn man auf deinem Server eingeloggt ist. Wir hatten da einen Bug, vor ein paar Monaten haben Spammer die Links genutzt und beliebige Ziele gesetzt.

Hier dein link
https://social.yl.ms/display/989be456-1460-aba9-8a40-5d5889509195
Unknown parent

@Michael Vogel wir müssen irgendwann mal wen finden der Friendica per Docker aufsetzt, wo der @Philipp Holzer dann unterstützt und im Gegenzug schreibt die Person mal alles auf was zu beachten ist, so aus Sicht eines N00bs oder zumindest aus Sicht einer Person die kein Profi ist. Grundsätzlich ist ja die Installation per Docker oder Betrieb via Docker schon eine spannende und potentiell auch einfache Art.
Unknown parent

Jakob
@Tealk das kommt immer ganz drauf an. docker-compose kann schon auch schöne umgebungen zusammenbauen.
Für einen Enterprise-Betrieb ist docker natürlich nix. Aber für den "Hobby-Admin" taugt docker durchaus ausreichend.

@utzer
Unknown parent

@Tealk joa, kann man so sehen, bin auch nicht sicher wie toll das für Friendica oder so ist, aber das ist eben Ansichtssache.
Unknown parent

Jakob
@Tealk beides ist nicht wirklich enterprise-geeignet... aber du hast vollkommen recht.

@utzer
Unknown parent

Captain Yellow-Turtle
aber für Produktive Umgebungen finde ich es eher mäh
Das ist mir eine Spur zu pauschal.
in reply to Captain Yellow-Turtle

Nachdem die Diskussion hier immer mehr Richtung #Docker abdriftet, lasst mich kurz den aktuellen Entwicklungsstand skizzieren, dann kann sich jeder selbst ein Bild machen.

Mein Setup umfasst 3 Services mit einem Apache als ReverseProxy, einer Friedica-Instanz und einer Datenbank. Logs, Daten und Datenbank liegen in Volumes wegen Persistenz und so.

Wie geschrieben - ich stehe hier noch relativ weit am Anfang, sowohl bei #Friendica als auch bei #Docker. Das Projekt ist experimentell und besonders auch zum Lernen gedacht.

docker-compose.yml:
# compose für friendica
version: "3.5"
services:
 db:
    build: ./mariadb
    volumes:
      - v-mysql-data:/var/lib/mysql:Z
      - v-mysql-log:/var/log/mysql:Z

    networks:
      - net-backend

    expose:
     - "3306"

 webserver:
   build: ./apache2

   networks:
     - net-frontend

   ports:
     - "80:80"
     - "443:443"

 friendica:
  build: ./friendica
  restart: always

  networks:
   - net-frontend
   - net-backend
  volumes:
   - v-apache-log:/var/log/apache2:Z
  depends_on:
    - db

volumes:
 v-mysql-data:
 v-mysql-log:
 v-friendica:
 v-apache-log:

networks:
 net-frontend:
  driver: bridge
 net-backend:
  driver: bridge
in reply to Captain Yellow-Turtle

@Captain Yellow-Turtle was ist in den build:, also bspw. in build: ./friendica drin? Das sind ja einfach Ordner, also ./friendica im Ordner von das compose.yaml liegt, oder?

Was spricht eigentlich dagegen die volumes alle in einen Ordner zu machen, also als Unterordner, die Compose-Dateien sehen das oft so vor und ich meine ohne Compose macht das Docker das von sich aus auch so. Aber irgendwie fände ich persönlich angenehmer, wenn es alles im aktuellen Ordner speichern würde, was aber aus einem mir nicht verständlichen Grund scheinbar gegen die Philosophie verstößt oder so.
in reply to utzer [Friendica]

was ist in den build:, also bspw. in build: ./friendica drin?
Im wesentlichen das dockerfile mit dem ganzen Zeug, was für das Build dieses Services benötigt wird.
in reply to Captain Yellow-Turtle

@Captain Yellow-Turtle @utzer genau.
Man kann den container direkt in docker-compose.yml angeben, oder man macht es so und hat dann darin ein weiteres Dockerfile, welches den Container angeibt und noch weitere Modifikationen erlaubt.
Z.B. eine config-datei vom lokalen Filesystem noch reinkopieren oder Variablen setzen, oder Pakete im Container nachinstallieren/upgrades durchführen usw.

Damit hat man ein wenig mehr Flexibilität beim ansich recht starren Container-System
in reply to Captain Yellow-Turtle

@Captain Yellow-Turtle Ich werd bei gelegenheit noch einen proxy für ssl-absicherung mittels lets-encrypt dazubauen, wenn du möchtest.
in reply to Jakob

Ich werd bei gelegenheit noch einen proxy für ssl-absicherung mittels lets-encrypt dazubauen, wenn du möchtest.
Uh-oh - stehe gerade auf dem Schlauch, sorry. Wo möchtest Du das einbauen?
in reply to Captain Yellow-Turtle

@Captain Yellow-Turtle in das docker-compose-file. also in ein zweites.

sodass es eines mit sslund eines ohne ssl gibt
in reply to Jakob

@jakob
Meine Fresse - hab's immer noch nicht gecheckt. Hab doch gestern gar nicht gesoffen!?!

Wenn es darum geht, dass Du mein compose-File benutzen und zur Verfügung stellen möchtest: Bitte gern. Wenn die Schöpfungshöhe auch nicht besonders groß ist.

Ansonsten habe ich das ja schon, LE wird im ReverseProxy integriert. Und ein ReverseProxy ohne TLS hat IMHO keine Daseinsberechtigung.

BTW: Momentan finde ich die Trennung von ReverseProxy und der Friendica-Instanz sowie Datenbank via Compose ganz schick. Von Friendica kommt im wesentlichen das Docker-Image, aber beim Frontend hat so jeder die Möglichkeit, seinen präferierten Webserver einzusetzen. Viele schwören auf #, bestimmt ebenso viele setzen aus Gründen auf #. Und da waren ja noch mehr gute Kandidaten.

Aber vermutlich habe ich noch nicht verstanden, worauf Du hinaus möchtest. :-o
in reply to Captain Yellow-Turtle

hui ... das ist jetzt ganz schön viel Inhalt in dieser Diskussion.

Ich versuche mal konkret auf die Umgebung von @Captain Yellow-Turtle einzugehen und die Fragen runderhum:

docker-compose file aus deinem vorherigen Kommentar

  • 3306 brauchst du bei der DB nur "exposen", wenn du vorhast von aussen auf die DB zuzugreifen, ansonsten kannst du bereits per db:3306 innerhalb von net-backend zugreifen
  • Erweiterst du im build: ./apache2 Dockerfile das SSL-Zertifikat manuell? Sonst wird das mit dem 443 Port nicht klappen
  • dir fehlt das v-friendica volumen im friendica container - Achtung dadurch kommt es zum Datenverlust wenn du den container entfernst (z.B. durch updates
  • Den cronjob nicht vergessen -> derzeit wird das per zusätzlichem container "Cron" unterstützt (siehe mein Beispiel am Ende)



Update-Strategie
Es gibt 2 grundlegend unterschiedliche Images von Friendica

  • stable / latest / 2021.04 ... Das ist ein statischer Container, der bereits mit einer fix fertigen Umgebung auf Basis des Friendica-Archivs kommt. D.h. der aktualisiert sich auch nicht automatisch .. Ausser wenn es eine neue Release gibt und das Docker image offiziell aktualisiert wird .. Dann aktualisiert sich bei einem docker-compuse pull automatisch auch das image und per docker-compose up -d aktualisiert sich die instanz automatisch. - Diese Variante ist zu bevorzugen, wenn man stets am "stable" Pfad bleiben will
  • develop / RC ... Das ist ein dynamischer Container, der sich bei einem Restart / der Initialisierung automatisch per git clonse die zugehörige develop-/rc-files aus github runterlädt und in den container synct & updated - Diese Variante ist zu bevorzugen, wenn man auf dem "Letztstand" bleiben will. Es gibt je ein image für develop und eins für einen RC-stand (je nach entwicklungsphase)



Man kann immer nur in die gleiche oder höhere Version mit seiner instanz wechseln, das wird beim starten des containers automatisch geprüft.

Falls es dich interessiert zwecks Infos - hier meine aktuelle docker-compose für diesen Knoten hier (meine Spielwiese ;-) ):
version: '3.2'
services:
  db:
    image: mariadb
    volumes:
      - mysql-vol-1:/var/lib/mysql/
      - ./config/db/performance.cnf:/etc/mysql/conf.d/performance.cnf
    environment:
      - MYSQL_USER_FILE=/run/secrets/mysql_user
      - MYSQL_PASSWORD_FILE=/run/secrets/mysql_password
      - MYSQL_DATABASE=/run/secrets/mysql_database
    restart: always
    secrets:
      - mysql_database
      - mysql_user
      - mysql_password

  redis:
    image: redis
    restart: always

  app:
    image: friendica:rc-fpm-alpine
    command: "php-fpm -d date.timezone=${TZ} -d expose_php=0"
    depends_on:
      - db
      - redis
    volumes:
     - friendica-vol-1:/var/www/html
     - ./config/app/www.overloaded.conf:/usr/local/etc/php-fpm.d/www.overloaded.conf:ro
     - ./config/app/opensocial.ini:/usr/local/etc/php/conf.d/friendica.ini:ro
    environment:
      - MYSQL_USER_FILE=/run/secrets/mysql_user
      - MYSQL_PASSWORD_FILE=/run/secrets/mysql_password
      - MYSQL_DATABASE_FILE=/run/secrets/mysql_database
      - MYSQL_HOST=${DBHOST}
      - MYSQL_PORT=${DBPORT}
      - FRIENDICA_ADMIN_MAIL=${MAILNAME}
      - FRIENDICA_TZ=${TZ}
      - FRIENDICA_LANG=${LANGUAGE}
      - FRIENDICA_UPGRADE=true
        #      - "FRIENDICA_REPOSITORY=nupplaphil/friendica"
        #      - "FRIENDICA_VERSION=task/psr7_remove_binary"
        #      - "FRIENDICA_ADDONS=task/psr7_remove_binary"
        #      - "FRIENDICA_ADDONS_REPO=nupplaphil/friendica-addons"
      - REDIS_HOST=redis
      - FRIENDICA_DATA=Filesystem
      - FRIENDICA_DEBUGGING=true
      - FRIENDICA_SITENAME=${SITENAME}
      - SMTP=${SMTP}
      - SMTP_DOMAIN=${SMTP_DOMAIN}
      - SMTP_AUTH_USER=${SMTP_AUTH_USER}
      - SMTP_AUTH_PASS=${SMTP_AUTH_PASS}
      - SMTP_TLS=${SMTP_TLS}
      - SMTP_STARTTLS=${SMTP_STARTTLS}
    restart: always
    extra_hosts:
       - "friendica.philipp.info:172.21.0.3"
       - "opensocial.at:172.21.0.3"
    secrets:
      - mysql_database
      - mysql_user
      - mysql_password
    networks:
      default:
        aliases:
          - app
      private:
        aliases:
          - friendica_web
      web:
        aliases:
          - friendica_intern

  cron:
    image: friendica:rc-fpm-alpine
    restart: always
    volumes:
      - friendica-vol-1:/var/www/html
      - ./config/app/www.overloaded.conf:/usr/local/etc/php-fpm.d/www.overloaded.conf:ro
      - ./config/app/opensocial.ini:/usr/local/etc/php/conf.d/friendica.ini:ro
    environment:
      - SITENAME=${SITENAME}
      - MYSQL_USER_FILE=/run/secrets/mysql_user
      - MYSQL_PASSWORD_FILE=/run/secrets/mysql_password
      - MYSQL_DATABASE_FILE=/run/secrets/mysql_database
      - MYSQL_HOST=${DBHOST}
      - MYSQL_PORT=${DBPORT}
      - SMTP=${SMTP}
      - SMTP_DOMAIN=${SMTP_DOMAIN}
      - SMTP_AUTH_USER=${SMTP_AUTH_USER}
      - SMTP_AUTH_PASS=${SMTP_AUTH_PASS}
      - SMTP_TLS=${SMTP_TLS}
      - SMTP_STARTTLS=${SMTP_STARTTLS}
    depends_on:
      - db
      - redis
    entrypoint: /cron.sh
    extra_hosts:
       - "friendica.philipp.info:172.21.0.3"
       - "opensocial.at:172.21.0.3"
    secrets:
      - mysql_database
      - mysql_user
      - mysql_password
    networks:
      default:
        aliases:
          - cron
      private:
        aliases:
          - friendica_cron
      web:
        aliases:
          - friendica_cron

  web:
    build: ./web
    restart: always
    volumes:
      - friendica-vol-1:/var/www/html:ro
    environment:
      - "HOSTNAME=friendica.philipp.info"
    depends_on:
      - app
    networks:
      - web
      - default
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.friendica-http.entrypoints=http"
      - "traefik.http.routers.friendica-http.rule=Host(`friendica.philipp.info`)"
      - "traefik.http.routers.friendica-http.middlewares=http-chain@file"
      - "traefik.http.routers.friendica.entrypoints=https"
      - "traefik.http.routers.friendica.rule=Host(`friendica.philipp.info`)"
      - "traefik.http.routers.friendica.middlewares=https-chain@file"
      - "traefik.http.routers.friendica.tls=true"
      - "traefik.http.routers.friendica.tls.certresolver=default"

volumes:
  mysql-vol-1:
    external:
      name: friendica_db
  friendica-vol-1:
    external:
      name: friendica_data

secrets:
  mysql_database:
    file: ./config/secrets/mysql_database.txt
  mysql_user:
    file: ./config/secrets/mysql_user.txt
  mysql_password:
    file: ./config/secrets/mysql_password.txt

networks:
  web:
    external:
      name: web
  private:
    external:
      name: private-network
in reply to Philipp Holzer

@Philipp Holzer
Großartig - vielen Dank für die detailierte Antwort! Ich werde einiges davon mitnehmen/einbauen und vielleicht zu einem späteren Zeitpunkt gern noch einmal darauf zurück kommen. Momentan ist gerade ungünstig.
TNX

Nur so viel:
1. Ja, TLS-Zertifikate gebe ich momentan noch manuell im Build rein.
2. Du hast es richtig gesehen - ein Volume fehlt. Im Original steht:
  volumes:
   - v-friendica:/var/www/html:Z
   - v-apache-log:/var/log/apache2:Z

Ist wahrscheinlich beim Ausdünnen des Posts versehentlich rausgeflogen, jedenfalls wurden die Daten bislang im Volume gespeichert und haben schon mehrere Container-Cleanups überstanden.
in reply to utzer [Friendica]

bin bisschen durch die Arbeit/Hitze/Kinder/... eingespannt, aber sonst liebend gerne ;-)
in reply to utzer [Friendica]

Ich wäre eigentlich noch am Weg, dass man Friendica sinnvoll als micro-service betreiben kann, unter anderem:

  • Object-Storage (S3) statt Filesystem-Ablage
  • Verteilte Cronjobs auf verschiedene Pods
in reply to Jakob

Ich sehe Docker als Vehikel, um Kuberenetes/Clusterfähig zu werden.

D.h. Friendica sollte dann nur mehr den business-core zur Verfügung stellen und der Rest läuft im Cluster über standard-services :) .. Und dann skaliere ich horizontal und DAS ist dann schon wieder enterprise fähig wenn ich "Cloud computing" vor Augen habe
Unknown parent

Philipp Holzer
hihi .. jaaa .. ich bastel da gerade parallel herum .. Mein Ziel wäre https://opensocial.at auf einem cluster laufen lassen zu können .. Paar Puzzle-Teile fehlen mir leider schon noch, aber konnte es schon paar mal auf einer hetzner cloud erfolgreich ausrollen ;-)

Und das ist auch der Hintergrund der Konfig-Eigenschaften, die ich beim docker image erweitere --> Soweit ich Cluster kenne, werden die per versionierte Configs gesteuert (Configuration as a Code), dadurch kann man zu jedem Zeitpunkt nachvollziehen, was sich wann geändert hat und wie es den cluster beeinflusst hat (und auch schnell zurückrollen im problemfall)