From b58dd5f25c9eeed4f168adadf6505e6332e142e6 Mon Sep 17 00:00:00 2001 From: Aaro Koivukangas Date: Tue, 16 Jun 2026 15:39:29 +0300 Subject: [PATCH] [Docker] Add oodikone- prefix to container and volume names --- .github/workflows/test.yaml | 6 ++-- .github/workflows/updater.yaml | 10 +++--- README.md | 8 ++--- anonyymioodi/commit_and_push_to_toska_hub.sh | 2 +- anonyymioodi/create_container_from_dump.sh | 6 ++-- anonyymioodi/docker-compose.yml | 8 ++--- anonyymioodi/update_staging_db.sh | 2 +- docker-compose.ci.yml | 26 +++++++------- docker-compose.real.yml | 3 ++ docker-compose.test.yml | 8 +++-- docker-compose.yml | 36 +++++++++++++------- documentation/migrations.md | 6 ++-- package.json | 10 +++--- scripts/functions_for_setup.sh | 5 +-- 14 files changed, 78 insertions(+), 58 deletions(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 532956e1b..ef01c6896 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -167,7 +167,7 @@ jobs: - name: 'Let sis-updater-worker run migrations, then push new version of image to toska hub' run: | - docker compose --file docker-compose.ci.yml up --detach --quiet-pull sis-updater-worker + docker compose --file docker-compose.ci.yml up --detach --quiet-pull oodikone-updater-worker sleep 30 # wait for sis-updater-worker to start and run migrations ./anonyymioodi/commit_and_push_to_toska_hub.sh sis-db @@ -207,7 +207,7 @@ jobs: - name: 'Let backend run migrations, then push new version of image to toska hub' run: | - docker compose --file docker-compose.ci.yml up --detach backend + docker compose --file docker-compose.ci.yml up --detach oodikone-backend sleep 30 # wait for backend to start and run migrations ./anonyymioodi/commit_and_push_to_toska_hub.sh kone-db @@ -254,7 +254,7 @@ jobs: - name: 'Let backend run migrations, then push new version of image to toska hub' run: | - docker compose --file docker-compose.ci.yml up --detach backend + docker compose --file docker-compose.ci.yml up --detach oodikone-backend sleep 30 # wait for backend to start and run migrations ./anonyymioodi/commit_and_push_to_toska_hub.sh user-db diff --git a/.github/workflows/updater.yaml b/.github/workflows/updater.yaml index 25e5b9877..ea78f3a6b 100644 --- a/.github/workflows/updater.yaml +++ b/.github/workflows/updater.yaml @@ -93,24 +93,24 @@ jobs: - name: 'Load scheduler image' run: docker load --input scheduler.tar - name: 'Start worker' - run: docker compose --file docker-compose.ci.yml up --detach --no-recreate sis-updater-worker + run: docker compose --file docker-compose.ci.yml up --detach --no-recreate oodikone-updater-worker - name: 'Run hourly jobs' - run: docker compose --file docker-compose.ci.yml run sis-updater-scheduler npm start + run: docker compose --file docker-compose.ci.yml run oodikone-updater-scheduler npm start env: SCHEDULE_IMMEDIATE: hourly EXIT_AFTER_IMMEDIATES: yes - name: 'Run weekly jobs' - run: docker compose --file docker-compose.ci.yml run sis-updater-scheduler npm start + run: docker compose --file docker-compose.ci.yml run oodikone-updater-scheduler npm start env: SCHEDULE_IMMEDIATE: weekly EXIT_AFTER_IMMEDIATES: yes - name: 'Run prepurge' - run: docker compose --file docker-compose.ci.yml run sis-updater-scheduler npm start + run: docker compose --file docker-compose.ci.yml run oodikone-updater-scheduler npm start env: SCHEDULE_IMMEDIATE: prepurge EXIT_AFTER_IMMEDIATES: yes - name: 'Run purge' - run: docker compose --file docker-compose.ci.yml run sis-updater-scheduler npm start + run: docker compose --file docker-compose.ci.yml run oodikone-updater-scheduler npm start env: SCHEDULE_IMMEDIATE: purge EXIT_AFTER_IMMEDIATES: yes diff --git a/README.md b/README.md index e82e12c7c..32e375c7e 100644 --- a/README.md +++ b/README.md @@ -147,10 +147,10 @@ It is recommended to spend some time to become familiar with `docker` and `docke - `./run.sh oodikone anon pull`: pull all images related to Oodikone development - `./run.sh updater real up --build --force-recreate --detach`: start updater detached (in the background) in real data mode, but build new images before starting - `docker compose ps`: view the containers in the running environment -- `docker compose logs frontend`: print logs for just frontend -- `docker compose logs --follow --tail 100 backend`: print last hundred rows of backend logs and begin to follow them in your terminal window -- `docker exec -it backend sh`: open bash terminal inside backend container -- `docker exec -it sis-db psql -U postgres sis-db-real`: open psql client to investigate sis real data database +- `docker compose logs oodikone-frontend`: print logs for just frontend +- `docker compose logs --follow --tail 100 oodikone-backend`: print last hundred rows of backend logs and begin to follow them in your terminal window +- `docker exec -it oodikone-backend sh`: open bash terminal inside backend container +- `docker exec -it oodikone-sis-db psql -U postgres sis-db-real`: open psql client to investigate sis real data database ### User types for development diff --git a/anonyymioodi/commit_and_push_to_toska_hub.sh b/anonyymioodi/commit_and_push_to_toska_hub.sh index 36a628c8d..0a3e70869 100755 --- a/anonyymioodi/commit_and_push_to_toska_hub.sh +++ b/anonyymioodi/commit_and_push_to_toska_hub.sh @@ -43,6 +43,6 @@ fi infomsg "Committing and pushing to registry" database=${args[0]} -docker commit "$database" "registry-toska.ext.ocp-prod-0.k8s.it.helsinki.fi/$database" +docker commit "oodikone-$database" "registry-toska.ext.ocp-prod-0.k8s.it.helsinki.fi/$database" docker push "registry-toska.ext.ocp-prod-0.k8s.it.helsinki.fi/$database" successmsg "Succesfully pushed" diff --git a/anonyymioodi/create_container_from_dump.sh b/anonyymioodi/create_container_from_dump.sh index 9601f7504..2d7e1ac6e 100755 --- a/anonyymioodi/create_container_from_dump.sh +++ b/anonyymioodi/create_container_from_dump.sh @@ -52,13 +52,13 @@ fi infomsg "Restoring PostgreSQL dumps from backups. This might take a while." -database=${args[0]} +database="${args[0]}" docker-compose down --remove-orphans docker-compose up -d "$database" database_dump="$database.sqz" infomsg "Attempting to restore database $database from dump $database_dump" -retry docker-compose exec "$database" pg_isready --dbname="$database" -docker exec -i "$database" /bin/bash -c "pg_restore --username=postgres \ +retry docker-compose exec "oodikone-$database" pg_isready --dbname="$database" +docker exec -i "oodikone-$database" /bin/bash -c "pg_restore --username=postgres \ --format=custom --dbname=$database --no-owner" < "$database_dump" successmsg "Database $database succesfully created" diff --git a/anonyymioodi/docker-compose.yml b/anonyymioodi/docker-compose.yml index e8df7a578..aea66d4f1 100644 --- a/anonyymioodi/docker-compose.yml +++ b/anonyymioodi/docker-compose.yml @@ -4,7 +4,7 @@ x-defaults: &defaults services: kone-db: <<: *defaults - container_name: kone-db + container_name: oodikone-kone-db environment: PGDATA: /data POSTGRES_DB: kone-db @@ -13,7 +13,7 @@ services: sis-db: <<: *defaults - container_name: sis-db + container_name: oodikone-sis-db environment: PGDATA: /data POSTGRES_DB: sis-db @@ -23,7 +23,7 @@ services: sis-importer-db: <<: *defaults - container_name: sis-importer-db + container_name: oodikone-sis-importer-db environment: PGDATA: /data POSTGRES_DB: sis-importer-db @@ -32,7 +32,7 @@ services: user-db: <<: *defaults - container_name: user-db + container_name: oodikone-user-db environment: PGDATA: /data POSTGRES_DB: user-db diff --git a/anonyymioodi/update_staging_db.sh b/anonyymioodi/update_staging_db.sh index f2af99945..4738ea062 100755 --- a/anonyymioodi/update_staging_db.sh +++ b/anonyymioodi/update_staging_db.sh @@ -56,7 +56,7 @@ function create_dumps() { function create_dump_from_db() { echo "Dumping db $1..." - docker exec "$1" pg_dump -Fc -U postgres "$1" > "$dump_directory/$1.sqz" || die "Failed to dump db $1" + docker exec "oodikone-$1" pg_dump -Fc -U postgres "$1" > "$dump_directory/$1.sqz" || die "Failed to dump db $1" } diff --git a/docker-compose.ci.yml b/docker-compose.ci.yml index 871569b0a..e4f35bd68 100644 --- a/docker-compose.ci.yml +++ b/docker-compose.ci.yml @@ -1,10 +1,12 @@ +name: oodikone + x-defaults: &defaults restart: unless-stopped services: backend: <<: *defaults - container_name: backend + container_name: oodikone-backend depends_on: - kone-db - redis @@ -31,7 +33,7 @@ services: frontend: <<: *defaults - container_name: frontend + container_name: oodikone-frontend build: context: services dockerfile: frontend/Dockerfile @@ -41,7 +43,7 @@ services: kone-db: <<: *defaults - container_name: kone-db + container_name: oodikone-kone-db environment: PGDATA: /data POSTGRES_DB: kone-db @@ -50,16 +52,16 @@ services: redis: <<: *defaults + container_name: oodikone-redis command: > sh -c 'redis-server --appendonly yes && redis-cli flushall' image: redis:7.2.6 - container_name: redis ports: - 6379:6379 sis-db: <<: *defaults - container_name: sis-db + container_name: oodikone-sis-db image: registry-toska.ext.ocp-prod-0.k8s.it.helsinki.fi/sis-db environment: PGDATA: /data @@ -69,7 +71,7 @@ services: user-db: <<: *defaults - container_name: user-db + container_name: oodikone-user-db environment: PGDATA: /data POSTGRES_DB: user-db @@ -78,6 +80,7 @@ services: jami: <<: *defaults + container_name: oodikone-jami image: quay.io/toska/jami:production environment: - npm_config_cache=/tmp @@ -86,21 +89,20 @@ services: - DATABASE_URL=postgres://postgres:postgres@jami-db:5432/postgres ports: - 3003:3003 - container_name: jami jami-db: <<: *defaults + container_name: oodikone-jami-db image: postgres:15.10 environment: - PGDATA=/data - POSTGRES_PASSWORD=postgres - container_name: jami-db ports: - 5433:5432 nginx: + container_name: oodikone-nginx image: nginx:latest - container_name: nginx depends_on: - frontend - backend @@ -114,16 +116,16 @@ services: # Following services are used to run sis-updater-worker when anon sis-db needs to be updated. Could probably also use production version, but this certainly works. sis-importer-db: <<: *defaults - container_name: sis-importer-db + container_name: oodikone-sis-importer-db image: registry-toska.ext.ocp-prod-0.k8s.it.helsinki.fi/sis-importer-db profiles: - updater sis-updater-worker: <<: *defaults + container_name: oodikone-updater-worker build: context: updater/sis-updater-worker - container_name: sis-updater-worker depends_on: - redis - sis-db @@ -142,9 +144,9 @@ services: sis-updater-scheduler: <<: *defaults + container_name: oodikone-updater-scheduler build: context: updater/sis-updater-scheduler - container_name: sis-updater-scheduler depends_on: - redis - sis-importer-db diff --git a/docker-compose.real.yml b/docker-compose.real.yml index 6a4bbd66a..d344aff9d 100644 --- a/docker-compose.real.yml +++ b/docker-compose.real.yml @@ -1,3 +1,5 @@ +name: oodikone + services: backend: environment: @@ -20,3 +22,4 @@ services: volumes: redis-data-real: + name: oodikone-redis-data-real diff --git a/docker-compose.test.yml b/docker-compose.test.yml index 3f02b8541..3407e1b81 100644 --- a/docker-compose.test.yml +++ b/docker-compose.test.yml @@ -1,5 +1,9 @@ services: api-tests: + container_name: oodikone-api-tests + build: + context: services/backend + dockerfile: dev.Dockerfile volumes: - backend-tests-nodemod:/opt/app-root/backend/node_modules - ./services/backend/:/opt/app-root/backend @@ -17,10 +21,8 @@ services: JAMI_URL: 'http://jami:3003/' IMPORTER_DB_API_URL: 'https://api-toska.apps.ocp-prod-0.k8s.it.helsinki.fi/importer' CRYPT_KEY: 'e16730fce263d5270ba8dcf84d068a32556542455e71331880d6c1c5e4db9b4e' - build: - context: services/backend - dockerfile: dev.Dockerfile command: npm run test volumes: backend-tests-nodemod: + name: oodikone-backend-tests-nodemod diff --git a/docker-compose.yml b/docker-compose.yml index 218addddf..e54829c57 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,3 +1,5 @@ +name: oodikone + x-defaults: &defaults restart: unless-stopped @@ -7,7 +9,7 @@ x-build_defaults: &build_defaults services: adminer: <<: *defaults - container_name: adminer + container_name: oodikone-adminer environment: ADMINER_DESIGN: pepa-linha image: adminer:4.8.1 @@ -18,10 +20,10 @@ services: backend: <<: *defaults + container_name: oodikone-backend build: <<: *build_defaults context: services/backend - container_name: backend depends_on: - kone-db - redis @@ -51,10 +53,10 @@ services: frontend: <<: *defaults + container_name: oodikone-frontend build: <<: *build_defaults context: services/frontend - container_name: frontend ports: - 3000:3000 profiles: @@ -66,7 +68,7 @@ services: kone-db: <<: *defaults - container_name: kone-db + container_name: oodikone-kone-db image: registry-toska.ext.ocp-prod-0.k8s.it.helsinki.fi/kone-db profiles: - oodikone @@ -75,8 +77,8 @@ services: redis: <<: *defaults + container_name: oodikone-redis command: 'redis-server --appendonly yes' - container_name: redis image: redis:7.2.6 ports: - '6379:6379' @@ -85,7 +87,7 @@ services: sis-db: <<: *defaults - container_name: sis-db + container_name: oodikone-sis-db image: registry-toska.ext.ocp-prod-0.k8s.it.helsinki.fi/sis-db volumes: - sis-db-data:/data @@ -95,7 +97,7 @@ services: sis-importer-db: <<: *defaults - container_name: sis-importer-db + container_name: oodikone-sis-importer-db image: registry-toska.ext.ocp-prod-0.k8s.it.helsinki.fi/sis-importer-db profiles: - updater @@ -106,10 +108,10 @@ services: sis-updater-scheduler: <<: *defaults + container_name: oodikone-updater-scheduler build: <<: *build_defaults context: updater/sis-updater-scheduler - container_name: sis-updater-scheduler depends_on: - redis - sis-importer-db @@ -130,10 +132,10 @@ services: sis-updater-worker: <<: *defaults + container_name: oodikone-updater-worker build: <<: *build_defaults context: updater/sis-updater-worker - container_name: sis-updater-worker depends_on: - redis - sis-db @@ -154,7 +156,7 @@ services: user-db: <<: *defaults - container_name: user-db + container_name: oodikone-user-db image: registry-toska.ext.ocp-prod-0.k8s.it.helsinki.fi/user-db profiles: - oodikone @@ -163,6 +165,7 @@ services: jami: <<: *defaults + container_name: oodikone-jami image: quay.io/toska/jami:production env_file: - .env @@ -173,15 +176,14 @@ services: - DATABASE_URL=postgres://postgres:postgres@jami-db:5432/jami-db-real ports: - 3003:3003 - container_name: jami jami-db: <<: *defaults + container_name: oodikone-jami-db image: postgres:15.10 environment: - PGDATA=/data - POSTGRES_PASSWORD=postgres - container_name: jami-db ports: - 5433:5432 volumes: @@ -189,12 +191,22 @@ services: volumes: backend-nodemod: + name: oodikone-backend-nodemod frontend-nodemod: + name: oodikone-frontend-nodemod kone-db-data: + name: oodikone-kone-db-data redis-data: + name: oodikone-redis-data sis-db-data: + name: oodikone-sis-db-data sis-importer-db-data: + name: oodikone-sis-importer-db-data sis-updater-scheduler-nodemod: + name: oodikone-updater-scheduler-nodemod sis-updater-worker-nodemod: + name: oodikone-updater-worker-nodemod user-db-data: + name: oodikone-user-db-data jami-data: + name: oodikone-jami-data diff --git a/documentation/migrations.md b/documentation/migrations.md index 99512bf5a..7a72127d8 100644 --- a/documentation/migrations.md +++ b/documentation/migrations.md @@ -8,7 +8,7 @@ These instructions explain how to update the schemas for the following databases The steps to **add, remove, or modify columns** are mostly the same for each database, but the file paths and container names differ. Always **double-check** that you have the correct function name, column name, data type, and other relevant details in your migration file. -> [!NOTE] +> [!NOTE] > If you need to change the `sis-importer-db` schema, see the instructions in the [sis-importer repo](https://github.com/UniversityOfHelsinkiCS/sis-importer/blob/master/README.md#tricks--tips). ## General guidelines @@ -25,7 +25,7 @@ The steps to **add, remove, or modify columns** are mostly the same for each dat - Use **snake_case** in the actual database columns. - If a model has `underscored: true`, Sequelize automatically converts camelCase to snake_case in all queries. Otherwise, specify the column name explicitly. -> [!IMPORTANT] +> [!IMPORTANT] > The column name **in the database** (snake_case) must be used in the migration file, not the camelCase name from your model. ### Verifying the migration locally @@ -73,7 +73,7 @@ If you need to **revert a migration locally**, follow these steps: ## `sis-db` -> [!NOTE] +> [!NOTE] > These instructions assume that needed data is already in the `sis-importer-db`. If not, you must add the data there first. See the [sis-importer repo](https://github.com/UniversityOfHelsinkiCS/sis-importer/blob/master/README.md#tricks--tips) for more details. 1. **Update the updater model:** diff --git a/package.json b/package.json index 8d174ce58..b1da9e220 100644 --- a/package.json +++ b/package.json @@ -15,20 +15,20 @@ "oodikone": "./run.sh oodikone anon up --detach", "oodikone:real": "./run.sh oodikone real up --detach", "oodikone:ci:setup": "docker compose --file docker-compose.ci.yml --profile tests up --detach", - "oodikone:ci:api": "docker compose --file docker-compose.test.yml up --exit-code-from api-tests", + "oodikone:ci:api": "docker compose --file docker-compose.test.yml up --exit-code-from oodikone-api-tests", "updater": "./run.sh updater anon up --detach", "updater:real": "./run.sh updater real up --detach", "both": "./run.sh both anon up --detach", "both:real": "./run.sh both real up --detach", "docker:down": "./run.sh both anon down --remove-orphans; ./run.sh both real down --remove-orphans", - "testupdater": "docker-compose --file docker-compose.ci.yml up --detach --no-recreate sis-updater-worker && SCHEDULE_IMMEDIATE=weekly EXIT_AFTER_IMMEDIATES=yes docker-compose --file docker-compose.ci.yml run sis-updater-scheduler npm start", - "flushredis": "docker exec -it redis redis-cli flushall", + "testupdater": "docker-compose --file docker-compose.ci.yml up --detach --no-recreate oodikone-updater-worker && SCHEDULE_IMMEDIATE=weekly EXIT_AFTER_IMMEDIATES=yes docker-compose --file docker-compose.ci.yml run oodikone-updater-scheduler npm start", + "flushredis": "docker exec -it oodikone-redis redis-cli flushall", "prepare": "husky", "install:local": "npm i && npm i --prefix services/shared && npm i --prefix services/frontend && npm i --prefix services/backend && npm i --prefix updater/sis-updater-scheduler && npm i --prefix updater/sis-updater-worker", - "install:docker": "docker exec frontend npm i && docker exec backend npm i && docker exec sis-updater-scheduler npm i && docker exec sis-updater-worker npm i", + "install:docker": "docker exec oodikone-frontend npm i && docker exec oodikone-backend npm i && docker exec oodikone-updater-scheduler npm i && docker exec oodikone-updater-worker npm i", "install:both": "npm run install:local && npm run install:docker", "ci:local": "npm ci && npm ci --prefix services/shared && npm ci --prefix services/frontend && npm ci --prefix services/backend && npm ci --prefix updater/sis-updater-scheduler && npm ci --prefix updater/sis-updater-worker", - "ci:docker": "docker exec frontend npm ci && docker exec backend npm ci && docker exec sis-updater-scheduler npm ci && docker exec sis-updater-worker npm ci", + "ci:docker": "docker exec oodikone-frontend npm ci && docker exec oodikone-backend npm ci && docker exec oodikone-updater-scheduler npm ci && docker exec oodikone-updater-worker npm ci", "ci:both": "npm run ci:local && npm run ci:docker" }, "repository": { diff --git a/scripts/functions_for_setup.sh b/scripts/functions_for_setup.sh index 42a3c71c5..fa3a1069e 100755 --- a/scripts/functions_for_setup.sh +++ b/scripts/functions_for_setup.sh @@ -116,7 +116,7 @@ reset_databases() { for database in "${databases[@]}"; do local database_dump="$database_dump_dir/$database.sql.gz" - local database_container="$database" + local database_container="oodikone-$database" local database_name="$database-real" infomsg "Attempting to create database $database_name from dump $database_dump inside container $database_container" @@ -215,6 +215,7 @@ set_up_oodikone_from_scratch() { "$PROJECT_ROOT" "$PROJECT_ROOT/services/frontend" "$PROJECT_ROOT/services/backend" + "$PROJECT_ROOT/services/shared" "$PROJECT_ROOT/updater/sis-updater-scheduler" "$PROJECT_ROOT/updater/sis-updater-worker" ) @@ -223,7 +224,7 @@ set_up_oodikone_from_scratch() { "$PROJECT_ROOT"/run.sh both down --remove-orphans --volumes --rmi all || infomsg "Cleaning errored, but will continue" for folder in "${folders_to_set_up[@]}"; do cd "$folder" || die "Couldn't change directory to folder $folder" - rm -rf node_modules|| die "Couldn't remove node_modules in folder $folder" + rm -rf node_modules || die "Couldn't remove node_modules in folder $folder" done infomsg "Installing npm packages locally to root and each subfolder to enable linting and formatting"