Step 0: rename site/ → app/ (Python stdlib conflict fix)

This commit is contained in:
2026-07-14 22:24:24 +04:00
parent ca7b70fe41
commit 976e59b496
18 changed files with 2 additions and 2 deletions
+166
View File
@@ -0,0 +1,166 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Gitea Actions — настройка CI/CD</title>
<style>
:root {
--bg: #0d1117; --fg: #c9d1d9; --muted: #8b949e;
--accent: #58a6ff; --green: #3fb950; --orange: #d2991d;
--border: #30363d; --code-bg: #161b22; --card-bg: #161b22;
}
* { box-sizing: border-box; margin: 0; padding: 0; }
body { font: 15px/1.65 -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; background: var(--bg); color: var(--fg); max-width: 860px; margin: 0 auto; padding: 32px 20px 80px; }
h1 { font-size: 26px; margin-bottom: 8px; }
h2 { font-size: 19px; margin-top: 36px; margin-bottom: 10px; padding-bottom: 6px; border-bottom: 1px solid var(--border); color: var(--accent); }
h3 { font-size: 16px; margin-top: 24px; margin-bottom: 6px; color: var(--green); }
p { margin: 8px 0; }
ul, ol { padding-left: 24px; margin: 8px 0; }
li { margin: 4px 0; }
code { background: var(--code-bg); padding: 1px 5px; border-radius: 4px; font-size: 13px; border: 1px solid var(--border); }
pre { background: var(--code-bg); padding: 12px 16px; border-radius: 6px; overflow-x: auto; font-size: 13px; border: 1px solid var(--border); margin: 12px 0; }
.nav { margin-bottom: 24px; }
.nav a { color: var(--accent); text-decoration: none; }
.nav a:hover { text-decoration: underline; }
.step { background: var(--card-bg); border: 1px solid var(--border); border-radius: 8px; padding: 16px 20px; margin: 16px 0; }
.step h3 { margin-top: 0; }
hr { border: none; border-top: 1px solid var(--border); margin: 32px 0; }
table { width: 100%; border-collapse: collapse; margin: 12px 0; border: 1px solid var(--border); }
th, td { padding: 8px; text-align: left; border: 1px solid var(--border); }
th { background: var(--code-bg); }
</style>
</head>
<body>
<div class="nav"><a href="/docs/architect">Архитектура</a></div>
<h1>🔄 Gitea Actions — настройка CI/CD</h1>
<blockquote style="border-left-color: #f85149; background: #1a0a0a; color: #f85149;">
<strong>⚠️ Не решает проблему ручного редеплоя managed-сервисов Nubes.</strong><br>
Если сервис деплоится только через Nubes UI — Gitea Actions может максимум валидировать код и синхронизировать VM-часть. Кнопку «Redeploy» всё равно жать руками.
</blockquote>
<hr>
<h2>Как это работает</h2>
<p>Gitea Actions — встроенный CI/CD (аналог GitHub Actions), доступен с Gitea 1.19+. При <code>git push</code> запускается workflow, который выполняет заданные шаги на <strong>раннере</strong> — отдельной машине, которая слушает задачи.</p>
<table>
<tr><th>Компонент</th><th>Где</th><th>Что делает</th></tr>
<tr><td>Workflow-файл</td><td><code>.gitea/workflows/*.yaml</code></td><td>Описывает шаги (steps) при пуше</td></tr>
<tr><td>Act Runner</td><td>Любая машина с доступом к Gitea</td><td>Выполняет джобы (systemd-сервис)</td></tr>
<tr><td>Gitea</td><td>Ваш инстанс</td><td>Отправляет задачи раннеру при пуше</td></tr>
</table>
<hr>
<h2>Пример workflow</h2>
<pre>name: Validate
on:
push:
branches: [master]
jobs:
check:
runs-on: linux_amd64
steps:
- name: Syntax check
run: python3 -m py_compile *.py</pre>
<p>Что можно автоматизировать:</p>
<ul>
<li>Синтаксическую проверку</li>
<li>Запуск тестов (<code>pytest</code>)</li>
<li>Синхронизацию кода на свою VM (<code>rsync</code> / <code>scp</code>)</li>
<li>Уведомления (Telegram, email)</li>
</ul>
<hr>
<h2>Как это настраивалось</h2>
<div class="step">
<h3>1. Установка act_runner на VM</h3>
<pre># Скачать бинарник
curl -sL -o /usr/local/bin/act_runner \
https://dl.gitea.com/act_runner/0.2.11/act_runner-0.2.11-linux-amd64
chmod +x /usr/local/bin/act_runner</pre>
</div>
<div class="step">
<h3>2. Получение токена</h3>
<p>В Gitea: <code>Репозиторий → Settings → Actions → Runners → Create new runner</code></p>
<p>Выдаётся токен вида <code>D0gvfu2iHfUj...</code> — он используется для регистрации.</p>
</div>
<div class="step">
<h3>3. Регистрация раннера</h3>
<pre>act_runner register \
--no-interactive \
--instance https://&lt;ваш-gitea&gt; \
--token &lt;TOKEN&gt; \
--name &lt;имя-раннера&gt; \
--labels linux_amd64:host</pre>
<p><code>linux_amd64:host</code> — означает host-режим (без Docker). Джобы выполняются прямо на машине.</p>
</div>
<div class="step">
<h3>4. Генерация конфига</h3>
<pre>act_runner generate-config > /etc/act_runner/config.yaml
# Важно: поправить labels → ["linux_amd64:host"]</pre>
</div>
<div class="step">
<h3>5. Systemd-сервис</h3>
<pre>[Unit]
Description=Gitea Actions Runner
After=network.target
[Service]
ExecStart=/usr/local/bin/act_runner daemon --config /etc/act_runner/config.yaml
WorkingDirectory=/etc/act_runner
Restart=always
RestartSec=10
User=runner
Environment=HOME=/home/runner
[Install]
WantedBy=multi-user.target</pre>
<pre>sudo systemctl daemon-reload
sudo systemctl enable act_runner --now
sudo systemctl status act_runner</pre>
</div>
<div class="step">
<h3>6. Workflow-файл</h3>
<p>Создать <code>.gitea/workflows/deploy.yaml</code> в репозитории. При пуше — workflow запустится автоматически.</p>
<p><strong>Важно:</strong> <code>runs-on</code> должен совпадать с лейблом раннера (без <code>:host</code>). То есть <code>runs-on: linux_amd64</code>.</p>
</div>
<hr>
<h2>Проверка статуса</h2>
<pre># Логи раннера на VM
sudo journalctl -u act_runner -f
# Статус сервиса
sudo systemctl status act_runner</pre>
<p>Результаты выполнения workflow видны в Gitea на вкладке <strong>Actions</strong> репозитория.</p>
<hr>
<h2>Полезные ссылки</h2>
<ul>
<li><a href="https://docs.gitea.com/usage/actions/overview/" target="_blank">Gitea Actions — Overview</a></li>
<li><a href="https://docs.gitea.com/usage/actions/act-runner" target="_blank">Act Runner — документация</a></li>
<li><a href="https://docs.gitea.com/usage/actions/quickstart/" target="_blank">Quick Start</a></li>
</ul>
</body>
</html>