vzx7 / chat3-manager-backend

Panel for administering a web application on top of HestiaCP (backend)
MIT License
2 stars 0 forks source link

ะกhat3-manager-backend

This application implements the server part of the local hosting management manager. The client part of the application is located in the repository chat3-manager-frontend.

The application is built on the basis of a starter TypeScript Express Starter.

Technologies

๐Ÿณ Docker :: Container Platform

Docker is a platform for developers and sysadmins to build, run, and share applications with containers.

Docker Install.

Modify docker-compose.yml and Dockerfile file to your source code.

โ™ป๏ธ NGINX :: Web Server

NGINX is a web server that can also be used as a reverse proxy, load balancer, mail proxy and HTTP cache.

Proxying is typically used to distribute the load among several servers, seamlessly show content from different websites, or pass requests for processing to application servers over protocols other than HTTP.

When NGINX proxies a request, it sends the request to a specified proxied server, fetches the response, and sends it back to the client.

Modify nginx.conf file to your source code.

โœจ ESLint, Prettier :: Code Formatter

Prettier is an opinionated code formatter.

ESLint, Find and fix problems in your JavaScript code

It enforces a consistent style by parsing your code and re-printing it with its own rules that take the maximum line length into account, wrapping code when necessary.

  1. Install VSCode Extension Prettier, ESLint

  2. CMD + Shift + P (Mac Os) or Ctrl + Shift + P (Windows)

  3. Format Selection With

  4. Configure Default Formatter...

  5. Prettier - Code formatter

Formatter Setting

Palantir, the backers behind TSLint announced in 2019 that they would be deprecating TSLint in favor of supporting typescript-eslint in order to benefit the community. So, migration from TSLint to ESLint.

๐ŸŒ REST Client :: HTTP Client Tools

REST Client allows you to send HTTP request and view the response in Visual Studio Code directly.

VSCode Extension REST Client Install.

Modify *.http file in src/http folder to your source code.

๐Ÿ”ฎ PM2 :: Advanced, Production process manager for Node.js

PM2 is a daemon process manager that will help you manage and keep your application online 24/7.

Modify ecosystem.config.js file to your source code.

๐ŸŽ SWC :: a super-fast JavaScript / TypeScript compiler

SWC is an extensible Rust-based platform for the next generation of fast developer tools.

SWC is 20x faster than Babel on a single thread and 70x faster on four cores.

Modify .swcrc file to your source code.

๐Ÿ’„ Makefile :: This is a setting file of the make program used to make the compilation that occurs repeatedly on Linux

Makefiles are used to help decide which parts of a large program need to be recompiled.

Modify Makefile file to your source code.

๐Ÿ—‚ Code Structure (base)

โ”‚
โ”œโ”€โ”€๐Ÿ“‚ .vscode
โ”‚  โ”œโ”€โ”€ launch.json
โ”‚  โ””โ”€โ”€ settings.json
โ”‚
โ”œโ”€โ”€๐Ÿ“‚ src
โ”‚  โ”œโ”€โ”€๐Ÿ“‚ config
โ”‚  โ”‚  โ””โ”€โ”€ index.ts
โ”‚  โ”‚
โ”‚  โ”œโ”€โ”€๐Ÿ“‚ controllers
โ”‚  โ”‚  โ”œโ”€โ”€ auth.controller.ts
โ”‚  โ”‚  โ””โ”€โ”€ users.controller.ts
โ”‚  โ”‚
โ”‚  โ”œโ”€โ”€๐Ÿ“‚ dtos
โ”‚  โ”‚  โ””โ”€โ”€ users.dto.ts
โ”‚  โ”‚
โ”‚  โ”œโ”€โ”€๐Ÿ“‚ exceptions
โ”‚  โ”‚  โ””โ”€โ”€ httpException.ts
โ”‚  โ”‚
โ”‚  โ”œโ”€โ”€๐Ÿ“‚ http
โ”‚  โ”‚  โ”œโ”€โ”€ auth.http
โ”‚  โ”‚  โ””โ”€โ”€ users.http
โ”‚  โ”‚
โ”‚  โ”œโ”€โ”€๐Ÿ“‚ interfaces
โ”‚  โ”‚  โ”œโ”€โ”€ auth.interface.ts
โ”‚  โ”‚  โ”œโ”€โ”€ routes.interface.ts
โ”‚  โ”‚  โ””โ”€โ”€ users.interface.ts
โ”‚  โ”‚
โ”‚  โ”œโ”€โ”€๐Ÿ“‚ middlewares
โ”‚  โ”‚  โ”œโ”€โ”€ auth.middleware.ts
โ”‚  โ”‚  โ”œโ”€โ”€ error.middleware.ts
โ”‚  โ”‚  โ””โ”€โ”€ validation.middleware.ts
โ”‚  โ”‚
โ”‚  โ”œโ”€โ”€๐Ÿ“‚ models
โ”‚  โ”‚  โ””โ”€โ”€ users.model.ts
โ”‚  โ”‚
โ”‚  โ”œโ”€โ”€๐Ÿ“‚ routes
โ”‚  โ”‚  โ”œโ”€โ”€ auth.route.ts
โ”‚  โ”‚  โ””โ”€โ”€ users.route.ts
โ”‚  โ”‚
โ”‚  โ”œโ”€โ”€๐Ÿ“‚ services
โ”‚  โ”‚  โ”œโ”€โ”€ auth.service.ts
โ”‚  โ”‚  โ””โ”€โ”€ users.service.ts
โ”‚  โ”‚
โ”‚  โ”œโ”€โ”€๐Ÿ“‚ test
โ”‚  โ”‚  โ”œโ”€โ”€ auth.test.ts
โ”‚  โ”‚  โ””โ”€โ”€ users.test.ts
โ”‚  โ”‚
โ”‚  โ”œโ”€โ”€๐Ÿ“‚ utils
โ”‚  โ”‚  โ”œโ”€โ”€ logger.ts
โ”‚  โ”‚  โ””โ”€โ”€ vaildateEnv.ts
โ”‚  โ”œโ”€โ”€๐Ÿ“‚ static
โ”‚  โ”‚  โ””โ”€โ”€ index.html
โ”‚  โ”‚
โ”‚  โ”œโ”€โ”€ app.ts
โ”‚  โ””โ”€โ”€ server.ts
โ”‚
โ”œโ”€โ”€ .dockerignore
โ”œโ”€โ”€ .editorconfig
โ”œโ”€โ”€ .env.development.local
โ”œโ”€โ”€ .env.production.local
โ”œโ”€โ”€ .env.test.local
โ”œโ”€โ”€ .eslintignore
โ”œโ”€โ”€ .eslintrc
โ”œโ”€โ”€ .gitignore
โ”œโ”€โ”€ .huskyrc
โ”œโ”€โ”€ .lintstagedrc.json
โ”œโ”€โ”€ .prettierrc
โ”œโ”€โ”€ .swcrc
โ”œโ”€โ”€ docker-compose.yml
โ”œโ”€โ”€ Dockerfile.dev
โ”œโ”€โ”€ Dockerfile.prod
โ”œโ”€โ”€ ecosystem.config.js
โ”œโ”€โ”€ jest.config.js
โ”œโ”€โ”€ Makefile
โ”œโ”€โ”€ nginx.conf
โ”œโ”€โ”€ nodemon.json
โ”œโ”€โ”€ package-lock.json
โ”œโ”€โ”€ package.json
โ””โ”€โ”€ tsconfig.json

Goal

This application interacts with the Postgresql database, the HestiaCP API CLI and API Aplication Creator ( application for deploying a template application in a domain) which are deployed in the same environment.

Through the Hestia API, we will administer local hosting. Create new sites, configure the environment, dns zone, etc. Through the API Aplication creator, we will deploy the application itself on a new domain domain.

Build for develop

Let's prepare the development environment:

# if docker was not installed
# for archlinux 
$ sudo pacman -S docker docker-compose
$ sudo usermod -aG docker ${USER}
# logout from user and go in
# get code
$ git clone git@github.com:vzx7/chat3-manager-backend.git
$ cd chat3-manager-backend
$ npm i

To build the application, you need to add two files to the root dir .env for docker-compose, and .env.development.local for the application itself. They should contain the following variables:

# PORT
PORT = 3000

# TOKENS
TOKEN_SECRET_KEY = your_key
REFRESH_TOKEN_SECRET_KEY = your_key
TOKEN_TIME = 15m
REFRESH_TOKEN_TIME = 15d
REFRESH_TOKEN_COOKIES_EXPIRES = 14 # days

# LOG
LOG_FORMAT = dev
LOG_DIR = ../logs

# CORS
ORIGIN = your_host
CREDENTIALS = true

# DATABASE
POSTGRES_USER = root
POSTGRES_PASSWORD = your_password
POSTGRES_HOST = localhost
POSTGRES_PORT = 5432
POSTGRES_DB = dev

# EXTERNAL API
EXTERNAL_API_URL = api_host
EXTERNAL_API_PORT = 4567
EXTERNAL_API_KEY = api_key

Let's build and launch

$ ./src/scripts/dockerStart.sh

Stop app:

$ ./src/scripts/dockerStop.sh

๐Ÿ’ณ License

MIT