Dockerfile - Laravel

 

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.

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

# config file for nginx webserver to work with NextCloud app.

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/www
process_name=%(program_name)s_%(process_num)02d
command=npm run watch
autostart=true
autorestart=true
user=root
numprocs=1
redirect_stderr=true
stdout_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

positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE für deine Bewertung!


veröffentlicht am 14.03.2019 von Bernhard
geändert am 11.01.2020 von Bernhard



Kommentare


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