diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000..4c49bd78f1 --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +.env diff --git a/.env.production.sample b/.env.production.sample new file mode 100644 index 0000000000..704eb6be39 --- /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 b4a53fe1bf..a7d30b9e75 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 0000000000..f569dbea90 --- /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 273d1a1b31..592e150c02 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 13e176a2d4..8914ab16d9 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 0000000000..20fb500b87 --- /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