about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2016-03-14 21:39:39 +0100
committerEugen Rochko <eugen@zeonfederated.com>2016-03-14 21:39:39 +0100
commitb17202ca0f19b83beb25afdba7e713a0f9329ffa (patch)
treeb37a10279062d6a595e969c1bf9fbefdb04a21a4
parent6fec8afc3f91166930c8b4dfca441a5a70a24d5b (diff)
Adding a docker-compose template for running Mastodon easily
-rw-r--r--.dockerignore1
-rw-r--r--.env.production.sample5
-rw-r--r--.gitignore2
-rw-r--r--Dockerfile15
-rw-r--r--README.md16
-rw-r--r--config/database.yml6
-rw-r--r--docker-compose.yml15
7 files changed, 58 insertions, 2 deletions
diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 000000000..4c49bd78f
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1 @@
+.env
diff --git a/.env.production.sample b/.env.production.sample
new file mode 100644
index 000000000..704eb6be3
--- /dev/null
+++ b/.env.production.sample
@@ -0,0 +1,5 @@
+REDIS_HOST=redis
+LOCAL_DOMAIN=example.com
+LOCAL_HTTPS=true
+PAPERCLIP_SECRET=
+SECRET_KEY_BASE=
diff --git a/.gitignore b/.gitignore
index b4a53fe1b..a7d30b9e7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,3 +17,5 @@
 /tmp
 coverage
 public/system
+public/assets
+.env
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 000000000..f569dbea9
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,15 @@
+FROM ruby:2.2.4
+
+ENV RAILS_ENV=production
+
+RUN apt-get update -qq && apt-get install -y build-essential libpq-dev
+RUN mkdir /mastodon
+
+WORKDIR /mastodon
+
+ADD Gemfile /mastodon/Gemfile
+ADD Gemfile.lock /mastodon/Gemfile.lock
+
+RUN bundle install --deployment --without test --without development
+
+ADD . /mastodon
diff --git a/README.md b/README.md
index 273d1a1b3..592e150c0 100644
--- a/README.md
+++ b/README.md
@@ -15,12 +15,12 @@ Mastodon is a federated microblogging engine. An alternative implementation of t
 - Mentions and URLs converted to links in statuses
 - REST API, including home and mention timelines
 - OAuth2 provider system for the API
+- Upload header image for profile page
 
 Missing:
 
 - Media attachments (photos, videos)
 - UI to post, reblog, favourite, follow and unfollow
-- Upload header image for profile page
 - Deleting statuses, deletion propagation
 - Streaming API
 
@@ -34,3 +34,17 @@ Missing:
 
 - PostgreSQL
 - Redis
+
+## Running with Docker and Docker-Compose
+
+The project now includes a Dockerfile and a docker-compose.yml. You need to turn .env.production sample into .env.production with all the variables set before you can:
+
+    docker-compose build
+
+And finally
+
+    docker-compose up
+
+As usual, the first thing you would need to do would be to run migrations:
+
+    docker-compose run web rake db:migrate
diff --git a/config/database.yml b/config/database.yml
index 13e176a2d..8914ab16d 100644
--- a/config/database.yml
+++ b/config/database.yml
@@ -2,6 +2,7 @@ default: &default
   adapter: postgresql
   pool: 5
   timeout: 5000
+  encoding: unicode
 
 development:
   <<: *default
@@ -16,4 +17,7 @@ test:
 
 production:
   <<: *default
-  database: mastodon_production
+  database: postgres
+  username: postgres
+  password:
+  host: db
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 000000000..20fb500b8
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,15 @@
+version: '2'
+services:
+  db:
+    image: postgres
+  redis:
+    image: redis
+  web:
+    build: .
+    command: bundle exec rails s -p 3000 -b '0.0.0.0'
+    ports:
+      - "3000:3000"
+    depends_on:
+      - db
+      - redis
+    env_file: .env.production