Experimental/minimal compose (#776)

simple minimalistic way to get started running twake drive locally
This commit is contained in:
ericlinagora
2025-01-03 03:34:19 +01:00
committed by GitHub
4 changed files with 136 additions and 1 deletions
@@ -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 <email> <password>",
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<object, CLIArgs>;
+79
View File
@@ -0,0 +1,79 @@
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: &backend_docker_build
context: .
dockerfile: docker/tdrive-node/Dockerfile
# target: development
target: production
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_volumes
- ./backend/node/profiles:/usr/src/app/profiles
- ./backend/node/src:/usr/src/app/src
depends_on: &backend_dependencies
mongo:
condition: service_healthy
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_volumes
depends_on:
<<: *backend_dependencies
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
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
+1
View File
@@ -5,6 +5,7 @@ FROM node:lts-alpine AS node-base
RUN apk add --update-cache \
ghostscript \
graphicsmagick \
curl \
&& rm -rf /var/cache/apk/*