Друкарня від WE.UA

Телеграм бот. PostgreSQL, docker-compose, .env, DockerHub. Част. 2

Вступ

В попередній частині я купив сервер, створив телеграм бота та успішно задеплоїв його на віддаленій машині. Але, кому потрібен бот, який не вміє працювати з даними? Тому поділюсь, як я розширив бота і конфігурацію додавши PostgreSQL.

Залежності

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>42.7.3</version>
</dependency>
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.4.0-b180725.0427</version>
 </dependency>

Оскільки в нас з’явився Data JPA, нам необхідно вказати інформацію про базу, щоб за допомогою Spring Boot автоконфігурації підняти DataSource бін.

application.properties

spring.datasource.url=${SPRING_DATASOURCE_URL}
spring.datasource.username=${SPRING_DATASOURCE_USERNAME}
spring.datasource.password=${SPRING_DATASOURCE_PASSWORD}
spring.jpa.hibernate.ddl-auto=create-drop

Ми уникнемо хардкод скориставшись системними змінними для підтягування url, імені користувача та паролю. Це дозволить нам легко змінювати ці параметри, коли це необхідно.

docker-compose.yml

Тепер перейдемо до docker-compose.yml. Він дозволяє згрупувати наші контейнери разом і налаштувати їх взаємодію через простий у використанні файл конфігурації. Ми можемо вказати всі наші сервіси, їх залежності та параметри, щоб швидко та легко запускати наш додаток з усіма його компонентами.

version: '3.8'

services:
  app:
    build: .
    image: overpathz/rendertestbot

    environment:
      SPRING_DATASOURCE_URL: jdbc:postgresql://db:5432/testrenderdb
      SPRING_DATASOURCE_USERNAME: ${DB_USER}
      SPRING_DATASOURCE_PASSWORD: ${DB_PASS}
      SPRING_REDIS_HOST: redis
      SPRING_REDIS_PORT: 6379
      TELEGRAM_BOT_TOKEN: ${TELEGRAM_BOT_TOKEN}
    depends_on:
      - db
      - redis
    ports:
      - "8080:8080"

  db:
    image: postgres:13.1-alpine
    environment:
      POSTGRES_DB: testrenderdb
      POSTGRES_USER: ${DB_USER}
      POSTGRES_PASSWORD: ${DB_PASS}
    volumes:
      - ./init-db/:/docker-entrypoint-initdb.d/

  redis:
    image: redis

volumes:
  postgres_data:
SPRING_DATASOURCE_USERNAME: ${DB_USER}

Тут ми визначає змінну середовища в рамках контейнера SPRING_DATASOURCE_USERNAME, значення якої буде взято з іншого джерела, в нашому випадку, це створений .env файл в корені нашого проекту, який автоматично зчитається при піднятті контейнерів під час docker-compose up.

PostgreSQL

db:
    image: postgres:13.1-alpine
    environment:
      POSTGRES_DB: testrenderdb
      POSTGRES_USER: ${DB_USER}
      POSTGRES_PASSWORD: ${DB_PASS}
    volumes:
      - ./init-db/:/docker-entrypoint-initdb.d/

docker-entrypoint-initdb.d - це каталог, який використовується в Docker для ініціалізації бази даних під час першого запуску контейнера. В цьому каталозі можна розмістити SQL-скрипти або інші файли, які мають бути виконані або оброблені при створенні бази даних в Docker-контейнері.

Створивши додатковий каталог init-db, в якому я додав потрібний скрипт, буде створена ще одна база для мого проекту.

DO
$$
    BEGIN
        IF NOT EXISTS(SELECT 1 FROM pg_database WHERE datname = 'testrenderdb') THEN
            CREATE DATABASE testrenderdb;
        END IF;
    END
$$;

Оновлення .yml для GitHub Actions

Оскільки змін там достатньо, я залишу лінку на файл. Виділю лише степи і поясню що там і для чого.

https://github.com/overpathz/render-boot-bot/blob/main/.github/workflows/docker-image.yml

- name: Build and Push Docker Compose Services

Тут я роблю билд образу мого застосунку (на основі Dockerfile) та пушу його у мій DockerHub.

- name: Create .env file in project

Ось тут, використовуючи секретні змінні на рівні GitHub Actions, я створюю .env файл у корені мого проекту через доступ по ssh.

 name: Deploy to server

І тут, я стягую тепер мій образ з докер репозиторію і запускаю його

docker-compose -f docker-compose.yml up -d

Redis

Додатково я ще додав редіс, бо він потрібен буде мені для дечого при розробці. Але, на ньому акцентувати увагу я не буду.

Статті про вітчизняний бізнес та цікавих людей:

  • Вітаємо з Різдвом Христовим!

    Друкарня та платформа WE.UA вітають всіх наших читачів та авторів зі світлим святом Різдва! Зичимо всім українцям довгожданого миру, міцного здоровʼя, злагоди, родинного затишку та втілення всього доброго і прекрасного, чого вам побажали колядники!

    Теми цього довгочиту:

    Різдво
  • Каблучки – прикраси, які варто купувати

    Ювелірні вироби – це не тільки спосіб витратити гроші, але і зробити вигідні інвестиції. Бо вартість ювелірних виробів з кожним роком тільки зростає. Тому купуючи стильні прикраси, ви вигідно вкладаєте кошти.

    Теми цього довгочиту:

    Як Вибрати Каблучку
  • П'ять помилок у виборі домашнього текстилю, які псують комфорт сну

    Навіть ідеальний матрац не компенсує дискомфорт, якщо текстиль підібрано неправильно. Постільна білизна безпосередньо впливає на терморегуляцію, стан шкіри та глибину сну. Більшість проблем виникає не через низьку якість виробів, а через вибір матеріалів та подальшу експлуатацію

    Теми цього довгочиту:

    Домашній Текстиль
  • Як знайти житло в Києві

    Переїжджаєте до Києва і шукаєте житло? Дізнайтеся, як орендувати чи купити квартиру, перевірити власника та знайти варіанти, про які зазвичай не говорять.

    Теми цього довгочиту:

    Агентство Нерухомості
  • Як заохотити дитину до читання?

    Як залучити до читання сучасну молодь - поради та факти. Користь читання для дітей - основні переваги. Розвиток дітей - це наше майбутнє.

    Теми цього довгочиту:

    Читання
Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Oleksandr Klymenko
Oleksandr Klymenko@overpathz

Java Software Engineer

7.5KПрочитань
1Автори
95Читачі
На Друкарні з 19 квітня

Більше від автора

Це також може зацікавити:

  • Лістинг в Hamster Kombat. Гарні новини про AirDrop

    Доброго часу доби, шановна спільнота! З'явилися нові офіційні новини від розробників хом'яка, опубліковані Whitepaper. Тепер багато прояснилося, особливо з приводу токеноміки і тих міфів, на яких базувався основний хейт проекту, на кшталт "виділено на AirDrop 1%

    Теми цього довгочиту:

    Hamster Combat
  • 😱 Що Forbes розповів про Notcoin?

    Кілька годин тому вийшла стаття від редактора розділу технологій у Forbes. У ній описано хронологію створення гри, наводяться цитати CEO Open Builders (творці Notcoin) з листопадової презентації, а також є свіжі коментарі її співзасновника - Сергія Чікірєва.

    Теми цього довгочиту:

    Криптовалюта
  • 💥 Дроп за вік Discord — новий Dogs? Залетай у WUMP, поки гаряче!

    Забирай дроп WUMP за активність у Discord! Встигни заробити токени за прості дії: зміни нік, запрошуй друзів, твітни — і отримуй винагороду. Хайповий проєкт на кшталт Dogs. Залетай першим!

    Теми цього довгочиту:

    Dogs

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Це також може зацікавити:

  • Лістинг в Hamster Kombat. Гарні новини про AirDrop

    Доброго часу доби, шановна спільнота! З'явилися нові офіційні новини від розробників хом'яка, опубліковані Whitepaper. Тепер багато прояснилося, особливо з приводу токеноміки і тих міфів, на яких базувався основний хейт проекту, на кшталт "виділено на AirDrop 1%

    Теми цього довгочиту:

    Hamster Combat
  • 😱 Що Forbes розповів про Notcoin?

    Кілька годин тому вийшла стаття від редактора розділу технологій у Forbes. У ній описано хронологію створення гри, наводяться цитати CEO Open Builders (творці Notcoin) з листопадової презентації, а також є свіжі коментарі її співзасновника - Сергія Чікірєва.

    Теми цього довгочиту:

    Криптовалюта
  • 💥 Дроп за вік Discord — новий Dogs? Залетай у WUMP, поки гаряче!

    Забирай дроп WUMP за активність у Discord! Встигни заробити токени за прості дії: зміни нік, запрошуй друзів, твітни — і отримуй винагороду. Хайповий проєкт на кшталт Dogs. Залетай першим!

    Теми цього довгочиту:

    Dogs