From 0b9157cae06c5e7417113ef1727d06e4a4f6c225 Mon Sep 17 00:00:00 2001 From: bakudan-otaku Date: Fri, 8 Jan 2021 17:41:31 +0100 Subject: [PATCH 1/2] Fix Docker build, compose is in postinstall, so 2 Stage build does not work --- Dockerfile | 106 ++++++++++++++++++++++++++++------------------------- 1 file changed, 57 insertions(+), 49 deletions(-) diff --git a/Dockerfile b/Dockerfile index 83ee8aab..dc0f2ab6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,49 +1,57 @@ -# ------------------- -# Build Stage 1 (npm) -# ------------------- -FROM node:alpine AS appbuild - -RUN apk add --update --no-cache p7zip - -WORKDIR /usr/src/app - -COPY ./package.json ./ -RUN npm install - -COPY . ./ -RUN npm run build:prod -# RUN npm run build - - -# ------------------------ -# Build Stage 2 (composer) -# ------------------------ -FROM composer AS apibuild - -WORKDIR /app - -COPY ./src/api ./ -RUN composer install - - -# -------------------------- -# Build Stage 3 (php-apache) -# This build takes the production build from staging builds -# -------------------------- -FROM php:7.3-apache - -ENV PROJECT /var/www/html - -RUN apt-get update && apt-get install -y sqlite3 php7.3-sqlite -RUN a2enmod rewrite expires -# RUN docker-php-ext-install pdo_mysql - -# RUN pecl install xdebug && docker-php-ext-enable xdebug -# COPY xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini - -WORKDIR $PROJECT -COPY --from=appbuild /usr/src/app/dist ./ -RUN rm -rf ./api/* -COPY --from=apibuild /app ./api/ -RUN chmod 777 ./api -EXPOSE 80 +# ------------------- +# Build Stage 1 (npm) +# ------------------- +FROM node:alpine AS appbuild + +RUN apk add --update --no-cache \ + p7zip \ + python2 \ + build-base \ + curl \ + php7 \ + php7-json \ + php7-phar \ + php7-iconv \ + php7-openssl \ + php7-dom \ + php7-mbstring \ + php7-xml \ + php7-xmlwriter \ + php7-ctype \ + php7-tokenizer + +# Install Composer +RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer + +WORKDIR /usr/src/app + +COPY ./package.json ./ + +COPY . ./ + +RUN npm install + +RUN npm run build:prod +# RUN npm run build + +# -------------------------- +# Build Stage 2 (php-apache) +# This build takes the production build from staging builds +# -------------------------- +FROM php:7.3-apache + +ENV PROJECT /var/www/html + +RUN apt-get update && apt-get install -y sqlite3 php7.3-sqlite +RUN a2enmod rewrite expires +# RUN docker-php-ext-install pdo_mysql + +# RUN pecl install xdebug && docker-php-ext-enable xdebug +# COPY xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini + +WORKDIR $PROJECT +COPY --from=appbuild /usr/src/app/dist ./ +RUN chown 33:33 ./api && \ + mkdir ./api/logs && chown 33:33 ./api/logs + +EXPOSE 80 From 64f6f186014e76e5105ff553423132c091738f2a Mon Sep 17 00:00:00 2001 From: bakudan-otaku Date: Fri, 8 Jan 2021 17:47:16 +0100 Subject: [PATCH 2/2] Moved sqlite db into subfolder to support docker volumes --- Dockerfile | 4 +++- docker-compose.yml | 23 ++++++++++++++--------- src/api/index.php | 2 +- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/Dockerfile b/Dockerfile index dc0f2ab6..d1d6cba3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -51,7 +51,9 @@ RUN a2enmod rewrite expires WORKDIR $PROJECT COPY --from=appbuild /usr/src/app/dist ./ -RUN chown 33:33 ./api && \ +RUN chown 33:33 ./api && chown 33:33 ./api/db && \ mkdir ./api/logs && chown 33:33 ./api/logs EXPOSE 80 + +VOLUME $PROJECT/api/db diff --git a/docker-compose.yml b/docker-compose.yml index cca2b66a..6b1ca649 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,9 +1,14 @@ -version: "3" - -services: - taskboard: - image: "taskboard" - build: - context: . - ports: - - "8081:80" +version: "3" + +services: + taskboard: + image: "taskboard" + build: + context: . + ports: + - "80:80" + volumes: + - database:/var/www/html/api/db + +volumes: + database: diff --git a/src/api/index.php b/src/api/index.php index 51d888e2..17a16dc5 100644 --- a/src/api/index.php +++ b/src/api/index.php @@ -11,7 +11,7 @@ require './vendor/autoload.php'; -R::setup('sqlite:taskboard.sqlite'); +R::setup('sqlite:db/taskboard.sqlite'); $container = new DI\Container(); AppFactory::setContainer($container);