From c54d52ad4540c3c8b52ddad76aa03e6d86f5a115 Mon Sep 17 00:00:00 2001 From: devlikepro Date: Tue, 18 Jun 2024 10:50:17 +0700 Subject: [PATCH] [core] built in ssl --- .gitignore | 1 + Dockerfile | 4 ++++ docker-compose.yaml | 34 ++++++++++++++++++++++++++++++++++ package.json | 1 + src/core/app.module.core.ts | 10 +++++++++- src/main.ts | 4 +++- yarn.lock | 3 ++- 7 files changed, 54 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index e47ea737..25f7eaa0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,7 @@ .yarn example.ts .*sessions +.secrets tokens files venv diff --git a/Dockerfile b/Dockerfile index 74685395..667e1d93 100644 --- a/Dockerfile +++ b/Dockerfile @@ -73,6 +73,10 @@ COPY package.json ./ COPY --from=build /src/node_modules ./node_modules COPY --from=build /src/dist ./dist +# Chokidar options to monitor file changes +ENV CHOKIDAR_USEPOLLING=1 +ENV CHOKIDAR_INTERVAL=5000 + # Run command, etc EXPOSE 3000 CMD yarn start:prod diff --git a/docker-compose.yaml b/docker-compose.yaml index eb23960d..a772c6c6 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -67,6 +67,40 @@ services: - WHATSAPP_SESSIONS_MONGO_URL=mongodb://mongodb:27017 restart: always + # Let's Encrypt + Certbot + # https://waha.devlike.pro/docs/how-to/security/#https + waha-https--certbot: + image: devlikeapro/waha-plus + restart: unless-stopped + ports: + - '3000:3000' + volumes: + - './.sessions:/app/.sessions' + - '/etc/letsencrypt:/etc/letsencrypt' + environment: + - DOMAIN=waha.example.pro + - WHATSAPP_API_HOSTNAME=${DOMAIN} + - WAHA_HTTPS_ENABLED=true + - WAHA_HTTPS_PATH_KEY=/etc/letsencrypt/live/${DOMAIN}/privkey.pem + - WAHA_HTTPS_PATH_CERT=/etc/letsencrypt/live/${DOMAIN}/cert.pem + - WAHA_HTTPS_PATH_CA=/etc/letsencrypt/live/${DOMAIN}/chain.pem + + # Self-signed certificates example + # https://waha.devlike.pro/docs/how-to/security/#https + waha-https--self-signed: + image: devlikeapro/waha-plus + restart: unless-stopped + ports: + - '3000:3000' + volumes: + - './.sessions:/app/.sessions' + - './.secrets:/app/.secrets' + environment: + - WAHA_HTTPS_ENABLED=true + - WAHA_HTTPS_PATH_KEY=.secrets/privkey.pem + - WAHA_HTTPS_PATH_CERT=.secrets/cert.pem + - WAHA_HTTPS_PATH_CA=.secrets/chain.pem + mongodb: image: mongo container_name: mongodb diff --git a/package.json b/package.json index 45342349..ffa82a77 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "async-lock": "^1.4.1", "better-sqlite3": "9.6.0", "check-disk-space": "^3.4.0", + "chokidar": "^3.6.0", "class-transformer": "^0.5.1", "class-validator": "0.14.0", "del": "^6.0.0", diff --git a/src/core/app.module.core.ts b/src/core/app.module.core.ts index bca6ed2e..4faffad1 100644 --- a/src/core/app.module.core.ts +++ b/src/core/app.module.core.ts @@ -1,4 +1,4 @@ -import { ConsoleLogger, Module } from '@nestjs/common'; +import { ConsoleLogger, INestApplication, Module } from '@nestjs/common'; import { ConfigModule } from '@nestjs/config'; import { APP_INTERCEPTOR } from '@nestjs/core'; import { PassportModule } from '@nestjs/passport'; @@ -102,4 +102,12 @@ const PROVIDERS = [ }) export class AppModuleCore { constructor(protected config: WhatsappConfigService) {} + + static getHttpsOptions() { + return undefined; + } + + static appReady(app: INestApplication) { + return; + } } diff --git a/src/main.ts b/src/main.ts index 90a0036c..3c608cc7 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,4 +1,3 @@ -import { ValidationPipe } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; import { json, urlencoded } from 'express'; @@ -41,8 +40,10 @@ async function loadModules(): Promise< async function bootstrap() { const [AppModule, SwaggerModule] = await loadModules(); + const httpsOptions = AppModule.getHttpsOptions(); const app = await NestFactory.create(AppModule, { logger: getLogLevels(false), + httpsOptions: httpsOptions, }); app.enableShutdownHooks(); @@ -60,6 +61,7 @@ async function bootstrap() { const swaggerConfigurator = new SwaggerModule(app); swaggerConfigurator.configure(WAHA_WEBHOOKS); + AppModule.appReady(app); const config = app.get(WhatsappConfigService); await app.listen(config.port); console.log(`WhatsApp HTTP API is running on: ${await app.getUrl()}`); diff --git a/yarn.lock b/yarn.lock index ff2f1cf9..ffea5f9e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4120,7 +4120,7 @@ __metadata: languageName: node linkType: hard -"chokidar@npm:^3.5.3": +"chokidar@npm:^3.5.3, chokidar@npm:^3.6.0": version: 3.6.0 resolution: "chokidar@npm:3.6.0" dependencies: @@ -12862,6 +12862,7 @@ __metadata: async-lock: ^1.4.1 better-sqlite3: 9.6.0 check-disk-space: ^3.4.0 + chokidar: ^3.6.0 class-transformer: ^0.5.1 class-validator: 0.14.0 del: ^6.0.0