diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml
new file mode 100644
index 0000000..9980ca5
--- /dev/null
+++ b/.gitea/workflows/deploy.yml
@@ -0,0 +1,48 @@
+name: Build and Deploy
+run-name: Deploy ${{ gitea.ref_name }}
+
+on:
+ push:
+ branches: [main]
+ tags: ['v*']
+
+jobs:
+ ci:
+ name: Check and Build
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: actions/setup-go@v5
+ with:
+ go-version: '1.24'
+
+ - name: Vet
+ run: go vet ./...
+
+ - name: Test
+ run: go test ./...
+
+ - name: Build binary
+ run: CGO_ENABLED=1 go build -o max-telegram-bridge-bot .
+
+ deploy:
+ name: Deploy to Production
+ needs: ci
+ runs-on: ubuntu-latest
+ if: ${{ gitea.ref_name == 'main' || startsWith(gitea.ref_name, 'v') }}
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Build Docker image
+ run: docker build -t max-telegram-bridge-bot:latest .
+
+ - name: Deploy with Docker Compose
+ working-directory: C:\docker\DockerCompose_directory\max-telegram-bridge-bot-0.3.2
+ run: docker-compose up -d --build
+
+ - name: Health check
+ run: |
+ echo "Waiting for container to start..."
+ timeout /t 10
+ docker ps --filter "name=bridge" --format "table {{.Names}}\t{{.Status}}\t{{.Image}}"
diff --git a/plans/2026-05-27-ci-cd-implementation-plan.md b/plans/2026-05-27-ci-cd-implementation-plan.md
new file mode 100644
index 0000000..50039a1
--- /dev/null
+++ b/plans/2026-05-27-ci-cd-implementation-plan.md
@@ -0,0 +1,242 @@
+# План внедрения локального CI/CD через Gitea в Docker
+
+## 1. Текущее состояние (AS-IS)
+
+```mermaid
+flowchart LR
+ Dev[\\srv1\\smb\\... dev] -->|ручное копирование| Prod[C:\\docker\\... prod]
+ Prod -->|docker-compose up -d --build| Container[Running Container]
+```
+
+**Проблемы:**
+- Деплой полностью ручной — копирование файлов через сетевую шару
+- Нет автоматической проверки кода перед деплоем
+- Нет истории изменений/версий на локальном сервере
+- Две разные git-истории (dev: `main`, prod: `master`) не синхронизированы
+
+## 2. Целевая архитектура (TO-BE)
+
+```mermaid
+flowchart LR
+ subgraph "Windows Server"
+ Gitea[Gitea Container
порт 3000]
+ Runner[Gitea Actions Runner
act_runner]
+ Registry[Локальный Docker Registry
порт 5000]
+ Bridge[bridge + postgres]
+ Caddy[Caddy reverse proxy]
+ end
+
+ subgraph "Dev (сетевая шара)"
+ Dev[\\srv1\\smb\\...]
+ end
+
+ Dev -->|git push gitea main| Gitea
+ Gitea -->|триггер push/tag| Runner
+ Runner -->|docker build + push| Registry
+ Runner -->|docker-compose up -d| Bridge
+ Caddy -->|прокси| Gitea
+ Caddy -->|прокси| Bridge
+```
+
+### Компоненты
+
+| Компонент | Роль | Образ |
+|-----------|------|-------|
+| **Gitea** | Локальный Git-сервер + CI/CD (Gitea Actions) | `gitea/gitea:latest` |
+| **act_runner** | Исполнитель Gitea Actions (регистрируется в Gitea) | `gitea/act_runner:latest` |
+| **Docker Registry** | Локальное хранилище Docker-образов (опционально) | `registry:2` |
+| **Bridge** | Целевое приложение | `ghcr.io/...` или `localhost:5000/bridge:latest` |
+
+## 3. Пошаговый план
+
+### Шаг 1: Развернуть Gitea в Docker
+
+**Новый файл:** `C:\docker\DockerCompose_directory\gitea\docker-compose.yml`
+
+```yaml
+services:
+ gitea:
+ image: gitea/gitea:latest
+ container_name: gitea
+ restart: unless-stopped
+ ports:
+ - "3000:3000" # Web UI
+ - "2222:22" # SSH
+ volumes:
+ - gitea_data:/data
+ - /etc/timezone:/etc/timezone:ro
+ - /etc/localtime:/etc/localtime:ro
+ environment:
+ - USER_UID=1000
+ - USER_GID=1000
+ - GITEA__database__DB_TYPE=sqlite3
+
+ act_runner:
+ image: gitea/act_runner:latest
+ container_name: act_runner
+ restart: unless-stopped
+ depends_on:
+ - gitea
+ volumes:
+ - /var/run/docker.sock:/var/run/docker.sock
+ - act_runner_data:/data
+ environment:
+ - GITEA_INSTANCE_URL=http://gitea:3000
+ - GITEA_RUNNER_REGISTRATION_TOKEN=<получить из UI Gitea>
+ - GITEA_RUNNER_NAME=windows-docker-runner
+
+volumes:
+ gitea_data:
+ act_runner_data:
+```
+
+**Ключевой момент:** `act_runner` монтирует Docker-сокет хост-системы (`/var/run/docker.sock`). Это даёт runner'у права выполнять `docker build`, `docker pull`, `docker-compose` от имени хоста.
+
+### Шаг 2: Настроить Gitea через веб-интерфейс
+
+1. Открыть `http://localhost:3000` (или через Caddy: `https://git.example.com`)
+2. Пройти начальную настройку (Register)
+3. Создать репозиторий `max-telegram-bridge-bot`
+4. Скопировать токен регистрации runner'а: Site Administration → Actions → Runners → Create Runner
+
+### Шаг 3: Перенести код в Gitea
+
+На dev-машине (сетевой ресурс `\\srv1\smb\...`):
+
+```bash
+# Добавить Gitea как remote
+git remote add gitea http://:3000/BEARlogin/max-telegram-bridge-bot.git
+
+# Залить код
+git push gitea main
+
+# Удалить старый remote origin если не нужен (GitHub)
+git remote remove origin
+```
+
+### Шаг 4: Создать Gitea Actions workflow
+
+**Новый файл:** `.gitea/workflows/deploy.yml` (в корне проекта)
+
+```yaml
+name: Build and Deploy
+run-name: Deploy ${{ gitea.ref_name }}
+
+on:
+ push:
+ branches: [main]
+ tags: ['v*']
+
+jobs:
+ ci:
+ name: Check and Build
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: actions/setup-go@v5
+ with:
+ go-version: '1.24'
+
+ - name: Vet
+ run: go vet ./...
+
+ - name: Test
+ run: go test ./...
+
+ - name: Build
+ run: CGO_ENABLED=1 go build -o max-telegram-bridge-bot .
+
+ deploy:
+ name: Deploy to Production
+ needs: ci
+ runs-on: ubuntu-latest
+ if: ${{ gitea.ref_name == 'main' || startsWith(gitea.ref_name, 'v') }}
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Build Docker image
+ run: docker build -t max-telegram-bridge-bot:latest .
+
+ - name: Deploy with Docker Compose
+ working-directory: C:\docker\DockerCompose_directory\max-telegram-bridge-bot-0.3.2
+ run: docker-compose up -d --build
+
+ - name: Health check
+ run: |
+ timeout /t 10
+ docker ps --filter "name=bridge" --format "{{.Status}}"
+```
+
+### Шаг 5: Настроить Docker Compose для production через Gitea
+
+Изменить [`docker-compose.yml`](docker-compose.yml) в `C:\docker\DockerCompose_directory\max-telegram-bridge-bot-0.3.2`:
+
+```yaml
+services:
+ bridge:
+ build: .
+ image: max-telegram-bridge-bot:latest
+ restart: unless-stopped
+ env_file: .env
+ # ... остальное без изменений
+```
+
+Добавление `image:` необязательно, но помогает Docker кэшировать и помечать образы.
+
+### Шаг 6: Синхронизировать prod-папку с Gitea
+
+На Windows Server (`C:\docker\...`):
+
+```powershell
+# Удалить старую git-историю (master)
+Remove-Item -Recurse -Force .git
+
+# Инициализировать заново от Gitea
+git init
+git remote add origin http://localhost:3000/BEARlogin/max-telegram-bridge-bot.git
+git fetch origin
+git checkout -b main origin/main
+```
+
+После этого `C:\docker\...` будет чистым working tree ветки `main` из Gitea.
+
+### Шаг 7: Тестирование полного цикла
+
+```mermaid
+flowchart TB
+ A[Dev: git commit + push to Gitea] --> B[Gitea получает push]
+ B --> C[Gitea Actions запускает workflow]
+ C --> D[act_runner: go vet + test + build]
+ D --> E[act_runner: docker build]
+ E --> F[act_runner: docker-compose up -d]
+ F --> G[Контейнер bridge перезапущен]
+```
+
+## 4. Файлы для создания/изменения
+
+| Файл | Действие | Назначение |
+|------|----------|------------|
+| `C:\docker\DockerCompose_directory\gitea\docker-compose.yml` | **Создать** | Стек Gitea + act_runner |
+| `.gitea/workflows/deploy.yml` | **Создать** | Workflow для Gitea Actions |
+| `C:\docker\DockerCompose_directory\max-telegram-bridge-bot-0.3.2\docker-compose.yml` | **Изменить** | Добавить `image:` тег |
+| `C:\docker\DockerCompose_directory\max-telegram-bridge-bot-0.3.2\.git` | **Пересоздать** | Привязать к Gitea вместо GitHub |
+
+## 5. Риски и митигация
+
+| Риск | Решение |
+|------|---------|
+| Docker-сокет в контейнере (act_runner) —安全问题 | act_runner изолирован, имеет доступ только к Docker API, не к хост-системе |
+| Сетевая шара `\\srv1\smb\...` недоступна с Windows Server | Gitea работает на самом сервере, dev-машина пушит через HTTP/SSH, сетевая шара не нужна |
+| Потеря данных Gitea (репозитории) | Volume `gitea_data` хранит всё; регулярный backup в `docker volume backup` |
+| act_runner не может найти docker-compose | Использовать `docker compose` (built-in) вместо `docker-compose` (отдельный плагин) |
+
+## 6. Критерии готовности
+
+- [ ] Gitea запущен на `http://localhost:3000`, доступен через Caddy
+- [ ] act_runner зарегистрирован и виден в UI Gitea (Site Admin → Actions)
+- [ ] Код из dev-шары залит в Gitea (`git push gitea main`)
+- [ ] Push в Gitea → Gitea Actions запускает `go vet + go test + go build`
+- [ ] Push в Gitea → Docker-образ собирается и контейнер перезапускается
+- [ ] Prod-папка `C:\docker\...` синхронизирована с Gitea (один remote)
+- [ ] Чистый тест: изменение в dev → git push → контейнер обновился автоматически