Привет, Егор! Переход на Raspberry Pi 4 — это отличный шаг. Дополнительная оперативная память и более мощный процессор дадут нам хороший запас для локальной аналитики и комфортной работы PWA.
Архитектурно процесс миграции делится на две части: обновление нашего CI/CD пайплайна (эту задачу мы отдадим AI-агенту) и ручной перенос состояния (это нужно будет сделать тебе в терминале).
Архитектурный план миграции
- Сборка Docker-образа (Multi-arch): В данный момент файл
deploy-raspberry-pi3.yamlжестко завязан на 32-битную архитектуру (linux/arm/v7). Raspberry Pi 4 (по умолчанию) использует 64-битную ОС. Нам нужно изменить пайплайн так, чтобы он собирал образы сразу под две платформы:linux/arm/v7,linux/arm64. - GitHub Actions Runner:
У нас в пайплайне указан
runs-on: self-hosted. Тебе потребуется установить агента GitHub Actions на новую «малину» и присвоить ему метку, например,rpi4. Пайплайн мы обновим так, чтобы он искал именно этот тег. - Безопасный перенос SQLite (Критично!):
Поскольку мы используем
WAL(Write-Ahead Logging) для SQLite, нельзя просто скопировать файл.dbна горячую.- Сначала делаем
docker compose downна RPi 3. - Убеждаемся, что файлы
dicechess.db-walиdicechess.db-shmслились с основным файлом (или копируем их вместе с основным файлом базы). - Переносим папку приложения с помощью
rsyncна RPi 4:rsync -avz ~/apps/dicechess-trainer pi@<rpi4-ip>:~/apps/
- Сначала делаем
Ниже представлен скрипт для постановки задачи нашему агенту. Агент обновит инфраструктурный код и напишет документацию по миграции, чтобы в будущем мы могли легко масштабироваться.
Команда для создания задачи (PowerShell)
$issueBody = @'
## Context
We are migrating our deployment environment from a Raspberry Pi 3 (ARMv7) to a Raspberry Pi 4 (ARM64). Our current CD pipeline (`deploy-raspberry-pi3.yaml`) strictly targets `linux/arm/v7` and relies on a generic `self-hosted` runner. We need to upgrade our deployment pipeline to be architecture-agnostic (multi-arch) and properly target the new hardware.
## Objective
Update the GitHub Actions CD pipeline to build a multi-architecture Docker image (`linux/arm/v7` and `linux/arm64`), rename the workflow to reflect a generic production deployment, and write a documentation guide on how to migrate the local SQLite database safely between devices.
## Definition of Done (DoD)
- [ ] Rename `.github/workflows/deploy-raspberry-pi3.yaml` to `.github/workflows/deploy-production.yaml`.
- [ ] Update the `docker/build-push-action` step to compile for `platforms: linux/arm/v7,linux/arm64`.
- [ ] Update the deployment job's `runs-on` array to explicitly require the `rpi4` tag alongside `self-hosted` (e.g., `runs-on: [self-hosted, rpi4]`).
- [ ] Create a new documentation file `docs/src/content/docs/guides/infrastructure-migration.mdx`.
- [ ] In the new `.mdx` file, document the safe migration of a SQLite DB with WAL mode (requiring container shutdown and copying of `-wal`/`-shm` files alongside the `.db` file).
- [ ] Update Astro config / Starlight sidebar in the docs to include the new guide.
'@
$issueBody | Out-File -FilePath "temp_issue.md" -Encoding utf8
gh issue create `
--title "Migrate CD Pipeline and Document Architecture for RPi 4 (ARM64)" `
--body-file "temp_issue.md" `
--label "ai-ready" `
--label "ci-cd" `
--label "architecture" `
--milestone "v0.1 - Foundation"
Remove-Item "temp_issue.md"Мои рекомендации перед запуском пайплайна:
Как только агент закроет этот Issue, установи GitHub Actions Runner на Raspberry Pi 4. При настройке runner’а обязательно укажи тег rpi4. После этого сделай rsync папки с базой данных и .env файлом, и новый деплой автоматически запустит приложение уже на четвертой малине.