Giter VIP home page Giter VIP logo

docker-rails's Introduction

Docker-Rails

Simple Rails 7.0 application to demonstrate using Docker for production deployment. The application is a very simple kind of CMS (content management system) allowing to manage posts. Beside the boring CRUD functionality it has some non-default features.

This project aims to build a lean Docker image for use in production. Therefore it's based on the official Alpine Ruby image, uses multi-stage building and some optimizations that I described in my blog. This results in an image size of ~80MB.

Features

Why?

This project demonstrates my way of building Rails applications. The techniques used to build the app should not be considered as "best practice", maybe there are better ways to build. Any feedback would be appreciated.

Multi container architecture

There is an example docker-compose.production.yml. The whole stack is divided into multiple different containers:

  • app: Main part. It contains the Rails code to handle web requests (by using the Puma gem). See the Dockerfile for details. The image is based on the Alpine variant of the official Ruby image and uses multi-stage building.
  • worker: Background processing. It contains the same Rails code, but only runs Sidekiq
  • db: PostgreSQL database
  • opensearch: Full text search engine
  • redis: In-memory key/value store (used by Sidekiq, ActionCable and for caching)
  • backup: Regularly backups the database as a dump via CRON to an Amazon S3 bucket

Check it out!

To start up the application in your local Docker environment:

git clone https://github.com/ledermann/docker-rails.git
cd docker-rails
docker-compose build
docker-compose up

Wait some minutes while the database will be prepared by fetching articles from Wikipedia. Then, navigate your browser to http://[DOCKER_HOST]:[DOCKER_PORT].

Sign in to the admin account:

Enjoy!

Tests / CI

On every push, the test suite (including RuboCop checks) is performed via GitHub Actions. If successful, a production image is built and pushed to GitHub Container Registry.

Production deployment

The Docker image build includes precompiled assets only (no node_modules and no sources). The spec folder is removed and the Alpine packages for Node and Yarn are not installed.

The stack is ready to host with traefik or nginx proxy and letsencrypt-nginx-proxy-companion.

Demo

A demo installation is set up on https://docker-rails.ledermann.dev.

docker-rails's People

Contributors

dependabot[bot] avatar ledermann avatar dependabot-preview[bot] avatar depfu[bot] avatar depfu-bot avatar dependabot-support avatar matias-eduardo avatar greenkeeper[bot] avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.