From 243c4c2982552c85d0b60aa98732e1f361e6a3af Mon Sep 17 00:00:00 2001
From: Thibault Debatty <t.debatty@cylab.be>
Date: Sun, 13 Aug 2023 20:49:14 +0200
Subject: [PATCH] build docker image

---
 .gitlab-ci.yml     | 18 ++++++++++++++++++
 Dockerfile         | 42 ++++++++++++++++++++++++++++++++++++++++++
 docker/env.default | 36 ++++++++++++++++++++++++++++++++++++
 docker/logs.conf   |  5 +++++
 4 files changed, 101 insertions(+)
 create mode 100644 Dockerfile
 create mode 100644 docker/env.default
 create mode 100644 docker/logs.conf

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c1e780a..d216fd6 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -43,3 +43,21 @@ test:gitleaks:
     - git config --global --add safe.directory $CI_PROJECT_DIR
     - gitleaks detect -v -c gitleaks.toml ./
     
+build:
+  stage: test
+  ## Run on a gitlab-runner that is configured with docker-in-docker
+  tags:
+    - dind
+  image: docker:20.10.16
+  services:
+    - docker:20.10.16-dind
+  variables:
+    DOCKER_TLS_CERTDIR: "/certs"
+  before_script:
+    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
+  script:
+    - docker pull $CI_REGISTRY_IMAGE:latest || true
+    - docker build --cache-from $CI_REGISTRY_IMAGE:latest --tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA --tag $CI_REGISTRY_IMAGE:latest .
+    - docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
+    - docker push $CI_REGISTRY_IMAGE:latest
+
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000..f9db645
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,42 @@
+#
+# monitoring
+# Dockerfile used to build the production container
+#
+
+#### Step 1 : composer
+
+FROM cylab/php74 AS composer
+
+COPY . /var/www/html
+WORKDIR /var/www/html
+RUN composer install --no-dev --optimize-autoloader
+
+#### Step 2 : node
+
+FROM node:16.15.0-alpine AS node
+
+COPY . /var/www/html
+WORKDIR /var/www/html
+RUN npm --version && npm install && npm run prod
+
+#### Step 3 : the actual docker image
+
+FROM cylab/laravel74
+
+# Custom logs : request time, laravel session
+COPY ./docker/logs.conf /etc/apache2/conf-available/logs.conf
+RUN a2enconf logs
+
+# Increase upload limit
+RUN sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 20M/g' /usr/local/etc/php/php.ini && \
+    sed -i 's/post_max_size = 8M/post_max_size = 20M/g' /usr/local/etc/php/php.ini
+
+COPY . /var/www/html
+COPY ./docker/env.default /var/www/html/.env
+
+COPY --from=composer /var/www/html/vendor /var/www/html/vendor
+
+COPY --from=node /var/www/html/public/css /var/www/html/public/css
+COPY --from=node /var/www/html/public/js /var/www/html/public/js
+COPY --from=node /var/www/html/public/fonts /var/www/html/public/fonts
+
diff --git a/docker/env.default b/docker/env.default
new file mode 100644
index 0000000..3021541
--- /dev/null
+++ b/docker/env.default
@@ -0,0 +1,36 @@
+#
+# monitor/docker/env.default
+# provide some default values for the monitor docker container
+#
+
+APP_NAME=Monitor
+APP_ENV=prod
+APP_KEY=base64:oeFm60LGCyfXgd2MmUs/OVX3n4tJb6DG/BG2SS4DFdo=
+APP_DEBUG=false
+APP_URL=https://monitor.web-d.be
+
+LOG_CHANNEL=stack
+
+DB_CONNECTION=mysql
+DB_HOST=mysql
+DB_PORT=3306
+DB_DATABASE=laravel
+DB_USERNAME=root
+DB_PASSWORD=root
+
+MAIL_DRIVER=smtp
+MAIL_HOST=mail
+MAIL_PORT=
+MAIL_USERNAME=
+MAIL_PASSWORD=
+MAIL_ENCRYPTION=tls
+
+BROADCAST_DRIVER=log
+CACHE_DRIVER=redis
+QUEUE_driver=redis
+SESSION_DRIVER=redis
+
+REDIS_HOST=redis
+REDIS_PASSWORD=null
+REDIS_PORT=6379
+
diff --git a/docker/logs.conf b/docker/logs.conf
new file mode 100644
index 0000000..7e8527b
--- /dev/null
+++ b/docker/logs.conf
@@ -0,0 +1,5 @@
+#
+# https://cylab.be/blog/244/custom-apache-logs
+#
+
+LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\" %D %{laravel_session}C" combined
-- 
GitLab