# Запуск проектов на поддомене КФУ

TIP

Инструкция для внутреннего использования студентам Smart Education Lab ИТИС КФУ.

Проекты, разрабатываемые для подразделений КФУ, готовые к промышленному запуску (production) переносятся на сервер в дата центре КФУ.

В целом процесс выглядит следующим образом:

  1. Команда запаковывается проект в докер
  2. Команда получает от куратора доступы к базе данных на сервере в ДЦ КФУ
  3. Куратор от лаборатории подключает gitlab-runner к проекту
  4. Команда деплоит проект на сервер в ДЦ КФУ с помощью CI
  5. Команда проверяет, что проект корректно заполнен и работает на сервре в ДЦ КФУ
  6. Проверяется, что проект работает на поддомене КФУ
  7. Куратор от лаборатории отправляет заявку на запуск проекта на поддомене КФУ
  8. Специалисты ДИС проверяют сайт и запускают проект на поддомене КФУ

# Подготовка проекта

  • В проекте должен быть файл docker-compose.prod.yaml, который запускает проект полностью с использованием всех дополнительных сервисов (в том числе postgres, redis и т. д.).
  • К проекту должен быть подключен Sentry (opens new window)
  • Если в проекте есть загрузка файлов, надо сообщить куратору от лаборатории о том, в какую папку они будут загружаться.

WARNING

Важно: проверьте, что проект полностью запускается с помощью файла docker-compose.prod.yaml у себя на компьютере (локально), и лишь потом начинайте доставку проекта на сервер!

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

# Доставка проекта до сервера в ДЦ КФУ

  • Настройте переменные окружения в Gitlab
    • переменные для подключения к базе данных: PROD_DB_NAME, PROD_DB_USER, PROD_DB_PASSWORD, PROD_DB_HOST
    • другие переменные окружения, необходимые для вашего проекта
  • Поправить файл docker-compose.prod.yaml:



 





 
 
 

 
 
 

 
 
 
 
 
 
 
 

 
 
 



 
 



 
 
 

 
 
 
 
 
 

version: '3'

services:
  app:  # Основной контейнер с приложением должен иметь
    build:
      context: ../
      dockerfile: Dockerfile
    restart: always
    ports:
      # 1. проброс порта без указания порта назначения. 
      # Не 5000:5000, а
      - 5000
    networks:
      # 2. назначение сетей web и project
      - web
      - project
    environment:
      # 3. настройку подключения к базе данных через переменные окружения.
      # Сами значения должны быть установлены в Gitlab CI Variables в настройках проекта
      # в Gitlab.
      # Контейнер с базой данных из этого файла должен быть убран.
      DB_NAME: $PROD_DB_NAME
      DB_USER: $PROD_DB_USER
      DB_PASSWORD: $PROD_DB_PASSWORD
      DB_HOST: $PROD_DB_HOST

      # 4. указание поддомена, на котором он запущен. Поддомен нужно согласовать с 
      # куратором лаборатории
      VIRTUAL_HOST: projectname.kpfu.ru 

      # здесь могут быть другие настройки, если это необходимо.
    volumes:
      # Если есть загрузка файлов, здесь должен быть указан путь в контейнере, куда эти файлы загружаются.
      - uploads:/app/src/uploaded_files/ 

  redis: 
    image: redis:6.2.6-alpine
    # Если есть другие контейнеры, то они тоже должны иметь подключение к сети `project`.
    networks:
      - project

# В конце нужно добавить описание сетей таким образом:
networks:
  project:
  web:
    external:
      name: web
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
  • Определиться с названием ветки для деплоя на продакшн
    • Если основная ветка master - сделайте ветку prod для продакшена
    • Если основная ветка не master, то можно использовать это название для деплоя в продакшн
    • Главное: название основной ветки разработки и название ветки для деплоя на продакшн должны отличаться
  • В .gitlab-ci.yaml указать job для деплоя на сервер в ДЦ КФУ




 
 
 
 

 
 

 

deploy_prod:
  stage: deploy
  image: atnartur/docker:latest
  script:
    # заменить projectname на название проекта
    - docker-compose -f docker-compose.prod.yaml -p projectname build
    - docker-compose -f docker-compose.prod.yaml -p projectname rm -f
    - docker-compose -f docker-compose.prod.yaml -p projectname up -d
  tags:
    # теги раннера могут быть другими, уточняйте у куратора от лаборатории
    - dis_prod
  only:
    - master  # название ветки для деплоя
1
2
3
4
5
6
7
8
9
10
11
12
13
  • Отправить этот код в ветку для деплоя на продакшн
  • Добиться успешного завершения завершения сборки в Gitlab Pipelines
  • Подключиться к КФУ VPN с помощью VPN gateway
  • Добавить в файл hosts новую строчку: IP-сервера projectname.kpfu.ru (как найти файл hosts (opens new window))
  • Открыть в браузере http://projectname.kpfu.ru и проверить работу проекта

После завершения нужно сообщить куратору от лаборатории, что проект на сервере успешно запущен. Если возникают проблемы, также нужно связаться с куратором от лаборатории.

# Решение проблем

# Сайт показывает 503

Скорее всего был неправильно настроен основной контейнер приложения (app в примере выше).

Проверьте значение переменной настройку сетей для контейнера и переменную окружения VIRTUAL_HOST (пункты 2 и 4 в файле docker-compose.prod.yaml).

# Не могу подключиться к базе данных на сервере со своего компьютера

К сожалению, доступ к базе данных есть только из внутренней сети КФУ. Чтобы к ней подключиться, воспользуйтесь VPN

# Я запустил приложение, но в личном кабинете (opens new window) оно не появилось. Почему?

Приложение, развернутое на других серверах, не отображается в личном кабинете UniEnv, потому что запускается по-другому. Это нормально.