diff --git a/.env.example b/.env.example index ba32691348196..599b1fb603392 100644 --- a/.env.example +++ b/.env.example @@ -1,6 +1,12 @@ -REDIS_URL=redis://redis:6379 SECRET_KEY_BASE= +#redis config +REDIS_URL=redis://redis:6379 +# If you are using docker-compose, set this variable's value to be any string, +# which will be the password for the redis service running inside the docker-compose +# to make it secure +REDIS_PASSWORD= + # Postgres Database config variables POSTGRES_HOST=postgres POSTGRES_USERNAME=postgres diff --git a/config/cable.yml b/config/cable.yml index 6e89df27505a8..4c30fcd13bcde 100644 --- a/config/cable.yml +++ b/config/cable.yml @@ -1,6 +1,7 @@ development: adapter: redis url: <%= ENV.fetch('REDIS_URL', 'redis://127.0.0.1:6379') %> + password: <%= ENV.fetch('REDIS_PASSWORD', nil) %> test: adapter: test @@ -8,7 +9,9 @@ test: staging: adapter: redis url: <%= ENV.fetch('REDIS_URL', 'redis://127.0.0.1:6379') %> + password: <%= ENV.fetch('REDIS_PASSWORD', nil) %> production: adapter: redis url: <%= ENV.fetch('REDIS_URL', 'redis://127.0.0.1:6379') %> + password: <%= ENV.fetch('REDIS_PASSWORD', nil) %> diff --git a/config/initializers/redis.rb b/config/initializers/redis.rb index d9e22832e6b85..7b2ec56e441f0 100644 --- a/config/initializers/redis.rb +++ b/config/initializers/redis.rb @@ -1,5 +1,8 @@ -uri = URI.parse(ENV.fetch('REDIS_URL', 'redis://127.0.0.1:6379')) -redis = Rails.env.test? ? MockRedis.new : Redis.new(url: uri) +app_redis_config = { + url: URI.parse(ENV.fetch('REDIS_URL', 'redis://127.0.0.1:6379')), + password: ENV.fetch('REDIS_PASSWORD', nil) +} +redis = Rails.env.test? ? MockRedis.new : Redis.new(app_redis_config) Nightfury.redis = Redis::Namespace.new('reports', redis: redis) # Alfred - Used currently for round robin and conversation emails. diff --git a/config/initializers/sidekiq.rb b/config/initializers/sidekiq.rb new file mode 100644 index 0000000000000..748b1e60c82e5 --- /dev/null +++ b/config/initializers/sidekiq.rb @@ -0,0 +1,11 @@ +sidekiq_redis_config = { + url: ENV.fetch('REDIS_URL', 'redis://127.0.0.1:6379'), + password: ENV.fetch('REDIS_PASSWORD', nil) +} +Sidekiq.configure_client do |config| + config.redis = sidekiq_redis_config +end + +Sidekiq.configure_server do |config| + config.redis = sidekiq_redis_config +end diff --git a/docker-compose.yaml b/docker-compose.yaml index d3d97172257a5..ce00d4d4e52e3 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -53,7 +53,7 @@ services: - cache:/app/tmp/cache ports: - "3035" # Webpack dev server - env_file: .env.example + env_file: .env environment: - WEBPACKER_DEV_SERVER_HOST=0.0.0.0 - NODE_ENV=development @@ -76,6 +76,8 @@ services: redis: image: redis:alpine restart: always + command: ["sh", "-c", "redis-server --requirepass \"$REDIS_PASSWORD\""] + env_file: .env volumes: - redis:/data/redis ports: diff --git a/docs/development/environment-setup/docker.md b/docs/development/environment-setup/docker.md index 5d5eb0f0c8e02..98072e832f643 100644 --- a/docs/development/environment-setup/docker.md +++ b/docs/development/environment-setup/docker.md @@ -11,7 +11,8 @@ After cloning the repo and installing docker on your machine, run the following cp .env.example .env ``` -Make changes to the `.env` file as required. [Optional] +Make changes to the `.env` file as required [Optional]. If you want to set the password for redis when you run +docker-compose, set any string value to the environment variable `REDIS_PASSWORD` in the `.env` file. which will secure the redis running inside docker-compose with this password. This will be automatically picked up by app server and sidekiq, to authenticate while making connections to redis server. ```bash docker-compose build diff --git a/docs/development/project-setup/environment-variables.md b/docs/development/project-setup/environment-variables.md index fe46157a112de..0e17c9ba436eb 100644 --- a/docs/development/project-setup/environment-variables.md +++ b/docs/development/project-setup/environment-variables.md @@ -59,7 +59,7 @@ But you can change it to use any of the cloud providers like amazon s3, microsof ACTIVE_STORAGE_SERVICE='local' ``` -### Configure Redis URL +### Configure Redis For development, you can use the following url to connect to redis. @@ -67,6 +67,13 @@ For development, you can use the following url to connect to redis. REDIS_URL='redis:://127.0.0.1:6379' ``` +To authenticate redis connections made by app server and sidekiq, if it's protected by a password, use the following +environment variable to set the password. + +```bash +REDIS_PASSWORD= +``` + ### Configure Postgres host You can set the following environment variable to set the host for postgres.