Laravel in Docker betreiben: eigenes Dockerfile erstellen


Nachdem die meisten Laravel-Docker-Container entweder mittels des php-eigenen Webserver betrieben werden und Laradock nicht so ganz zu meiner Nextcloud-Docker-Umgebung passte, hab ich mir den Applikationscontainer selbst gebaut. Mit ein Grund war die Anforderung python in das Paket zu integrieren.

Docker Basics

Docker ermöglicht es, Applikationen per Befehl in einem sogenannten Container zu starten.
Ein Container ist eine vom Betriebssystem (OS) unabhängige isolierte Umgebung:
Das OS spielt also keine Rolle, vorausgesetzt Docker lässt sich installieren.
Beim ersten Start eines Containers, lädt Docker selbstständig alle notwendigen Quellen
aus dem Internet.
Docker kann unter Windows, macOS oder einer Linux-Distribution installiert werden,
siehe auch: Docker

Beispiel Webserver:

sudo gedit ./docker/laravel/Dockerfile

FROM php:7.4-fpm
# Set working directory
WORKDIR /var/www
# Install dependencies
RUN apt-get update && apt-get install -y \
    build-essential \
    mariadb-client \
    libpng-dev \
    libjpeg62-turbo-dev \
    libfreetype6-dev \
    locales \
    zip \
    jpegoptim optipng pngquant gifsicle \
    vim \
    unzip \
    git \
    curl \
    gnupg \
    python \
    supervisor \
    libzip-dev 
# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# Install extensions
RUN docker-php-ext-install pdo_mysql zip exif pcntl bcmath gd
#RUN docker-php-ext-configure gd --with-gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/
#RUN docker-php-ext-install gd
# Install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# NPM
RUN curl -sL https://deb.nodesource.com/setup_11.x  | bash -
RUN apt-get -y install nodejs
RUN npm install
#Supervisor
RUN touch /var/run/supervisor.sock
RUN chmod 777 /var/run/supervisor.sock 
RUN service supervisor start
# Add user for laravel application
RUN groupadd -g 1000 www
RUN useradd -u 1000 -ms /bin/bash -g www www
# Expose port 9000 and start php-fpm server
EXPOSE 9000
CMD ["php-fpm"]
sudo docker build -t laravelapp.dockerfile /docker/laravel

nginx.conf

user www-data;

events {
 worker_connections 2048;
}

http {
 upstream backend {
 server laravelapp:9000;
 }
 include /etc/nginx/mime.types;
 default_type application/octet-stream;

server {
 listen 80;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
 index index.php index.html;
 error_log /var/log/nginx/error.log;
 access_log /var/log/nginx/access.log;
 root /var/www/public;
 location ~ \.php$ {
 try_files $uri =404;
 fastcgi_split_path_info ^(.+\.php)(/.+)$;
 fastcgi_pass laravelapp:9000;
 fastcgi_index index.php;
 include fastcgi_params;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 fastcgi_param PATH_INFO $fastcgi_path_info;
 }
 location /codemirror {
 auth_basic “Codemirror”;
 auth_basic_user_file /var/www/.htpasswd; 
 }

 location / {
 try_files $uri $uri/ /index.php?$query_string;
 gzip_static on;
 }
}
}

in der nginx-Konfig habe ich zusätzlich einen Passwortschutz auf den Ordner /codemirror gesetzt. Das Passwort dafür kann mit folgendem Befehl erzeugt werden: htpasswd -c /var/www/.htpasswd admin

Supervisor NPM File: /docker/laravel/supervisor.conf.d/laravel_npm.conf

[program:laravel-npm]directory=/var/wwwprocess_name=%(program_name)s_%(process_num)02dcommand=npm run watchautostart=trueautorestart=trueuser=rootnumprocs=1redirect_stderr=truestdout_logfile=/var/www/storage/logs/npm.log

Hier die zusätzlichen Container in der docker-compose.yml Datei:

laravelapp: image: laravelapp.dockerfile container_name: laravelapp links: - laraveldb volumes: - ./laravel/www:/var/www depends_on: - "proxy" networks: - proxy-tier restart: always laravelweb: image: nginx container_name: laraveldev_webserver links: - laravelapp volumes_from: - laravelapp volumes: - ./laravel/nginx.conf:/etc/nginx/nginx.conf:ro environment: - VIRTUAL_HOST=laravel.domain.net - VIRTUAL_NETWORK=nginx-proxy - LETSENCRYPT_HOST=laravel.domain.net - LETSENCRYPT_EMAIL=mail@mail.mail networks: - proxy-tier restart: always laraveldb: image: mariadb container_name: laraveldb volumes: - ./laravel/devdb:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=??? - MYSQL_DATABASE=dev - MYSQL_USER=dev - MYSQL_PASSWORD=??? networks: - proxy-tier restart: always phpmyadmin: image: phpmyadmin/phpmyadmin container_name: phpmyadmin links: - laraveldb environment: PMA_HOST: laraveldb ports: - '8081:80' restart: always networks: - proxy-tier

den Inhalt habe ich einfach in das Nextcloud-Docker-File hinzugefügt, somit wird zusätzlich zur Nextcloud-Seite auch ein Zertifikat für Laravel ausgestellt, mittels phpmyadmin kann ich mich aus dem internen LAN auf die Datenbank verbinden.

Hier die Basis-Konfig:  Docker Nextcloud ssl - letsencrypt https 

in den Container verbinden:

sudo docker exec -u 0 -i -t laravelapp /bin/bash

 

TaskScheduler vom Host:

* * * * * * docker exec -i laravelapp php /var/www/artisan schedule:run >> /dev/null 2>&1

Composer Memory Limit

im Container:

echo 'memory_limit = 4G' >> /usr/local/etc/php/conf.d/docker-php-memlimit.ini;
positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE für deine Bewertung!


Top-Artikel in diesem Bereich

Preview ioBroker installieren - Docker

ioBroker installieren - Docker

geändert: 12.11.2020 von Bernhard (Erstveröffentlichung: 06.11.2020)

Mit ioBroker können verschiedene Automatisierungslösungen oder Geräte in einem System zusammengefasst werden. Um bestimmte Gateways oder Geräte ansprechen zu können, werden in ioBroker verschiedene Adapter verwendet.  ... weiterlesen

Bitwarden in Docker betreiben - Setup Schritt für Schritt

Bitwarden in Docker betreiben - Setup Schritt für Schritt

erstellt: 28.02.2022 von Bernhard

Bitwarden ist ein webbasierter Passwort-Manager, ähnlich LastPass, aber Open Source und der Möglichkeit diesen selbst zu betreiben (hosten). Wie sich Bitwarden im Vergleich zu anderen Passwortmanagern einordnet, habe ich auf folgender Seite überlegt: Passwortmanager sicher? KeePass vs. LastPass vs. Bitwarden. ... weiterlesen

Preview Home-Assistant Docker Conbee 2 und Zigbee2MQTT / deCONZ

Home-Assistant Docker Conbee 2 und Zigbee2MQTT / deCONZ

geändert: 09.03.2022 von Bernhard (Erstveröffentlichung: 06.11.2020)

Dank zahlreicher Integrationsmöglichkeiten ist Home-Assistant eine einfache Plattform für das Steuern verschiedenster Smart-Home Geräte. Im Vergleich zu ioBroker ist mir der Start mit Home Assistant wesentlich einfacher gefallen. Während ich für ioBroker noch am Suchen war, welches Frontend ich für meine Dashboards verwenden könnte, hatte ich mit Home-Assistant Out of the box ein fertig eingerichtetes System. Die Lovelance Dashboards von Home Assistant können einfach in der GUI zusammengeklickt... ... weiterlesen


Fragen / Kommentare


Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu Mehr Details