Skip to content

Укорачиватель ссылок. Написан на Kotlin + Spring. Используется Docker

Notifications You must be signed in to change notification settings

aleksey-nsk/link_shortener

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build Status codecov

SMLR project (link SMaLleR)

  • Сервис, который укорачивает длинные ссылки
  • Написан на Kotlin + Spring

Реализованный функционал

  1. Используем TDD.

  2. Установили Docker. Добавили контейнер с БД PostgreSQL через консоль командой:
    docker run --name pgsql-test -e POSTGRES_PASSWORD=password -d -p 6000:5432 postgres
    В итоге видим скачанный образ, и запущенный контейнер:

  3. Создали простой Web UI:

  4. Используем Travis CI для непрерывной интеграции.

  5. Создали в корне проекта файл Dockerfile:

    FROM java:8-jre
    MAINTAINER Aleksey Zhdanov <aleksey.zhd@gmail.com>
    ADD ./target/smaller.jar /app/
    CMD ["java", "-jar", "/app/smaller.jar"]
    EXPOSE 8080
    

где
ADD ./target/smaller.jar /app/ - копировать jar-файл в наш контейнер в папку app (краткое имя smaller задали в pom-файле, в разделе <build>, с помощью тега <finalName>);
CMD ["java", "-jar", "/app/smaller.jar"] - команда для запуска приложения внутри контейнера.

Далее надо билдить образ и загружать его на Docker Hub. Для этого используем Travis CI. Команды прописываем в конфигурационном файле .travis.yml. Итоговый файл имеет вид:

  1. Сборка на Travis CI:

  2. Настроили отправку отчётов на email:

  3. Для проверки покрытия проекта тестами используем сервис Codecov:

  4. Собранный в итоге образ контейнера размещён в публичном репозитории Docker Hub:

    Ссылка на образ: https://hub.docker.com/repository/docker/alexz2/smaller

Как запустить приложение на рабочем сервере

  1. Есть виртуальная машина, на которой установлены только Docker и docker-compose.

  2. Создать папку и перейти в неё:
    mkdir smlr/
    cd smlr/

  3. В папке создать файл docker-compose.yml с таким содержимым:

где db и smlr - 2 сервиса, присутствующие в приложении.

Образ, из которого будет создаваться БД:
image: postgres:latest

Задан пароль:
environment:
- POSTGRES_PASSWORD=12345

Чтобы рестартовалось если вдруг упадёт:
restart: always

Образ, из которого будет создаваться наш сервис:
image: alexz2/smaller

Необходимо прописать линки (в данном случае только до базы данных, т.е. до сервиса db). Это позволит smlr связываться с контейнером с БД:
links:
- db

Прокинуть порты:
ports:
- "80:80"
т.е. прокинули порт из 80 в 80. Это значит, что мы будем открывать наше приложение внутри контейнера на 80 порту, и его же будем прокидывать во вне. И соответственно у нас на сервере будет открыто приложение на 80 порту.

Наше приложение имеет файл application.properties:

spring.liquibase.change-log=classpath:db-changelog.xml

# database connection
spring.jpa.database=POSTGRESQL
spring.datasource.platform=postgres
spring.jpa.show-sql=false
spring.jpa.hibernate.ddl-auto=validate
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:6000/postgres
spring.datasource.username=postgres
spring.datasource.password=password

spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true

smlr.prefix=http://localhost:8080/

откуда надо указать несколько настроек. Писать названия переменных большими буквами, и вместо точки символ подчёркивания.

  1. Далее запустить docker-compose командой:
    sudo docker-compose up

В итоге образы будут скачаны и контейнеры запущены:

  1. Открыть браузер и ввести адрес:
    localhost:80

Отображается приложение:

Проверить работу:

  1. Данный файл docker-compose.yml можно запускать на разных серверах. Его можно хранить в приватном репозитории. В данном случае положили этот файл в папку docker/docker-compose.yml

About

Укорачиватель ссылок. Написан на Kotlin + Spring. Используется Docker

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published