aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRob Thomas <xrobau@gmail.com>2018-03-16 04:37:08 +0000
committerRob Thomas <xrobau@gmail.com>2018-03-16 04:37:08 +0000
commit2f182ba55ceffb2f8062873c1a973e0796dc1f9a (patch)
tree34df442f9639faac77071e197e2786b95602d62b
parent7128b94377cb5ebd605657a4cdd9cd29025b895e (diff)
downloadstikked-fit-2f182ba55ceffb2f8062873c1a973e0796dc1f9a.tar.gz
stikked-fit-2f182ba55ceffb2f8062873c1a973e0796dc1f9a.tar.bz2
stikked-fit-2f182ba55ceffb2f8062873c1a973e0796dc1f9a.zip
Rewrite docker setup
This now allows ANY Stikked configuration variable to be overridden by environment variables.
-rw-r--r--.dockerignore1
-rw-r--r--Dockerfile23
-rw-r--r--docker-compose.yml11
-rw-r--r--docker/docker-php-entrypoint66
-rw-r--r--docker/replace-envvars.sh7
-rw-r--r--docker/stikked-envvars.txt33
6 files changed, 111 insertions, 30 deletions
diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000..c1c9f4d
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1 @@
+.git*
diff --git a/Dockerfile b/Dockerfile
index 781a08a..8a3acea 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,10 +1,23 @@
-FROM php:7.0-apache
+FROM php:7.1-apache
+
+EXPOSE 80
+
+# Note that 'vim' and 'mysql-client' are changed to an echo,
+# as they're only useful when debugging, and leaving them in
+# the standard container only increases its size.
+RUN apt-get -y update && \
+ apt-get -y install libpng-dev zlib1g-dev cron && \
+ echo apt-get -y install vim mysql-client && \
+ a2enmod rewrite && \
+ docker-php-ext-install mysqli gd && \
+ rm -rf /var/lib/apt/lists/*
+
COPY htdocs /var/www/html
COPY htdocs/application/config/stikked.php.dist /var/www/html/application/config/stikked.php
-COPY docker/replace-envvars.sh /bin/
+
+# This overwrites the entrypoint from the php container with ours, which updates the
+# stikked config file based on environment variables
COPY docker/docker-php-entrypoint /usr/local/bin/
+
RUN chmod +x /usr/local/bin/docker-php-entrypoint
-EXPOSE 80
-RUN a2enmod rewrite
-RUN docker-php-ext-install mysqli
diff --git a/docker-compose.yml b/docker-compose.yml
index a2eec94..2c48307 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -1,15 +1,12 @@
-version: '3'
+version: '2'
services:
db:
image: mysql:latest
volumes:
- db_data:/var/lib/mysql
- environment:
- MYSQL_RANDOM_ROOT_PASSWORD: 1
- MYSQL_DATABASE: stikked
- MYSQL_USER: stikked
- MYSQL_PASSWORD: stikked
+ env_file:
+ docker/stikked-envvars.txt
stikked:
depends_on:
@@ -18,7 +15,7 @@ services:
env_file:
docker/stikked-envvars.txt
ports:
- - 80:80
+ - 8070:80
volumes:
db_data:
diff --git a/docker/docker-php-entrypoint b/docker/docker-php-entrypoint
index f291fe4..24b6327 100644
--- a/docker/docker-php-entrypoint
+++ b/docker/docker-php-entrypoint
@@ -1,12 +1,70 @@
-#!/bin/sh
+#!/bin/bash
+
+# This is copied from the original docker-php-entrypoint and was updated
+# by the Stikkit container
+
set -e
-# custom script to overwrite stikked config variables
-bash /bin/replace-envvars.sh
+# Check to see where Stikkit might be - If you added Stikkit to this
+# container with something like:
+# ADD https://github.com/claudehohl/Stikked/archive/0.12.0.tar.gz /usr/local
+# then it will be in /usr/local/stikked/Stikked-0.12.0/htdocs/application/config/stikked.php.dist
+
+# If you're using the standard Dockerfile from Stikkit, it will be in
+# /var/www/html/htdocs/applcation/config/stikked.php.dist
+
+if [ -e /var/www/html/application/config/stikked.php.dist ]; then
+ CFG=/var/www/html/application/config/stikked.php
+ cp /var/www/html/application/config/stikked.php.dist $CFG
+elif [ -e /usr/local/stikked/Stikked-*/htdocs/application/config/stikked.php.dist ]; then
+ CFG=$(echo /usr/local/stikked/Stikked-*/htdocs/application/config/stikked.php.dist | sed 's/\.dist//')
+ cp /usr/local/stikked/Stikked-*/htdocs/application/config/stikked.php.dist $CFG
+else
+ echo I can not find the stikked.php.dist file, which means docker-php-entrypoint
+ echo needs to be updated. Sorry. I can not continue. Exiting.
+ exit -1
+fi
+
+# Set some default variables
+STIKKIT_SITE_NAME="${STIKKIT_SITE_NAME:-Dockerised Stikkit Container}"
+STIKKIT_BASE_URL="${STIKKIT_BASE_URL:-https://bogus.example.com/}"
+STIKKIT_DB_HOSTNAME="${STIKKIT_DB_HOSTNAME:-db}"
+
+# If these aren't set, use MYSQL_ values. If they're not set, then
+# just guess.
+STIKKIT_DB_DATABASE="${STIKKIT_DB_DATABASE:-${MYSQL_DATABASE:-stikked}}"
+STIKKIT_DB_USERNAME="${STIKKIT_DB_USERNAME:-${MYSQL_USER:-stikked}}"
+STIKKIT_DB_PASS="${STIKKIT_DB_PASSWORD:-${MYSQL_PASSWORD:-stikked}}"
+
+# If there's not a cron key, set a random one.
+if [ ! "$STIKKIT_CRON_KEY" ]; then
+ # Note - this is not very random. But it'll do in a pinch.
+ STIKKIT_CRON_KEY=$RANDOM.$RANDOM.$RANDOM.$RANDOM
+fi
+
+# Put the cron file in place
+echo "*/5 * * * * root curl --silent http://localhost/cron/$STIKKIT_CRON_KEY" > /etc/cron.d/stikkit
+
+# This gets all environment variables that start with STIKKIT_
+svars=$(set | grep \^STIKKIT_ | cut -d= -f1)
+for svar in $svars; do
+ # Remove STIKKIT_ from the front, and convert it to lower
+ # case (STIKKIT_CRON_KEY is now cron_key)
+ val=$(echo $svar | sed 's/STIKKIT_\(.*\)/\L\1/')
+ # if it has a /, escape it - for example, in a path or URL.
+ FIXED=$(echo ${!svar} | sed 's_/_\\/_g')
+ # Tell the user what's going on
+ echo Setting $val to be $FIXED
+ # And actually update the file
+ sed -i "s/\['$val'\].*/['$val'] = '$FIXED';/" $CFG
+done
+
+# Start Cron, if it exists
+[ -e /usr/sbin/cron ] && /usr/sbin/cron
# first arg is `-f` or `--some-option`
if [ "${1#-}" != "$1" ]; then
- set -- php "$@"
+ set -- apache2-foreground "$@"
fi
exec "$@"
diff --git a/docker/replace-envvars.sh b/docker/replace-envvars.sh
deleted file mode 100644
index edf28b4..0000000
--- a/docker/replace-envvars.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-sed -i "s/\['site_name'\].*/['site_name'] = '$SITENAME';/" /var/www/html/application/config/stikked.php
-sed -i "s/\['base_url'\].*/['base_url'] = '$BASEURL';/" /var/www/html/application/config/stikked.php
-sed -i "s/\['db_hostname'\].*/['db_hostname'] = '$DBHOST';/" /var/www/html/application/config/stikked.php
-sed -i "s/\['db_database'\].*/['db_database'] = '$DBNAME';/" /var/www/html/application/config/stikked.php
-sed -i "s/\['db_username'\].*/['db_username'] = '$DBUSER';/" /var/www/html/application/config/stikked.php
-sed -i "s/\['db_password'\].*/['db_password'] = '$DBPASS';/" /var/www/html/application/config/stikked.php
-sed -i "s/\['enable_captcha'\].*/['enable_captcha'] = '$CAPTHCA';/" /var/www/html/application/config/stikked.php
diff --git a/docker/stikked-envvars.txt b/docker/stikked-envvars.txt
index 574d65e..2f9ab3a 100644
--- a/docker/stikked-envvars.txt
+++ b/docker/stikked-envvars.txt
@@ -1,7 +1,26 @@
-SITENAME=Stikked
-BASEURL=http:\/\/stikked.local\/
-DBHOST=db
-DBNAME=stikked
-DBUSER=stikked
-DBPASS=stikked
-CAPTCHA=false
+MYSQL_ROOT_PASSWORD=thisREALLYshouldBEchanged
+MYSQL_DATABASE=stikked
+MYSQL_USER=stikked
+MYSQL_PASSWORD=stikked
+
+STIKKED_SITE_NAME=Stikked
+STIKKED_BASE_URL=http:\/\/stikked.local\/
+
+# This should match the database container name
+STIKKIT_DB_HOSTNAME=db
+
+# These do NOT need to be set, as they will be inherited from
+# the MYSQL_DATABASE settings above. However, you can set them
+# if you are using a seperately managed database.
+#STIKKIT_DB_DATABASE=stikked
+#STIKKIT_DB_USERNAME=stikked
+#STIKKIT_DB_PASS=stikked
+
+# Other random examples
+STIKKIT_DISALLOW_SEARCH_ENGINES="true"
+STIKKIT_JS_EDITOR="codemirror"
+
+# Example of enabling CAPTCHA
+#STIKKIT_ENABLE_CAPTCHA="true"
+#STIKKIT_RECAPTCHA_PUBLICKEY="_replace_this_with_your_public_key_"
+#STIKKIT_RECAPTCHA_PRIVATEKEY="_replace_this_with_your_private_key_"

© 2014-2024 Faster IT GmbH | imprint | privacy policy