# Установка

Инструкция для установки приложения

## Требования к системе

Требования к окружению для сборки и запуска приложения:

- CouchDB в качестве хранилища данных
- NodeJS для сборки и запуска backend-а и frontend-а

Доступы к внешним системам:

- Токен для подключения telegram-бота
- Токен для доступа к API Redmine

## Подготовка и запуск couchdb

CouchDB необходим для хранения данных.

Для запуска можно воспользоваться любым удобным сопособом.

Пример с помощью docker-compose

1. `docker-compose.yml`:

    ```yaml
    version: '3.1'

    services:
      couchdb:
        image: apache/couchdb:latest
        restart: always
        ports:
          - 127.0.0.1:5984:5984
        volumes:
          - ./couchdb-data:/opt/couchdb/data
        environment:
          - COUCHDB_USER
          - COUCHDB_PASSWORD
    ```

2. Так же нужно указать имя и пароль с помощью файла `.env`:

    ```
    COUCHDB_USER=admin
    COUCHDB_PASSWORD=password
    ```

3. Создать папку `couchdb-data` для вольюма определённого для контейнера в `docker-compose.yml`:

    ```shell
    mkdir couchdb-data
    ```

4. Для запуска воспользоваться командой:

    ```shell
    docker-compose up -d
    ```
    
## Установка зависимостей для backend-а и frontend-а

Backend и frontend написаны на языке typescript. Для загрузки и запуска необходимо выполнить:

```shell
cd $PROJECT_DIR          && npm install
cd $PROJECT_DIR/frontend && npm install
```

## Настройка

Нужно скопировать все конфигурационные файлы `CONFIG_NAME.jsonc.dist` в `CONFIG_NAME.jsonc`:

```shell
cd $PROJECT_DIR/configs/

cp  calendar-enhancer.jsonc.dist              calendar-enhancer.jsonc
cp  current-user-rules.jsonc.dist             current-user-rules.jsonc
cp  eccm-config.jsonc.dist                    eccm-config.jsonc
cp  issue-event-emitter-config.jsonc.dist     issue-event-emitter-config.jsonc
cp  main-config.jsonc.dist                    main-config.jsonc
cp  redmine-status-changes-config.jsonc.dist  redmine-status-changes-config.jsonc
cp  redmine-statuses-config.jsonc.dist        redmine-statuses-config.jsonc
cp  simple-kanban-board-config.jsonc.dist     simple-kanban-board-config.jsonc
```

Или можно взять за основу файлы из папки `$PROJECT_DIR/configs/configs.example/` или в качестве примеров для заполнения. В этих файлах можно обратить внимание на строчки с TODO и рекоментациями что нужно указать в конфигурационном файле. Там могут встречаться такие рекомендации как:

* Указать host, port, username и password для доступа к couchdb
* Указать token от бота telegram

## Запуск приложения

1. Нужно сделать сборку frontend-а:

    ```shell
    cd $PROJECT_DIR/frontend/ && npm run build
    ```
    
2. Сделать сборку или можно просто запустить backend:

    ```shell
    cd $PROJECT_DIR/ && npm run start
    ```
    
Если нужно запустить приложение с явным указанием порта, то можно воспользоваться переменной окружения `PORT`.