Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,12 @@ __pycache__/
.venv/
.vscode/
.mypy_cache/
.pytest_cache/
.ruff_cache/
.coverage
coverage.xml
TODO.md
tests/
db_test_data.py
LICENSE
LICENSE
.env
7 changes: 7 additions & 0 deletions Dockerfile.api
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ FROM python:3.13-slim
# создаем папку /app. Весь код будет тут
WORKDIR /app

ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

# Копируем только requrements.txt(кэшируется)
COPY requirements.txt .

Expand All @@ -18,6 +21,10 @@ COPY . .
RUN rm -rf /app/src/bot
RUN chmod +x entrypoint.sh

RUN useradd -m -r app \
chown -R app:app /app
USER app

# Открываем порт
EXPOSE 8000

Expand Down
16 changes: 15 additions & 1 deletion Dockerfile.bot
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,13 @@ FROM python:3.13-slim

WORKDIR /app

#Отключаем создание файлов .pyc и __pycache__
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1

# Установка системных зависимостей
RUN apt-get update && apt-get install -y \
gcc \
gcc \
&& rm -rf /var/lib/apt/lists/*

COPY requirements.txt .
Expand All @@ -14,10 +18,20 @@ COPY requirements.txt .
RUN pip install --no-cache-dir --upgrade pip && \
pip install --no-cache-dir -r requirements.txt

# Создаем пользователя
# -m создает домашнюю директорию пользователя.
# -r - создает системного пользователя(служебная учетка с ограниченными правами)
# через chown рекурсивно(-R) меняем права доступа на файлах каталога для пользователя app, группы app (app:app)

COPY src/presentation/bot ./src/presentation/bot
COPY src/logger.py ./src/
COPY src/domain/services ./src/domain/services
COPY src/shared/ ./src/shared/
COPY src/config.py ./src/

RUN useradd -m -r app && \
chown -R app:app /app

USER app

CMD ["python", "-m", "src.presentation.bot.handlers.bot"]
35 changes: 32 additions & 3 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ services:
- postgres_data:/var/lib/postgresql/data # стандартное мето хранения файлов postgres (имя_volume:путь внутри контейнера)
mem_limit: 512m
mem_reservation: 256m
networks:
- api_db_net
security_opt:
- no-new-privileges:true # Запрет на повышение прав до root

api:
image: ghcr.io/fl1rix/steeltime-api:latest
Expand All @@ -35,8 +39,17 @@ services:
restart: unless-stopped
mem_limit: 1g # Лимиты ресурсов
cpus: 0.5
networks:
- api_bot_net
- api_db_net
read_only: true
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
tmpfs:
- /tmp


bot:
image: ghcr.io/fl1rix/steeltime-bot:latest
restart: unless-stopped
Expand All @@ -49,18 +62,34 @@ services:
condition: service_healthy
mem_limit: 256m
cpus: 0.25
networks:
- api_bot_net
read_only: true
security_opt:
- no-new-privileges:true
cap_drop: # Забирает все доступные привилегии у root пользователя.
- ALL
tmpfs: # Папка, доступная для записи инфорамции, в случае надобности.
- /tmp

watchtower:
image: containrrr/watchtower
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: --interval 300
security_opt:
- no-new-privileges:true
tmpfs:
- /tmp

volumes:
postgres_data:
driver: local

networks:
default:
api_db_net:
driver: bridge
name: steeltime_network
internal: true

api_bot_net:
Comment thread
Fl1riX marked this conversation as resolved.
driver: bridge
4 changes: 0 additions & 4 deletions src/logger.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,4 @@
console_handler = logging.StreamHandler() # вывод логов в консоль
console_handler.setFormatter(formatter)

handler = logging.FileHandler(filename="SteelTime.log", encoding="utf-8") # файл для записи логов
handler.setFormatter(formatter)

logger.addHandler(handler)
Comment thread
Fl1riX marked this conversation as resolved.
logger.addHandler(console_handler)
2 changes: 0 additions & 2 deletions src/presentation/api/v1/auth/tg_link.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,6 @@ async def create_telegram_magic_link(
token = secrets.token_urlsafe(32)
expires = datetime.now(timezone.utc) + timedelta(minutes=10)

#! TODO: Добавить изоляцию на уровне docker

logger.info("Сохранение magic токена...")
await TgLinkService.save_link_token(token=token, expires_at=expires, db=db, telegram_id=telegram_id)
logger.info("Токен успешно сохранен!")
Expand Down
Loading