# Запуск проектов на поддомене КФУ
TIP
Инструкция для внутреннего использования студентам Smart Education Lab ИТИС КФУ.
Проекты, разрабатываемые для подразделений КФУ, готовые к промышленному запуску (production) переносятся на сервер в дата центре КФУ.
В целом процесс выглядит следующим образом:
- Команда запаковывается проект в докер
- Команда получает от куратора доступы к базе данных на сервере в ДЦ КФУ
- Куратор от лаборатории подключает gitlab-runner к проекту
- Команда деплоит проект на сервер в ДЦ КФУ с помощью CI
- Команда проверяет, что проект корректно заполнен и работает на сервре в ДЦ КФУ
- Проверяется, что проект работает на поддомене КФУ
- Куратор от лаборатории отправляет заявку на запуск проекта на поддомене КФУ
- Специалисты ДИС проверяют сайт и запускают проект на поддомене КФУ
# Подготовка проекта
- В проекте должен быть файл 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
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 # название ветки для деплоя
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, потому что запускается по-другому. Это нормально.