Browse Source

Add a Dockerfile for local dev environment

Fixes GH-2087
Matt Robenolt 9 years ago
parent
commit
a53b1f0ae2
3 changed files with 143 additions and 0 deletions
  1. 2 0
      .dockerignore
  2. 121 0
      Dockerfile.dev
  3. 20 0
      scripts/docker-entrypoint.sh

+ 2 - 0
.dockerignore

@@ -0,0 +1,2 @@
+node_modules/
+build/

+ 121 - 0
Dockerfile.dev

@@ -0,0 +1,121 @@
+# Sentry dev environment
+#
+# NOTE: This should not be used in production!
+#
+# Instructions:
+#
+#   Build the container:
+#     $ docker build --rm -t sentry:dev -f Dockerfile.dev .
+#   Bootstrap the container:
+#     $ docker run --name=sentry-dev -p 8000:8000 -it -v $PWD:/usr/src/sentry sentry:dev
+#   Run the container:
+#     $ docker start sentry-dev
+#   Attach into the container:
+#     $ docker exec -it sentry-dev bash
+#   Run devserver:
+#     $ docker exec -it sentry-dev sentry devserver 0.0.0.0:8000
+#   Stop container:
+#     $ docker stop sentry-dev
+#   Remove container:
+#     $ docker rm -f sentry-dev
+#
+FROM python:2.7.11-slim
+
+RUN groupadd -r memcached --gid=997 && useradd -r -g memcached --uid=997 memcached \
+    && groupadd -r redis --gid=998 && useradd -r -g redis --uid=998 redis \
+    && groupadd -r postgres --gid=999 && useradd -r -g postgres --uid=999 postgres
+
+RUN apt-get update && apt-get install -y --no-install-recommends \
+        curl \
+        gcc \
+        git \
+        libffi-dev \
+        libpq-dev \
+        libxml2-dev \
+        libxslt-dev \
+        libyaml-dev \
+
+        # Extra dev tooling
+        postgresql-client \
+        make \
+        vim-nox \
+        less \
+    && rm -rf /var/lib/apt/lists/*
+
+# Sane defaults for pip
+ENV PIP_NO_CACHE_DIR off
+ENV PIP_DISABLE_PIP_VERSION_CHECK on
+ENV PYTHONUNBUFFERED 1
+
+# gpg keys listed at https://github.com/nodejs/node
+RUN set -ex \
+  && for key in \
+    9554F04D7259F04124DE6B476D5A82AC7E37093B \
+    94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \
+    0034A06D9D9B0064CE8ADF6BF1747F4AD2306D93 \
+    FD3A5288F042B6850C66B31F09FE44734EB7990E \
+    71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \
+    DD8F2338BAE7501E3DD5AC78C273792F7D83545D \
+    B9AE9905FFD7803F25714661B63B535A4C206CA9 \
+    C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \
+  ; do \
+    gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
+  done
+
+ENV NODE_VERSION 0.12.9
+ENV NPM_VERSION 2.14.17
+
+RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.gz" \
+    && curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
+    && gpg --verify SHASUMS256.txt.asc \
+    && grep " node-v$NODE_VERSION-linux-x64.tar.gz\$" SHASUMS256.txt.asc | sha256sum -c - \
+    && tar -xzf "node-v$NODE_VERSION-linux-x64.tar.gz" -C /usr/local --strip-components=1 \
+    && rm "node-v$NODE_VERSION-linux-x64.tar.gz" SHASUMS256.txt.asc \
+    && npm install -g "npm@${NPM_VERSION}" \
+    && npm cache clear
+
+# make the "en_US.UTF-8" locale so postgres will be utf-8 enabled by default
+RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* \
+    && localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
+ENV LANG en_US.utf8
+
+RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8
+
+ENV PG_MAJOR 9.4
+ENV PG_VERSION 9.4.6-1.pgdg80+1
+ENV PATH /usr/lib/postgresql/$PG_MAJOR/bin:$PATH
+
+RUN echo 'deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main' $PG_MAJOR > /etc/apt/sources.list.d/pgdg.list \
+    && apt-get update && apt-get install -y postgresql-common \
+    && apt-get install -y \
+        postgresql-$PG_MAJOR=$PG_VERSION \
+        postgresql-contrib-$PG_MAJOR=$PG_VERSION \
+    && rm -rf /var/lib/apt/lists/* \
+    && rm "/etc/postgresql/$PG_MAJOR/main/pg_hba.conf" \
+    && touch "/etc/postgresql/$PG_MAJOR/main/pg_hba.conf" \
+    && chown -R postgres "/etc/postgresql/$PG_MAJOR/main/pg_hba.conf" \
+    && { echo; echo "host all all 0.0.0.0/0 trust"; } >> "/etc/postgresql/$PG_MAJOR/main/pg_hba.conf" \
+    &&  { echo; echo "local all all trust"; } >> "/etc/postgresql/$PG_MAJOR/main/pg_hba.conf"
+
+RUN service postgresql start \
+    && createdb -U postgres -E utf-8 --template template0 sentry \
+    && service postgresql stop
+
+ENV DEBIAN_FRONTEND=noninteractive
+RUN apt-get update && apt-get install -y --no-install-recommends \
+        redis-server \
+        memcached \
+        postfix \
+    && rm -rf /var/lib/api/lists/*
+
+RUN mkdir -p /usr/src/sentry
+RUN mkdir -p /etc/sentry
+WORKDIR /usr/src/sentry
+ENV SENTRY_CONF /etc/sentry
+ENV C_FORCE_ROOT 1
+
+ADD scripts/docker-entrypoint.sh /entrypoint.sh
+ENTRYPOINT [ "/entrypoint.sh" ]
+
+EXPOSE 8000
+CMD [ "bootstrap" ]

+ 20 - 0
scripts/docker-entrypoint.sh

@@ -0,0 +1,20 @@
+#!/bin/bash
+set -ex
+
+# Make sure to always start all the background services
+service postgresql start
+service redis-server start
+service memcached start
+service postfix start
+
+if [ "$1" = 'bootstrap' ]; then
+  SENTRY_LIGHT_BUILD=1 pip install -e .[dev,tests]
+  npm install
+  sentry init $SENTRY_CONF
+  sentry upgrade --noinput
+  sentry createuser --email=root@localhost --password=admin --superuser --no-input
+
+  echo "done" && exit 0
+fi
+
+exec "$@"