Docker image #42

Merged
Miroslavsckaya merged 13 commits from feature_docker into master 2022-08-13 16:41:20 +00:00
6 changed files with 120 additions and 3 deletions

17
.dockerignore Normal file
View file

@ -0,0 +1,17 @@
# Python
.venv
__pycache__
# GIT
.gitignore
#CI configuration
.drone.yml
pylama.ini
# Bot documentation
README.md
# Environment
.env
.env.dist

8
.env.dist Normal file
View file

@ -0,0 +1,8 @@
RSSBOT_TG_TOKEN=1234567890:yourbotstoken
# Optional variables
# RSSBOT_DSN=xxx
# POSTGRES_USER=xxx
# POSTGRES_PASSWORD=xxx
# POSTGRES_DB=xxx
# LOG_LEVEL=INFO

4
.gitignore vendored
View file

@ -5,5 +5,5 @@
/.venv /.venv
/__pycache__ /__pycache__
# Database # Environment
skobkin marked this conversation as resolved
Review

Missing EOL (\n) on the last line

Missing EOL (`\n`) on the last line
/*.db .env

21
Dockerfile Normal file
View file

@ -0,0 +1,21 @@
FROM python:3.10-alpine
WORKDIR /bot
COPY . .
skobkin marked this conversation as resolved
Review

You can probably copy only Python files and requirements.txt. We don't need anything else in the image to run the app.

You can use .dockerignore file to acomplish that. Check this documentation and my example.

This file will tell ADD/COPY to ignore some files you don't want to see in the image.

You can probably copy only Python files and `requirements.txt`. We don't need anything else in the image to run the app. You can use `.dockerignore` file to acomplish that. Check [this documentation](https://docs.docker.com/engine/reference/builder/#dockerignore-file) and [my example](https://git.skobk.in/skobkin/magnetico-web/src/branch/master/.dockerignore). This file will tell `ADD`/`COPY` to ignore some files you don't want to see in the image.
RUN pip install -r requirements.txt
ENV PYTHONUNBUFFERED=1
# App settings
# https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING
ENV RSSBOT_DSN=postgres://username:password@hostname/database_name
# https://core.telegram.org/bots#6-botfather
ENV RSSBOT_TG_TOKEN=1234567890:yourbotstoken
# https://docs.python.org/3/howto/logging.html#logging-levels
ENV LOG_LEVEL=INFO
ENTRYPOINT [ "python" ]
CMD [ "bot.py" ]

View file

@ -43,4 +43,43 @@ python bot.py
export RSSBOT_TG_TOKEN=xxx export RSSBOT_TG_TOKEN=xxx
export RSSBOT_DSN=xxx export RSSBOT_DSN=xxx
python update.py python update.py
``` ```
## Running prebuild Docker Image
### Running the bot
```shell
docker run -e RSSBOT_DSN=yyy RSSBOT_TG_TOKEN=xxx miroslavskaya/tg_rss_bot bot.py
```
### Running update
```shell
docker run -e RSSBOT_DSN=yyy RSSBOT_TG_TOKEN=xxx miroslavskaya/tg_rss_bot update.py
```
## Building and running Docker image from source
```shell
docker build . -t tg_rss_bot
```
### Running the bot
```shell
docker run -e RSSBOT_DSN=yyy RSSBOT_TG_TOKEN=xxx tg_rss_bot bot.py
```
### Running update
```shell
docker run -e RSSBOT_DSN=yyy RSSBOT_TG_TOKEN=xxx tg_rss_bot update.py
```
## Using Docker Compose
### Running the bot
```shell
docker-compose up
```
### Running the update
```shell
docker-compose run app update.py
```

32
docker-compose.yml Normal file
View file

@ -0,0 +1,32 @@
version: '3.7'
skobkin marked this conversation as resolved
Review

I just understood that README.md has no documentation about running the bot in Docker yet.

I think it's a good idea to fix that.

I just understood that `README.md` has no documentation about running the bot in Docker yet. I think it's a good idea to fix that.
services:
app:
build: .
image: miroslavsckaya/tg_rss_bot
environment:
# DSN schema: postgres://username:password@hostname/database_name
# https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING
- "RSSBOT_DSN=postgres://${BOT_DB_USER:-bot}:${BOT_DB_PASSWORD:-dev}@${BOT_DB_HOST:-db}/${BOT_DB_NAME:-bot}"
# https://core.telegram.org/bots#6-botfather
- "RSSBOT_TG_TOKEN=${RSSBOT_TG_TOKEN}"
# https://docs.python.org/3/howto/logging.html#logging-levels
- "LOG_LEVEL=${LOG_LEVEL:-INFO}"
depends_on:
- postgres
restart: unless-stopped
db:
image: postgres:14-alpine
environment:
# Postgres settings
# https://hub.docker.com/_/postgres
- "POSTGRES_USER=${BOT_DB_USER:-bot}"
- "POSTGRES_PASSWORD=${BOT_DB_PASSWORD:-dev}"
- "POSTGRES_DB=${BOT_DB_NAME:-bot}"
volumes:
- db-data:/var/lib/postgresql/data
restart: unless-stopped
volumes:
skobkin marked this conversation as resolved
Review

db-data maybe?

`db-data` maybe?
db-data: