Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

profcomff/redirect-ci

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
11 Commits
 
 
 
 
 
 

Repository files navigation

Сервис коротких ссылок

Превращает длинные ссылки в https://to.profcomff.com/<alias>. OIDC-аутентификация через auth.profcomff.com, soft-delete ссылок с сохранением истории переходов, бар-чарты переходов за час/день/всё время.

Стек

  • API: Python 3.13 + FastAPI + SQLAlchemy/alembic. Внешний Postgres (по DB_DSN).
  • Web: Vite + React 19 + TypeScript + Tailwind 4 SPA (PWA).
  • Auth: HS256 access-JWT (15 мин, in-memory у фронта) + HttpOnly refresh-cookie (sliding 30 дней). OIDC-флоу через /api/v2/oidc/redirect + /api/v2/oidc/callback.
  • Инфра: Docker Compose поверх существующей external-сети web. Reverse-proxy на хосте.

Исходники сервиса закрытые; в этом репо живёт только деплой-обвязка.

Что в репо

deploy/compose.yaml             prod docker-compose (API + UI, БД внешняя)
.github/workflows/deploy.yml    GitHub Actions: testing + production

Образы тянутся из git.dyakov.space/dyakov-space/to/{control-panel-service,web} (приватный Gitea-registry, доступ через secrets.DYAKOVSPACE_CI_TOKEN).

Деплой

Триггер Окружение Runner Тег образов Project name
push в main Testing [self-hosted, Linux, testing] dev-latest com_profcomff_redirect_test
push тега v* Production [self-hosted, Linux, production] latest com_profcomff_redirect

Шаги одинаковые: docker compose pulldocker compose run --rm control-panel-service ... alembic upgrade headdocker compose up -d --remove-orphans. Обе среды мигрируют свою БД отдельно.

Имена контейнеров (com_profcomff_api_redirect[_test], com_profcomff_ui_redirect[_test]) сохранены ради существующих reverse-proxy конфигов. Дополнительно сервисы получают network-aliases redirector-api и redirector-www на сети web.

Требования к окружению на раннере

  • docker + плагин docker compose v2.
  • Существующая external network web (docker network create web).
  • Доступ к Postgres-инстансу, который указан в DB_DSN для этой среды.

Переменные в GitHub Environments

Задаются вручную в Settings → Environments → Testing/Production.

Secrets (одинаковый набор в обоих окружениях, разные значения):

Имя Назначение
DYAKOVSPACE_CI_TOKEN Read-токен к git.dyakov.space для docker login
DB_DSN postgresql://... к внешней БД (своя на каждом окружении)
JWT_SECRET_KEY HS256-ключ подписи наших access-токенов (openssl rand -hex 32)
OIDC_CLIENT_SECRET OIDC client secret
OIDC_TRUSTED_TOKEN Опционально. Bearer-bypass для dev. В проде оставлять пустым

Vars:

Имя Пример (production)
BASE_URL https://to.profcomff.com
OIDC_CONFIGURATION_URI https://auth.profcomff.com/application/o/redirector/.well-known/openid-configuration
OIDC_CLIENT_ID redirector
OIDC_ADMIN_CLAIM groups
OIDC_ADMIN_CLAIM_VALUE redirector-admin
ALLOWED_DOMAINS ["https://to.profcomff.com"]

Ручной запуск на раннере

cd /path/to/checkout
PROJECT_VERSION=latest CONTAINER_SUFFIX= \
DB_DSN=... BASE_URL=... JWT_SECRET_KEY=... \
OIDC_CONFIGURATION_URI=... OIDC_CLIENT_ID=... OIDC_CLIENT_SECRET=... \
OIDC_ADMIN_CLAIM=groups OIDC_ADMIN_CLAIM_VALUE='Redirector Admin' \
ALLOWED_DOMAINS='["https://to.profcomff.com"]' \
docker compose --project-directory deploy --project-name com_profcomff_redirect pull

docker compose --project-directory deploy --project-name com_profcomff_redirect \
  run --rm control-panel-service \
  uv run --active --no-sync --directory=backend/control-panel-service alembic upgrade head

docker compose --project-directory deploy --project-name com_profcomff_redirect \
  up --detach --remove-orphans

About

to.profcomff.com

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Morty Proxy This is a proxified and sanitized view of the page, visit original site.