API сервис для получения расписания автобусных маршрутов. Дополнительно реализована возможность авторизации/регистрации с разграничением ролей.
- Авторизация/Регистрация (JWT).
- Разграничение пользователей по ролям: USER, MODERATOR, ADMIN.
- Админка для просмотра/изменения/создания/удаления данных.
- Swagger спецификация с описание всех запросов этого сервиса.
- Docker Compose для удобного развёртывания.
- Kotlin - https://kotlinlang.org
- Ktor Server - https://ktor.io
- Netty web server - https://netty.io/
- PostrgeSQL - https://www.postgresql.org
- HikariCP - https://github.com/brettwooldridge/HikariCP
- Exposed - https://github.com/JetBrains/Exposed
- JWT Auth - https://ktor.io/docs/jwt.html
- Koin - https://insert-koin.io/docs/reference/koin-ktor/ktor/
- Bcrypt - https://github.com/jeremyh/jBCrypt
- Freemarker - https://ktor.io/docs/freemarker.html
- Docker Compose - https://docs.docker.com/compose/
Запуск сервера: https://youtu.be/aZxtT2HqoII
Запросы: https://youtu.be/AYsQwGf254c
Админка: https://youtu.be/w8T0TjacN44
- Для работы приложения в тестовой среде, необходимо развернуть БД. Это удобно сделать в
Docker
контейнере, поэтому для начала необходимо установить Docker Compose на компьютер: https://www.docker.com - Далее, нужно собрать образ тестовой БД и запустить контейнер. Это можно сделать с помощью команды:
docker-compose -f db_test/docker-compose.yml up
- Последний шаг, это запуск приложения. Обычно это можно сделать в самой IDE, посредством графического интерфейса, но можно и с помощью команды:
gradlew run
- По умолчанию сервер доступен по адресу:
http://0.0.0.0:8080
, если нужно поменять путь, то это можно сделать вConst.kt
переменная:PROJECT_DEFAULT_PATH = ""
- Доступ к серверу по SSH, через терминал. Например:
ssh [email protected]
- Установить Git (
sudo apt install git
) - А так же актуальную версия Docker (https://docs.docker.com/engine/install/ubuntu/)
- Если вам необходимо, чтобы доступ к сайту был по https, то прочтите что сказано в пункте "Установка SSL сертификата", если вам это не надо - то переходите сразу к следующему пункту.
- Склонировать репозиторий с бекендом(
git clone https://github.com/shalkov/KtorServer_ScheduleBus
) - Далее заходим в папку с бекендом:
cd KtorServer_ScheduleBus/
- Если есть необходимость поправить настройки БД(логин, пароль и т.д) можно это сделать в файле
.env
- Запускаем Ktor сервер и БД(PostgresQL) командой:
docker compose up
. По умолчанию сервер доступен на 81 порту, если нужно изменить, это можно сделать в файлеdocker-compose.yml
- Всё, сервер и БД должны запуститься и быть доступны для работы.
- Прежде чем установить SSL сертификат, нужно привязать к хостингу ваш домен. Так как сертификат выдаётся именно с прявязкой к домену (например: mysite.ru).
Домен не сразу становиться доступным, нужно подождать до 72 часов, прежде чем обновяться DNS записи.
Обратить внимание: если вы пропишете DNS сервера Cloudflare (https://dash.cloudflare.com), то у вас автоматически доступ к сайту будет по https, поэтому шаг с установкойCertbot
надо пропустить. В остальном действуйте по шагам. - Как только домен станет доступен и привяжется к вашему хостингу, необходимо на сервере установить Nginx (https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-20-04)
- Если вам нужно установить Certbot, то после установки Nginx, его нужно отключить(
sudo systemctl stop nginx
) - Установите Certbot (https://certbot.eff.org/instructions?ws=nginx&os=ubuntufocal)
- После установки Certbot, нужно включить Nginx(
sudo systemctl start nginx
) и проверить, чтобы сайт нормально открывался по https. Если есть какие-то проблемы на этом шаге, то нужно разобраться с ними, прежде чем приступать к следующему шагу. - Далее, необходимо прописать проксирование в nginx файле:
/etc/nginx/sites-enabled
. Нужно добавитьproxy_pass
вlocation /
, должно быть так:
location / {
# 81 - это порт который указан в docker-compose.yml, он может быть другой, если вы его меняли
proxy_pass http://0.0.0.0:81;
}
- Теперь нужно перезапустить Nginx, чтобы все изменения применились(
sudo systemctl restart nginx
) - Настройки SSL закончены, можно запускать сервер.
- Дата-Центр: Rucloud: Россия, Королёв.
- Операционная Система: Ubuntu 20.04 LTS
- Конфигурация: 2x2.2ГГц, 2Гб RAM
- Диск: 20Гб SSD