devops-ansible / docker-antragsgruen

Repository providing the Dockerfile for a running instance of Antragsgrün / motion.tools
4 stars 3 forks source link

Installation führt zu leerer Apache Seite #6

Closed Yasamato closed 9 months ago

Yasamato commented 12 months ago

Ich habe folgendes Problem bei der Installation/Aufsetzen des Docker Containers:

Beim Ausführung der docker-compose.yml Datei mit:

docker-compose up

Habe ich das Problem, dass beim Aufrufen der Webseite eine leere Apache File Index Seite gezeigt wird:

image

Ich nehme an, dass dies daran liegt, dass der Ordner /var/www/html leer ist. Der Mount-point gehört dem User www-data:www-data und enthält nur ein leeres Verzeichnis mit dem Namen web.

Die modifizierte docker-compose file:

version: '3'

services:
  database:
    image: mariadb
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ${DATABASE_ROOT_PASSWORD}
      MYSQL_DATABASE: antragsgruen
    volumes:
      - /mnt/appdata/antragsgruen/db_config:/etc/mysql/conf.d/
      - /mnt/appdata/antragsgruen/db_data:/var/lib/mysql
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

  antragsgruen:
    image: jugendpresse/docker-antragsgruen
    restart: always
    ports:
      - 8280:80
    environment:
      - TIMEZONE="Europe/Berlin"
      - SMTP_HOST=smtp.strato.de
      - SMTP_PORT=465
      - SMTP_FROM=${MAIL_USER}
      - SMTP_USER=${MAIL_USER}
      - SMTP_PASS=${MAIL_PASSWORD}
      - APACHE_FQDN=${FQDN}
    volumes:
      - /mnt/appdata/antragsgruen/config:/var/www/html

Logs von antragsgruen:

    ... done with /boot.d/05_cron.sh
    ... running /boot.d/06_install_composer.sh
    ... done with /boot.d/06_install_composer.sh
    ... running /boot.d/motiontool.sh
Composer could not find a composer.json file in /var/www/html
To initialize a project, please create a composer.json file. See https://getcomposer.org/basic-usage
sudo: npm: command not found
sudo: npm: command not found
touch: cannot touch '/var/www/html/config/INSTALLING': No such file or directory
    ... done with /boot.d/motiontool.sh
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 192.168.96.3. Set the 'ServerName' directive globally to suppress this message
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 192.168.96.3. Set the 'ServerName' directive globally to suppress this message
[Sat Dec 02 13:48:53.498086 2023] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.57 (Debian) PHP/8.2.12 configured -- resuming normal operations
[Sat Dec 02 13:48:53.498178 2023] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'

Logs der db:

2023-12-02 12:48:50+00:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:11.2.2+maria~ubu2204 started.
2023-12-02 12:48:51+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2023-12-02 12:48:51+00:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:11.2.2+maria~ubu2204 started.
2023-12-02 12:48:51+00:00 [Note] [Entrypoint]: Initializing database files

PLEASE REMEMBER TO SET A PASSWORD FOR THE MariaDB root USER !
To do so, start the server, then issue the following command:

'/usr/bin/mariadb-secure-installation'

which will also give you the option of removing the test
databases and anonymous user created by default.  This is
strongly recommended for production servers.

See the MariaDB Knowledgebase at https://mariadb.com/kb

Please report any problems at https://mariadb.org/jira

The latest information about MariaDB is available at https://mariadb.org/.

Consider joining MariaDB's strong and vibrant community:
https://mariadb.org/get-involved/

2023-12-02 12:49:34+00:00 [Note] [Entrypoint]: Database files initialized
2023-12-02 12:49:34+00:00 [Note] [Entrypoint]: Starting temporary server
2023-12-02 12:49:34+00:00 [Note] [Entrypoint]: Waiting for server startup
2023-12-02 12:49:34 0 [Note] Starting MariaDB 11.2.2-MariaDB-1:11.2.2+maria~ubu2204 source revision 929532a9426d085111c24c63de9c23cc54382259 as process 106
2023-12-02 12:49:34 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
2023-12-02 12:49:34 0 [Note] InnoDB: Number of transaction pools: 1
2023-12-02 12:49:34 0 [Note] InnoDB: Using crc32 + pclmulqdq instructions
2023-12-02 12:49:34 0 [Note] mariadbd: O_TMPFILE is not supported on /tmp (disabling future attempts)
2023-12-02 12:49:34 0 [Note] InnoDB: Using liburing
2023-12-02 12:49:34 0 [Note] InnoDB: Initializing buffer pool, total size = 128.000MiB, chunk size = 2.000MiB
2023-12-02 12:49:34 0 [Note] InnoDB: Completed initialization of buffer pool
2023-12-02 12:49:34 0 [Note] InnoDB: File system buffers for log disabled (block size=512 bytes)
2023-12-02 12:49:34 0 [Note] InnoDB: End of log at LSN=47645
2023-12-02 12:49:34 0 [Note] InnoDB: Opened 3 undo tablespaces
2023-12-02 12:49:34 0 [Note] InnoDB: 128 rollback segments in 3 undo tablespaces are active.
2023-12-02 12:49:34 0 [Note] InnoDB: Setting file './ibtmp1' size to 12.000MiB. Physically writing the file full; Please wait ...
2023-12-02 12:49:34 0 [Note] InnoDB: File './ibtmp1' size is now 12.000MiB.
2023-12-02 12:49:34 0 [Note] InnoDB: log sequence number 47645; transaction id 14
2023-12-02 12:49:34 0 [Note] Plugin 'FEEDBACK' is disabled.
2023-12-02 12:49:34 0 [Note] Plugin 'wsrep-provider' is disabled.
2023-12-02 12:49:35 0 [Warning] 'user' entry 'root@2adef5bcbc6b' ignored in --skip-name-resolve mode.
2023-12-02 12:49:35 0 [Warning] 'proxies_priv' entry '@% root@2adef5bcbc6b' ignored in --skip-name-resolve mode.
2023-12-02 12:49:35 0 [Note] mariadbd: Event Scheduler: Loaded 0 events
2023-12-02 12:49:35 0 [Note] mariadbd: ready for connections.
Version: '11.2.2-MariaDB-1:11.2.2+maria~ubu2204'  socket: '/run/mysqld/mysqld.sock'  port: 0  mariadb.org binary distribution
2023-12-02 12:49:35+00:00 [Note] [Entrypoint]: Temporary server started.
2023-12-02 12:49:42+00:00 [Note] [Entrypoint]: Creating database antragsgruen
2023-12-02 12:49:42+00:00 [Note] [Entrypoint]: Securing system users (equivalent to running mysql_secure_installation)

2023-12-02 12:49:43+00:00 [Note] [Entrypoint]: Stopping temporary server
2023-12-02 12:49:43 0 [Note] mariadbd (initiated by: unknown): Normal shutdown
2023-12-02 12:49:43 0 [Note] InnoDB: FTS optimize thread exiting.
2023-12-02 12:49:43 0 [Note] InnoDB: Starting shutdown...
2023-12-02 12:49:43 0 [Note] InnoDB: Dumping buffer pool(s) to /var/lib/mysql/ib_buffer_pool
2023-12-02 12:49:43 0 [Note] InnoDB: Buffer pool(s) dump completed at 231202 12:49:43
2023-12-02 12:49:43 0 [Note] InnoDB: Removed temporary tablespace data file: "./ibtmp1"
2023-12-02 12:49:43 0 [Note] InnoDB: Shutdown completed; log sequence number 47645; transaction id 15
2023-12-02 12:49:44 0 [Note] mariadbd: Shutdown complete

2023-12-02 12:49:44+00:00 [Note] [Entrypoint]: Temporary server stopped

2023-12-02 12:49:44+00:00 [Note] [Entrypoint]: MariaDB init process done. Ready for start up.

2023-12-02 12:49:44 0 [Note] Starting MariaDB 11.2.2-MariaDB-1:11.2.2+maria~ubu2204 source revision 929532a9426d085111c24c63de9c23cc54382259 as process 1
2023-12-02 12:49:44 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
2023-12-02 12:49:44 0 [Note] InnoDB: Number of transaction pools: 1
2023-12-02 12:49:44 0 [Note] InnoDB: Using crc32 + pclmulqdq instructions
2023-12-02 12:49:44 0 [Note] mariadbd: O_TMPFILE is not supported on /tmp (disabling future attempts)
2023-12-02 12:49:44 0 [Note] InnoDB: Using liburing
2023-12-02 12:49:44 0 [Note] InnoDB: Initializing buffer pool, total size = 128.000MiB, chunk size = 2.000MiB
2023-12-02 12:49:44 0 [Note] InnoDB: Completed initialization of buffer pool
2023-12-02 12:49:44 0 [Note] InnoDB: File system buffers for log disabled (block size=512 bytes)
2023-12-02 12:49:44 0 [Note] InnoDB: End of log at LSN=47645
2023-12-02 12:49:44 0 [Note] InnoDB: Opened 3 undo tablespaces
2023-12-02 12:49:44 0 [Note] InnoDB: 128 rollback segments in 3 undo tablespaces are active.
2023-12-02 12:49:44 0 [Note] InnoDB: Setting file './ibtmp1' size to 12.000MiB. Physically writing the file full; Please wait ...
2023-12-02 12:49:44 0 [Note] InnoDB: File './ibtmp1' size is now 12.000MiB.
2023-12-02 12:49:44 0 [Note] InnoDB: log sequence number 47645; transaction id 14
2023-12-02 12:49:44 0 [Note] Plugin 'FEEDBACK' is disabled.
2023-12-02 12:49:44 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
2023-12-02 12:49:44 0 [Note] Plugin 'wsrep-provider' is disabled.
2023-12-02 12:49:44 0 [Note] InnoDB: Buffer pool(s) load completed at 231202 12:49:44
2023-12-02 12:49:44 0 [Note] Server socket created on IP: '0.0.0.0'.
2023-12-02 12:49:44 0 [Note] Server socket created on IP: '::'.
2023-12-02 12:49:44 0 [Note] mariadbd: Event Scheduler: Loaded 0 events
2023-12-02 12:49:44 0 [Note] mariadbd: ready for connections.
Version: '11.2.2-MariaDB-1:11.2.2+maria~ubu2204'  socket: '/run/mysqld/mysqld.sock'  port: 3306  mariadb.org binary distribution

Interessanterweise konnte ich in der files/install.sh auch keinen Hinweis darauf finden, dass npm (bzw. node) installiert wird. Also nehme ich an, dass darauf vertraut wurde, dass mit dem Base-Image devopsansiblede/apache bereits node installiert ist (siehe commit https://github.com/jugendpresse/docker-antragsgruen/commit/4aee990d08dbdde9472f46eec9a04223a1a4ef69). Da ich aber nach einer kurzen Recherche keine Dokumentationen oder sonstige Referenzen (geschweige Dockerfile) finden konnte zu dem Base-Image, bin ich hier etwas ratlos...

Yasamato commented 11 months ago

Okay, man darf nicht /var/www/html mounten, das funktioniert nicht (leerer Ordner, keine Checks auf leer -> copy rein). Am Besten nur die /var/www/html/config/config.json.

Folgende Fehlermeldung besteht trotzdem:

sudo: npm: command not found
sudo: npm: command not found
Yasamato commented 11 months ago

Zum reproduzieren:

Einmal docker compose up ohne Mount und konfigurieren auf der Weboberfläche:

version: '3'

services:
  database:
    image: mariadb
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ${DATABASE_ROOT_PASSWORD}
      MYSQL_DATABASE: antragsgruen
    volumes:
      - /mnt/appdata/antragsgruen/db_config:/etc/mysql/conf.d/
      - /mnt/appdata/antragsgruen/db_data:/var/lib/mysql
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

  antragsgruen:
    image: jugendpresse/docker-antragsgruen
    restart: always
    ports:
      - 8280:80
    environment:
      - TIMEZONE="Europe/Berlin"
      - SMTP_HOST=smtp.strato.de
      - SMTP_PORT=465
      - SMTP_FROM=${MAIL_USER}
      - SMTP_USER=${MAIL_USER}
      - SMTP_PASS=${MAIL_PASSWORD}
      - APACHE_FQDN=${FQDN}

Dann sich die generierte Config herauskopieren (z.B.) via:

cat /var/www/html/config/config.json

anzeigen lassen dann CTRL+C und CTRL+V.

Danach docker compose up mit Mount der Konfigurationsdatei:

version: '3'

services:
  database:
    image: mariadb
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: ${DATABASE_ROOT_PASSWORD}
      MYSQL_DATABASE: antragsgruen
    volumes:
      - /mnt/appdata/antragsgruen/db_config:/etc/mysql/conf.d/
      - /mnt/appdata/antragsgruen/db_data:/var/lib/mysql
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

  antragsgruen:
    image: jugendpresse/docker-antragsgruen
    restart: always
    ports:
      - 8280:80
    environment:
      - TIMEZONE="Europe/Berlin"
      - SMTP_HOST=smtp.strato.de
      - SMTP_PORT=465
      - SMTP_FROM=${MAIL_USER}
      - SMTP_USER=${MAIL_USER}
      - SMTP_PASS=${MAIL_PASSWORD}
      - APACHE_FQDN=${FQDN}
    volumes:
      - /mnt/appdata/antragsgruen/config.json:/var/www/html/config/config.json
Yasamato commented 11 months ago

Btw. bei mir haben die environment variablen:

      - SMTP_HOST=smtp.strato.de
      - SMTP_PORT=465
      - SMTP_FROM=${MAIL_USER}
      - SMTP_USER=${MAIL_USER}
      - SMTP_PASS=${MAIL_PASSWORD}

Keinen Einfluss auf die Generierung der Konfiguration...

macwinnie commented 9 months ago

Hi @Yasamato,

sorry für die verzögerte Antwort.

Okay, man darf nicht /var/www/html mounten, das funktioniert nicht (leerer Ordner, keine Checks auf leer -> copy rein). Am Besten nur die /var/www/html/config/config.json.

Ein Mount, also das Einbinden eines Docker- / Container-Volumes, auf dem Pfad /var/www/html funktioniert – ein (Host-)Bind, also das verbinden eines Pfades auf dem Docker- / Container-Host mit dem Pfad im Container nicht. Das liegt daran, dass die Container-Frameworks das initiale Kopieren von Daten in ein Volume unterstützen, in den Host-Bind aber nicht.

Auch verhindert so ein Mount die Update-Fähigkeit über das einfache austauschen des Containers, was ja eigentlich einer der Grundgedanken der ganzen Containerisierung ist: wenn das Update fällig ist, wirft man die alte Installation weg und hat einfach und ohne große Anpassungen durch das neue Container-Image das Update ausgerollt.

Folgende Fehlermeldung besteht trotzdem:

sudo: npm: command not found
sudo: npm: command not found

Im Basis-Container hatte sich ein Versionsproblem eingeschlichen – und nodejs und npm wurden in inkompatiblen Versionen installiert. Das ist seit ein paar Wochen behoben.

Btw. bei mir haben die environment variablen:

      - SMTP_HOST=smtp.strato.de
      - SMTP_PORT=465
      - SMTP_FROM=${MAIL_USER}
      - SMTP_USER=${MAIL_USER}
      - SMTP_PASS=${MAIL_PASSWORD}

Keinen Einfluss auf die Generierung der Konfiguration...

Die SMTP-Konfiguration findet nicht innerhalb der Antragsgrün-Konfiguration statt. Das Image hat msmtp integriert, so dass hier ein einfacher SMTP-Dienst „systemweit“ konfiguriert ist, der über die ganz normale sendmail Funktionalität auch auf PHP und Co greift.

Ich hoffe, deine Fragen sind damit so weit beantwortet =) Viele Grüße macwinnie