# Migrating your Docker Compose stack from AA V3.x to AA v4.x Our Docker Compose stack has both changed significantly, and simplified itself drastically depending on your level of familiarity with Docker. We have Removed our need to run Supervisor inside the container to run the various tasks needed, and split the stack into multiple containers responsible for each task, as well as modernized many elements. ## aa-docker/conf/* We are bundling a few often customized files along side our AA install for easier modification by users, you will need to download these into aa-docker/conf ```shell wget https://gitlab.com/allianceauth/allianceauth/-/raw/v4.x/docker/conf/celery.py wget https://gitlab.com/allianceauth/allianceauth/-/raw/v4.x/docker/conf/urls.py wget https://gitlab.com/allianceauth/allianceauth/-/raw/v4.x/docker/conf/memory_check.sh wget https://gitlab.com/allianceauth/allianceauth/-/raw/v4.x/docker/conf/redis_healthcheck.sh ``` ## Docker Compose At this point you should take a copy of your docker-compose and take note of any additional volumes or configurations you have, and why. Take a complete backup of your local.py, docker-compose and SQL database. `docker compose down` Replace your conf/nginx.conf with the contents of Replace your docker-compose.yml with the contents of V3.x installs likely used a dedicated database for Nginx Proxy Manager, you can either setup NPM again without a database, or uncomment the sections noted to maintain this configuration ```docker proxy: ... # Uncomment this section to use a dedicated database for Nginx Proxy Manager environment: DB_MYSQL_HOST: "proxy-db" DB_MYSQL_PORT: 3306 DB_MYSQL_USER: "npm" DB_MYSQL_PASSWORD: "${PROXY_MYSQL_PASS?err}" DB_MYSQL_NAME: "npm" ... # Uncomment this section to use a dedicated database for Nginx Proxy Manager proxy-db: image: 'jc21/mariadb-aria:latest' restart: always environment: MYSQL_ROOT_PASSWORD: "${PROXY_MYSQL_PASS_ROOT?err}" MYSQL_DATABASE: 'npm' MYSQL_USER: 'npm' MYSQL_PASSWORD: "${PROXY_MYSQL_PASS?err}" ports: - 3306 volumes: - proxy-db:/var/lib/mysql logging: driver: "json-file" options: max-size: "1Mb" max-file: "5" ``` ## .env You will need to add some entries to your .env file ```bash AA_DB_CHARSET=utf8mb4 GF_SECURITY_ADMIN_USERNAME=admin ``` and `GF_SECURITY_ADMIN_PASSWORD` The password field is intentionally not filled so that you create one. You can either use the grafana credentials you have been using, or create a suitably secure password now. You will also need to update the `AA_DOCKER_TAG` to the version of V4.x you want to install. Either follow the pattern or check ## (Optional) Build Custom Container If you are using a docker container with a requirements.txt, You will need to reinstate some customizations. Modify `docker-compose.yml`, as follows. * Comment out the `image` line under `allianceauth` * Uncomment the `build` section * e.g. ```docker x-allianceauth-base: &allianceauth-base # image: ${AA_DOCKER_TAG?err} build: context: . dockerfile: custom.dockerfile args: AA_DOCKER_TAG: ${AA_DOCKER_TAG?err} restart: always ... ``` Now build your custom image ```shell docker compose pull docker compose build ``` ## Bring docker back up, migrate, collect static ```shell docker compose --env-file=.env up -d --remove-orphans docker compose exec allianceauth_gunicorn bash allianceauth update myauth auth migrate auth collectstatic --clear ```