diff --git a/servers/fr1.md b/servers/fr1.md index 6ee407f..093e8bb 100644 --- a/servers/fr1.md +++ b/servers/fr1.md @@ -107,7 +107,7 @@ backend=systemd banaction=ufw ## nginx + TLS - nginx 1.24 (apt) + certbot 2.9 (`python3-certbot-nginx`), автопродление через systemd-таймер certbot. - vhost `/etc/nginx/sites-available/mon.ruzzy.dev.conf` → проксирует на Grafana (`127.0.0.1:3000`), HTTPS-редирект, websocket. -- vhost'ы `share.ruzzy.dev.conf` и `www.ruzzy.dev.conf` — статика с **общим** корнем `/var/www/share.ruzzy.dev` (`autoindex off`, `try_files $uri =404`, `server_tokens off`), у каждого свой сертификат. Используется для раздачи клиентских конфигов OpenVPN — сейчас там `marina-de.ovpn`, `masha-de.ovpn`. +- vhost'ы `share.ruzzy.dev.conf` и `www.ruzzy.dev.conf` — статика с **общим** корнем `/var/www/share.ruzzy.dev` (`autoindex off`, `try_files $uri =404`, `server_tokens off`), у каждого свой сертификат. Используется для раздачи клиентских конфигов OpenVPN — сейчас там `marina-de.ovpn`, `masha-de.ovpn`; с 2026-10-12 ещё `astra/index.html` и `astra/privacy.html` — страницы OAuth-приложения Astra для Google (`stacks/www-ruzzy/`, см. `servers/rpi.md`). - vhost `default` — catch-all `server_name _`, `listen 80 default_server`, отдаёт дефолтную страницу `/var/www/html/index.nginx-debian.html`. На `:443` `default_server` **не задан**, поэтому TLS-запрос с неизвестным SNI попадает на первый по алфавиту vhost (`git.ruzzy.dev`) и получает его сертификат. Так отвечают и `https://ruzzy.dev`, и `https://fr1.ruzzy.dev` — своих vhost'ов и сертификатов у них нет, браузер видит несовпадение имени (проверено 2026-10-11). - vhost `astra.ruzzy.dev` (вебхук Маруси) — **удалён 2026-10-11** вместе с сертификатом. ⚠️ DNS-запись `astra.ruzzy.dev` (CNAME → fr1.ruzzy.dev) у регистратора — удалить вручную; пока она есть, запросы к этому имени отвечает vhost `git` с чужим сертификатом. - Сертификаты LE: `mon`, `git`, `share`, `www`, `astra` (с 2026-10-11, `certbot certonly --nginx`, продление тем же таймером). `cam.ruzzy.dev` удалён 2026-09-08 вместе с ipcam. diff --git a/servers/rpi.md b/servers/rpi.md index 9a234d4..1ead550 100644 --- a/servers/rpi.md +++ b/servers/rpi.md @@ -224,3 +224,12 @@ Docker CE 29.9 + Compose v5.6 из репо download.docker.com (в Debian ст - 2026-10-12 по прямой просьбе владельца OneDrive-бэкап и еженедельная проверка исключают объекты с метаданными `malware-detected=true` через `--metadata-exclude`; `--onedrive-av-override=false` явно запрещает обход серверного антивируса независимо от конфигурации. Ранее восемь заблокированных файлов приводили к ошибке всех прогонов и нулевой метке последнего успеха. Фильтр динамический, не список восьми путей; проверен на `Olya/laptop/калитники - платформы.rar`: без фильтра файл виден, с фильтром отсутствует; метаданные подтверждают true. Скрипты установлены в `/usr/local/bin/`, прежние сохранены с `.bak-20261012-malware`. Файлы в current/archive и в облаке не удалялись, текущие процессы не прерывались; следующий запуск по таймеру использует фильтр. ⚠️ Успех означает полноту бэкапа только среди файлов без отметки OneDrive; ранее сохранённые копии не очищаются, новые реальные ошибки не подавляются. Успешный полный прогон после изменения пока не подтверждён. - 2026-10-12 08:16 MSK по прямой просьбе владельца вручную запущен `onedrive-backup.service` после установки фильтра malware-detected. Перед запуском служба была failed (предыдущий результат 04:57), конкурирующего прогона не было; запуск принят, состояние activating/start. Итог и обновление метрики успеха ещё ожидаются, алерт вручную не сбрасывался. + + +## Google: календарь и почта владельца (с 2026-10-12) + +- Скилл Astra **`google`** (`ruzzy/astra-bot`, `codex/skills/google/`): `gcal` (повестка, свободные окна, создать/перенести/изменить/удалить событие), `gmail` (**только чтение**: список/поиск, непрочитанные, письмо, вложения → `/tmp/astra-gmail/`), `google-auth` (вход/статус). На rpi: `/usr/local/bin/{gcal,gmail,google-auth}`, модуль `/usr/local/lib/astra-google/google_api.py` (только stdlib). Без подтверждения — `codex/rules/google.rules`. +- Аккаунт `ruslan.gilfanov@gmail.com`; OAuth-клиент Desktop в Google Cloud проекте `astra` (Calendar API + Gmail API), приложение опубликовано (In production, не проверено Google — для личного использования). Branding: домашняя `https://www.ruzzy.dev/astra/index.html`, политика `https://www.ruzzy.dev/astra/privacy.html` (fr1, `stacks/www-ruzzy/`), authorized domain `ruzzy.dev`, без логотипа (логотип требует верификации). +- Права токена: `calendar` + `gmail.readonly`. Секреты — `/etc/astra-google/` (root:astra 2770; `client.json` 640, `token.json` 640 — refresh-токен), в git нет. Вход (PKCE, redirect `http://localhost`): `google-auth url` → «Разрешить» → адрес `http://localhost/?code=…` из браузера → `google-auth code 'АДРЕС'`. Отозвать — myaccount.google.com/permissions. +- Календари: личный (запись), «Семейная группа» (запись — только по явной просьбе), праздники США (чтение), **рабочий `rgilfanov@walletteam.org` — только занятость** (freeBusyReader через `freeBusy`): админ walletteam запрещает внешний доступ к подробностям; обход (секретный iCal, копирование) — не делать. `gcal` пишет только в календари с ролью owner/writer. +- Доступ: владелец — всё; `129703290` — календарь, почта закрыта; Поле — ни календарь, ни почту (правила в `codex/AGENTS.md`). diff --git a/stacks/www-ruzzy/README.md b/stacks/www-ruzzy/README.md new file mode 100644 index 0000000..ebe44d4 --- /dev/null +++ b/stacks/www-ruzzy/README.md @@ -0,0 +1,7 @@ +# www.ruzzy.dev/astra — страницы для Google OAuth (Branding) + +Домашняя страница и privacy policy OAuth-приложения «Astra» (Google Cloud, проект `astra`, +личный аккаунт владельца) — см. `servers/rpi.md`, раздел «Google». Отдаёт vhost `www.ruzzy.dev` +на fr1 (корень `/var/www/share.ruzzy.dev`, `try_files $uri =404` — ссылки только с `.html`). + +Установка на fr1: скопировать каталог в `~/www-ruzzy` и `sudo sh ~/www-ruzzy/install.sh`. diff --git a/stacks/www-ruzzy/astra/index.html b/stacks/www-ruzzy/astra/index.html new file mode 100644 index 0000000..a7dbcb7 --- /dev/null +++ b/stacks/www-ruzzy/astra/index.html @@ -0,0 +1,12 @@ + + +Astra + + +

Astra

+

Astra is a private home assistant run by Ruslan Gilfanov for personal and family use only. +It is not offered to the public.

+

It uses the Google Calendar API to show the owner's agenda and to create or change events in the owner's +own Google Calendar on request.

+

Privacy policy · Contact: ruslan.gilfanov@gmail.com

+ diff --git a/stacks/www-ruzzy/astra/privacy.html b/stacks/www-ruzzy/astra/privacy.html new file mode 100644 index 0000000..e809237 --- /dev/null +++ b/stacks/www-ruzzy/astra/privacy.html @@ -0,0 +1,21 @@ + + +Astra — Privacy policy + + +

Astra — Privacy policy

+

Last updated: 2026-10-12.

+

Astra is a private assistant used only by its owner (Ruslan Gilfanov) and his family. It is not a public service.

+

Data accessed

+

With the owner's consent Astra accesses the owner's Google Calendar (events and calendars visible to the owner's +Google account) to show the agenda, find free time and create, change or delete events at the owner's request.

+

Storage and sharing

+

The OAuth token and calendar data are processed on the owner's own home server only. Data is not sold, +shared with third parties or used for advertising. Calendar data is not used to train AI models.

+

The use of information received from Google APIs adheres to the +Google API Services User Data Policy, +including the Limited Use requirements.

+

Revoking access

+

Access can be revoked at any time at myaccount.google.com/permissions.

+

Contact: ruslan.gilfanov@gmail.com

+ diff --git a/stacks/www-ruzzy/install.sh b/stacks/www-ruzzy/install.sh new file mode 100644 index 0000000..2f19689 --- /dev/null +++ b/stacks/www-ruzzy/install.sh @@ -0,0 +1,9 @@ +#!/bin/sh +# Страницы Astra для Google OAuth Branding (homepage + privacy policy) → https://www.ruzzy.dev/astra/ +# Запуск на fr1: sudo sh ~/www-ruzzy/install.sh +set -e +src=$(dirname "$0")/astra +install -d -o www-data -g www-data -m 755 /var/www/share.ruzzy.dev/astra +install -o www-data -g www-data -m 644 "$src/index.html" "$src/privacy.html" /var/www/share.ruzzy.dev/astra/ +# /astra/ → index.html (vhost: try_files $uri =404, без index-каталога) +ls -l /var/www/share.ruzzy.dev/astra