diff --git a/.app_version b/.app_version index ae6dd4e2..25939d35 100644 --- a/.app_version +++ b/.app_version @@ -1 +1 @@ -0.29.0 +0.29.1 diff --git a/CHANGELOG.md b/CHANGELOG.md index 20458ada..8cca7794 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,7 +4,20 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). -# [0.29.0] - 2025-06-30 +# [0.29.1] - 2025-07-02 + +## Fixed + +- Buttons on the imports page now looks better in both light and dark mode. #1481 +- The PROMETHEUS_EXPORTER_ENABLED environment variable default value is now "false", in quotes. +- The RAILS_CACHE_DB, RAILS_JOB_QUEUE_DB and RAILS_WS_DB environment variables can be used to set the Redis database number for caching, background jobs and websocket connections respectively. Default values are now 0, 1 and 2 respectively. #1420 + +## Changed + +- Skip DNS rebinding protection for the health check endpoint. +- Added health check to app.json. + +# [0.29.0] - 2025-07-02 You can now move your user data between Dawarich instances. Simply go to your Account settings and click on the "Export my data" button under the password section. An export will be created and you will be able to download it on Exports page once it's ready. diff --git a/Gemfile b/Gemfile index 8515a41c..614a2e95 100644 --- a/Gemfile +++ b/Gemfile @@ -21,6 +21,7 @@ gem 'importmap-rails' gem 'kaminari' gem 'lograge' gem 'oj' +gem 'parallel' gem 'pg' gem 'prometheus_exporter' gem 'activerecord-postgis-adapter' diff --git a/Gemfile.lock b/Gemfile.lock index e11abddd..640e815e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -164,11 +164,11 @@ GEM erubi (1.13.1) et-orbi (1.2.11) tzinfo - factory_bot (6.5.0) - activesupport (>= 5.0.0) - factory_bot_rails (6.4.4) + factory_bot (6.5.4) + activesupport (>= 6.1.0) + factory_bot_rails (6.5.0) factory_bot (~> 6.5) - railties (>= 5.0.0) + railties (>= 6.1.0) fakeredis (0.1.4) ffaker (2.24.0) foreman (0.88.1) @@ -342,7 +342,7 @@ GEM zeitwerk (~> 2.6) rainbow (3.1.1) rake (13.3.0) - rdoc (6.14.0) + rdoc (6.14.1) erb psych (>= 4.0.0) redis (5.4.0) @@ -422,10 +422,10 @@ GEM rexml (~> 3.2, >= 3.2.5) rubyzip (>= 1.2.2, < 3.0) websocket (~> 1.0) - sentry-rails (5.24.0) + sentry-rails (5.26.0) railties (>= 5.0) - sentry-ruby (~> 5.24.0) - sentry-ruby (5.24.0) + sentry-ruby (~> 5.26.0) + sentry-ruby (5.26.0) bigdecimal concurrent-ruby (~> 1.0, >= 1.0.2) shoulda-matchers (6.5.0) @@ -540,6 +540,7 @@ DEPENDENCIES kaminari lograge oj + parallel pg prometheus_exporter pry-byebug diff --git a/README.md b/README.md index f946478d..789bd889 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,6 @@ # 🌍 Dawarich: Your Self-Hosted Location History Tracker [![Discord](https://dcbadge.limes.pink/api/server/pHsBjpt5J8)](https://discord.gg/pHsBjpt5J8) | [![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/H2H3IDYDD) | [![Patreon](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Fshieldsio-patreon.vercel.app%2Fapi%3Fusername%3Dfreika%26type%3Dpatrons&style=for-the-badge)](https://www.patreon.com/freika) -Donate using crypto: [0x6bAd13667692632f1bF926cA9B421bEe7EaEB8D4](https://etherscan.io/address/0x6bAd13667692632f1bF926cA9B421bEe7EaEB8D4) [![CircleCI](https://circleci.com/gh/Freika/dawarich.svg?style=svg)](https://app.circleci.com/pipelines/github/Freika/dawarich) diff --git a/app.json b/app.json index 2f2f9e51..9c425d4e 100644 --- a/app.json +++ b/app.json @@ -9,5 +9,17 @@ "dokku": { "predeploy": "bundle exec rails db:migrate" } + }, + "healthchecks": { + "web": [ + { + "type": "startup", + "name": "web check", + "description": "Checking if the app responds to the /api/v1/health endpoint", + "path": "/api/v1/health", + "attempts": 10, + "interval": 10 + } + ] } } diff --git a/app/views/imports/index.html.erb b/app/views/imports/index.html.erb index 431ab51b..f86c2c5d 100644 --- a/app/views/imports/index.html.erb +++ b/app/views/imports/index.html.erb @@ -8,12 +8,12 @@ <% if current_user.safe_settings.immich_url && current_user.safe_settings.immich_api_key %> <%= link_to 'Import Immich data', settings_background_jobs_path(job_name: 'start_immich_import'), method: :post, data: { confirm: 'Are you sure?', turbo_confirm: 'Are you sure?', turbo_method: :post }, class: 'rounded-lg py-3 px-5 bg-blue-600 text-white block font-medium' %> <% else %> - Import Immich data + Import Immich data <% end %> <% if current_user.safe_settings.photoprism_url && current_user.safe_settings.photoprism_api_key %> <%= link_to 'Import Photoprism data', settings_background_jobs_path(job_name: 'start_photoprism_import'), method: :post, data: { confirm: 'Are you sure?', turbo_confirm: 'Are you sure?', turbo_method: :post }, class: 'rounded-lg py-3 px-5 bg-blue-600 text-white block font-medium' %> <% else %> - Import Photoprism data + Import Photoprism data <% end %> diff --git a/config/cable.yml b/config/cable.yml index 917fe123..ae88845e 100644 --- a/config/cable.yml +++ b/config/cable.yml @@ -1,11 +1,11 @@ development: adapter: redis - url: <%= "#{ENV.fetch("REDIS_URL")}/2" %> + url: <%= "#{ENV.fetch("REDIS_URL")}/#{ENV.fetch('RAILS_WS_DB', 2)}" %> test: adapter: test production: adapter: redis - url: <%= "#{ENV.fetch("REDIS_URL")}/2" %> + url: <%= "#{ENV.fetch("REDIS_URL")}/#{ENV.fetch('RAILS_WS_DB', 2)}" %> channel_prefix: dawarich_production diff --git a/config/environments/development.rb b/config/environments/development.rb index fadc861a..68c0aeaa 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -26,7 +26,7 @@ Rails.application.configure do # Enable/disable caching. By default caching is disabled. # Run rails dev:cache to toggle caching. - config.cache_store = :redis_cache_store, { url: "#{ENV['REDIS_URL']}/0" } + config.cache_store = :redis_cache_store, { url: "#{ENV['REDIS_URL']}/#{ENV.fetch('RAILS_CACHE_DB', 0)}" } if Rails.root.join('tmp/caching-dev.txt').exist? config.action_controller.perform_caching = true diff --git a/config/environments/production.rb b/config/environments/production.rb index 22b3a3d2..7207e549 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -73,7 +73,7 @@ Rails.application.configure do config.log_level = ENV.fetch('RAILS_LOG_LEVEL', 'info') # Use a different cache store in production. - config.cache_store = :redis_cache_store, { url: "#{ENV['REDIS_URL']}/0" } + config.cache_store = :redis_cache_store, { url: "#{ENV['REDIS_URL']}/#{ENV.fetch('RAILS_CACHE_DB', 0)}" } # Use a real queuing backend for Active Job (and separate queues per environment). config.active_job.queue_adapter = :sidekiq @@ -99,8 +99,8 @@ Rails.application.configure do # "example.com", # Allow requests from example.com # /.*\.example\.com/ # Allow requests from subdomains like `www.example.com` # ] - # Skip DNS rebinding protection for the default health check endpoint. - # config.host_authorization = { exclude: ->(request) { request.path == "/up" } } + # Skip DNS rebinding protection for the health check endpoint. + config.host_authorization = { exclude: ->(request) { request.path == "/api/v1/health" } } hosts = ENV.fetch('APPLICATION_HOSTS', 'localhost').split(',') config.action_mailer.default_url_options = { host: ENV['SMTP_DOMAIN'] } diff --git a/config/initializers/geocoder.rb b/config/initializers/geocoder.rb index 4ddfe9d4..13a8bbdd 100644 --- a/config/initializers/geocoder.rb +++ b/config/initializers/geocoder.rb @@ -4,7 +4,7 @@ settings = { debug_mode: true, timeout: 5, units: :km, - cache: Redis.new(url: "#{ENV['REDIS_URL']}/0"), + cache: Redis.new(url: "#{ENV['REDIS_URL']}/#{ENV.fetch('RAILS_CACHE_DB', 0)}"), always_raise: :all, http_headers: { 'User-Agent' => "Dawarich #{APP_VERSION} (https://dawarich.app)" diff --git a/config/initializers/sidekiq.rb b/config/initializers/sidekiq.rb index 49b0c98b..323655e3 100644 --- a/config/initializers/sidekiq.rb +++ b/config/initializers/sidekiq.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true Sidekiq.configure_server do |config| - config.redis = { url: "#{ENV['REDIS_URL']}/1" } + config.redis = { url: "#{ENV['REDIS_URL']}/#{ENV.fetch('RAILS_JOB_QUEUE_DB', 1)}" } config.logger = Sidekiq::Logger.new($stdout) if ENV['PROMETHEUS_EXPORTER_ENABLED'].to_s == 'true' @@ -24,7 +24,7 @@ Sidekiq.configure_server do |config| end Sidekiq.configure_client do |config| - config.redis = { url: "#{ENV['REDIS_URL']}/1" } + config.redis = { url: "#{ENV['REDIS_URL']}/#{ENV.fetch('RAILS_JOB_QUEUE_DB', 1)}" } end Sidekiq::Queue['reverse_geocoding'].limit = 1 if Sidekiq.server? && DawarichSettings.photon_uses_komoot_io? diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 7b20a74f..ca0fb27c 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -67,7 +67,7 @@ services: APPLICATION_HOSTS: localhost TIME_ZONE: Europe/London APPLICATION_PROTOCOL: http - PROMETHEUS_EXPORTER_ENABLED: false + PROMETHEUS_EXPORTER_ENABLED: "false" PROMETHEUS_EXPORTER_HOST: 0.0.0.0 PROMETHEUS_EXPORTER_PORT: 9394 SELF_HOSTED: "true" @@ -119,7 +119,7 @@ services: APPLICATION_HOSTS: localhost BACKGROUND_PROCESSING_CONCURRENCY: 10 APPLICATION_PROTOCOL: http - PROMETHEUS_EXPORTER_ENABLED: false + PROMETHEUS_EXPORTER_ENABLED: "false" PROMETHEUS_EXPORTER_HOST: dawarich_app PROMETHEUS_EXPORTER_PORT: 9394 SELF_HOSTED: "true"