Permalink
Browse files

Rewrite docker setup

This now allows ANY Stikked configuration variable to be overridden
by environment variables.
  • Loading branch information...
xrobau committed Mar 16, 2018
1 parent 7128b94 commit 2f182ba55ceffb2f8062873c1a973e0796dc1f9a
Showing with 111 additions and 30 deletions.
  1. +1 −0 .dockerignore
  2. +18 −5 Dockerfile
  3. +4 −7 docker-compose.yml
  4. +62 −4 docker/docker-php-entrypoint
  5. +0 −7 docker/replace-envvars.sh
  6. +26 −7 docker/stikked-envvars.txt
View
@@ -0,0 +1 @@
.git*
View
@@ -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
View
@@ -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:
@@ -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 "$@"

This file was deleted.

Oops, something went wrong.
View
@@ -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_"

0 comments on commit 2f182ba

Please sign in to comment.