From e03320d27beca1f778696353ece3a47c44e6a2e1 Mon Sep 17 00:00:00 2001 From: LU-386 <85061979+LU-386@users.noreply.github.com> Date: Wed, 16 Mar 2022 13:59:21 +0100 Subject: [PATCH] simplified deployment with docker (#639) * updated Dockerfile and docker-compose.yml, replaced cron with ofelia and setup.sh with automatically executed startup.sh * fixed permissions by setting them in setup-script --- Dockerfile | 28 +++++++++++------------- docker-compose.yml | 39 ++++++++++++++++------------------ docker-compose/cron.dockerfile | 10 --------- docker-compose/crontab | 1 - docker-compose/setup.sh | 6 ------ docker-compose/startup.sh | 16 ++++++++++++++ 6 files changed, 46 insertions(+), 54 deletions(-) mode change 100644 => 100755 Dockerfile delete mode 100644 docker-compose/cron.dockerfile delete mode 100644 docker-compose/crontab delete mode 100755 docker-compose/setup.sh create mode 100755 docker-compose/startup.sh diff --git a/Dockerfile b/Dockerfile old mode 100644 new mode 100755 index a073e2e2..9594930d --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,9 @@ FROM php:7.4-fpm -# Arguments defined in docker-compose.yml -ARG user -ARG uid + +WORKDIR /var/www + +COPY ./docker-compose/php/uploads.ini /usr/local/etc/php/conf.d/uploads.ini # Install system dependencies RUN apt-get update && apt-get install -y \ @@ -15,26 +16,21 @@ RUN apt-get update && apt-get install -y \ unzip \ libzip-dev \ libmagickwand-dev \ - mariadb-client - -# Clear cache -RUN apt-get clean && rm -rf /var/lib/apt/lists/* + mariadb-client \ + && apt-get clean && rm -rf /var/lib/apt/lists/* RUN pecl install imagick \ && docker-php-ext-enable imagick # Install PHP extensions -RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl bcmath gd +RUN rmdir html && docker-php-ext-install pdo_mysql mbstring zip exif pcntl bcmath gd -# Get latest Composer COPY --from=composer:latest /usr/bin/composer /usr/bin/composer -# Create system user to run Composer and Artisan Commands -RUN useradd -G www-data,root -u $uid -d /home/$user $user -RUN mkdir -p /home/$user/.composer && \ - chown -R $user:$user /home/$user +RUN useradd -G www-data,root -u 1000 -d /home/crater crater && chmod 777 /var/www/ && chown 1000:1000 /var/www/ +USER 0 -# Set working directory -WORKDIR /var/www -USER $user +COPY ./docker-compose/startup.sh /startup.sh + +CMD ["/startup.sh"] diff --git a/docker-compose.yml b/docker-compose.yml index 0c7cdc20..6db8497e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,25 +1,22 @@ version: '3' - services: + app: - build: - args: - user: crater-user - uid: 1000 - context: ./ - dockerfile: Dockerfile - image: crater-php + build: . + image: craterapp/crater restart: unless-stopped - working_dir: /var/www/ volumes: - - ./:/var/www - - ./docker-compose/php/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini:rw,delegated + - ./:/var/www:z + labels: + ofelia.enabled: "true" + ofelia.job-exec.somecron.schedule: "@every 60s" + ofelia.job-exec.somecron.command: "php artisan schedule:run" networks: - crater db: image: mariadb - restart: always + restart: unless-stopped volumes: - db:/var/lib/mysql # If you want to persist data on the host, comment the line above this one... @@ -41,19 +38,19 @@ services: ports: - 80:80 volumes: - - ./:/var/www - - ./docker-compose/nginx:/etc/nginx/conf.d/ + - ./:/var/www:z + - ./docker-compose/nginx/nginx.conf:/etc/nginx/conf.d/default.conf networks: - crater - cron: - build: - context: ./ - dockerfile: ./docker-compose/cron.dockerfile + ofelia: + image: mcuadros/ofelia + restart: unless-stopped + command: daemon --docker volumes: - - ./:/var/www - networks: - - crater + - /var/run/docker.sock:/var/run/docker.sock:ro + depends_on: + - app volumes: db: diff --git a/docker-compose/cron.dockerfile b/docker-compose/cron.dockerfile deleted file mode 100644 index bf5d4692..00000000 --- a/docker-compose/cron.dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM php:7.4-fpm-alpine - -RUN apk add --no-cache \ - php7-bcmath - -RUN docker-php-ext-install pdo pdo_mysql bcmath - -COPY docker-compose/crontab /etc/crontabs/root - -CMD ["crond", "-f"] diff --git a/docker-compose/crontab b/docker-compose/crontab deleted file mode 100644 index 777a48eb..00000000 --- a/docker-compose/crontab +++ /dev/null @@ -1 +0,0 @@ -* * * * * cd /var/www && php artisan schedule:run >> /dev/stdout 2>&1 diff --git a/docker-compose/setup.sh b/docker-compose/setup.sh deleted file mode 100755 index a7ce3137..00000000 --- a/docker-compose/setup.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -docker-compose exec app composer install --no-interaction --prefer-dist --optimize-autoloader - -docker-compose exec app php artisan storage:link || true -docker-compose exec app php artisan key:generate diff --git a/docker-compose/startup.sh b/docker-compose/startup.sh new file mode 100755 index 00000000..4ac33926 --- /dev/null +++ b/docker-compose/startup.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +chmod 775 /var/www/ -R +chown 1000:33 /var/www -R + +if [ ! -f ".env" ]; then + cp .env.example .env + echo "created .env from .env.example" +fi + +composer install --no-interaction --prefer-dist --optimize-autoloader + +php artisan storage:link || true +php artisan key:generate + +php-fpm