Upgrade guide - Elasticsearch 8 and Redis 8

Release 2025.12.11 requires Elasticsearch 8 and Redis 8. The following steps are required to upgrade. If you are performing a fresh install, you can ignore this migration guide and follow the installation instructions in the documentation.

1. Elasticsearch

Note that the data stored in Elasticsearch is transient. It can be safely deleted and will be refilled with data from the database at startup.

If you are using an Elasticsearch container using Docker Compose:

  1. Bring down the application.
  2. Find the Elasticsearch volume using docker volume ls.
  3. Delete the Elasticsearch volume using docker volume rm <your volume>.
  4. Make sure the Reporter containers all have ELASTIC_SCHEME=http set. In our example docker-compose setup, you can do so by adding this variable to php.env.
  5. Make sure the Reporter containers and the Elasticsearch container all have an ELASTIC_PASSWORD environment variable set. In our example docker-compose setup, you can generate this secret by running the gen_secrets.sh shell script in the same folder as docker-compose.yml; it will generate a file elastic_secret.env with the variable set. Make sure this file is added to the env_file section of all Reporter containers and the Elasticsearch container.
  6. Update the Elasticsearch container in docker-compose.yml. The new default is below.
    • The image has been updated to 8.19.6.
    • The last two environment keys were added (xpack.security.enabled and xpack.security.http.ssl.enabled).
    • Everything else remained the same.
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.19.6
    container_name: reporter-elasticsearch
    hostname: reporter-elasticsearch
    restart: unless-stopped
    volumes:
      - elasticsearch:/usr/share/elasticsearch/data
    networks:
      - backend
    environment:
      - discovery.type=single-node
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - xpack.security.enabled=true
      # don't use SSL for direct container-to-container communication in same Docker network
      - xpack.security.http.ssl.enabled=false
    env_file: elastic_secret.env
    ulimits:
      memlock:
        soft: -1
        hard: -1

If you are using a managed Elasticsearch instance:

These steps can be done in a different order, depending on your setup.

  1. Take down the application.
  2. Delete the Elasticsearch instance.
  3. Set up a new Elasticsearch instance with Elasticsearch 8.
  4. Modify environment variables related to Elasticsearch in your .env files as needed to connect to it (in particular, ELASTIC_HOST, ELASTIC_USERNAME, and ELASTIC_PASSWORD may need to be updated).
  5. Bring the application back up.

2. Redis

You should update Redis to version 8. 

Note that the data stored in Redis is transient. It can be safely deleted and will be refilled with data from the database at startup.

If using Docker Compose, change the image to redis:8 in docker-compose.yml.

If you are using a managed Redis instance, set up a new Redis instance using Redis 8.

After you apply this update, you can check Settings > Status Report for your current Redis version. The latest supported version is 8.4.

After update

After updating the ElasticSearch and Redis images, you can bring the application back up.

When Reporter is back up, log in to Reporter and go to Findings in the main menu.

  • If you see any findings, the update was successful.
  • If you see the page, but there are no findings, Elasticsearch is still being populated with data from the database. This may take a while, depending on the size of your database.
    • If the page is still empty after half an hour, check the queue for any failed MakeSearchable jobs and contact support
  • If the page has a 500 internal server error, check the logs for the reporter-php container to help diagnose the problem. And if you need to, contact support.