Dockerize

This commit is contained in:
norohind 2024-10-27 15:04:09 +01:00
parent 407a9e4794
commit 991d8f182f
Signed by: norohind
SSH Key Fingerprint: SHA256:SnI4bWnejM2/YEQ5hpH58TUohiQpnjoKN6tXUQlobE0
6 changed files with 58 additions and 5 deletions

7
.dockerignore Normal file
View File

@ -0,0 +1,7 @@
.git
.venv
venv
Dockerfile
docker-compose.yaml
__pycache__
.idea

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
.idea
.venv

27
Dockerfile Normal file
View File

@ -0,0 +1,27 @@
FROM docker.io/python:3.12-slim as builder
WORKDIR /app
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
COPY requirements.txt .
RUN pip wheel --no-cache-dir --no-deps --wheel-dir /app/wheels -r requirements.txt
FROM docker.io/python:3.12-slim
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
RUN useradd --no-create-home --system user && mkdir /data && chown user:user /data
ENV DB_PATH /data/presence-tracker.sqlite
WORKDIR /app
COPY --from=builder /app/wheels /wheels
COPY --from=builder /app/requirements.txt .
RUN pip install --no-cache /wheels/*
USER user
COPY . .
ENTRYPOINT ["python3", "/app/main.py"]

View File

@ -4,7 +4,7 @@ from loguru import logger
from datetime_utils import to_unix
def get_db() -> sqlite3.Connection:
def get_db(db_path) -> sqlite3.Connection:
SCHEMA = """
create table if not exists activities (
id integer primary key autoincrement,
@ -25,13 +25,13 @@ def get_db() -> sqlite3.Connection:
foreign key (activity_name_id) references activities(id)
);"""
db = sqlite3.connect('presence-tracker.sqlite')
db = sqlite3.connect(db_path)
db.executescript(SCHEMA)
return db
class PresenceTracker:
def __init__(self, db: sqlite3.Connection = get_db()):
def __init__(self, db: sqlite3.Connection):
self.db = db
def log_activity(self, user_id: int, activity_name: str, start_time: datetime, end_time: datetime | None = None):

15
docker-compose.yaml Normal file
View File

@ -0,0 +1,15 @@
services:
discord-presence-tracker:
build: https://gitea.demb.uk/norohind/discord-presence-tracker.git
restart: unless-stopped
read_only: true
environment:
- LOGURU_LEVEL=INFO
- TOKEN
volumes:
- discord-presence-tracker-vol:/data
volumes:
discord-presence-tracker-vol:
external: true

View File

@ -7,7 +7,7 @@ from typing import Any
from itertools import chain
from loguru import logger
from PresenceTracker import PresenceTracker
from PresenceTracker import PresenceTracker, get_db
import discord
from discord.ext.commands import Bot as BotBase
from pathlib import Path
@ -104,7 +104,9 @@ async def async_main():
intents.presences = True
intents.members = True
activity_tracker = PresenceTracker()
db = get_db(os.environ['DB_PATH'])
activity_tracker = PresenceTracker(db)
bot = Bot(intents=intents, activity_tracker=activity_tracker, command_prefix='')
for sig in (signal.SIGTERM, signal.SIGINT):