(0)
Artikel
bewerten
(100% positiv)
(1)

Dockerfile - Laravel

Laravel eigenes Docker File

Inhalt dieses Artikels:

    Nachdem die meisten Laravel-Docker-Container entweder mittels des php-eigenen Webserver betrieben werden und Laradock nicht so ganz zu meiner Nextcloud-Docker 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.2-fpm


    # Set working directory
    WORKDIR /var/www

    # Install dependencies
    RUN apt-get update && apt-get install -y \
    build-essential \
    mysql-client \
    libpng-dev \
    libjpeg62-turbo-dev \
    libfreetype6-dev \
    locales \
    zip \
    jpegoptim optipng pngquant gifsicle \
    vim \
    unzip \
    git \
    curl \
    gnupg \
    python

    # Clear cache
    RUN apt-get clean && rm -rf /var/lib/apt/lists/*

    # Install extensions
    RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl
    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

    # Add user for laravel application
    RUN groupadd -g 1000 www
    RUN useradd -u 1000 -ms /bin/bash -g www www

    #ADD laravel/nginx.conf /etc/nginx/conf.d/default.conf

    # 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;
    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

     

    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

    letzte Änderung dieses Artikels: 14.03.2019 20:52



    Feedback: