Это мой первый опыт в программировании. Делал его с помощью AI, поэтому буду рад замечаниям, проверкам и идеям, как улучшить схему.
Собрал рабочую схему для уведомлений из MAX в ntfy через Docker на Synology.
Оригинальный репозиторий
За основу взят проект:
Оригинальный проект - macOS-приложение, которое отслеживает сообщения в веб-версии MAX и пересылает их в iMessage. В этой версии логика адаптирована под Docker и отправку уведомлений в ntfy.
Что получилось
- MAX открывается в Chromium внутри контейнера
- сессия MAX сохраняется в volume
- новые сообщения отправляются в локальный
ntfy ntfyдоступен через reverse proxy- на iPhone приходят push-уведомления через приложение ntfy
- доступ закрывается авторизацией и правами на topic
Схема:
MAX -> max2notify -> ntfy -> iPhone
Что нужно
- Synology / Container Manager
- Docker
- домен или внешний HTTPS-доступ к ntfy
- приложение ntfy на iPhone
- исходники проекта в папке
/volume1/docker/max2imessage
Порты
8099- локальный ntfy3010- статус и скрин входа MAX
Структура папки
/volume1/docker/max2imessage
├── docker-compose.yml
├── bridge
│ ├── package.json
│ └── src
│ └── index.js
├── Max2iMessage
│ └── Max2iMessage
│ └── Resources
│ └── max-monitor.js
├── ntfy
│ └── cache
└── accounts
└── user
docker-compose.yml
services:
ntfy:
image: binwiederhier/ntfy
command:
- serve
- --cache-file
- /var/cache/ntfy/cache.db
environment:
TZ: Asia/Yekaterinburg
NTFY_BASE_URL: https://ntfy.example.com
NTFY_BEHIND_PROXY: "true"
NTFY_UPSTREAM_BASE_URL: https://ntfy.sh
NTFY_AUTH_FILE: /var/cache/ntfy/auth.db
NTFY_AUTH_DEFAULT_ACCESS: deny-all
NTFY_ENABLE_LOGIN: "true"
volumes:
- /volume1/docker/max2imessage/ntfy/cache:/var/cache/ntfy:rw
ports:
- "8099:80"
restart: unless-stopped
init: true
max2notify:
image: mcr.microsoft.com/playwright:v1.54.0-jammy
working_dir: /app/bridge
command: bash -lc "npm install --omit=dev && npm start"
depends_on:
- ntfy
environment:
MAX_URL: https://web.max.ru
TARGET_TYPE: ntfy
TARGET_URL: http://ntfy/max_user
TARGET_USERNAME: maxbridge
TARGET_PASSWORD: CHANGE_ME_BRIDGE_PASSWORD
NTFY_TITLE: MAX
NTFY_PRIORITY: high
NTFY_TAGS: speech_balloon
ACCOUNT_NAME: user
PROFILE_DIR: /data/profile
STATE_DIR: /data/state
DEDUP_FILE: /data/state/dedup.json
LOGIN_SCREENSHOT_FILE: /data/state/login.png
PORT: 3000
HEADLESS: "true"
volumes:
- /volume1/docker/max2imessage:/app:rw
- /volume1/docker/max2imessage/accounts/user:/data:rw
ports:
- "3010:3000"
restart: unless-stopped
Замените:
https://ntfy.example.comна свой доменCHANGE_ME_BRIDGE_PASSWORDна пароль пользователяmaxbridge
Настройка пользователей ntfy
В контейнере ntfy создаем пользователя для iPhone и пользователя для моста:
docker exec -it max2ntfy-ntfy-1 ntfy user add user
docker exec -it max2ntfy-ntfy-1 ntfy user add maxbridge
Выдаем права:
docker exec -it max2ntfy-ntfy-1 ntfy access user max_user read-write
docker exec -it max2ntfy-ntfy-1 ntfy access maxbridge max_user write-only
docker exec -it max2ntfy-ntfy-1 ntfy access
Логика:
userможет читать topicmax_userна iPhonemaxbridgeможет только писать вmax_user- anonymous-доступ закрыт через
NTFY_AUTH_DEFAULT_ACCESS: deny-all
Первый вход в MAX
После запуска откройте:
http://NAS_IP:3010/login.png
Там будет экран входа MAX. После авторизации проверьте:
http://NAS_IP:3010/healthz
Нормальный статус:
{
"running": true,
"authState": "authenticated",
"monitorReady": true
}
Настройка iPhone
В приложении ntfy:
- server:
https://ntfy.example.com - username:
user - topic:
max_user
Для мгновенных push на iPhone нужен параметр:
NTFY_UPSTREAM_BASE_URL: https://ntfy.sh
Он нужен из-за особенностей iOS push. Текст сообщений через ntfy.sh не уходит; iPhone забирает реальные уведомления с вашего сервера.
Несколько пользователей
Для нескольких аккаунтов лучше делать отдельный max2notify на каждого:
max_user -> user
max_mom -> mom
max_wife -> wife
Каждому аккаунту нужен свой volume и свой порт входа:
/volume1/docker/max2imessage/accounts/user -> 3010
/volume1/docker/max2imessage/accounts/mom -> 3011
/volume1/docker/max2imessage/accounts/wife -> 3012
Так сессии MAX не конфликтуют друг с другом.
