Skip to content

Commit

Permalink
Experimental/minimal compose (#776)
Browse files Browse the repository at this point in the history
simple minimalistic way to get started running twake drive locally
  • Loading branch information
ericlinagora authored Jan 3, 2025
2 parents f87d85a + 268a920 commit f04e5f0
Show file tree
Hide file tree
Showing 4 changed files with 136 additions and 1 deletion.
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 <http://localhost/> in a browser


## Development
Expand Down
53 changes: 53 additions & 0 deletions tdrive/backend/node/src/cli/cmds/dev_cmds/set_local_user.ts
Original file line number Diff line number Diff line change
@@ -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 changes: 79 additions & 0 deletions tdrive/docker-compose.minimal.yml
Original file line number Diff line number Diff line change
@@ -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 [email protected] 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 change: 1 addition & 0 deletions tdrive/docker/tdrive-node/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ FROM node:lts-alpine AS node-base
RUN apk add --update-cache \
ghostscript \
graphicsmagick \
curl \
&& rm -rf /var/cache/apk/*


Expand Down

0 comments on commit f04e5f0

Please sign in to comment.