Add Redis, Sidekiq to Docker Compose setup #110

Merged
raucao merged 5 commits from feature/docker-compose_sidekiq into master 2023-03-31 09:09:46 +00:00
9 changed files with 88 additions and 33 deletions

View File

@ -7,6 +7,8 @@ SMTP_DOMAIN=example.com
SMTP_AUTH_METHOD=plain
SMTP_ENABLE_STARTTLS=auto
REDIS_URL='redis://localhost:6379/1'
LDAP_HOST=localhost
LDAP_PORT=389
LDAP_ADMIN_PASSWORD=passthebutter

View File

@ -1,8 +1,13 @@
# syntax=docker/dockerfile:1
FROM ruby:2.7.6
RUN apt-get update -qq && apt-get install -y curl ldap-utils
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN apt-get update -qq && apt-get install -y --no-install-recommends curl \
ldap-utils tini
RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash -
RUN apt-get update && apt-get install -y nodejs
WORKDIR /akkounts
COPY Gemfile /akkounts/Gemfile
COPY Gemfile.lock /akkounts/Gemfile.lock
@ -12,11 +17,5 @@ RUN gem install foreman
RUN npm install -g yarn
RUN yarn install
# Add a script to be executed every time the container starts.
COPY docker/entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
ENTRYPOINT ["/usr/bin/tini", "--"]
EXPOSE 3000
# Configure the main process to run when running the image
CMD ["bin", "dev"]

View File

@ -14,7 +14,7 @@ so:
1. Make sure [Docker Compose is installed][1] and Docker is running (included in
Docker Desktop)
2. Uncomment the `web` section in `docker-compose.yml`
2. Uncomment the `redis`, `web`, and `sidekiq` sections in `docker-compose.yml`
3. Run `docker compose up` and wait until 389ds announces its successful start
in the log output
4. `docker-compose exec ldap dsconf localhost backend create --suffix="dc=kosmos,dc=org" --be-name="dev"`

View File

@ -2,6 +2,13 @@
class Setting < RailsSettings::Base
cache_prefix { "v1" }
#
# Internal services
#
field :redis_url, type: :string, readonly: true,
default: ENV["REDIS_URL"] || "redis://localhost:6379/0"
Review

Any particular reason why the DB part of the fallback URL is different from the one in the .env.example (0 vs 1)?

Any particular reason why the DB part of the fallback URL is different from the one in the `.env.example` (0 vs 1)?
Review

Yes: it's because you don't need the environment variable if you want to use the default URL.

Yes: it's because you don't need the environment variable if you want to use the default URL.
#
# Registrations
#

View File

@ -63,6 +63,10 @@ class User < ApplicationRecord
end
end
def send_devise_notification(notification, *args)
devise_mailer.send(notification, self, *args).deliver_later
end
def reset_password(new_password, new_password_confirmation)
self.password = new_password
self.password_confirmation = new_password_confirmation

View File

@ -0,0 +1,5 @@
require_relative "../../app/models/setting"
Sidekiq.configure_server do |config|
config.redis = { url: Setting.redis_url }
end

View File

@ -1,3 +1,4 @@
:concurrency: 2
:queues:
- default
- mailers

View File

@ -3,11 +3,67 @@ services:
image: 4teamwork/389ds:latest
volumes:
- ./tmp/389ds:/data
networks:
- external_network
- internal_network
ports:
- "389:3389"
environment:
DS_DM_PASSWORD: passthebutter
SUFFIX_NAME: "dc=kosmos,dc=org"
# redis:
# restart: always
# image: redis:7-alpine
# networks:
# - internal_network
# healthcheck:
# test: ['CMD', 'redis-cli', 'ping']
# volumes:
# - ./tmp/redis:/data
# web:
# build: .
# tty: true
# command: bash -c "rm -f /akkounts/tmp/pids/server.pid; bin/dev"
# volumes:
# - .:/akkounts
# networks:
# - external_network
# - internal_network
# ports:
# - "3000:3000"
# environment:
# RAILS_ENV: development
# REDIS_URL: redis://redis:6379/0
# LDAP_HOST: ldap
# LDAP_PORT: 3389
# LDAP_ADMIN_PASSWORD: passthebutter
# LDAP_USE_TLS: "false"
# depends_on:
# - ldap
# - redis
# sidekiq:
# build: .
# command: bash -c "bundle exec sidekiq -C config/sidekiq.yml"
# volumes:
# - .:/akkounts
# networks:
# - internal_network
# environment:
# RAILS_ENV: development
# REDIS_URL: redis://redis:6379/0
# LDAP_HOST: ldap
# LDAP_PORT: 3389
# LDAP_ADMIN_PASSWORD: passthebutter
# LDAP_USE_TLS: "false"
# LAUNCHY_DRY_RUN: true
# BROWSER: /dev/null
# depends_on:
# - ldap
# - redis
# phpldapadmin:
# image: osixia/phpldapadmin:0.9.0
# ports:
@ -16,19 +72,8 @@ services:
# PHPLDAPADMIN_HTTPS: false
# PHPLDAPADMIN_LDAP_HOSTS: "#PYTHON2BASH:[{'ldap': [{'server': [{'tls': False}, {'port': 3389}]}, {'login': [{'bind_id': 'cn=Directory Manager'}, {'bind_pass': 'passthebutter'}]}]}]"
# PHPLDAPADMIN_LDAP_CLIENT_TLS: false
# web:
# build: .
# tty: true
# command: bash -c "sleep 5 && rm -f tmp/pids/server.pid && bin/dev"
# volumes:
# - .:/akkounts
# ports:
# - "3000:3000"
# environment:
# RAILS_ENV: development
# LDAP_HOST: ldap
# LDAP_PORT: 3389
# LDAP_ADMIN_PASSWORD: passthebutter
# LDAP_USE_TLS: "false"
# depends_on:
# - ldap
networks:
external_network:
internal_network:
internal: true

View File

@ -1,8 +0,0 @@
#!/bin/bash
set -e
# Remove a potentially pre-existing server.pid for Rails.
rm -f /myapp/tmp/pids/server.pid
# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"