From 88af44d5c832ad2d4906dea78e0d91d3e52dbe14 Mon Sep 17 00:00:00 2001 From: Eric Doughty-Papassideris Date: Fri, 27 Dec 2024 15:50:45 +0100 Subject: [PATCH 1/2] =?UTF-8?q?=F0=9F=91=B7=20Minimal=20docker=20compose?= =?UTF-8?q?=20option=20for=20internal=20e2e=20testing?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +- .../src/cli/cmds/dev_cmds/set_local_user.ts | 53 +++++++++++ tdrive/docker-compose.minimal.yml | 91 +++++++++++++++++++ tdrive/docker/tdrive-node/Dockerfile | 1 + 4 files changed, 148 insertions(+), 1 deletion(-) create mode 100644 tdrive/backend/node/src/cli/cmds/dev_cmds/set_local_user.ts create mode 100644 tdrive/docker-compose.minimal.yml diff --git a/README.md b/README.md index b712c204f..80e59803c 100644 --- a/README.md +++ b/README.md @@ -38,8 +38,10 @@ To get a local copy up and running, please follow these simple steps. ``` 2. Run it with Docker ```sh - docker-compose up -d + cd tdrive + docker compose -f docker-compose.minimal.yml up ``` +3. Open in a browser ## Development diff --git a/tdrive/backend/node/src/cli/cmds/dev_cmds/set_local_user.ts b/tdrive/backend/node/src/cli/cmds/dev_cmds/set_local_user.ts new file mode 100644 index 000000000..f39234085 --- /dev/null +++ b/tdrive/backend/node/src/cli/cmds/dev_cmds/set_local_user.ts @@ -0,0 +1,53 @@ +import yargs from "yargs"; + +import runWithPlatform from "../../lib/run-with-platform"; +import gr from "../../../services/global-resolver"; +import { ConsoleController } from "../../../services/console/web/controller"; + +type CLIArgs = { + email: string; + password: string; +}; + +export default { + command: "set_local_user ", + describe: "Create or update a local account user and password", + builder: { + email: { + demandOption: true, + type: "string", + }, + password: { + demandOption: true, + type: "string", + }, + }, + handler: async (argv: CLIArgs) => { + await runWithPlatform("set_local_user", async ({ spinner: _spinner, platform: _platform }) => { + // Validation copied from tdrive/frontend/src/app/views/login/internal/signin/signin.jsx + if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(argv.email)) + throw new Error(`Invalid e-mail ${JSON.stringify(argv.email)}`); + if (!(argv.password.length >= 8)) + throw new Error(`Invalid password ${JSON.stringify(argv.password)}`); + await gr.services.users.init(); + const existingUser = await gr.services.users.getByEmail(argv.email); + if (existingUser) { + _spinner.info( + `Setting password of user ${existingUser.id} (${existingUser.email_canonical})`, + ); + await gr.services.users.setPassword({ id: existingUser.id }, argv.password); + } else { + _spinner.info(`Creating user with email: ${argv.email}`); + await new ConsoleController().signup({ + body: { + email: argv.email, + password: argv.password, + first_name: "set_local_user firstname", + last_name: "set_local_user lastname", + }, + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } as any); + } + }); + }, +} as yargs.CommandModule; diff --git a/tdrive/docker-compose.minimal.yml b/tdrive/docker-compose.minimal.yml new file mode 100644 index 000000000..4734475ec --- /dev/null +++ b/tdrive/docker-compose.minimal.yml @@ -0,0 +1,91 @@ +version: "3.4" + +services: + mongo: + container_name: mongo + image: mongo + healthcheck: + test: echo 'db.runCommand("ping").ok' | mongosh localhost:27017/test --quiet + interval: 2m + timeout: 2m + retries: 30 + start_period: 10s + start_interval: 3s + volumes: + - ./docker-data/mongo:/data/db + ports: + - 27017:27017 + + node_create_user: + build: + context: . + dockerfile: docker/tdrive-node/Dockerfile + # target: development + target: production + container_name: tdrive-node_create_user + hostname: tdrive-node_create_user + environment: &backend_env_vars + - DEV=dev + - ACCOUNTS_TYPE=internal + - DB_DRIVER=mongodb + - DB_MONGO_URI=mongodb://mongo:27017 + - PUBSUB_TYPE=local + - SEARCH_DRIVER=mongodb + - STORAGE_DRIVER=local + - STORAGE_LOCAL_PATH=/tmp/td + - ENABLE_FEATURE_ANTIVIRUS=false + - DIAG_PROBE_SECRET=diag-secret + + command: /usr/src/app/bin/twake-cli dev set_local_user a@b.com aaaaaaaa + volumes: + - ./backend/node/profiles:/usr/src/app/profiles + - ./backend/node/src:/usr/src/app/src + depends_on: + mongo: + condition: service_healthy + + node: + build: + context: . + dockerfile: docker/tdrive-node/Dockerfile + # target: development + target: production + container_name: tdrive-node + hostname: tdrive_node + ports: + - 4000:4000 + - 9229:9229 + environment: *backend_env_vars + healthcheck: + test: curl --fail 'http://localhost:4000/diagnostics/t/ready?secret=diag-secret' + volumes: + - ./backend/node/profiles:/usr/src/app/profiles + - ./backend/node/src:/usr/src/app/src + depends_on: + mongo: + condition: service_healthy + node_create_user: + condition: service_completed_successfully + + frontend: + build: + context: . + dockerfile: docker/tdrive-frontend/Dockerfile + container_name: tdrive-frontend + environment: + - DEV=production + - SSL_CERTS=off + - NODE_HOST=http://node:4000 + ports: + - 80:80 + - 443:443 + depends_on: + node: + condition: service_healthy + # - node + volumes: + - ./docker-data/logs/nginx/:/var/log/nginx + - ./docker-data/letsencrypt/:/etc/letsencrypt/ + - ./docker-data/drive-preview/:/tdrive-core/web/medias/ + - ./docker-data/uploads/:/tdrive-core/web/upload/ + - ./docker-data/ssl:/etc/nginx/ssl diff --git a/tdrive/docker/tdrive-node/Dockerfile b/tdrive/docker/tdrive-node/Dockerfile index b538b9238..47acae520 100755 --- a/tdrive/docker/tdrive-node/Dockerfile +++ b/tdrive/docker/tdrive-node/Dockerfile @@ -5,6 +5,7 @@ FROM node:lts-alpine AS node-base RUN apk add --update-cache \ ghostscript \ graphicsmagick \ + curl \ && rm -rf /var/cache/apk/* From 268a9202aaf5abe616436f4d704487b56fde52b7 Mon Sep 17 00:00:00 2001 From: Eric Doughty-Papassideris Date: Thu, 2 Jan 2025 13:44:49 +0100 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=91=B7=20Minimal=20docker=20compose?= =?UTF-8?q?=20DRYer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tdrive/docker-compose.minimal.yml | 24 ++++++------------------ 1 file changed, 6 insertions(+), 18 deletions(-) diff --git a/tdrive/docker-compose.minimal.yml b/tdrive/docker-compose.minimal.yml index 4734475ec..ed3032827 100644 --- a/tdrive/docker-compose.minimal.yml +++ b/tdrive/docker-compose.minimal.yml @@ -17,13 +17,11 @@ services: - 27017:27017 node_create_user: - build: + build: &backend_docker_build context: . dockerfile: docker/tdrive-node/Dockerfile # target: development target: production - container_name: tdrive-node_create_user - hostname: tdrive-node_create_user environment: &backend_env_vars - DEV=dev - ACCOUNTS_TYPE=internal @@ -37,33 +35,24 @@ services: - DIAG_PROBE_SECRET=diag-secret command: /usr/src/app/bin/twake-cli dev set_local_user a@b.com aaaaaaaa - volumes: + volumes: &backend_volumes - ./backend/node/profiles:/usr/src/app/profiles - ./backend/node/src:/usr/src/app/src - depends_on: + depends_on: &backend_dependencies mongo: condition: service_healthy node: - build: - context: . - dockerfile: docker/tdrive-node/Dockerfile - # target: development - target: production - container_name: tdrive-node - hostname: tdrive_node + build: *backend_docker_build ports: - 4000:4000 - 9229:9229 environment: *backend_env_vars healthcheck: test: curl --fail 'http://localhost:4000/diagnostics/t/ready?secret=diag-secret' - volumes: - - ./backend/node/profiles:/usr/src/app/profiles - - ./backend/node/src:/usr/src/app/src + volumes: *backend_volumes depends_on: - mongo: - condition: service_healthy + <<: *backend_dependencies node_create_user: condition: service_completed_successfully @@ -82,7 +71,6 @@ services: depends_on: node: condition: service_healthy - # - node volumes: - ./docker-data/logs/nginx/:/var/log/nginx - ./docker-data/letsencrypt/:/etc/letsencrypt/