Skip to content

nlesyuk/klim-backend

Repository files navigation

klim-backend

> npm run dev

localhost:8090/
localhost:8090/login
localhost:8090/dashboard

How to deploy

Set up env

All variables located in env.example

Base

PORT=8090                            # work port
IS_PROD=0                            # 1 - prod, 0 - dev
PUBLIC_DOMAIN_LOCAL=localhost        # dev domain
PUBLIC_DOMAIN_PROD=klimstepan.ca     # prod domain

DB

local

DB_LOCAL_USER=postgres
DB_LOCAL_PASSWORD=1234567890
DB_LOCAL_HOST=localhost
DB_LOCAL_PORT=5432
DB_LOCAL_DBNAME=klim

prod

DB_PROD_USER=
DB_PROD_PASSWORD=
DB_PROD_HOST=localhost
DB_PROD_PORT=5432
DB_PROD_DBNAME=

Swagger

doc for api

Deploy on Ubuntu

sudo apt-get update

install n

curl -L https://raw.githubusercontent.com/tj/n/master/bin/n -o n bash n lts npm install -g n

install pm2

// install https://pm2.keymetrics.io/docs/usage/pm2-doc-single-page/

npm install pm2@latest -g pm2 start index.js pm2 list pm2 stop 0 // id of process pm2 start klimsite/klim-backend/index.js

Nginx config

// nginx config - see Cribs.md configs placed in ./config folder

sudo apt install nginx sudo nginx -t

1

// link project with nginx

sudo nano /etc/nginx/sites-available/default

sudo nano /etc/nginx/nginx.conf

http {

}

need to change sole lint based on your cloud provider follow # CHANGE_HERE

# Redirect HTTP to HTTPS
server {
    listen 80;
    server_name klimstepan.com www.klimstepan.com;
    
    # Redirect all HTTP requests to HTTPS
    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 80;
    # server_name 139.59.212.85;
    server_name klimstepan.com www.klimstepan.com;
    
    access_log /var/log/nginx/klimstepan.com.access.log;
    error_log /var/log/nginx/klimstepan.com.error.log;

    set $frontend_root /home/root/klimsite/klim-frontend/dist;
    set $backend_proxy http://localhost:8090;

    location / {
        root $frontend_root;
        try_files $uri /index.html;
    }
    location /api {
        client_max_body_size 50m;
        proxy_redirect off;
        proxy_pass $backend_proxy;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header Authorization $http_authorization;
    }
    location /public/uploads {
        #root /home/root/klimsite/klim-backend/public/uploads;
        proxy_pass $backend_proxy/public/uploads;
    }
}

# need to create cert before put in config
server {
    listen 443 ssl;
    http2 on;
    server_name klimstepan.com www.klimstepan.com;
    
    # SSL configuration...
    ssl_certificate /etc/letsencrypt/live/klimstepan.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/klimstepan.com/privkey.pem;
    
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 1d;

    set $frontend_root /home/root/klimsite/klim-frontend/dist;
    set $backend_proxy http://localhost:8090;

    # route handlers
    location / {
        root $frontend_root;
        try_files $uri /index.html;
    }
    location /api {
        client_max_body_size 50m;
        proxy_redirect off;
        proxy_pass $backend_proxy;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_host;
        proxy_set_header Authorization $http_authorization;
    }
    location /public/uploads {
        proxy_pass $backend_proxy/public/uploads;
    }
}

check status

sudo nginx -t service nginx status

sudo service nginx restart

2
server {
    listen 80;
    # server_name 139.59.212.85;
    server_name klimstepan.com www.klimstepan.com;

    access_log /var/log/nginx/klimstepan.com.access.log;
    error_log /var/log/nginx/klimstepan.com.error.log;

    set $frontend_root /home/root/klimsite/klim-frontend/dist;
    set $backend_proxy http://localhost:8090;

    location / {
        root $frontend_root;
        try_files $uri /index.html;
    }
    location /api {
        client_max_body_size 50m;
        proxy_redirect off;
        proxy_pass $backend_proxy;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header Authorization $http_authorization;
    }
    location /public/uploads {
        #root /home/root/klimsite/klim-backend/public/uploads;
        proxy_pass $backend_proxy/public/uploads;
    }
}
3

sudo nano /etc/nginx/sites-available/default

server {
    listen 80;
    # server_name 139.59.212.85;
    server_name klimstepan.com www.klimstepan.com;

    access_log /var/log/nginx/klimstepan.com.access.log;
    error_log /var/log/nginx/klimstepan.com.error.log;

    set $frontend_root /home/root/klimsite/klim-frontend/dist;
    set $backend_proxy http://localhost:8090;

    location / {
        root $frontend_root;
        index index.html;
        try_files $uri $uri/ /index.html;
    }
    location /api {
        client_max_body_size 50m;
        proxy_redirect off;
        proxy_pass $backend_proxy;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header Authorization $http_authorization;
    }
    location /public/uploads {
        #root /home/root/klimsite/klim-backend/public/uploads;
        proxy_pass $backend_proxy/public/uploads;
    }
}

sudo nginx -t && sudo systemctl restart nginx sudo nginx -t sudo systemctl restart nginx tail -f /var/log/nginx/klimstepan.com.error.log tail -f /var/log/nginx/klimstepan.com.access.log

sudo ufw enable sudo ufw allow http sudo ufw allow https sudo ufw allow ssh

install postgres

sudo apt install postgresql -y sudo su - postgres psql postgres=# CREATE ROLE ubuntu; postgres=# ALTER ROLE ubuntu WITH LOGIN; postgres=# ALTER USER ubuntu CREATEDB SUPERUSER; postgres=# ALTER USER ubuntu WITH PASSWORD 'password'; postgres=# \du postgres=# CREATE DATABASE klim; postgres=# \l postgres=# \c klim klim=# HERE_YOU_SHOULD_INSERT_TABEL_SCHEME create TABLE users(...) klim=# \d klim=# exit

postgres=# ALTER USER ubuntu with superuser;

psql=# grant all privileges on database klim to ubuntu;

psql=# alter user ubuntu with encrypted password '1234567890';

psql=# grant all privileges on database klim to ubuntu;

// create folders /public/uploads/klimstepan.com...

// set up .env

// pull git repo

build

when PC/Droplet/EC2/ComputerEngine has small memory

free -m sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab free -m NODE_OPTIONS="--max-old-space-size=512" npm run build Закрий зайві процеси ps aux --sort=-%mem | head -10

notions

nano klimsite/klim-backend/.env pm2 start klimsite/klim-backend/index.js sudo tail -f /var/log/nginx/klimstepan.com.error.log sudo tail -f /var/log/nginx/klimstepan.com.access.log nslookup klimstepan.com // check DNS IPs

TODO:

    • Add user_id column for each table
  1. swagger doc
  2. ESlint
  3. Prettier
  4. unit testin with Jest

About

Backend for cinematographer's portfolio!

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published