diff --git a/docker-couchdb-2.x/Dockerfile b/docker-couchdb-2.x/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..6264b979947ab57854887bf920e794d2c4912ff9 --- /dev/null +++ b/docker-couchdb-2.x/Dockerfile @@ -0,0 +1,139 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. + +FROM ubuntu:trusty + +MAINTAINER Dave Lane dave@oerfoundation.org +# (adapted from work by Clemens Stolle klaemo@apache.org) + +# Purpose - run a full WENotes stack including the faye message server, +# the wenotes service with couchdb, and various external processing tools +# +# The aim: to make a manageable fully functional dev environment which +# fosters remote API-ification for registering new blog users, +# updating details for session validation, and possibly integrating Mautic... +ENV APT_SERVER http://ucmirror.canterbury.ac.nz/ubuntu +ENV APT_FILE sources.list +ENV UBUNTU_NAME trusty +# subdue the "Dialog" errors... +ENV DEBIAN_FRONTEND noninteractive +ENV COUCHDIR /opt/couchdb +# +# Add CouchDB user account +RUN groupadd -r couchdb && useradd -d $COUCHDIR -g couchdb couchdb + +# +# add local mirror to reduce build time :) +RUN echo "deb $APT_SERVER ${UBUNTU_NAME} main universe" > /etc/apt/${APT_FILE} +RUN echo "deb $APT_SERVER ${UBUNTU_NAME}-updates main universe" >> /etc/apt/${APT_FILE} +RUN echo "deb $APT_SERVER ${UBUNTU_NAME}-security main universe" >> /etc/apt/${APT_FILE} +RUN echo "deb-src $APT_SERVER ${UBUNTU_NAME} main universe" >> /etc/apt/${APT_FILE} +RUN echo "deb-src $APT_SERVER ${UBUNTU_NAME}-updates main universe" >> /etc/apt/${APT_FILE} +RUN echo "deb-src $APT_SERVER ${UBUNTU_NAME}-security main universe" >> /etc/apt/${APT_FILE} +# do one update and start installing... +RUN apt-get update -y && apt-get install -y --no-install-recommends \ + apt-transport-https \ + apt-utils \ + ca-certificates \ + curl \ + git \ + haproxy \ + erlang-nox \ + erlang-reltool \ + libicu52 \ + libmozjs185-1.0 \ + openssl \ + && rm -rf /var/lib/apt/lists/* + +# grab gosu for easy step-down from root and tini for signal handling +RUN gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \ + && curl -o /usr/local/bin/gosu -fSL "https://github.com/tianon/gosu/releases/download/1.7/gosu-$(dpkg --print-architecture)" \ + && curl -o /usr/local/bin/gosu.asc -fSL "https://github.com/tianon/gosu/releases/download/1.7/gosu-$(dpkg --print-architecture).asc" \ + && gpg --verify /usr/local/bin/gosu.asc \ + && rm /usr/local/bin/gosu.asc \ + && chmod +x /usr/local/bin/gosu \ + && gpg --keyserver ha.pool.sks-keyservers.net --recv-keys 6380DC428747F6C393FEACA59A84159D7001A4E5 \ + && curl -o /usr/local/bin/tini -fSL "https://github.com/krallin/tini/releases/download/v0.9.0/tini" \ + && curl -o /usr/local/bin/tini.asc -fSL "https://github.com/krallin/tini/releases/download/v0.9.0/tini.asc" \ + && gpg --verify /usr/local/bin/tini.asc \ + && rm /usr/local/bin/tini.asc \ + && chmod +x /usr/local/bin/tini + +ENV COUCHDB_VERSION 2.0.0 + +# install Node.JS repos and do another update... +RUN curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add - \ + && echo 'deb https://deb.nodesource.com/node_4.x trusty main' > /etc/apt/sources.list.d/nodesource.list \ + && echo 'deb-src https://deb.nodesource.com/node_4.x trusty main' >> /etc/apt/sources.list.d/nodesource.list \ + && apt-get update -y -qq +# Download dev dependencies +RUN apt-get install -y --no-install-recommends \ + build-essential \ + erlang-dev \ + libcurl4-openssl-dev \ + libicu-dev \ + libmozjs185-dev \ + # install nodejs stack... + && apt-get install -y nodejs \ + && npm install -g grunt-cli + # set up pm2 + #RUN npm install -g pm2 + # Acquire CouchDB source code + RUN cd /usr/src && mkdir couchdb \ + && curl -fSL https://dist.apache.org/repos/dist/release/couchdb/source/${COUCHDB_VERSION}/apache-couchdb-${COUCHDB_VERSION}.tar.gz -o couchdb.tar.gz \ + && tar -xzf couchdb.tar.gz -C couchdb --strip-components=1 \ + && cd couchdb \ + # Build the release and install into /opt + && ./configure --disable-docs \ + && make release \ + && mv /usr/src/couchdb/rel/couchdb $COUCHDIR \ + # Cleanup build detritus + && apt-get purge -y \ + binutils \ + build-essential \ + cpp \ + git \ + erlang-dev \ + libicu-dev \ + make \ + perl \ + && apt-get autoremove -y && apt-get clean \ + && apt-get install -y libicu52 --no-install-recommends \ + && rm -rf /var/lib/apt/lists/* /usr/lib/node_modules /usr/src/couchdb* + +# Sprinkle couchdb configuration to the right places... +COPY couchdb/local.ini ${COUCHDIR}/etc/ +COPY couchdb/vm.args ${COUCHDIR}/etc/ +COPY couchdb/couchdb-init.sh / + +# Setup directories and permissions +RUN chmod +x /couchdb-init.sh \ + && mkdir ${COUCHDIR}/data ${COUCHDIR}/etc/local.d ${COUCHDIR}/etc/default.d \ + && chown -R couchdb:couchdb ${COUCHDIR} + +# Set up the language variables +ENV LANG en_NZ.UTF-8 +ENV LANGUAGE en_NZ.UTF-8 +ENV LC_ALL en_NZ.UTF-8 +# Compile the language spec +RUN locale-gen $LANG +# +# Some final exports to get the environment right... +RUN echo "export VISIBLE=now" >> /etc/profile \ + && echo "export TERM=xterm" >> /etc/bash.bashrc + +# expose relevant ports +WORKDIR ${COUCHDIR} +EXPOSE 5984 4369 9100 +VOLUME ["${COUCHDIR}/data"] +ENTRYPOINT ["tini", "--", "/couchdb-init.sh"] +CMD ["/opt/couchdb/bin/couchdb"] diff --git a/docker-couchdb-2.x/README.oerf b/docker-couchdb-2.x/README.oerf new file mode 100644 index 0000000000000000000000000000000000000000..86c52d41f7c776472b5d2fe20148901b64404f32 --- /dev/null +++ b/docker-couchdb-2.x/README.oerf @@ -0,0 +1,12 @@ +===CouchDB=== +Build: docker build -t oeru/couchdb docker-couchdb +Launch (replacing [admin password] and [bot password]): + docker run --name couchdb -v /home/dave/Docker/wenotes/data:/opt/couchdb/data \ + -e COUCHDB_USER=admin -e COUCHDB_PASSWORD=[admin password] \ + -e COUCHDB_BOT_USER=bot -e COUCHDB_BOT_PASSWORD=[bot password] \ + -d oeru/couchdb + + +DB="http://user:password@localhost:5984" +curl -X PUT "$DB/dbname" +curl -d @dbname-backup-file.json -X POST "$DB/_bulk_docs" -H"Content-Type: application/json" diff --git a/docker-couchdb-2.x/conf/run.sh b/docker-couchdb-2.x/conf/run.sh new file mode 100644 index 0000000000000000000000000000000000000000..dfb22d6dbe9e8a47d669215cddda0a497698b841 --- /dev/null +++ b/docker-couchdb-2.x/conf/run.sh @@ -0,0 +1,54 @@ +#!/bin/bash +# Bash hasn't been initialized yet so add path to composer manually. +#export PATH="$HOME/.composer/vendor/bin:$PATH" + +# Run start script. +echo "*****Running run.sh" +CONF=/root/conf +COUCH=/root +CWD=`pwd` +PM2=`which pm2` + +echo "CWD=$CWD, GIT=$GIT" + +# Run before-run scripts added by another containers. +if [[ -d $CONF/before-start ]] ; then + FILES=$CONF/before-start/* + for f in $FILES + do + echo "Attaching: $f" + source $f + done +fi + + +if [[ -f $CONF/pre-install.sh ]] ; then + echo "Running: pre-install.sh" + source $CONF/pre-install.sh +fi + +echo "starting services" + +# first start couchdb +if [[ -f $COUCH/couchdb-init.sh ]] ; then + echo "starting couchdb via $COUCH/couchdb-init.sh" + $PM2 start --no-daemon $COUCH/couchdb-init.sh +fi + +echo "finished services" + +if [[ -f $CONF/post-install.sh ]] ; then + echo "Running: post-install.sh" + source $CONF/post-install.sh +fi +echo "\n****** in run.sh ********\n" + +# Run after-run scripts added by another containers. +if [[ -d $CONF/after-start ]] ; then + FILES=$CONF/after-start/* + for f in $FILES + do + echo "Attaching: $f" + source $f + done +fi diff --git a/docker-couchdb-2.x/couchdb/couchdb-init.sh b/docker-couchdb-2.x/couchdb/couchdb-init.sh new file mode 100755 index 0000000000000000000000000000000000000000..a100220a42e911c7c354f9c7ed0947f8033a79ab --- /dev/null +++ b/docker-couchdb-2.x/couchdb/couchdb-init.sh @@ -0,0 +1,66 @@ +#!/bin/bash +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. + +set -e + +if [ "$1" = '/opt/couchdb/bin/couchdb' ]; then + # we need to set the permissions here because docker mounts volumes as root + chown -R couchdb:couchdb /opt/couchdb + + chmod -R 0770 /opt/couchdb/data + + chmod 664 /opt/couchdb/etc/*.ini + chmod 775 /opt/couchdb/etc/*.d + + if [ ! -z "$NODENAME" ] && ! grep "couchdb@" /opt/couchdb/etc/vm.args; then + echo "-name couchdb@$NODENAME" >> /opt/couchdb/etc/vm.args + fi + + if [ "$COUCHDB_USER" ] && [ "$COUCHDB_PASSWORD" ]; then + # Create admin + echo "Setting admin access details" + printf "[admins]\n%s = %s\n" "$COUCHDB_USER" "$COUCHDB_PASSWORD" > /opt/couchdb/etc/local.d/docker.ini + if [ "$COUCHDB_BOT_USER" ] && [ "$COUCHDB_BOT_PASSWORD" ]; then + printf "%s = %s\n" "$COUCHDB_BOT_USER" "$COUCHDB_BOT_PASSWORD" >> /opt/couchdb/etc/local.d/docker.ini + fi + if [ "$COUCHDB_PROXYSECRET" ]; then + echo "Setting a proxy secret" + printf "[couch_httpd_auth\]\nrequire_valid_user = true\nsecret = %s\n" "$COUCHDB_PROXYSECRET" >> /opt/couchdb/etc/local.d/docker.ini + else + printf "[couch_httpd_auth\]\nrequire_valid_user = true\n" >> /opt/couchdb/etc/local.d/docker.ini + fi + chown couchdb:couchdb /opt/couchdb/etc/local.d/docker.ini + fi + + # if we don't find an [admins] section followed by a non-comment, display a warning + if ! grep -Pzoqr '\[admins\]\n[^;]\w+' /opt/couchdb/etc/local.d/*.ini; then + # The - option suppresses leading tabs but *not* spaces. :) + cat >&2 <<-'EOWARN' + **************************************************** + WARNING: CouchDB is running in Admin Party mode. + This will allow anyone with access to the + CouchDB port to access your database. In + Docker's default configuration, this is + effectively any other container on the same + system. + Use "-e COUCHDB_USER=admin -e COUCHDB_PASSWORD=password" + to set it in "docker run". + **************************************************** + EOWARN + fi + + + exec gosu couchdb "$@" +fi + +exec "$@" diff --git a/docker-couchdb-2.x/couchdb/local.ini b/docker-couchdb-2.x/couchdb/local.ini new file mode 100644 index 0000000000000000000000000000000000000000..1aa633cbfc7724a99622f87361c5f9a5bd93ec89 --- /dev/null +++ b/docker-couchdb-2.x/couchdb/local.ini @@ -0,0 +1,8 @@ +; CouchDB Configuration Settings + +; Custom settings should be made in this file. They will override settings +; in default.ini, but unlike changes made to default.ini, this file won't be +; overwritten on server upgrade. + +[chttpd] +bind_address = any diff --git a/docker-couchdb-2.x/couchdb/vm.args b/docker-couchdb-2.x/couchdb/vm.args new file mode 100644 index 0000000000000000000000000000000000000000..0425756229a88ace2972d48e3b943a83e822a442 --- /dev/null +++ b/docker-couchdb-2.x/couchdb/vm.args @@ -0,0 +1,28 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. + +# Ensure that the Erlang VM listens on a known port +-kernel inet_dist_listen_min 9100 +-kernel inet_dist_listen_max 9100 + +# Tell kernel and SASL not to log anything +-kernel error_logger silent +-sasl sasl_error_logger false + +# Use kernel poll functionality if supported by emulator ++K true + +# Start a pool of asynchronous IO threads ++A 16 + +# Comment this line out to enable the interactive Erlang shell on startup ++Bd -noinput diff --git a/docker-couchdb/README.oerf b/docker-couchdb/README.oerf new file mode 100644 index 0000000000000000000000000000000000000000..86c52d41f7c776472b5d2fe20148901b64404f32 --- /dev/null +++ b/docker-couchdb/README.oerf @@ -0,0 +1,12 @@ +===CouchDB=== +Build: docker build -t oeru/couchdb docker-couchdb +Launch (replacing [admin password] and [bot password]): + docker run --name couchdb -v /home/dave/Docker/wenotes/data:/opt/couchdb/data \ + -e COUCHDB_USER=admin -e COUCHDB_PASSWORD=[admin password] \ + -e COUCHDB_BOT_USER=bot -e COUCHDB_BOT_PASSWORD=[bot password] \ + -d oeru/couchdb + + +DB="http://user:password@localhost:5984" +curl -X PUT "$DB/dbname" +curl -d @dbname-backup-file.json -X POST "$DB/_bulk_docs" -H"Content-Type: application/json" diff --git a/docker-wenotes/Dockerfile b/docker-wenotes/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..ac655a32aea02848d39724f1f1d52f43e2055ced --- /dev/null +++ b/docker-wenotes/Dockerfile @@ -0,0 +1,150 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. + +FROM ubuntu:trusty + +MAINTAINER Dave Lane dave@oerfoundation.org +# (adapted from work by Clemens Stolle klaemo@apache.org) + +# Purpose - run a full WENotes stack including the faye message server, +# the wenotes service with couchdb, and various external processing tools +# +# The aim: to make a manageable fully functional dev environment which +# fosters remote API-ification for registering new blog users, +# updating details for session validation, and possibly integrating Mautic... +ENV APT_SERVER http://ucmirror.canterbury.ac.nz/ubuntu +ENV APT_FILE sources.list +ENV UBUNTU_NAME trusty +# subdue the "Dialog" errors... +ENV DEBIAN_FRONTEND noninteractive +# +# Add CouchDB user account +RUN groupadd -r couchdb && useradd -d /opt/couchdb -g couchdb couchdb + +# +# add local mirror to reduce build time :) +RUN echo "deb $APT_SERVER ${UBUNTU_NAME} main universe" > /etc/apt/${APT_FILE} +RUN echo "deb $APT_SERVER ${UBUNTU_NAME}-updates main universe" >> /etc/apt/${APT_FILE} +RUN echo "deb $APT_SERVER ${UBUNTU_NAME}-security main universe" >> /etc/apt/${APT_FILE} +RUN echo "deb-src $APT_SERVER ${UBUNTU_NAME} main universe" >> /etc/apt/${APT_FILE} +RUN echo "deb-src $APT_SERVER ${UBUNTU_NAME}-updates main universe" >> /etc/apt/${APT_FILE} +RUN echo "deb-src $APT_SERVER ${UBUNTU_NAME}-security main universe" >> /etc/apt/${APT_FILE} +# do one update and start installing... +RUN apt-get update -y && apt-get install -y --no-install-recommends \ + apt-transport-https \ + apt-utils \ + ca-certificates \ + curl \ + git \ + haproxy \ + erlang-nox \ + erlang-reltool \ + libicu52 \ + libmozjs185-1.0 \ + openssl +# && rm -rf /var/lib/apt/lists/* + +# grab gosu for easy step-down from root and tini for signal handling +RUN gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \ + && curl -o /usr/local/bin/gosu -fSL "https://github.com/tianon/gosu/releases/download/1.7/gosu-$(dpkg --print-architecture)" \ + && curl -o /usr/local/bin/gosu.asc -fSL "https://github.com/tianon/gosu/releases/download/1.7/gosu-$(dpkg --print-architecture).asc" \ + && gpg --verify /usr/local/bin/gosu.asc \ + && rm /usr/local/bin/gosu.asc \ + && chmod +x /usr/local/bin/gosu \ + && gpg --keyserver ha.pool.sks-keyservers.net --recv-keys 6380DC428747F6C393FEACA59A84159D7001A4E5 \ + && curl -o /usr/local/bin/tini -fSL "https://github.com/krallin/tini/releases/download/v0.9.0/tini" \ + && curl -o /usr/local/bin/tini.asc -fSL "https://github.com/krallin/tini/releases/download/v0.9.0/tini.asc" \ + && gpg --verify /usr/local/bin/tini.asc \ + && rm /usr/local/bin/tini.asc \ + && chmod +x /usr/local/bin/tini + +ENV COUCHDB_VERSION 2.0.0 + +# install Node.JS repos and do another update... +RUN curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add - \ + && echo 'deb https://deb.nodesource.com/node_4.x trusty main' > /etc/apt/sources.list.d/nodesource.list \ + && echo 'deb-src https://deb.nodesource.com/node_4.x trusty main' >> /etc/apt/sources.list.d/nodesource.list \ + && apt-get update -y -qq +# Download dev dependencies +RUN apt-get install -y --no-install-recommends \ + build-essential \ + erlang-dev \ + libcurl4-openssl-dev \ + libicu-dev \ + libmozjs185-dev \ + # install nodejs stack... + && apt-get install -y nodejs \ + && npm install -g grunt-cli + # set up pm2 + RUN npm install -g pm2 + # Acquire CouchDB source code + RUN cd /usr/src && mkdir couchdb \ + && curl -fSL https://dist.apache.org/repos/dist/release/couchdb/source/2.0.0/apache-couchdb-$COUCHDB_VERSION.tar.gz -o couchdb.tar.gz \ + && tar -xzf couchdb.tar.gz -C couchdb --strip-components=1 \ + && cd couchdb \ + # Build the release and install into /opt + && ./configure --disable-docs \ + && make release \ + && mv /usr/src/couchdb/rel/couchdb /opt/ \ + # Cleanup build detritus +# && apt-get purge -y \ +# binutils \ +# build-essential \ +# cpp \ +# erlang-dev \ +# libicu-dev \ +# make \ +# perl \ + && apt-get autoremove -y && apt-get clean \ + && apt-get install -y libicu52 --no-install-recommends \ +# && rm -rf /var/lib/apt/lists/* /usr/lib/node_modules /usr/src/couchdb* + && rm -rf /usr/src/couchdb* + + +# Sprinkle couchdb configuration to the right places... +COPY couchdb/local.ini /opt/couchdb/etc/ +COPY couchdb/vm.args /opt/couchdb/etc/ +COPY couchdb/couchdb-init.sh / + +# Setup directories and permissions +RUN chmod +x /couchdb-init.sh \ + && mkdir /opt/couchdb/data /opt/couchdb/etc/local.d /opt/couchdb/etc/default.d \ + && chown -R couchdb:couchdb /opt/couchdb/ + + # Set up the language variables + ENV LANG en_NZ.UTF-8 + ENV LANGUAGE en_NZ.UTF-8 + ENV LC_ALL en_NZ.UTF-8 + # Compile the language spec + RUN locale-gen $LANG + # + # Some final exports to get the environment right... + RUN echo "export VISIBLE=now" >> /etc/profile \ + && echo "export TERM=xterm" >> /etc/bash.bashrc + +# set up the various scripts we need to run on the container +# after it's built... +COPY ./conf /root/conf/ +#Prepare the main install script +RUN chmod u+x /root/conf/*.sh + +# expose relevant ports +EXPOSE 80 5984 4369 9100 +VOLUME ["/opt/couchdb/data", "/opt/wenotes"] + +# First, say we're doing it +RUN echo "running run.sh - /root/conf/run.sh" +# Actually do it. +RUN /root/conf/run.sh +# Say we're finished +RUN echo "finished run.sh" +CMD ["/bin/bash"] diff --git a/docker-wenotes/conf/faye.yml b/docker-wenotes/conf/faye.yml new file mode 100644 index 0000000000000000000000000000000000000000..5a6669238d13da0bef9e09722bd48b97ec5d5aac --- /dev/null +++ b/docker-wenotes/conf/faye.yml @@ -0,0 +1,5 @@ +apps: + - script : 'server.js' + name : 'Faye Server' + merge_logs : true + out_file : '/tmp/server.log' diff --git a/docker-wenotes/conf/options.json.sample b/docker-wenotes/conf/options.json.sample new file mode 100644 index 0000000000000000000000000000000000000000..e5438a87e74058e538627b7a2098bf4e5e538844 --- /dev/null +++ b/docker-wenotes/conf/options.json.sample @@ -0,0 +1,23 @@ +{ + "server": { + "ip": "localhost", + "port": 80, + "secureport": "", + "privkey": "", + "fullchain": "" + }, + "log": { + "couchwatch": { + "level": 7, + "file": "/tmp/couchwatch.log" + }, + "twitters": { + "level": 7, + "file": "/tmp/twitters.log" + }, + "server": { + "level": 7, + "file": "/tmp/wenotes-server.log" + } + } +} diff --git a/docker-wenotes/conf/options.json.sample.bak b/docker-wenotes/conf/options.json.sample.bak new file mode 100644 index 0000000000000000000000000000000000000000..96df1fa3f570b500ad3e6c9162c510413cab55f0 --- /dev/null +++ b/docker-wenotes/conf/options.json.sample.bak @@ -0,0 +1,75 @@ +{ + "url": "http://bot:[couchpass]@localhost:5984", + "localcouch": "http://bot:[couchpass]@localhost:5984", + "couch": { + "user": "bot", + "pass": "[couchpass]", + "url": "http://localhost", + "port": 5984 + }, + "db": "mentions", + "dbfeeds": "feeds", + "dbvotes": "votes", + "avatars": "weavatars", + "server": { + "ip": "localhost", + "port": 80, + "secureport": "", + "privkey": "", + "fullchain": "" + }, + "log": { + "couchwatch": { + "level": 7, + "file": "/tmp/couchwatch.log" + }, + "twitters": { + "level": 7, + "file": "/tmp/twitters.log" + }, + "server": { + "level": 7, + "file": "/tmp/wenotes-server.log" + } + }, + "WEnotes": { + "RocketChat": { + "subscribe": "/WEnotes/*", + "channel": "#wenotes-all", + "webhook": "https://chat.oeru.org/hooks/[chat_wenotes-all]" + } + }, + "IRC": { + "botname": "WikiEducatorBot", + "botpass": "lat45long", + "ircchannel": "#wikieducator", + "RocketChat": { + "channel": "#wikieducator-irc", + "webhook": "https://chat.oeru.org/hooks/[chat_wikieducator-irc]" + } + }, + "googleapikey": "[google-api-key]", + "googleapiserverkey": "[google-api-serverkey]", + "moodleuser": "jimtittsler", + "moodlepass": "mrexe", + "tags": ["wikieducator", "ocl4ed", "oeru", "wenotes", "ds4oer", "uowmun", "oeru16"], + "blacklist": ["asiangirl", "japanesa", "panties", "nipples", "stockings", "oppai", "tits", "bigtits", "japanav", "gangbang", "blowjob", "pantsu", "buenosaires", "escuelacuzque"], + "fayeurl": "http://localhost/faye", + "fayepass": "[faye_pass]", + "twitter": { + "consumer_key": "[twitter_consumer-key]", + "consumer_secret": "[twitter_consumer-secret]", + "access_token_key": "[twitter_accesstoken-key]", + "access_token_secret": "[twitter_accesstoken-secret]" + }, + "feedsMoodle": "[]", + "gdata": { + "user": "bot@oerfoundation.org", + "pass": "[gdata]" + }, + "communities": "[]", + "discourse": "https://community.oeru.org", + "forums": { + "partner101": "https://forums.oeru.org/c/courses/partner101.json", + } +} diff --git a/docker-wenotes/conf/run.sh b/docker-wenotes/conf/run.sh new file mode 100644 index 0000000000000000000000000000000000000000..5641101220fccd4f8e00ef2502f0e9451a663292 --- /dev/null +++ b/docker-wenotes/conf/run.sh @@ -0,0 +1,99 @@ +#!/bin/bash +# Bash hasn't been initialized yet so add path to composer manually. +#export PATH="$HOME/.composer/vendor/bin:$PATH" + +# Run start script. +echo "*****Running run.sh" +CONF=/root/conf +COUCH=/root +WENOTES=/opt/wenotes +CWD=`pwd` +# Defines +WESERVER=https://kiwilightweight@bitbucket.org/wikieducator/wenotes-server.git +WETOOLS=https://kiwilightweight@bitbucket.org/wikieducator/wenotes-tools.git +GIT=`which git` +NPM=`which npm` +PM2=`which pm2` +CP=`which cp` + +echo "CWD=$CWD, GIT=$GIT" + +# Run before-run scripts added by another containers. +if [[ -d $CONF/before-start ]] ; then + FILES=$CONF/before-start/* + for f in $FILES + do + echo "Attaching: $f" + source $f + done +fi + + +if [[ -f $CONF/pre-install.sh ]] ; then + echo "Running: pre-install.sh" + source $CONF/pre-install.sh +fi + +echo "starting services" + +# first start couchdb +if [[ -f $COUCH/couchdb-init.sh ]] ; then + echo "starting couchdb via $COUCH/couchdb-init.sh" + $PM2 start --no-daemon $COUCH/couchdb-init.sh +fi + +# next, get the Javascript code: +# get the repo +echo "moving to $WENOTES" +cd $WENOTES +echo "getting $WESERVER, putting it into server" +$GIT clone $WESERVER server +# get the repo +echo "getting $WETOOLS, putting it into server" +$GIT clone $WETOOLS tools +# set up options.json + + +# next start various Javascript services +if [[ -f $CONF/faye.yml ]] ; then + echo "moving to server" + cd $WENOTES/server + echo "installing Node.JS dependencies" + $NPM install + $CP $CONF/options.json.sample options.json + echo "starting pm2 to supervise scripts in $CONF/faye.yml" + $PM2 start --no-daemon $CONF/faye.yml + cd $WENOTES +fi + +# next start various Javascript services +if [[ -f $CONF/services.yml ]] ; then + cd $WENOTES/tools + echo "installing Node.JS dependencies" + $NPM install + $CP $CONF/options.json.sample options.json + echo "starting pm2 to supervise scripts in $CONF/services.yml" + $PM2 start --no-daemon $CONF/services.yml + cd $WENOTES +fi + +echo "returning to original dir: $CWD" +cd $CWD + +echo "finished services" + +if [[ -f $CONF/post-install.sh ]] ; then + echo "Running: post-install.sh" + source $CONF/post-install.sh +fi +echo "\n****** in run.sh ********\n" + +# Run after-run scripts added by another containers. +if [[ -d $CONF/after-start ]] ; then + FILES=$CONF/after-start/* + for f in $FILES + do + echo "Attaching: $f" + source $f + done +fi diff --git a/docker-wenotes/conf/services.yml b/docker-wenotes/conf/services.yml new file mode 100644 index 0000000000000000000000000000000000000000..2adb9061691fcf0cb575a12858346a8385b4eb3d --- /dev/null +++ b/docker-wenotes/conf/services.yml @@ -0,0 +1,19 @@ +# from http://pm2.keymetrics.io/docs/usage/docker-pm2-nodejs/ +# and https://medium.com/@adriendesbiaux/node-js-pm2-docker-docker-compose-devops-907dedd2b69a#.5nb54aom6 +apps: + - script : 'couchwatch.js' + name : 'CouchWatch' + merge_logs : true + out_file : '/tmp/couchwatch.log' + - script : 'twitter.js' + name : 'Twitter Watcher' + merge_logs : true + out_file : '/tmp/twitter.log' + - script : 'irc.js' + name : 'IRC Watcher' + merge_logs : true + out_file : '/tmp/irc.log' + - script : 'wenotestochat.js' + name : 'WENotes to Chat' + merge_logs : true + out_file : '/tmp/wenotestochat.log'