From faef71fb9c08250c97bab75d7568dcddc95539b1 Mon Sep 17 00:00:00 2001 From: Andrew Tomaka Date: Wed, 8 Mar 2023 19:35:40 -0500 Subject: [PATCH] Attempt to add Docker (via Rails 7.1 file) --- .dockerignore | 28 +++++++++++ .drone.yml | 108 +++++++++++++++++++++++++++--------------- Dockerfile | 27 +++++++++++ bin/docker-entrypoint | 12 +++++ 4 files changed, 138 insertions(+), 37 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100755 bin/docker-entrypoint diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..e6bb9c7 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,28 @@ +# See https://docs.docker.com/engine/reference/builder/#dockerignore-file for more about ignoring files. + +# Ignore bundler config. +/.bundle + +# Ignore all default key files +config/master.key +config/credentials/*.key + +# Ignore all logfiles and tempfiles. +/log/* +/tmp/* +!/log/.keep +!/tmp/.keep + +# Ignore pidfiles, but keep the directory. +/tmp/pids/* +!/tmp/pids/ +!/tmp/pids/.keep + +# Ignore storage (uploaded files in development and any SQLite databases). +/storage/* +!/storage/.keep +/tmp/storage/* +!/tmp/storage/ +!/tmp/storage/.keep + +/public/assets diff --git a/.drone.yml b/.drone.yml index e214580..97c40e0 100644 --- a/.drone.yml +++ b/.drone.yml @@ -2,45 +2,79 @@ name: default kind: pipeline steps: -- name: install - image: ruby:3.2.0 - volumes: - - name: bundle - path: /usr/local/bundle - commands: - - bin/bundle install --jobs=3 --retry=3 + - name: install + image: ruby:3.2.0 + volumes: + - name: bundle + path: /usr/local/bundle + commands: + - bin/bundle install --jobs=3 --retry=3 -- name: autoload - image: ruby:3.2.0 - volumes: - - name: bundle - path: /usr/local/bundle - commands: - - bin/rails zeitwerk:check - depends_on: - - install + - name: autoload + image: ruby:3.2.0 + volumes: + - name: bundle + path: /usr/local/bundle + commands: - bin/rails zeitwerk:check + depends_on: + - install -- name: lint - image: ruby:3.2.0 - volumes: - - name: bundle - path: /usr/local/bundle - commands: - - bin/bundle exec standardrb - depends_on: - - install + - name: lint + image: ruby:3.2.0 + volumes: + - name: bundle + path: /usr/local/bundle + commands: + - bin/bundle exec standardrb + depends_on: + - install -- name: test - image: ruby:3.2.0 - volumes: - - name: bundle - path: /usr/local/bundle - commands: - - bin/rails assets:precompile - - bin/rails test - depends_on: - - install + - name: test + image: ruby:3.2.0 + volumes: + - name: bundle + path: /usr/local/bundle + commands: + - bin/rails assets:precompile + - bin/rails test + depends_on: + - install volumes: -- name: bundle - temp: {} + - name: bundle + temp: {} + +trigger: + branch: + exclude: master + event: push + +--- +name: deploy +kind: pipeline + +steps: + - name: docker-build + image: plugins/docker + settings: + pull_image: true + registry: docker.atomaka.com + repo: docker.atomaka.com/budget + tags: + - latest + - ${DRONE_TAG} + - name: deploy + image: appleboy/drone-ssh + settings: + host: + from_secret: unraid_host + username: + from_secret: unraid_username + key: + from_secret: unraid_ssh_key + script: + - docker pull docker.atomaka.com/budget:latest + - docker restart budget + +trigger: + event: tag diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..e1c6885 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,27 @@ +# Make sure it matches the Ruby version in .ruby-version and Gemfile +ARG RUBY_VERSION=3.2.0 +FROM ruby:$RUBY_VERSION + +# Set production environment +ENV RAILS_LOG_TO_STDOUT="1" \ + RAILS_SERVE_STATIC_FILES="true" \ + RAILS_ENV="production" \ + BUNDLE_WITHOUT="development:test" + +# Install application gems +COPY Gemfile Gemfile.lock ./ +RUN bundle install + +# Copy application code +COPY . . + +# Precompile bootsnap code for faster boot times +RUN bundle exec bootsnap precompile --gemfile app/ lib/ + +# Precompiling assets for production without requiring secret RAILS_MASTER_KEY +RUN SECRET_KEY_BASE_DUMMY=1 bundle exec rails assets:precompile + +# Entrypoint prepares database and starts app on 0.0.0.0:3000 by default, +# but can also take a rails command, like "console" or "runner" to start instead. +ENTRYPOINT ["/rails/bin/docker-entrypoint"] +EXPOSE 3000 diff --git a/bin/docker-entrypoint b/bin/docker-entrypoint new file mode 100755 index 0000000..32e7713 --- /dev/null +++ b/bin/docker-entrypoint @@ -0,0 +1,12 @@ +#!/bin/sh + +if [ $# -eq 0 ]; then + # Create new or migrate existing database + ./bin/rails db:prepare + + # Start the server by default + exec bin/rails server +else + # Allow other commands, like console or runner, to be called + exec bin/rails "$@" +fi