From 1a4541a65c6ac76d5f89892afd65c0d444295d67 Mon Sep 17 00:00:00 2001 From: Carl-Fredrik Arvidson Date: Sun, 21 Dec 2025 13:52:23 +0100 Subject: [PATCH] Setup Docker development environment with Solid Queue - Updated .dockerignore and Dockerfile.dev for better containerization - Added docker-compose.yml for local development - Configured Solid Queue in development environment - Added dedicated databases for queue and cache in MySQL config - Included necessary migration directories for multi-database setup --- .dockerignore | 60 +++++++------------------ Dockerfile.dev | 1 - config/database.mysql.yml | 8 ++++ config/environments/development.rb | 4 ++ db/cable_migrate/.keep | 0 db/cache_migrate/.keep | 0 db/queue_migrate/.keep | 0 docker-compose.yml | 70 ++++++++++++++++++++++++++++++ 8 files changed, 97 insertions(+), 46 deletions(-) create mode 100644 db/cable_migrate/.keep create mode 100644 db/cache_migrate/.keep create mode 100644 db/queue_migrate/.keep create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore index df5bbdacc5..e004b7d6ed 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,45 +1,15 @@ -# See https://docs.docker.com/engine/reference/builder/#dockerignore-file for more about ignoring files. - -# Ignore git directory. -/.git/ - -# Ignore bundler config. -/.bundle - -# Ignore documentation -/docs/ -/README.md -/CLAUDE.md -/AGENTS.md -/STYLE.md -/CONTRIBUTING.md - -# Ignore all environment files (except templates). -/.env* -!/.env*.erb - -# 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/.keep - -# Ignore storage (uploaded files in development and any SQLite databases). -/storage/* -!/storage/.keep -/tmp/storage/* -!/tmp/storage/.keep - -# Ignore assets. -/node_modules/ -/app/assets/builds/* -!/app/assets/builds/.keep -/public/assets +.git +.bundle +log/* +tmp/* +!tmp/keep +public/assets +storage/* +!storage/keep +node_modules +.DS_Store +Dockerfile +Dockerfile.dev +docker-compose.yml +.dockerignore +vendor/bundle diff --git a/Dockerfile.dev b/Dockerfile.dev index 9c20fcda5d..268d834a33 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -19,7 +19,6 @@ RUN apt-get update -qq && \ # Install application gems COPY Gemfile Gemfile.lock .ruby-version ./ COPY lib/fizzy.rb ./lib/fizzy.rb -COPY gems ./gems/ RUN --mount=type=secret,id=GITHUB_TOKEN --mount=type=cache,id=fizzy-devbundle-${RUBY_VERSION},sharing=locked,target=/devbundle \ gem install bundler foreman && \ BUNDLE_PATH=/devbundle BUNDLE_GITHUB__COM="$(cat /run/secrets/GITHUB_TOKEN):x-oauth-basic" bundle install && \ diff --git a/config/database.mysql.yml b/config/database.mysql.yml index 2f72f6e989..62dceee526 100644 --- a/config/database.mysql.yml +++ b/config/database.mysql.yml @@ -16,6 +16,14 @@ development: <<: *default database: fizzy_development_cable migrations_paths: db/cable_migrate + queue: + <<: *default + database: fizzy_development_queue + migrations_paths: db/queue_migrate + cache: + <<: *default + database: fizzy_development_cache + migrations_paths: db/cache_migrate test: primary: diff --git a/config/environments/development.rb b/config/environments/development.rb index 6088b670d3..492f9b175a 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -95,4 +95,8 @@ # Canonical host for mailer URLs (emails always link here, not personal Tailscale URLs) config.action_mailer.default_url_options = { host: "#{config.hosts.first}:3006" } + + # Use Solid Queue for background jobs + config.active_job.queue_adapter = :solid_queue + config.solid_queue.connects_to = { database: { writing: :queue, reading: :queue } } end diff --git a/db/cable_migrate/.keep b/db/cable_migrate/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/db/cache_migrate/.keep b/db/cache_migrate/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/db/queue_migrate/.keep b/db/queue_migrate/.keep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000000..61fd286219 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,70 @@ +services: + db: + image: mysql:8.4 + container_name: fizzy-mysql + restart: always + environment: + MYSQL_ALLOW_EMPTY_PASSWORD: "yes" + ports: + - "3306:3306" + volumes: + - mysql_data:/var/lib/mysql + healthcheck: + test: ["CMD", "mysqladmin", "ping", "-h", "localhost"] + interval: 10s + timeout: 5s + retries: 5 + + app: + build: + context: . + dockerfile: Dockerfile.dev + secrets: + - GITHUB_TOKEN + container_name: fizzy-app + depends_on: + db: + condition: service_healthy + environment: + DATABASE_ADAPTER: mysql + MYSQL_HOST: db + MYSQL_ALLOW_EMPTY_PASSWORD: "yes" + RAILS_ENV: development + PORT: 3006 + ports: + - "3006:3006" + volumes: + - .:/rails + - bundle_cache:/usr/local/bundle + stdin_open: true + tty: true + command: + ["./bin/thrust", "./bin/rails", "server", "-p", "3006", "-b", "0.0.0.0"] + + worker: + build: + context: . + dockerfile: Dockerfile.dev + secrets: + - GITHUB_TOKEN + container_name: fizzy-worker + depends_on: + db: + condition: service_healthy + environment: + DATABASE_ADAPTER: mysql + MYSQL_HOST: db + MYSQL_ALLOW_EMPTY_PASSWORD: "yes" + RAILS_ENV: development + volumes: + - .:/rails + - bundle_cache:/usr/local/bundle + command: ["./bin/jobs"] + +volumes: + mysql_data: + bundle_cache: + +secrets: + GITHUB_TOKEN: + environment: GITHUB_TOKEN