From 80a9f4086aa94afebc2c8edd899151e12bd52646 Mon Sep 17 00:00:00 2001 From: Louis Fredice NJAKO MOLOM Date: Sun, 4 Aug 2024 18:09:57 +0200 Subject: [PATCH] chore: use docker-compose to deploy s3 bucket and smtp for local development --- .gitignore | 25 ++++++++++++- confiture-rest-api/README.md | 28 +++++---------- confiture-rest-api/docker-compose.yml | 35 +++++++++++++++++++ .../src/audits/file-storage.service.ts | 3 +- .../src/config-validation-schema.ts | 4 +-- 5 files changed, 72 insertions(+), 23 deletions(-) create mode 100644 confiture-rest-api/docker-compose.yml diff --git a/.gitignore b/.gitignore index b512c09d4..e31165e41 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,24 @@ -node_modules \ No newline at end of file +node_modules +# IDEs and editors +/.idea +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +.env + + +# System Files +.DS_Store +Thumbs.db +*.iml \ No newline at end of file diff --git a/confiture-rest-api/README.md b/confiture-rest-api/README.md index afc61adef..7517e99e8 100644 --- a/confiture-rest-api/README.md +++ b/confiture-rest-api/README.md @@ -7,6 +7,7 @@ Le projet est une API [Nest.js](https://nestjs.com/) et utilise une base de donn - [Node.js](https://nodejs.org) - [Yarn](https://yarnpkg.com) - [Docker](https://www.docker.com) +- [Docker Compose](https://docs.docker.com/compose/) ## Installation @@ -16,28 +17,17 @@ Installer les dépendances : yarn install ``` -Créer le fichier de variables d’environnement : +Lancer les conteneurs docker : ```sh -cp .env.example .env -``` - -Remplir les variables d’environnement requises dans le `.env` : - -- `MAILER_USER` et `MAILER_PASSWORD` peuvent être générées via [https://ethereal.email/](https://ethereal.email/) en cliquant sur "Create Ethereal account". -- `AIRTABLE_*`, `S3_*` et `AWS_*` doivent être demandées en privé. -- `JWT_SECRET` peut être laissé à sa valeur par défaut. - -Lancer la base de données : - -```sh -docker run --name confiture-db \ - --env POSTGRES_USER=db-user \ - --env POSTGRES_PASSWORD=db-password \ - --publish 127.0.0.1:5432:5432 \ - --detach \ - postgres:13 +docker-compose up -d ``` +Ci-dessous la liste des applications démarrées : +| Application | Description | Accès | +| -- | -- | -- | +| `db` | Bases de données Postgres | localhost:5432 | +| `minio` | Serveur S3 permettant de :
- créer un bucket
- créer une paire AWS_ACCESS_KEY_ID & AWS_SECRET_ACCESS_KEY | - IHM d'administration : http://localhost:9001 avec *login:* `ara-s3-user` / *mot de passe:* `ara-s3-password`
- API S3 : http://localhost:9000 | +| `fake-smtp` | Faux serveur smtp | - IHM de consultation des mails : http://localhost:8901
- Port serveur SMTP : 1025 | Lancer les migrations de la base de données : diff --git a/confiture-rest-api/docker-compose.yml b/confiture-rest-api/docker-compose.yml new file mode 100644 index 000000000..ffaa08b7f --- /dev/null +++ b/confiture-rest-api/docker-compose.yml @@ -0,0 +1,35 @@ +version: '3.7' +services: + db: + image: postgres + restart: always + environment: + POSTGRES_USER: db-user + POSTGRES_PASSWORD: db-password + ports: + - "5432:5432" + + minio-server: + image: 'bitnami/minio:latest' + restart: always + ports: + - '9000:9000' + - '9001:9001' + environment: + MINIO_DEFAULT_BUCKETS: ara-s3-bucket + MINIO_ROOT_USER: ara-s3-user + MINIO_ROOT_PASSWORD: ara-s3-password + MINIO_FORCE_NEW_KEYS: 'yes' + volumes: + - 'minio:/bitnami/minio/data' + + fake-smtp: + image: haravich/fake-smtp-server + restart: always + ports: + - "1025:1025" + - "8901:1080" + +volumes: + minio: + driver: local \ No newline at end of file diff --git a/confiture-rest-api/src/audits/file-storage.service.ts b/confiture-rest-api/src/audits/file-storage.service.ts index b5b44725a..a8cfa02b4 100644 --- a/confiture-rest-api/src/audits/file-storage.service.ts +++ b/confiture-rest-api/src/audits/file-storage.service.ts @@ -19,7 +19,8 @@ export class FileStorageService { credentials: { accessKeyId: config.get("AWS_ACCESS_KEY_ID"), secretAccessKey: config.get("AWS_SECRET_ACCESS_KEY") - } + }, + forcePathStyle: true }); } diff --git a/confiture-rest-api/src/config-validation-schema.ts b/confiture-rest-api/src/config-validation-schema.ts index e12720cde..253a5ab56 100644 --- a/confiture-rest-api/src/config-validation-schema.ts +++ b/confiture-rest-api/src/config-validation-schema.ts @@ -25,12 +25,12 @@ export const configValidationSchema = Joi.object({ AIRTABLE_ACCESS_TOKEN: Joi.string().required(), S3_ENDPOINT: Joi.string() - .uri({ scheme: ["https"] }) + .uri({ scheme: ["https", "http"] }) .required(), S3_REGION: Joi.string().required(), S3_BUCKET: Joi.string().required(), S3_VIRTUAL_HOST: Joi.string() - .uri({ scheme: ["https"] }) + .uri({ scheme: ["https", "http"] }) .required(), AWS_ACCESS_KEY_ID: Joi.string().required(), AWS_SECRET_ACCESS_KEY: Joi.string().required(),