aboutsummaryrefslogtreecommitdiffstats
path: root/docker
diff options
context:
space:
mode:
authorTristan Storch <tstorch@math.uni-bielefeld.de>2014-08-29 18:20:15 +0200
committerTristan Storch <tstorch@math.uni-bielefeld.de>2014-08-31 21:00:19 +0200
commitd1a2228f1cc1b0bec7023d226077e4002c07112a (patch)
tree7eed4c06a198972dd907806bb1df8c3c2f1a45d5 /docker
parent2886eb76b69102f7c2fc7db3516567c677148057 (diff)
downloadgitea-d1a2228f1cc1b0bec7023d226077e4002c07112a.tar.gz
gitea-d1a2228f1cc1b0bec7023d226077e4002c07112a.zip
Docker mix and match setup
Rewrite of the docker setup. Now uses fig to manage containers and container linkage. The base is a block based mix and match, which will give you the possibility to easily test all configurations.
Diffstat (limited to 'docker')
-rw-r--r--docker/README.md89
-rwxr-xr-xdocker/assemble_blocks.sh72
-rw-r--r--docker/blocks/docker_gogs/Dockerfile52
-rw-r--r--docker/blocks/docker_gogs_dev/Dockerfile52
-rw-r--r--docker/blocks/option_cache_memcache/config3
-rw-r--r--docker/blocks/option_cache_memcache/fig2
-rw-r--r--docker/blocks/option_cache_redis/config3
-rw-r--r--docker/blocks/option_cache_redis/fig2
-rw-r--r--docker/blocks/option_db_mysql/config6
-rw-r--r--docker/blocks/option_db_mysql/fig7
-rw-r--r--docker/blocks/option_db_postgresql/config6
-rw-r--r--docker/blocks/option_db_postgresql/fig6
-rw-r--r--docker/blocks/option_session_mysql/config3
-rw-r--r--docker/blocks/option_session_mysql/fig7
-rw-r--r--docker/blocks/w_cache/fig6
-rw-r--r--docker/blocks/w_cache_session/fig7
-rw-r--r--docker/blocks/w_db/fig6
-rw-r--r--docker/blocks/w_db_cache/fig7
-rw-r--r--docker/blocks/w_db_cache_session/fig8
-rw-r--r--docker/blocks/w_db_session/fig7
-rw-r--r--docker/blocks/w_none/fig4
-rw-r--r--docker/blocks/w_session/fig6
-rw-r--r--docker/docker/.gitkeep0
-rw-r--r--docker/templates/init_gogs.sh.tpl12
24 files changed, 373 insertions, 0 deletions
diff --git a/docker/README.md b/docker/README.md
new file mode 100644
index 0000000000..448912009c
--- /dev/null
+++ b/docker/README.md
@@ -0,0 +1,89 @@
+Docker
+======
+
+TOOLS ARE WRITTEN FOR TESTING AND TO SEE WHAT IT IS!
+
+For this to work you will need the nifty docker tool [fig].
+
+The most simple setup will look like this:
+
+```sh
+./assemble_blocks.sh docker_gogs w_db option_db_mysql
+fig up
+
+```
+
+That's it. You have GoGS running in docker linked to a MySQL docker container.
+
+Now visit http://localhost:3000/ and give details for the admin account an you're up and running.
+
+
+How does it work
+----------------
+
+`./assemble_blocks.sh` will look in `blocks` for subdirectories.
+In the subdirectories there are three relevant files: `Dockerfile`, `config` and `fig`.
+
+`Dockerfile` will be copied to `docker/` (also means last `Dockerfile` wins).
+
+The `config` file contains lines which will in the gogs docker container end up in `$GOGS_PATH/custom/config/app.ini` and by this gogs will be configured.
+Here you can define things like the MySQL server for your database block.
+
+The `fig` file will just be added to `fig.yml`, which is used by fig to manage your containers.
+This inculdes container linking!
+
+Just have a look at them and it will be clear how to write your own blocks.
+
+Just some things
+
+ - all files (`Dockerfile`, `fig` and `config`) are optional
+ - the gogs block should always be the first block
+
+Currently the blocks are designed that, the blocks that start with `docker` pull in the base docker image.
+Then one block starting with `w` defines, what containers should be linked to the gogs container.
+For every option in the `w` block you need to add an `option` container.
+
+Example:
+
+```sh
+./assemble_blocks.sh docker_gogs w_db_cache option_db_mysql option_cache_redis
+```
+
+
+More sophisticated Example
+--------------------------
+
+Her is a more elaborated example
+
+```sh
+./assemble_blocks.sh docker_gogs w_db_cache_session option_db_postgresql option_cache_redis option_session_mysql
+fig up
+```
+
+This will set up four containters and link them proberly. One for each of
+
+ - gogs
+ - database (postgresql)
+ - cache (redis)
+ - session (mysql)
+
+WARNING: This will not work at the Moment! MySQL session is broken!
+
+
+Remark
+------
+
+After you execute `assemble_blocks.sh` you should always trigger `fig build` to inculde the the new init script `init_gogs.sh` in the docker image.
+
+If you want to use another GoGS docker file, but keep everything else the same, you can create a block, e.g. `docker_gogs_custom`, with only a `Dockerfile` and call
+
+```sh
+./assemble_blocks.sh docker_gogs_custom w_db option_database_mysql
+```
+
+This will pull in the `Dockerfile` from `docker_gogs` instead of the one from `docker_gogs`.
+
+`Dockerfile`s for the `master` and `dev` branch are provided as `docker_gogs` and `docker_gogs_dev`
+
+
+[fig]:http://www.fig.sh/ \ No newline at end of file
diff --git a/docker/assemble_blocks.sh b/docker/assemble_blocks.sh
new file mode 100755
index 0000000000..852064de28
--- /dev/null
+++ b/docker/assemble_blocks.sh
@@ -0,0 +1,72 @@
+#!/bin/bash
+
+blocks_dir=blocks
+docker_dir=docker
+template_dir=templates
+
+docker_file=Dockerfile
+
+gogs_config_file=conf.tmp
+gogs_config=config
+gogs_init_file=$docker_dir/init_gogs.sh
+
+fig_file=fig.yml
+fig_config=fig
+
+gogs_init_template=$template_dir/init_gogs.sh.tpl
+
+if [ "$#" == 0 ]; then
+ blocks=`ls $blocks_dir`
+ if [ -z "$blocks" ]; then
+ echo "No Blocks available in $blocks_dir"
+ else
+ echo "Available Blocks:"
+ for block in $blocks; do
+ echo " $block"
+ done
+ fi
+ exit 0
+fi
+
+for file in $gogs_config_file $fig_file; do
+ if [ -e $file ]; then
+ echo "Deleting $file"
+ rm $file
+ fi
+done
+
+for dir in $@; do
+ current_dir=$blocks_dir/$dir
+ if [ ! -d "$current_dir" ]; then
+ echo "$current_dir is not a directory"
+ exit 1
+ fi
+
+ if [ -e $current_dir/$docker_file ]; then
+ echo "Copying $current_dir/$docker_file to $docker_dir/$docker_file"
+ cp $current_dir/$docker_file $docker_dir/$docker_file
+ fi
+
+ if [ -e $current_dir/$gogs_config ]; then
+ echo "Adding $current_dir/$gogs_config to $gogs_config_file"
+ cat $current_dir/$gogs_config >> $gogs_config_file
+ echo "" >> $gogs_config_file
+ fi
+
+ if [ -e $current_dir/$fig_config ]; then
+ echo "Adding $current_dir/$fig_config to $fig_file"
+ cat $current_dir/fig >> $fig_file
+ echo "" >> $fig_file
+ fi
+done
+
+echo "Creating $gogs_init_file"
+sed "/{{ CONFIG }}/{
+r $gogs_config_file
+d
+}" $gogs_init_template > $gogs_init_file
+
+if [ -e $gogs_config_file ]; then
+ echo "Removing temporary GoGS config"
+ rm $gogs_config_file
+fi \ No newline at end of file
diff --git a/docker/blocks/docker_gogs/Dockerfile b/docker/blocks/docker_gogs/Dockerfile
new file mode 100644
index 0000000000..e2e056ae02
--- /dev/null
+++ b/docker/blocks/docker_gogs/Dockerfile
@@ -0,0 +1,52 @@
+FROM ubuntu:14.04
+
+# This part is taken from the official docker image --------------------
+
+RUN apt-get update && apt-get install -y \
+ build-essential ca-certificates curl \
+ bzr git mercurial \
+ --no-install-recommends
+
+ENV GOLANG_VERSION 1.3
+
+RUN curl -sSL http://golang.org/dl/go$GOLANG_VERSION.src.tar.gz \
+ | tar -v -C /usr/src -xz
+WORKDIR /usr/src/go
+
+RUN cd src && ./make.bash --no-clean 2>&1
+
+ENV PATH /usr/src/go/bin:$PATH
+
+RUN mkdir -p /go/src
+ENV GOPATH /go
+ENV PATH /go/bin:$PATH
+WORKDIR /go
+
+# ----------------------------------------------------------------------
+
+
+RUN useradd -m git
+
+ENV GOGS_PATH $GOPATH/src/github.com/gogits/gogs
+ENV GOGS_CUSTOM_CONF_PATH $GOGS_PATH/custom/conf
+ENV GOGS_CUSTOM_CONF $GOGS_CUSTOM_CONF_PATH/app.ini
+
+RUN go get -u -d github.com/gogits/gogs
+# WORKDIR $GOGS_PATH
+WORKDIR /go/src/github.com/gogits/gogs
+RUN go build github.com/gogits/gogs
+RUN chown -R git $GOGS_PATH
+
+ADD init_gogs.sh /tmp/
+RUN chown git /tmp/init_gogs.sh
+RUN chmod +x /tmp/init_gogs.sh
+
+USER git
+ENV HOME /home/git
+ENV USER git
+ENV PATH $GOGS_PATH:$PATH
+
+RUN git config --global user.name "GoGS"
+
+ENTRYPOINT ["/tmp/init_gogs.sh"]
+CMD ["gogs", "web"]
diff --git a/docker/blocks/docker_gogs_dev/Dockerfile b/docker/blocks/docker_gogs_dev/Dockerfile
new file mode 100644
index 0000000000..1c001e2c06
--- /dev/null
+++ b/docker/blocks/docker_gogs_dev/Dockerfile
@@ -0,0 +1,52 @@
+FROM ubuntu:14.04
+
+# This part is taken from the official docker image --------------------
+
+RUN apt-get update && apt-get install -y \
+ build-essential ca-certificates curl \
+ bzr git mercurial \
+ --no-install-recommends
+
+ENV GOLANG_VERSION 1.3
+
+RUN curl -sSL http://golang.org/dl/go$GOLANG_VERSION.src.tar.gz \
+ | tar -v -C /usr/src -xz
+WORKDIR /usr/src/go
+
+RUN cd src && ./make.bash --no-clean 2>&1
+
+ENV PATH /usr/src/go/bin:$PATH
+
+RUN mkdir -p /go/src
+ENV GOPATH /go
+ENV PATH /go/bin:$PATH
+WORKDIR /go
+
+# ----------------------------------------------------------------------
+
+
+RUN useradd -m git
+
+ENV GOGS_PATH $GOPATH/src/github.com/gogits/gogs
+ENV GOGS_CUSTOM_CONF_PATH $GOGS_PATH/custom/conf
+ENV GOGS_CUSTOM_CONF $GOGS_CUSTOM_CONF_PATH/app.ini
+
+RUN go get -u -d github.com/gogits/gogs
+# WORKDIR $GOGS_PATH
+WORKDIR /go/src/github.com/gogits/gogs
+RUN git checkout dev; go get -u; git checkout dev; go build
+RUN chown -R git $GOGS_PATH
+
+ADD init_gogs.sh /tmp/
+RUN chown git /tmp/init_gogs.sh
+RUN chmod +x /tmp/init_gogs.sh
+
+USER git
+ENV HOME /home/git
+ENV USER git
+ENV PATH $GOGS_PATH:$PATH
+
+RUN git config --global user.name "GoGS"
+
+ENTRYPOINT ["/tmp/init_gogs.sh"]
+CMD ["gogs", "web"]
diff --git a/docker/blocks/option_cache_memcache/config b/docker/blocks/option_cache_memcache/config
new file mode 100644
index 0000000000..daca6f3ef9
--- /dev/null
+++ b/docker/blocks/option_cache_memcache/config
@@ -0,0 +1,3 @@
+[cache]
+DB_TYPE = memcache
+HOST = HOST = ${CACHE_1_PORT_11211_TCP_ADDR}:${CACHE_1_PORT_11211_TCP_PORT}
diff --git a/docker/blocks/option_cache_memcache/fig b/docker/blocks/option_cache_memcache/fig
new file mode 100644
index 0000000000..80d0215cc7
--- /dev/null
+++ b/docker/blocks/option_cache_memcache/fig
@@ -0,0 +1,2 @@
+cache:
+ image: sylvainlasnier/memcached:latest
diff --git a/docker/blocks/option_cache_redis/config b/docker/blocks/option_cache_redis/config
new file mode 100644
index 0000000000..648f4f3802
--- /dev/null
+++ b/docker/blocks/option_cache_redis/config
@@ -0,0 +1,3 @@
+[cache]
+DB_TYPE = redis
+HOST = ${CACHE_1_PORT_6379_TCP_ADDR}:${CACHE_1_PORT_6379_TCP_PORT}
diff --git a/docker/blocks/option_cache_redis/fig b/docker/blocks/option_cache_redis/fig
new file mode 100644
index 0000000000..0e74bc4aef
--- /dev/null
+++ b/docker/blocks/option_cache_redis/fig
@@ -0,0 +1,2 @@
+cache:
+ image: redis:latest
diff --git a/docker/blocks/option_db_mysql/config b/docker/blocks/option_db_mysql/config
new file mode 100644
index 0000000000..53f8949d9b
--- /dev/null
+++ b/docker/blocks/option_db_mysql/config
@@ -0,0 +1,6 @@
+[database]
+DB_TYPE = mysql
+HOST = ${DB_1_PORT_3306_TCP_ADDR}:${DB_1_PORT_3306_TCP_PORT}
+NAME = ${DB_1_ENV_MYSQL_DATABASE}
+USER = ${DB_1_ENV_MYSQL_USER}
+PASSWD = ${DB_1_ENV_MYSQL_PASSWORD}
diff --git a/docker/blocks/option_db_mysql/fig b/docker/blocks/option_db_mysql/fig
new file mode 100644
index 0000000000..a005a0593c
--- /dev/null
+++ b/docker/blocks/option_db_mysql/fig
@@ -0,0 +1,7 @@
+db:
+ image: mysql:latest
+ environment:
+ MYSQL_ROOT_PASSWORD: rootpass
+ MYSQL_DATABASE: gogs
+ MYSQL_USER: gogs
+ MYSQL_PASSWORD: password
diff --git a/docker/blocks/option_db_postgresql/config b/docker/blocks/option_db_postgresql/config
new file mode 100644
index 0000000000..e5946b06db
--- /dev/null
+++ b/docker/blocks/option_db_postgresql/config
@@ -0,0 +1,6 @@
+[database]
+DB_TYPE = postgres
+HOST = ${DB_1_PORT_5432_TCP_ADDR}:${DB_1_PORT_5432_TCP_PORT}
+NAME = ${DB_1_ENV_POSTGRESQL_DB}
+USER = ${DB_1_ENV_POSTGRESQL_USER}
+PASSWD = ${DB_1_ENV_POSTGRESQL_PASS}
diff --git a/docker/blocks/option_db_postgresql/fig b/docker/blocks/option_db_postgresql/fig
new file mode 100644
index 0000000000..c839e90448
--- /dev/null
+++ b/docker/blocks/option_db_postgresql/fig
@@ -0,0 +1,6 @@
+db:
+ image: wyaeld/postgres:9.3
+ environment:
+ POSTGRESQL_DB: gogs
+ POSTGRESQL_USER: gogs
+ POSTGRESQL_PASS: password
diff --git a/docker/blocks/option_session_mysql/config b/docker/blocks/option_session_mysql/config
new file mode 100644
index 0000000000..b8bc2cc703
--- /dev/null
+++ b/docker/blocks/option_session_mysql/config
@@ -0,0 +1,3 @@
+[session]
+PROVIDER = mysql
+PROVIDER_CONFIG = ${SESSION_1_ENV_MYSQL_USER}:${SESSION_1_ENV_MYSQL_PASSWORD}@SESSION_1_PORT_3306_TCP_PROTO(${SESSION_1_PORT_3306_TCP_ADDR}:${SESSION_1_PORT_3306_TCP_PORT})/${SESSION_1_ENV_MYSQL_DATABASE}
diff --git a/docker/blocks/option_session_mysql/fig b/docker/blocks/option_session_mysql/fig
new file mode 100644
index 0000000000..0e2dbf19c9
--- /dev/null
+++ b/docker/blocks/option_session_mysql/fig
@@ -0,0 +1,7 @@
+session:
+ image: mysql:latest
+ environment:
+ MYSQL_ROOT_PASSWORD: rootpass
+ MYSQL_DATABASE: gogs_session
+ MYSQL_USER: gogs
+ MYSQL_PASSWORD: password
diff --git a/docker/blocks/w_cache/fig b/docker/blocks/w_cache/fig
new file mode 100644
index 0000000000..fd66c35786
--- /dev/null
+++ b/docker/blocks/w_cache/fig
@@ -0,0 +1,6 @@
+gogs:
+ build: docker
+ links:
+ - cache
+ ports:
+ - "3000:3000"
diff --git a/docker/blocks/w_cache_session/fig b/docker/blocks/w_cache_session/fig
new file mode 100644
index 0000000000..0f90114064
--- /dev/null
+++ b/docker/blocks/w_cache_session/fig
@@ -0,0 +1,7 @@
+gogs:
+ build: docker
+ links:
+ - cache
+ - session
+ ports:
+ - "3000:3000"
diff --git a/docker/blocks/w_db/fig b/docker/blocks/w_db/fig
new file mode 100644
index 0000000000..a7e9c1b69a
--- /dev/null
+++ b/docker/blocks/w_db/fig
@@ -0,0 +1,6 @@
+gogs:
+ build: docker
+ links:
+ - db
+ ports:
+ - "3000:3000"
diff --git a/docker/blocks/w_db_cache/fig b/docker/blocks/w_db_cache/fig
new file mode 100644
index 0000000000..42402e40f3
--- /dev/null
+++ b/docker/blocks/w_db_cache/fig
@@ -0,0 +1,7 @@
+gogs:
+ build: docker
+ links:
+ - db
+ - cache
+ ports:
+ - "3000:3000"
diff --git a/docker/blocks/w_db_cache_session/fig b/docker/blocks/w_db_cache_session/fig
new file mode 100644
index 0000000000..42444405af
--- /dev/null
+++ b/docker/blocks/w_db_cache_session/fig
@@ -0,0 +1,8 @@
+gogs:
+ build: docker
+ links:
+ - db
+ - cache
+ - session
+ ports:
+ - "3000:3000"
diff --git a/docker/blocks/w_db_session/fig b/docker/blocks/w_db_session/fig
new file mode 100644
index 0000000000..3703c6ba33
--- /dev/null
+++ b/docker/blocks/w_db_session/fig
@@ -0,0 +1,7 @@
+gogs:
+ build: docker
+ links:
+ - db
+ - session
+ ports:
+ - "3000:3000"
diff --git a/docker/blocks/w_none/fig b/docker/blocks/w_none/fig
new file mode 100644
index 0000000000..c0fed209d6
--- /dev/null
+++ b/docker/blocks/w_none/fig
@@ -0,0 +1,4 @@
+gogs:
+ build: docker
+ ports:
+ - "3000:3000"
diff --git a/docker/blocks/w_session/fig b/docker/blocks/w_session/fig
new file mode 100644
index 0000000000..7dda0dde92
--- /dev/null
+++ b/docker/blocks/w_session/fig
@@ -0,0 +1,6 @@
+gogs:
+ build: docker
+ links:
+ - session
+ ports:
+ - "3000:3000"
diff --git a/docker/docker/.gitkeep b/docker/docker/.gitkeep
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/docker/docker/.gitkeep
diff --git a/docker/templates/init_gogs.sh.tpl b/docker/templates/init_gogs.sh.tpl
new file mode 100644
index 0000000000..26cff4e501
--- /dev/null
+++ b/docker/templates/init_gogs.sh.tpl
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+if [ ! -d "$DIRECTORY" ]; then
+ mkdir -p $GOGS_CUSTOM_CONF_PATH
+
+echo "
+{{ CONFIG }}
+" >> $GOGS_CUSTOM_CONF
+
+fi
+
+exec "$@"