Giter Site home page Giter Site logo

dash-back's Introduction

Backend server

Backed server for Dashboard with GraphQL language query and SQLite database.

Documents

Menu

Package instruction

Requirements

System

Development:

node v^14.15.4

Production:

node v^14.15.4
screen v^4.01.00

Node

Global packages

Development:

yarn v^1.22.10
typescript v^4.1.3
eslint v7^18.0
gulp v^2.3.0
nodemon v^2.0.7
prisma v^2.16.0

Production:

yarn v^1.22.10
typescript v^4.1.3
prisma v^2.16.0

Installation

git clone https://github.com/atherdon/dash-back
cd dash-back
yarn install

Rename .env.example to .env and set up your environment variables:

# 1 For Linux Database url (need change ${absPathToPWD} to /abs/path/to/project)
# 2 For Windows (file:./database/sqlite/dash.db)
DATABASE_URL=file://${absPathToPWD}/database/sqlite/dash.db
# List of allowed origins, in NODE_ENV !== production that origin is '*' everytime
CORS_ORIGIN=localhost,second.origin
# JWT token secret key
TOKEN_KEY=QpLwz7AqqUg0GU6VHLO31aR8zqoeMiJiYXIiLCJpY
# Public server url for app host via docker 
DOCKER_SERVER_URL=http://my.domain

Usage

Development

Start watch ts changes:

yarn ts

Start server:

yarn dev

Migration on development

Database migrations: src/prisma/migrations
Database schema: src/prisma/schema.prisma

Create new migration. This command delete all data from database:

yarn migrate:dev

Only delete data from database without create migration:

yarn migrate:reset

Get status of migrations:

yarn migrate:status

Types

GraphQL types
Types for GraphQL Schema created automatically with package @graphql-codegen. When changed src/graphql/Schema.ts. To create types into src/types/graphql/index.d.ts run yarn codegen or simple run gulp and generated file will be changed everytime when Schema.ts saved.

IDE settings

Local settings for vscode in .vscode/settings.json`

For highlight specified syntax need install vscode extensions:

dbaeumer.vscode-eslint
graphql.vscode-graphql
esbenp.prettier-vscode
prisma/prisma

Debug

To run server in debug console need set up file .vscode/launch.json

"runtimeExecutable": "~/.nvm/versions/node/v14.15.4/bin/node"

And run debug F5

Production

Attention!
Only Linux based OS support

Build and start

Build typescript:

yarn build

Run server in screen:

yarn prod
Or
Run build and prod commands: yarn deploy

Migration on production

Create database schemas from exists migrations:

yarn migrate

Test

File 'postman.json' in resources/postman

Start without screen in development mode:

yarn start

Start with environment variable NODE_ENV=test (in this case in result of requests added variable 'stdErrMessage'):

yarn prod:test

Before this command do not forgot yarn build

Production via Docker

Firewall settings:

Open port 80 (and 443 for ssl)

SSL certificate

Skip SSL settings
If needed SSL certificate do change file dockerfiles/web/Dockerfile:

## Set "nginx-ssl.conf" instead "nginx.conf" if needed SSL 
ARG USED_NGINX_CONF=./resources/nginx.conf
## If needed SSL do uncoment next lines and set paths to private and public parts of certificate 
# COPY .certs certs
# RUN chown nginx:nginx -R certs

Copy your SSL certificate parts in .certs directory, and change owner if needed:

chown user:user -R .certs

Check resources/nginx*.conf certificate part names:

# Set ssl paths
ssl_certificate /home/web/certs/nginx-selfsigned.crt; // Certs without "." is a path of ".certs" copy into container
ssl_certificate_key /home/web/certs/private/nginx-selfsigned.key;

Change protocol in .env:

# Public url for your server 
DOCKER_SERVER_URL=http://my.domain ## https if used SSL

End SSL certificate section

Then...
Build docker containers:

docker-compose build

Start containers for test:

docker-compose up

Start containers detach:

docker-compose up -d

Additions

For docker

Show logs:

docker logs

Connect to container:

docker exec -it name sh

For screen

Open database explorer

yarn studio

Show actual log (production):

yarn logs

Focus screen (production):

yarn focus

Start fill scripts

yarn script fill

Format Prisma scheme

yarn format

TODOS

  • auth0 as simple and lazy way to do a login
  • quick and simple deploys from pull requests(aws?)

front located here: https://github.com/atherdon/dashb


examples with data(durty version): https://github.com/atherdon/dash-back/data

  • stage 0: simple crud on graphql. we can use sqllite for speed
  • stage 1: authentification: to be discussed - simple for 10 ppl or BRAC with 2-3 roles
  • stage 2: csv/json import script
  • stage 3: simple additional functionality: search/filtration/basic calculations

dash-back's People

Contributors

atherdon avatar kolserdav avatar renovate-bot avatar vadim9999 avatar whoamidenny avatar

Stargazers

 avatar

Watchers

 avatar

dash-back's Issues

renovate creating an issue with vscode

Добрый вечер, надеюсь не отвлеку. По удалённым ботом зависимостям. Может я чего напутал, но в логе бота только одно было указано как нехорошее prettierrc а остальные 4 в его логах не значились (сейчас не могу найти где эти логи видел).

Так вот когда сделал 'yarn install' перестал 'eslint' в 'vscode' работать, 4 - из удаленных пришлось обратно установить. Кроме 'prettierc', но оно мне и так не нравилось потому что в зависимостях имела устаревшую версию prettier и били варнинги, а её работу оказывается и так выполняет eslint-config-prettier.

Может конечно я что-то напутал при разрешении, но он конкретно показывал конфликт и эти 5 как лишние из локальной версии. И сборку с запуском они никак не ломали, так как выполняют сугубо вспомогательные для vscode функции.

Посмотрим как в другой раз на них отреагирует, пишу чтобы Вы были в курсе на всякий случай.

stage 6

С heroku получилось плохо. Оказывается он не хранит соостояния изменяемых в рантайме файлов. По идее это логично, иначе его можно было бы юзать как халявную базу данных. В pipelines даже не стал вникать, итак ясно что он не подойдет для этой задачи.

Зато настройка Докера прошла хорошо. Сделал максимально просто для развертывания. Кроме Docker и docker-compose на сервере ничего не нужно. Получилось 4 контейнера:

  1. Бекенд

  2. Studio

  3. Фронт upload forms

  4. Nginx - сделал тоже контейнером, чтобы на сервере не заморачиваться, чтобы первые три работали например на одном домене и без лишних портов, тем более nginx нужен для подключения SSL (инструкция имеется).

После развертывания на докере.

Всё работает на 80 или 443 (если подключитть SSL) порту. Не стал свой self-signed сертификат в репозитой пихать, а то бот заругается. Но инструкцию сделал простую. Всё протестировал на несколько раз, должно все работать отлично.

Принцип такой, что всё по докеру в dash-back, а dash-upload-form подтягивается из репо gitgub если версия изменилась, если нет, то из кеша.

отсечение лишних селектов

И ещё делаем ли отсечение лишних селектов к базе, то есть чтобы бек просил у базы только те поля которые просит фронт? Это только уменьшит потребление RAM.

heroku setup, with deploys and maybe pipelines

вот что я сейчас читаю

как я вижу это сейчас. мы решаем первую или первые 2 проблемы:

  • нам нужен простой вариант деплоя наших репозиториев
  • возможно подключение github repo + heroku для превью

скорее всего у нас будет 4 проекта на хероку

  • backend
  • frontend
  • upload-forms
  • graphql-playground(потому что я не научился пользоваться prisma studio и стандартный UI мне был бы проще для понимания)

schema changes before releasing alpha version of frontend

add Edited stories schema. logic similar to topAuthors/Evergreen

в этой части я просто предлагаю скопировать одну из старых схем и "просто" ее переменовать.
когда мы с Вадимом поняли что бекенд дает нам возможность уже показать проект редакторам - мы начали убирать все лишнее. В этот момент я понял что у нас отсутствует секция с общими статьями.
вот как выглядит админка в альфа-версии. деплоили на heroku - могу дать доступы посмотреть. Данные есть везде, кроме "Edited Stories"
image

сейчас будет достаточно, чтобы данные были похожими на данные из topAuthors/Evergreen
image


I need to update expandable, so it will meet our requirements.

Текущая версия js массива - это просто fake-data которую мы взяли из примера. Я хочу заменить эти данные, чтобы нам было удобнее работать. примером, который есть сейчас, является kanban доска, в которой один таск - это просто title а внутри есть список статей.
image
image

скоро сделаю пример как js array и покажу вам


counters that Vadim wants(need to link with task)

Вадим хочет выводить counter для каждого типа статей, чтобы было видно, сколько статей еще не обработано.
например если есть необработаных 40 статей для брендов - это плохо, можно вывести красный warning. если 10 - то окей и т.д. Я так понимаю что Вадиму просто нужны методы, которые вернут сколько записей в базе для topAuthors/Evergreen/Edited
image


обновление upload-forms, sync с изменениями в backend

После того, как мы добавим "Edited Stories", изменим expandable - нужно будет внести изменения в upload form - чтобы Марина могла эти данные тоже сохранять в нашу базу.

сс @kolserdav

stage5 feedback

Я понимаю логику, которую вы закладываете в ArticleTag. Но я бы назвал эту схему по другому.

Tags уже используется в основной системе.
И я например для нашей работы ввел понятие “облако тега” - cloud-tag. Но название не идеальное, можно другое. Like MainCategory or ParentCategory.
Главная идея в том чтобы мы объединяем все подтеги, которые входят в parentCategory.
Например в “programming” cloud я могу поставить и java и backend и design-patterns. Я ниже приведу примеры с parentCategories. Их мы сможем использовать на странице expandable.

Такая же тема и с “blockchain” cloud. Туда сейчас входят статьи, которые относятся к рынку криптовалют и блокчейну. Такая группировка поможет нам отдавать all crypto-related articles отдельному редактору.

Незнаю понадобится нам это или нет, но мы можем добавить это в нашу систему. Но при этом я бы хотел вынести это из нашего бекенда потом. Иначе он станет слишком неповоротливым со временем.

Единственная проблема(как всегда) - теги, это очередная “pain point” и сильно я бы ни хотел их делать в рамках нашего dashboard. Я бы скорее сделал отдельный backend - чисто для работы только с тегами, но там очень много переменных. Например на страницах тегов мы пытаемся продавать рекламу и т.д. Я думаю что детальная работа с тегами не входит в этот проект.

7
8
8 (1)

stage 0 video feedback

По поводу вашего видео: выглядит хорошо, но не все было понятно.

  1. можно ли с текущими схемами, которые у нас есть делать post/get с данными, которые у нас в папке data? это просто непонятно по видео. наша база, sqllite - вы импортировали в нее данные из моих файлов, верно?
    я просто на локалке ничего не смотрел. поэтому и попросил видео, чтобы быстрее реагировать.
    просто на видео выдавало только id и одно доп поле.

  2. я бы наверное переименовал схему brands в evergreen(новое название программы), а authors в TopAuthors - потому что иначе я запутаюсь.

сс @kolserdav

important improvements

  • нужно на сервере делать пагинацию

  • Также исключить лишние запросы к базе, например фронту нужно получить только ид но орм всё равно просит у базы всё а возвращает только ид, это надо делать, но с клонами это всё добавлять нецелесообразно

  • Плюс фильтры по полям, группировки, сортировки - в зависимости от требований фронта

user roles

* https://github.com/kkemple/graphql-auth

В версии 3.3.0 использовал опыт создания хука из https://github.com/kkemple/graphql-auth, отказавшись от небезопасного посредника на уровне express. @atherdon спасибо)

Теперь можно закрывать роуты:

  • по минимальной роли
  • по определённым ролям
  • разрешать доступ к своим материалам независимо от двух предыщих ограничений
  • запрещать изменение определенных полей, при доступе по предыдущему пункту, если один из первых двух не разрешает

Управляется просто, при объявлении резолвера используется хук withAuth, код для добавления дополнительных правил доступа к своим материалам вынесен в отдельный файл graphq/checkSelfSchema.ts

Originally posted by @kolserdav in #11 (reply in thread)

exploring ways to marry frontend and backend stuff

[задача не описана]

https://frontend-dashboard-repository.herokuapp.com/

https://dashboard.heroku.com/apps/frontend-dashboard-repository


name: 'Arthur',

X;]&g%s%GxY8L#S*

[email protected]


я не уточнял у Вадима, скорее всего он сейчас готовится к сессии, но он использовал старую версию бекенда.
чтобы решить проблему сейчас - я думаю что нам просто нужно исправить запросы к бекенду, которые фронтенд сейчас делает. но тут сразу возникает вопрос с тем, что на локалке фронтенд нормально не стартанет без настроек к auth0.
короче как всегда - чтото гдето работает - но все вместе не запускается. именно эту проблему я и хотер решить с помощью heroku, pipelines и т.д.

другой вопрос - если мы переводим backend c sqlite на postgres - решит ли это некоторые наши проблемы и позволит ли работать нашему backend с heroku таким образом, чтобы еще и фронтенд сразу мог подтягивать данные?

Roles data

нужно ли мне сделать список ролей, чтобы вы их залили в базу сразу? я могу сделать обычный js array и добавить его в папку data

Originally posted by @atherdon in #11 (reply in thread)

Developer tasks list

@atherdon, добрый вечер! У нас планировались следующие задачи:

  1. автоматизация тестирования доставки и сборки приложения из исходного кода
  2. можно попробывать на фронте вывести данные из версии 5
  3. можно поставить аддон postgres и попробывать мигрировать с filedb на уже нормальную базу
    Я могу продлжить заниматься 1й задачей или какую можно зачинать следующей?

prisma import update, expandables clean up

cc @dennyunited

я вроде видео про импорт скинул в телеграмм, скажите у вас есть ко мне вопросы?
с моей стороны - думаю можно начинать, заодно и протестим наш setup на heroku

Плюс, мы можем добавить больше exceptions в импорт, чтобы проще было ловить ошибки

Dependency Dashboard

This issue provides visibility into Renovate updates and their statuses. Learn more

Rate Limited

These updates are currently rate limited. Click on a checkbox below to force their creation now.

  • chore(deps): update graphqlcodegenerator monorepo (major) (@graphql-codegen/cli, @graphql-codegen/introspection, @graphql-codegen/typescript, @graphql-codegen/typescript-document-nodes, @graphql-codegen/typescript-resolvers)
  • chore(deps): update node.js to v17
  • chore(deps): update typescript-eslint monorepo to v5 (major) (@typescript-eslint/eslint-plugin, @typescript-eslint/parser)
  • fix(deps): update dependency dotenv to v16
  • fix(deps): update prisma monorepo to v3 (major) (@prisma/client, prisma)

Open

These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

Ignored or Blocked

These are blocked by an existing closed PR and will not be recreated unless you click a checkbox below.


  • Check this box to trigger a request for Renovate to run again on this repository

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.