# Aerbim

Это репозиторий сайта Aerbim. Этот проект включает в себя фронтенд на Next.js и бэкенд на Django.py с базой данных PostgreSQL.

## Описание

Приложение Aerbim является дашбордом для визуализации показаний датчиков в 3D модели здания.

## Технологии

### Фронтенд

- **Next.js** - библиотека для создания пользовательских интерфейсов.

### Бэкенд

- **Django.py** - веб-фреймворк для Python.
- **PostgreSQL** - реляционная база данных для хранения данных.

### Дизайн

- **Figma** - [Дизайн проекта.](https://www.figma.com/design/BrqSrc886HCCAYRONObOut/%D0%90%D1%8D%D1%80%D0%91%D0%98%D0%9C?node-id=711-11782&p=f&t=nMUhO2Od7DacnQkO-0)

### Тасклист

- **YouGile** - [Таскменеджер.](https://yougile.com/board/0gf3q39h0wwl)

## Установка

### Предварительные требования

Для запуска проекта вам потребуются:

- Node.js (рекомендуется версия 23.x или выше)
- Python (рекомендуется версия 3.13)
- PostgreSQL (рекомендуется версия 17.x или выше)

### Шаги для установки

1. **Клонирование репозитория:**

   ```sh
   git clone https://gitlab.com/wedeving/aerbim-www
   cd aerbim-www
   ```

2. **Установка зависимостей для фронтенда и бэкенда:**

   ```sh
   cd frontend
   npm install

   cd backend
   pipenv shell
   pipenv install
   ```

3. **Настройка переменных окружения:**

   Создайте файл `.env` в директориях ./frontend и ./backend и добавьте необходимые переменные окружения:

   ```env/backend
   #django settings
   SECRET_KEY=
   DEBUG_MODE=
   BASE_URL=
   MEDIA_ROOT=
   CORS_ALLOW_ALL_ORIGINS=
   CORS_ALLOWED_ORIGINS=
   ALLOWED_HOSTS=
   CSRF_TRUSTED_ORIGINS=


   #database
   DB_NAME=
   DB_USER=
   DB_PASSWORD=
   DB_HOST=
   DB_PORT=

   ```

   ```env/frontend
   #server components url
   NEXT_PUBLIC_API_URL=

   #auth
   NEXTAUTH_URL=
   BACKEND_URL=
   NEXTAUTH_SECRET=
   ```

4. **Настройка базы данных:**

   Создайте базу данных PostgreSQL и выполните миграции:

   ```sh
   createdb aerbimdb
   # Выполните миграции, если они имеются. В проекте откройте директорию backend
   cd backend
   python manage.py makemigrations
   python manage.py migrate
   ```

5. **Локальная разработка:**

   Откройте два терминала или используйте вкладки в одном терминале.

   В первом терминале запустите бэкенд:

   ```
   cd backend
   python manage.py runserver
   ```

   Во втором терминале запустите фронтенд:

   ```
   cd frontend
   npm run dev
   ```

Теперь проект будет доступен по адресу `http://localhost:3000`.

### Инструкция по деплою.

1. **Заходим в нужные директории:**

   ```sh
   cd backend
   cd frontend
   ```

2. **Запускаем сборку контейнеров в каждом терминале:**

   ```sh
   just docker-build
   ```

3. **Добавляем ключ гитлаба (один раз на сессию терминала, нужно каждый раз делать заново):**

   ```sh
   export GITLAB_TOKEN={token} ;export GITLAB_USER={user}
   ```

4. **Проверяем, что ключи добавились:**

   ```sh
   env
   ```
   В консоли должны увидеть наш ключ и имя пользователя

5. **Заливаем свежую сборку в GitLab (отдельно каждый контейнер):**

   ```sh
   just docker-push
   ```

6. **Собираем в продакшне:**

   ```sh
   cd ansible
   ansible-playbook -i inventory/prod.yaml playbooks/aerbim.yaml 
   ```
   Эта команда собирает все контейнеры, отдельно собирать не нужно.

### Миграции в продакшне.

1. **После сборки заходим в контейнер:**

   ```sh
   docker exec -it aerbim-backend-1 sh
   ```

2. **Проводим миграции:**

   ```sh
   python manage.py migrate
   ```

### Логи в продакшне.

1. **Логи фронтенда:**

   ```sh
   docker logs -f aerbim-frontend-1
   ```

2. **Логи бекенда:**

   ```sh
   docker logs -f aerbim-backend-1
   ```

3. **Логи сервера:**

   ```sh
   tail -f /var/log/angie/access.log
   ```