Переезд: перечень интеграций, привязанных к IP 46.173.16.127 — что ломается молча #3059
Open
opened 2026-08-23 16:49:00 +00:00 by lekss361
·
10 comments
No Branch/Tag specified
main
fix/3469-showcase-schedule
fix/3443-caddy-selfdowntime
fix/3463-db-statement-timeout
fix/3448-caddy-only-detection
fix/metrics-deploy-reloads-prometheus
feat/landing-showcase-band
fix/3452-corridor-advisory-zone
fix/alert-value-is-not-the-ratio
fix/3449-geocoder-cancel-orphan
fix/3451-tvf-deals-rooms
fix/msk-collector-net-retry
feat/msk-yandex-import
fix/3051-fetch-deals-rooms-dropped
feat/msk-collector-cian
fix/3256-asking-to-sold-buckets
fix/3083-estimate-throughput
fix/3274-part2b-gate
fix/3274-part2a-caddy-retry
fix/perimeter-smoke-retry-on-no-response
fix/3274-zero-downtime-frontend
fix/3274-part1-deploy-swap
fix/3412-cian-instance-relaunch
fix/3415-bucket-done-only-if-phases-ok
chore/backend-pool-wiring-tails
fix/3398-pool-ops-off-event-loop
fix/3402-followups-ban-kinds-curl
feat/3404-proxy-run-attribution
fix/cian-captcha-is-platform-refusal
refactor/3390-single-runs-module
fix/3398-estimator-valuations-proxy-pool
fix/3386-estimator-imv-proxy-pool
fix/3394-cian-sweep-houses-proxy-pool
fix/3393-interrupted-runs-outside-streaks
fix/drain-marks-inflight-app-tasks
fix/3384-no-proxy-at-batch-start
fix/3197-yandex-newbuilding-proxy-pool
fix/3376-price-history-decimal-slips
fix/backend-proxy-pool-flags
fix/3197-cian-history-backfill-proxy-pool
fix/3288-sidecar-ban-status-code
fix/3375-yandex-fullload-on-bucket-contract
fix/3380-deploy-metrics-alloy-recreate
fix/3354-alloy-query-secret-scrub
fix/3360-admin-prefix-anon-404
fix/3368-yandex-leaf-complete-flag
fix/3369-domclick-cancel-checkpoint
fix/3225-domklik-diff-percent
fix/smoke-history-path
fix/3288-breaker-block-kind
fix/3355-drain-mark-fullloads
fix/3191-yandex-detail-completeness
fix/3359-containment-cian-yandex
fix/3323-payment-init-fail-409
fix/3172-freshness-by-data
fix/3288-avito-ban-per-source
fix/3253-domclick-house-fields
fix/3312-defer-interval-minutes
fix/3324-rbac-401-oracle
fix/3274-deploy-window-error-page
fix/3343-auth-latency-flaky
fix/3315-exhaustive-containment-skip
fix/3338-backfill-save-false
fix/3339-thin-market-badge
fix/3154-glitchtip-secret-log-leak
fix/3333-drain-mark-all-sweeps
fix/3323-imv-thin-market-gate
fix/3324-mera-perimeter
fix/3323-coverage-copy-honesty
fix/3332-domclick-counter-identity
fix/3324-ptica-deploy-gate
fix/3316-role-single-source
fix/3319-citysweep-checkpoint
fix/3322-rosseti-stable-key
fix/3320-v2-honest-zeros
fix/3321-draft-fields-survive
fix/mera-mobile-nav-and-sticky
fix/audit-form-ux
fix/audit-coverage-500
fix/audit-dkp-price
fix/audit-accuracy-window
fix/audit-faq-contradiction
fix/perimeter-smoke-after-payments
feat/b2c-landing-honest-copy
feat/b2c-landing-live-numbers
feat/b2c-v3-becomes-root
feat/b2c-v3-port-v1-blocks
feat/b2c-report-redesign
feat/b2c-landing-v3-full
feat/3192b-yandex-phones
feat/3168-backfill-cursor-resume
fix/3118-domclick-no-proxy
fix/3170-yandex-combo-checkpoint
feat/3074-newbuilding-sweep-resume
fix/3163-infra-topic-default
fix/3156-tgbot-error-type
feat/3163-infra-topic-split
fix/3161-alertmanager-route-prefix
fix/3155-prometheus-no-alertmanager
feat/2997-drop-listings-geom-idx
fix/3122-boot-reap-observable
feat/3122-boot-reap
feat/3051-houses-region-code
feat/3074-cian-anchor-checkpoint
feat/3051-region-registry
fix/2656-anchor-ratio-freshness
fix/3114-scrub-credentials-in-logs
fix/3078-grafana-single-auth
fix/3081-honest-progress
fix/3063-pro-seller-derive
fix/3074-checkpoint-survives-claim
fix/3082-estimate-concurrency
fix/3044-enriched-total-seen
fix/telegram-pin-selectel-override
chore/compose-host-parameterised-resources
fix/revisit-floor-lateral-lookup
fix/avito-detail-fields
fix/3034-avito-fingerprint
fix/avito-offers-per-page
feat/3033-avito-secondary-filter
fix/2203-restore-drill-readiness
feat/2203-backup-staleness-and-forgejo
fix/2990-clean-start-initdb
fix/2924-yandex-jk-resolve-tried-at
fix/2992-upsert-distinct-gate
fix/2998-rosreestr-q2-partitions
feat/2936-null-penalty-flag
fix/2996-mislocated-houses-watchdog
fix/1781-secondary-only-param
fix/2934-risks-coverage
fix/2464-three-small
fix/2464-two-docstrings
fix/2464-zouit-label
fix/2464-building-pct-guard
fix/2464-download-binary-retry
fix/2986-permits-key
fix/2464-tep-docstring
fix/2464-act-date-backfill
fix/2464-area-bin-null
fix/2464-act-date-citation
fix/2464-detect-kind
fix/2464-status-negation
fix/2464-objective-zombie-sweep
fix/2464-inert-retry-config
fix/2464-default-profile-unique
fix/2464-zombie-any-running
fix/2464-catalog-skipped-counter
fix/2464-heat-loader-tx
fix/2464-objective-run-stuck
fix/2464-catalog-waf-breaker
fix/2464-lock-key-order
fix/2464-backfill-waf-abort
fix/2464-docs-vs-code
fix/2464-land-reservation-dedup
fix/2464-manual-list-validation
fix/2464-capacity-savepoints
fix/2464-leads-window-naming
fix/2464-zouit-count-label
fix/2464-catalog-batch-commits
fix/2464-html-zoning-fallback
fix/2950-lock-wait-observable
fix/2956-freshness-counts-failed-harvest
fix/2950-host-lock
fix/2953-nominatim-throttle
fix/2950-deploy-docker-lock
fix/2464-ird-lookups-savepoint
fix/2464-parcels-savepoint-pair
fix/2674-deal-floor-display
docs/2854-stale-justifications
chore/2857-drop-placeholder-columns
fix/2855-probe-protected-path
fix/2674-has-panorama
fix/house-imv-anchor-era
fix/2674-quality-cadastre-column
fix/sber-freshness-guard
fix/dkp-corridor-as-of
fix/scheduler-resume-checkpoint
fix/quarter-target-from-neighbour
fix/2687-domclick-ban-kind-platform
fix/2814-address-backfill
fix/2677-house-anchor-renovation
feat/tradein-paid-retention
chore/ci-config-cleanup
feat/mera-b2c-privacy
feat/tradein-payments-schema
chore/2674-dead-code-sweep
fix/2674-matching-tiers-honesty
fix/2674-avito-full-load-coverage
fix/2674-admin-metrics-honesty
fix/2674-writers-honor-schema
fix/2674-alerts-actually-fire
fix/2679-scraper-deploy-parity
fix/2674-house-imv-params
fix/2666-discount-plausibility-gate
feat/2435-cian-house-enrichment
fix/2657-domclick-block-not-done
feat/2571-login-throttle
fix/2660-display-freshness-segment
fix/2658-loud-skip-status
fix/2603-geocode-city-hint-tails
feat/2600-per-source-proxy-health
feat/tradein-v2-exposure-in-result-card
fix/tradein-avito-browser-proxy-pool
chore/tradein-cut-wasteful-scraping
fix/tradein-v2-deals-fallback-visible
fix/tradein-city-stamp-geo-guard
fix/tradein-cian-oblast-secondary
fix/tradein-implausible-build-year
fix/tradein-snapshot-query-perf
fix/tradein-asking-sold-city-scope
chore/tradein-purge-dead-mobileproxy
feat/tradein-asocks-rotation
fix/tradein-region-code-foreign-cities
fix/tradein-proxy-pool-self-healing
fix/tradein-backfill-listing-city-from-url
fix/tradein-geocode-queue-active-only
fix/tradein-geocode-city-hint
chore/tradein-remove-yandex-scripts
fix/tradein-listing-city-from-sweep
chore/tradein-remove-yandex-geocoder
chore/tradein-remove-n1
fix/tradein-geocoder-fail-closed
fix/tradein-ui-city-label-clip
feat/tradein-ui-city-hint
fix/tradein-coords-backfill-city-gate
fix/tradein-geocoder-city-default
fix/tradein-anchor-geo-scope
fix/tradein-avito-detail-oblast
feat/tradein-price-bands-refresh
feat/tradein-caddy-cutover
fix/tradein-team-nav-and-401
feat/tradein-team-dashboard
fix/tradein-team-list-order
feat/tradein-team-api
feat/tradein-login-ui
feat/tradein-auth-core
feat/tradein-auth-password-foundation
feat/tradein-auth-users-schema
fix/tradein-rbac-test-user2-expired
fix/tradein-auth-revoke-user2
fix/2013-avito-cohort-null
fix/rbac-test-user2-expired
fix/expire-brusnika-trial-access
feat/tradein-domclick-house-sku-schema
chore/design-sync-tradein
fix/tradein-deploy-scraper-paths-filter
fix/tradein-no-numberless-house-insert
fix/tradein-dedup-fias-pass-no-geoguard
feat/tradein-fias-estimate-frontend
fix/tradein-dedup-by-fias
feat/tradein-fias-tier-matching
fix/tradein-v2-uiux-p1
fix/objective-lots-dedup-1964
fix/audit-followups-1953
feat/concept-house-picker-1965-stage3b
feat/concept-house-catalog-1965-stage3a
feat/concept-live-massing-1965-stage2b
feat/concept-recompute-1965-stage2a
feat/concept-section-1965-stage1
fix/best-layouts-per-object-snapshot-1956
fix/deficit-segmentation-1959
feat/tradein-hedonic-ground-floor
fix/report-map-points-1961
fix/report-microcopy-1963
fix/report-nspd-zoning-1962
fix/report-frontend-display-1953
perf/tradein-estimate-audit
perf/best-layouts-objects-first
fix/171-migration-path
perf/171-objective-crm-report-month-idx
fix/1926-app-log-stdout
fix/estimator-tiebreaker-nanalogs
fix/1917-fetch-json-network-retry
fix/1926-scrape-runs-total-seen
fix/1781-house-fk-source-identity
feat/39-osrm-per-category
feat/1746-utility-infra-map
fix/test-849-savepoint-count
fix/parking-economics-by-class
fix/zouit-engineering-area-gate
fix/zoning-resolution-decouple
feat/dcf-velocity-schedule
feat/zone-regulation-backfill
chore/mock-financial-estimate
fix/finmodel-split-disclosure-threshold
feat/finmodel-financing
feat/finmodel-sitefinder-bridge
feat/finmodel-dcf
feat/finmodel-price-calibration
feat/finmodel-cost-cascade
audit/1871-p2-estimator-dedup-split
audit/1871-p2-avito-coord
audit/1871-p3-uiux
audit/1871-p2-invest-moi
audit/1871-p2-velocity-market
audit/1871-p1-3-isreal-stubs
audit/1871-p1-2-ghost-anchor-guard
audit/1871-p1-scenarios-collapse
revert/site-finder-v2
fix/v2-remove-resource-legend
fix/v2-map-legend-position
feat/site-finder-v2-map-light-polish
rollback/site-finder-home-light
feat/site-finder-v2-cockpit
rollback/sf-old-analysis-design
feat/ptica-tabs-6-6-reports-params
fix/ptica-vri-row
feat/ptica-map-glyphs-sitefinder-dark
fix/ptica-3d-preview-product-verdict
fix/ptica-button-fontsize
fix/ptica-parity-data-mapping
chore/ptica-iso-preview-spin
fix/ptica-inter-map-product
fix/ptica-visual-parity
fix/ptica-left-rail
feat/ptica-cockpit-complete-bottom
feat/ptica-default-and-rich-map
feat/ptica-real-ksit-frontend
feat/tradein-ekb-geoportal-buildings
fix/sf-feedback-batch
feat/avito-newbuilding-sweep
feat/browser-concurrent-pool
fix/backfill-kadastr-column
fix/avito-proactive-ip-rotate
feat/activate-domclick-sweep
feat/avito-newbuilding-capture
fix/house-id-fk-realtime-link
fix/migration-162-table-if-exists
feat/riasurt-sverdl-layers-108
fix/sber-dataset-paths-902
fix/conflict-resolution-freshness-1539
feat/objective-lots-history-writer-307-obj6
feat/velocity-mv-61
fix/objective-mapping-is-reviewed-gate-307-obj2
fix/cian-detail-rich-fields
fix/avito-novostroyki-segment
feat/yandex-novostroyki-newflat
fix/ci-dedup-runner-storm-1709
fix/emiss-pk-granularity-1687
feat/listings-segment-param-1188
fix/inn-regex-word-boundary-1682
fix/excel-deficit-horizon-1590
fix/admin-scrape-validation
fix/admin-leads-interval-cast-1694
fix/dkp-corridor-doc-p10p90-1695
fix/weather-wind-d-allnone
test/residential-zone-rawprops-1681
fix/domrf-badge-regex-narrow-1686
feat/yandex-camoufox-transport
fix/score-sat-factor-1509
fix/base-pace-room-bucket-1593
fix/gate-verdict-no-blocker-1617
fix/confidence-deal-count-window-1637
fix/match-economics-1511-1512
fix/listings-partial-indexes-1398
fix/smart-suggestions-threshold-1503
fix/dkp-corridor-percentile-1520
fix/enrich-economics-window-1513
fix/leads-stats-window-1383
fix/poi-score-scale-1486
fix/geo-weight-floor-1633
fix/inn-regex-context-1640
fix/domrf-status-classify-1609
fix/emiss-period-dedup-1606
fix/cian-paginate-tail-1393
fix/normalize-zero-fill-guard-1638
fix/supply-view-devgroup-key-1650
fix/residential-zone-detect-1353
fix/score-label-threshold-1357
fix/trend-ratio-vprior-zero-1508
fix/district-median-dedup-1352
fix/supply-layers-overlap-1355
fix/pdf-expires-at-1530
fix/quartirography-area-bucket-1406
fix/cad-zones-multipolygon-1344
fix/sold-pct-market-verdict-1407
fix/week-review-finish
fix/week-review-backend-v2
feat/plan-vectorization-spike-299
fix/1668-analyze-confidence
fix/1667-metro-block
fix/1666-layout-velocity-beat
chore/remove-n1-scraper
fix/cian-kitchen-area
feat/yandex-detail-backfill
feat/avito-detail-backfill
fix/best-layouts-bucket-normalization
fix/gknspecial-incremental-commit-per-prefix
fix/okn-objects-full-registry-load
fix/parcel-ird-overlap-except-expand
fix/report-assembler-confounded-keys
fix/job-settings-json-persist-v2
fix/nspd-geo-soft-time-limit-passthrough
fix/nspd-soft-time-limit-v2
fix/pilot-request-modal-validation
fix/recommend-mix-saturation-latest-snapshot
fix/scrape-cadastre-fail-counter-v2
fix/izyatie-ocr-cad-normalize
fix/job-settings-panel-json-state-persist
fix/noise-loader-savepoint-per-row
fix/objective-sync-config-bare-except
fix/parcel-snapshot-mdash-double-escape
fix/poi-loader-leap-year-date-replace
fix/scrape-cadastre-permanent-fail-counter
fix/usermenu-analyst-role-label
feat/location-948b-r
feat/location-entity-948b
feat/insight-entity-948a
feat/analyst-role-audit-962
feat/cbr-inflation-macro-946
feat/cian-zhk-resolve-972
perf/forecast-parallel-horizons-1129
feat/newbuilding-enrich-backfill-972
feat/emiss-macro-indicators-946
feat/rosstat-emiss-macro-946
ci/frontend-vitest-job
chore/frontend-vitest-wkt-tests
feat/forecast-meta-footer
feat/forecast-future-supply-competitors
feat/forecast-docx-pptx-buttons
feat/forecast-scoring-panel
feat/forecast-product-tz-block
feat/market-map-layers-999
feat/forecast-chart-section6
feat/forecast-export-pptx-959
feat/forecast-export-docx-959
feat/forecast-export-ui-959
feat/forecast-export-telegram-959
feat/forecast-export-md-959
feat/analyze-response-contract-961
feat/competitor-velocity-spatial-fallback-968
fix/frontend-healthcheck-hostname
feat/analyze-market-coords-999
fix/site-finder-entry-crash-1001
feat/horizon-selector-996
feat/forecast-section-998
feat/forecast-endpoint-horizon-enqueue
feat/forecast-celery-task-persist
feat/forecast-orchestrator-service
feat/demand-supply-months-of-inventory
feat/wire-district-resolver
feat/district-vocab-reconciliation
fix/affordability-market-spread
fix/backtest-sig-gate
feat/wire-978-almon-rate-regime
feat/backtest-oos-almon-seasonal
ci/forgejo-pytest-gate
fix/tradein-praktika-logo-form-scroll
feat/yandex-exhaustive-price-room
feat/794-sber-time-adjust
chore/bot-harness-tuning
docs/agent-usage-throttle-qa-terminal
fix/avito-sweep-single-run-guard
chore/analyst-inbound-queue-tradein-db
feat/801-preview-full-wt
chore/bot-safety-followups
feat/tradein-avito-imv-fix
feat/tradein-repair-coef-calibration
feat/tradein-avito-houses-fix
feat/tradein-address-precision
feat/tradein-backfill-prioritize-listings
feat/tradein-geocode-deals-nominatim
feat/tradein-geocode-deals-from-houses
feat/tradein-same-building-match
feat/claude-envvars-and-stale-cron
No results found.
Labels
Clear labels
Находки полного мульти-агентного ревью (Claude Fable 5, 2026-06-09)
Новое ТЗ от Ген Геныча (июнь 2026): Site Finder v2 — ИИ-прогноз продуктовой стратегии девелопера. Актуальный приоритет.
Admin UI / internal tools / pipeline tracker
Аналитика данных / matching
Authentication / authorization / multi-tenancy
Автоматизация / cron / scheduler
Something isn't working
Коммерческая воронка / пилоты / pipeline / реестр ПО
Operational housekeeping
Forgejo Actions / build pipeline
152-ФЗ / реестр ПО / legal / TOS
Data sources, parsers, ETL
Уникальные данные — sales tracker, CRM aggregation
README / runbooks / onboarding
This issue or pull request already exists
Developer experience / build speed
New feature or request
Feedback from Max (Senior partner)
Generative Design — concept generation engine
Pending team sync / decision
Human review/decision required
Monitoring / metrics / logs / Sentry / Uptime
Kill-switch — all autonomous bots pause
Latency / throughput / DB query tuning
Critical / production-blocker
High priority
Normal priority
Низкий приоритет (follow-up, tech-debt)
Backend Python — FastAPI, Celery, scrapers
DB migrations, indexes, SQL
docker-compose, Caddy, workflows
Frontend — Next.js, React, TypeScript
Tests, smoke, Playwright
Скрапперы (Avito/Cian/Yandex/Rosreestr)
Security audit / secrets / vulnerabilities
Site Finder scoring quality & data layer
Stage 1: Generative MVP (нед 2-7)
Stage 2: Site Finder MVP (нед 8-12)
Blocked — needs human intervention
Closed, completed
Raw/fuzzy task filed by human — auto-analyst подхватывает: code-archeology + декомпозиция в actionable scope/* + status/ready (или split на под-issues)
Reviewer/QA вернул worker на доработку — worker сам чинит свой PR (fixup), НЕ требует human (в отличие от status/blocked)
PR merged, awaiting smoke test
Ready for pickup by worker bot
PR open, awaiting code review
Work in progress (worker claimed)
Технический долг
Trade-In MVP проект
User experience / responsive / conversion
Week review 1 — находки multi-agent аудита проекта (2026-06-14)
This will not be worked on
Исходно-разрешительная документация — слой ограничений участка для analyze-таблицы
Trade-In Estimator — проект оценки вторичного жилья
Fable 5 ревью
Находки полного мульти-агентного ревью (Claude Fable 5, 2026-06-09)
GG-форсайт
Новое ТЗ от Ген Геныча (июнь 2026): Site Finder v2 — ИИ-прогноз продуктовой стратегии девелопера. Актуальный приоритет.
admin
Admin UI / internal tools / pipeline tracker
analytics
Аналитика данных / matching
auth
Authentication / authorization / multi-tenancy
automation
Автоматизация / cron / scheduler
bug
Something isn't working
business
Коммерческая воронка / пилоты / pipeline / реестр ПО
chore
Operational housekeeping
ci
Forgejo Actions / build pipeline
compliance
152-ФЗ / реестр ПО / legal / TOS
data
Data sources, parsers, ETL
data-moat
Уникальные данные — sales tracker, CRM aggregation
docs
README / runbooks / onboarding
duplicate
This issue or pull request already exists
dx
Developer experience / build speed
enhancement
New feature or request
feedback/max
Feedback from Max (Senior partner)
generative
Generative Design — concept generation engine
needs-discussion
Pending team sync / decision
needs-human
Human review/decision required
observability
Monitoring / metrics / logs / Sentry / Uptime
pause-bots
Kill-switch — all autonomous bots pause
performance
Latency / throughput / DB query tuning
priority/p0
Critical / production-blocker
priority/p1
High priority
priority/p2
Normal priority
priority/p3
Низкий приоритет (follow-up, tech-debt)
scope/backend
Backend Python — FastAPI, Celery, scrapers
scope/db
DB migrations, indexes, SQL
scope/devops
docker-compose, Caddy, workflows
scope/frontend
Frontend — Next.js, React, TypeScript
scope/qa
Tests, smoke, Playwright
scrapers
Скрапперы (Avito/Cian/Yandex/Rosreestr)
security
Security audit / secrets / vulnerabilities
site-finder
Site Finder scoring quality & data layer
stage/1
Stage 1: Generative MVP (нед 2-7)
stage/2
Stage 2: Site Finder MVP (нед 8-12)
status/blocked
Blocked — needs human intervention
status/done
Closed, completed
status/needs-analysis
Raw/fuzzy task filed by human — auto-analyst подхватывает: code-archeology + декомпозиция в actionable scope/* + status/ready (или split на под-issues)
status/needs-fix
Reviewer/QA вернул worker на доработку — worker сам чинит свой PR (fixup), НЕ требует human (в отличие от status/blocked)
status/qa
PR merged, awaiting smoke test
status/ready
Ready for pickup by worker bot
status/review
PR open, awaiting code review
status/wip
Work in progress (worker claimed)
tech-debt
Технический долг
tradein
Trade-In MVP проект
ux
User experience / responsive / conversion
week ревью 1
Week review 1 — находки multi-agent аудита проекта (2026-06-14)
wontfix
This will not be worked on
ИРД
Исходно-разрешительная документация — слой ограничений участка для analyze-таблицы
вторичка
Trade-In Estimator — проект оценки вторичного жилья
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#3059
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Эпик: #2989, раннбук окна: #3057.
Перечня не существовало — это первый. Собран разведкой по четырём направлениям с перекрёстной проверкой 2026-08-23. Ниже только то, что проверено замером; предположения помечены отдельно.
Главный принцип отбора: отделить привязку к IP от привязки к DNS-имени. Второе переезд не ломает — достаточно не трогать A-запись. Это типовая ошибка таких перечней, и она в исходных находках была.
🔴 БЛОКЕР: Telegram недостижим с нового хоста
Замер с Poincare (188.246.224.93), четыре дата-центра Telegram:
149.154.166.110← который отдаёт DNS000(таймаут)149.154.167.220302за 0.11 с149.154.175.5000091.108.56.130000С Beget тот же запрос —
302за 0.34 с. То есть с Selectel отвечает один DC из четырёх, и именно тот, который резолвер не выдаёт. Это не CA, не DNS и не наш файрвол — это фильтрация/маршрутизация подсетей Telegram на стороне провайдера.Как проявится:
tradein-tgbotработает на long-polling, резолвит149.154.166.110, виснет на таймауте и умирает молча — без исключения, без алерта. Вместе с ним отваливаются алерты бэкапов (ops/lib-backup.sh) и uptime-нотификации (ops/uptime-healthcheck.sh), то есть ломается сам канал, которым мы узнали бы о поломке.Решить до окна. Варианты: оставить бота на Beget; пустить трафик Telegram через прокси-пул; запрос в поддержку Selectel. Пиннинг рабочего DC — не решение, адреса меняются.
🔴 Провайдер прокси с привязкой по IP
mobileproxy.space— в кабинете привязан egress-IP46.173.16.127. Причина привязки структурная: camoufox/Playwright не умеет authenticated SOCKS5, поэтому авторизация только по IP. После переезда браузерный скрапинг Авито встанет.Проявление коварное: по записи волта срабатывание whitelist выглядит не как
407, а как молчаливый разрыв соединения после TCP SYN — в коде этоConnectError/таймаут, неотличимо от «площадка забанила».Отдельно и срочно: подписки просрочены. ASocks мобильный и mobileproxy — оплата до 2026-08-02, автопродление выключено. Сегодня 23.08. Если в окне часть узлов не ответит, это спишут на переезд, а причина другая.
🟠 Ломается от смены хоста, не от IP
После смены
DEPLOY_HOSTкаталог/opt/gendesignна Beget больше никогда не обновится. Все три workflow делаютgit reset --hard origin/mainименно наDEPLOY_HOST. А на Beget из этого каталога по абсолютным путям исполняютсяops/backup.sh,ops/backup-forgejo.sh,ops/check-backup-staleness.sh,ops/docker-prune.sh— все в crontab.Crontab: 10 задач, не 7 (сегодня добавлены бэкап Forgejo и три сторожа устаревания). После переезда половина сломается на Beget: строки с
docker exec tradein-postgres,docker exec tradein-backendи дампом кластераgendesign— этих контейнеров там уже не будет. Скопировать crontab целиком тоже нельзя: сторожа и бэкап Forgejo должны остаться на Beget.Caddyfileприедет на Selectel целиком — со всеми восемью site-блоками, включаяobsidian.gendsgn.ru,errors.gendsgn.ru,git.gendsgn.ru, которые остаются на Beget. Caddy на новом хосте начнёт выпускать для них сертификаты по HTTP-01, а DNS указывает на Beget — ACME будет падать, с риском упереться в rate limit Let's Encrypt.FDW
tradein → gendesignпривязан к сетевому алиасу:srvoptions = {host=gendesign-postgres, dbname=gendesign, connect_timeout=3, fetch_size=10000, use_remote_estimate=true}. Работает, только пока оба кластера в одной docker-сети — см. третью мину из #3057 про внешнюю сетьgendesign_shared.fail2ban и ufw на Beget активны. После переезда
188.246.224.93станет для него незнакомым источником, постоянно стучащим в 443 (envelope'ы Sentry, SSH-деплои, LiveSync). Любой jail по логам может забанить собственный новый прод.🟡 Второй периметр: зоопарк с 94.228.121.73
DNS этих доменов живёт не у Beget, а у Timeweb —
ns1/ns2.timeweb.ru. Правки идут в другой панели, это отдельный доступ и отдельный человек.Сертификаты выпускает certbot, а не Caddy, HTTP-01, обновление раз в 60 дней, ошибки уходят в почту root'а, которую никто не читает. Если A-запись переехала, а webroot на новом хосте отличается — первые два месяца всё работает, потом сайты разом отдают истёкший сертификат.
Внешние пуши по адресу старого хоста: Macro CRM бьёт вебхуком в
/ai/api/→127.0.0.1:8765, а GPU-бокс LMMACHINE шлётwin_status.jsonчерез scp в/var/www/ai-analytics/crm/. Дашборд поллит файл каждые 5 секунд и при офлайне «данные молча устаревают». PRINZIP-AI в периметр переезда не входит — значит эти пути надо либо сохранить, либо осознанно оборвать.✅ Проверено и НЕ ломается — снято с учёта
GLITCHTIP_DSNи Obsidian LiveSync привязаны к DNS-имени, а не к IP. ВCaddyfileнет ни одногоremote_ip-матчера и ни одногоtrusted_proxies. A-записи остаются на Beget — связь не рвётся. Оба фигурировали в исходных находках как «ломается молча» — неверно.${COUCHDB_PASSWORD:?...}— синтаксис:?роняет compose с ошибкой, а не подставляет пустое значение.curl https://nspd.gov.ru/даёт000и с Beget, и с Poincare, а с-k—200. Это не регресс переезда, а существующее свойство. В исходных находках подано как «новый класс тихой поломки» — неверно.TLS alert, unknown CA), и платёжный контур в прод-окружении выключен —PAYMENTS_ENABLEDиTBANK_*в env отсутствуют.🟢 Что переезд, наоборот, чинит
На текущем IP два активных hard-ban'а:
Client IP: 46.173.16.127 / Rule: 57615a88d1ec0120b56fdce6. Последний успешный дамп 2026-07-27, 25 ошибочных за 7 дней (#2956).job_settings.scrape_kn enabled=false(#2443).Свежий IP с высокой вероятностью снимает оба. Но не включать сбор сразу: у НСПД нет брейкера — issue фиксирует прогон, сделавший ещё 9 запросов после первого 403. Сначала одна ручная проба, потом circuit-breaker, потом включение.
Отдельный риск того же рода:
geocode_deals_nominatimльёт 5000 адресов в сутки с одного адреса (194 события «429» за неделю). Новый IP сгорит за недели, если ехать как есть.Почта
Ящики заведены в панели Beget, MX всех четырёх доменов →
mx1/mx2.beget.com. Переезд VPS почту не трогает, но закрытие аккаунта Beget убьёт и её, и DNS-зону.Исходящий SMTP с Poincare:
smtp.beget.com:465OPEN,:25OPEN,:587BLOCKED. Дефолтные конфиги Django/GlitchTip сEMAIL_USE_TLSна 587 не заведутся — нужен implicit SSL на 465.DMARC есть только у
meraocenka.ru. Уgendsgn.ru,merahome.ru,meraotsenka.ruего нет — отчётов о проблемах доставки после смены IP не будет.Приёмка
mobileproxy.space: egress-IP в кабинете обновлён на новый/opt/gendesignна Beget после сменыDEPLOY_HOSTCaddyfileразведён по хостам — на Selectel не должно быть блоков остающихся доменовRefs #3057, #3027, #3031, #2956, #2443
Проверка замером 2026-08-23: прокси в порядке, Telegram решается закреплением адреса
✅ Прокси: IP-привязки нет, переезд их не трогает
Прогнал все четыре узла
scrape_proxiesс обоих хостов — URL нигде не печатался.asocks-residential-1212.8.249.134, 0.82 сasocks-mobile-1190.2.145.131, 3.28 сasocks-mobile-2175.110.115.153, 1.76 сasocks-mobile-3109.236.82.42, 1.12 сExit-IP совпадают, задержки с нового хоста даже ниже. IP-привязки в кабинете ASocks нет — опасение из перечня снято замером, а не рассуждением.
Заявление про просроченные подписки не подтвердилось.
last_ok_atу всех четырёх — сегодняшние 17:08–17:20,consecutive_fails=0,disabled_reasonпуст. Запись в волте про оплату «до 2026-08-02 с выключенным автопродлением» устарела.Остаётся непроверенным только
mobileproxy.space— он не вscrape_proxies, а в отдельной переменной, и именно у него по волту привязка по egress-IP. Его надо проверить отдельно.🔴→🟢 Telegram: не блокировка Selectel, а частичная фильтрация у обоих провайдеров
Исходный диагноз «Telegram недостижим с нового хоста» оказался неточным. Замер по семи адресам:
149.154.167.220149.154.166.110← отдаёт DNS149.154.167.99149.154.175.100149.154.171.591.108.4.591.108.56.130Telegram частично фильтруется у обоих провайдеров — с Beget доступны 3 адреса из 7, с Poincare 1 из 7. Разница только в том, что Beget случайно попадает в тот адрес, который отдаёт резолвер, а Selectel — нет. Это не «Selectel блокирует», и не CA, и не наш файрвол.
Через прокси Telegram не проходит ни с одного узла (все четыре —
000): они российские, а Telegram в РФ блокируется. Этот путь закрыт.Решение: закрепить
149.154.167.220Проверено полностью, включая настоящий эндпоинт Bot API:
Закрепление работает и на уровне хоста, и внутри docker — а бот живёт в контейнере, так что это важно.
Что сделать:
extra_hosts: ["api.telegram.org:149.154.167.220"]дляtradein-tgbotв compose — декларативно, в git, проходит ревью/etc/hostsнового хоста — для скриптов, которые уведомляют не из контейнера (ops/lib-backup.sh,ops/uptime-healthcheck.sh); на Poincare уже добавлена, бэкап оригинала в/etc/hosts.bak-tgtest⚠️ Признаю точку отказа
Скан всего
149.154.167.0/24с Poincare дал ровно один живой адрес. Запасного нет. Если149.154.167.220перестанет отвечать — бот умрёт так же молча, как умер бы без закрепления.Хуже того, канал оповещения об этом сам идёт через Telegram: алерты бэкапов (
ops/lib-backup.sh) и uptime-нотификации ходят туда же. Поломка скрывает сама себя.Поэтому закрепление адреса — необходимое, но не достаточное. Нужен независимый канал оповещения. Кандидат проверен:
smtp.beget.com:465с Poincare OPEN (587 закрыт, 25 открыт). Либо событие в GlitchTip, который остаётся на Beget и доступен по имени.Обновление приёмки
extra_hostsдляtradein-tgbotвнесён в composemobileproxy.spaceпроверен отдельно — у него привязка по egress-IPRefs #3057, #2989
Решение владельца 2026-08-23:
mobileproxy.spaceне используем, остаётся только ASocksПункт про привязку egress-IP в кабинете
mobileproxy.spaceснимается — провайдер выводится из употребления. Прокси-риск переезда закрыт полностью.Что это значит по фактам замера:
212.8.249.134,190.2.145.131,175.110.115.153,109.236.82.42. С Poincare задержки даже ниже.last_ok_atсегодняшние,consecutive_fails=0,disabled_reasonпуст.Единственная остававшаяся привязка по IP из всего перечня — снята решением, а не обходом. Ничего чинить не нужно.
Побочное следствие, которое стоит держать в голове: у
camoufox/Playwright структурная причина, по которой раньше выбирали mobileproxy — он не умеет authenticated SOCKS5, поэтому там была авторизация по IP. Отказ от провайдера означает, что браузерный скрапинг должен ходить через HTTP-прокси ASocks (SCRAPER_PROXY_URL), как и остальной сбор. Если где-то в коде остался путь, завязанный на SOCKS5 без авторизации, он станет мёртвым — проверить при первом же прогоне браузерного сбора после переезда.Обновление приёмки
— провайдер не используетсяmobileproxy.space: egress-IP в кабинете обновлён на новыйОстаётся из этого перечня:
extra_hostsдля Telegram (в работе)/opt/gendesignна Beget после сменыDEPLOY_HOSTCaddyfileразведён по хостамRefs #3057
Обновление по списку: два пункта закрыты мержем, третий — в PR #3070.
Закрыто
extra_hostsдля Telegram — PR #3060, смержен.tradein-mvp/docker-compose.selectel.ymlзакрепляет149.154.167.220дляtgbotиbackend(вapi.telegram.orgходит не только бот:app/api/v1/glitchtip.pyпересылает алерты,app/api/v1/support.py— support-чат; закрепить только боту значило бы починить треть). Хостовую половину закрывает шаг 11ops/selectel-bootstrap.sh.Caddyfileразведён по хостам — PR #3062, смержен и проверен на проде: caddy пересоздан,caddy/sites/смонтирован, все 8 доменов отвечают ровно как до правки.CADDY_SITES=apps→ 5 доменов,=infra→ 3, без переменной → 8.В работе
Независимый от Telegram канал алертов → PR #3070.
Суть:
notify()при отказе Telegram ограничивался|| log "WARN"— алерт терялся, оставалась строка в логе. Теперь при отказе (и при ненастроенном Telegram) пробуется почта, а если и она не настроена — в лог идёт громкая строка «АЛЕРТ НЕ ДОСТАВЛЕН» вместо тихого WARN.Транспорт —
curlчерезsmtps://smtp.beget.com:465(порт проверен OPEN с Poincare). Креды из того же env-файла, что и Telegram; в репозитории их нет. Ничего не настроено → поведение ровно как раньше.Честно про проверку: негативные ветки прогнаны все (не настроено / SMTP недоступен / notify без Telegram / пароль не течёт в вывод — 0 вхождений). Успешную доставку не проверял — нужны настоящие креды. Три попытки поднять фейковый SMTP-сервер положительного контроля не дали, и записывать «наверное работает» я не стал: без положительного контроля зелёные негативные тесты доказывают только то, что код правильно падает.
Чтобы канал заработал — дописать пять переменных в
/etc/default/gendesign-backupи один раз проверить доставку. Детали в PR.Остаётся
/opt/gendesignна Beget после сменыDEPLOY_HOSTОтдельно к перечню «что ломается молча» стоит добавить находки из инвентаря зоопарка (#3031), которых в исходном списке не было:
tailscaled(идентичность узла меняется при переезде — доступ отвалится без ошибки),zabbix-agent(внешний Zabbix продолжит опрашивать мёртвый адрес),xrayна порту 8752 (назначение не установлено).Закрыл разведкой пункт «fail2ban/ufw на Beget знают новый адрес». Оказалось, что смотреть надо в другую сторону, и там нашлось то, что может остановить деплой на сутки.
Проверка Beget — чисто
ignoreip = 127.0.0.1/8 ::1, адресных правил вufwнет. После переезда Beget становится источником SSH-соединений, а не целью, так что его fail2ban в деплойном пути не участвует. Пункт в исходной формулировке закрывается ничем.А вот Poincare — реальный риск
Там fail2ban активен, jail
sshd, и адреса Beget в whitelist нет:Jail не декоративный — он работает прямо сейчас:
Почему это опасно именно в окне
После переезда раннер на Beget ходит по SSH на Poincare на каждом деплое, причём несколькими шагами (
deploy,deploy-caddy, плюс отдельный проход tradein-пайплайна). При корректном ключе отказов нет — риск не в штатной работе.Риск в том, что #3029 планирует ровно ту операцию, которая эти отказы порождает: «Новый deploy-ключ выпущен, старый отозван». Любое рассогласование в момент ротации — ключ выпущен, но не разложен; не тот пользователь; не тот порт — даёт серию неудачных аутентификаций. Десять за час, и
46.173.16.127уезжает в бан на сутки.Последствие: деплой перестаёт работать целиком, а выглядит это как сетевая проблема, а не как бан. Именно так меня сегодня ночью отрезал сервер Антона — серия коротких переподключений, потом
Connection timed outбез каких-либо объяснений. На то, чтобы понять причину, ушло время; в окне переезда такого запаса не будет.Отдельно стоит помнить, что канал оповещения об этом сам может оказаться недоступен (#2203 —
TELEGRAM_*не настроен нигде).Что сделать — одна строка, но до окна
Внести адрес Beget в whitelist на Poincare до ротации ключа:
затем
fail2ban-client reload, проверитьfail2ban-client get sshd ignoreip.Сам не делаю: это правка конфигурации безопасности на хосте, который станет продом, и решение о whitelist — твоё. Готов выполнить по слову.
Побочно замеченное
На Poincare
PermitRootLogin yes. Констатирую факт без рекомендации — деплой ходит под отдельным пользователем, так что для переезда это не блокер, но root по SSH открыт в интернет на машине, которая будет держать оба продуктовых кластера и ПДн-базы. Стоит решить осознанно, а не оставить по умолчанию.Обновление списка
fail2ban/ufw на Beget знают новый адрес— не требуется: Beget становится источником, не цельюPermitRootLoginна Poincare — решить осознанноПерепроверка блокера по Telegram уже ПОСЛЕ переезда (2026-08-26 05:55 UTC)
Перечень собирался 23.08, когда продукты ещё стояли на Beget. Продукты переехали 25.08, бот работает на Poincare сутки — есть фактические данные вместо прогноза. Диагноз подтверждается, но проявление оказалось не тем, что ожидалось.
Подтверждено: три дата-центра из четырёх с Poincare недостижимы
000000000Ровно как в исходном замере. Фильтрация подсетей Telegram у Selectel никуда не делась.
Новое: резолверы расходятся, и это сейчас спасает бота
@8.8.8.8) отдаёт 149.154.166.110 — недостижимый.Поэтому обращение по имени с Poincare идёт на живой DC: 5 попыток подряд —
302за 0.11–0.12 с. Бот не умер молча, как предсказывалось: он работает.Но работает с потерями — 106 таймаутов за сутки
Лог
tradein-tgbotза 24 ч: 106 сетевых ошибокgetUpdates, из них 97 вылечились первой повторной попыткой, 9 — второй, 9 дошли до ERROR сhttpx.ReadTimeout. Конфигурация клиента корректна (long-poll 30 с при HTTP-таймауте 40 с, запас есть) — то есть дело не в ней.Распределение по часам ровное, без всплесков: 00h—8, 01h—15, 02h—14, 03h—12, 04h—13, 05h—10, 20h—11, 21h—7, 22h—10, 23h—7. Это против гипотезы «DNS иногда отдаёт мёртвый DC» — тогда были бы пачки длиной в TTL. Ровный фон ~4 % отказов при опросе раз в 30 с больше похож на частичную потерю пакетов на пути к Telegram, а не на бинарную блокировку.
Что это меняет для окна 30.08
Блокер не снят, а замаскирован: работоспособность держится на том, что резолвер хоста возвращает единственный доступный DC. Это хрупко — смена резолвера, вывод этого DC из эксплуатации или изменение маршрутизации возвращают исходный сценарий. И канал остаётся тем же, по которому ходят алерты бэкапов (
ops/lib-backup.sh) и uptime-нотификации: отказ будет тихим.Варианты из issue (оставить бота на Beget / пустить трафик Telegram через прокси-пул / запрос в поддержку Selectel) остаются в силе — я лишь снимаю срочность «бот не поднимется вовсе»: он поднялся и сутки работает с ~4 % отказов, которые сами себя чинят ретраями.
Поправка к моему же комментарию в #3057
Там я отнёс эти таймауты к «сетевым обрывам, не дефекту». Формально верно, но связи с этим блокером я тогда не увидел — она есть, и причина именно та, что описана здесь.
Второй пункт перечня — про прокси — проверить пока нечем
mobileproxy.spaceс привязкой к egress46.173.16.127: по действующему решению он выведен из использования, работает ASocks, и текстовый скрап живой (109 543 объявления, свежие 04:44 UTC). Но браузерный сбор Авито с переезда ни разу не запускался:avito_full_load_exhaustiveидёт раз в неделю по субботам, последний прогон 23.08 (убит деплоем), следующий — 30.08, то есть прямо в окно переезда. До него проверка невозможна, а сам прогон совпадает с окном — стоит либо дёрнуть его вручную заранее, либо не считать его результат показательным.Статус после переезда (26.08, утро) — оставляю открытой, но перечень сильно сузился.
Переезд состоялся 25.08 в 19:36 UTC, окно 7 мин 38 с. Что из этого перечня закрылось фактом:
Telegram — блокер снят, диагноз в задаче был неполным. Первоначальный вывод «отвечает один DC, пиннинг не решение» проверен серией замеров вместо одиночной пробы:
149.154.167.220:443открыт, ICMP 3/3 (RTT 35 мс), TLS-рукопожатие из контейнера бота 18 из 20 (контроль github 10/10),getMeреальным токеном 4 из 4, бот@MERAsupport_botотвечает. Ломается не сеть, а конкретно длинный long-poll:getUpdates?timeout=0— 4 из 5,getUpdates?timeout=30— 0 из 3. Характерно для DPI. Пин из #3093 выбран верно и делает ровно то, ради чего сделан. Бот функционален, но шумит: обрыв раз в 1-4 минуты, ретрай подхватывает, сообщения не теряются (Telegram копит апдейты по offset).Остаточная задача по коду, не срочная:
poll_timeout_s: int = 30зашит в сигнатуруapp/services/tgbot/bridge.py:702, из конфига не настраивается — вынести в настройку и поставить 10-15 с. Заодно логировать текст ошибки: сейчас в логахtg client: getUpdates — network errorс пустым текстом, и это стоило времени на диагностику.Crontab разведён и проверен ночным прогоном. Beget — 5 строк (бэкапы forgejo и couchdb плюс сторожа), Poincare — 9 строк. Коллизий имён в S3 нет. Обе ночные заливки прошли:
S3 upload OKв 00:39 UTC,Выгрузка в S3 okв 01:31 UTC.Caddyfile разведён по хостам —
CADDY_SITES=apps|infra. Пять боевых доменов на Poincare, четыре инфраструктурных (git,errors,obsidian,garmin) на Beget, ACME на чужие домены не выпускается.FDW жив.
srvoptionsчерез сетевой алиасgendesign-postgres, проверено чтением:gendesign_rosreestr_deals7 571 875,gendesign_cad_buildings47 111,gendesign_osm_poi_ekb4847,quarter_price_index1986. Пятая таблицаgendesign_ekb_districts_geomотдаётpermission denied for view— но ровно так же было и на Beget, гранта уtradein_fdw_readerне было никогда, за 72 ч ноль обращений. Не регресс переезда.Обновление
/opt/gendesignна Beget — решено: инфраструктурный деплой ходит поINFRA_DEPLOY_HOST=46.173.16.127.Остаётся открытым и требует владельца либо доступа, которого у меня нет:
mobileproxy.space— egress-IP в кабинете обновить на188.246.224.9394.228.121.73: доступ к панели Timeweb, план по certbot, судьба вебхука Macro CRM и scp с LMMACHINEgeocode_deals_nominatim— 5000 адресов в сутки с одного адреса сожгут свежий IPСужение периметра доступа вынесено в #3075.
Перепроверка трёх пунктов приёмки на живых хостах, 26.08
Продукты уже стоят на Poincare, поэтому часть перечня можно не предсказывать, а замерить. Ниже — что изменилось против разведки 23.08.
🔴 → 🟡 Telegram: блокер в исходной формулировке не воспроизводится
Замерял с Poincare заново, включая контрольный опыт с Beget.
Что было записано 23.08: резолвер отдаёт
149.154.166.110, этот ДЦ с Selectel не отвечает, бот повиснет и умрёт молча.Что на самом деле сейчас:
api.telegram.org(12 подряд, хост)149.154.167.220— тот ДЦ, который отвечаетtradein-tgbot(6 подряд).220Up, restarts=0То есть DNS стабильно отдаёт маршрутизируемый ДЦ, и бот работает. Молчаливой смерти, которой опасались, не произошло.
Что осталось верным: из четырёх ДЦ с Poincare отвечает по-прежнему только один (
.220;.166.110,.175.50,91.108.56.130— таймаут). Запас прочности нулевой: если Telegram сменит запись, канал ляжет.Остаточный симптом. За 40 минут жизни контейнера — 7 строк
getUpdates — network error (попытка 1/3), все восстановились с первого ретрая, ни одного исчерпанного (3/3). Порядка 9 % опросов, потерь сообщений нет.Контрольный опыт — важен, потому что он снял ложную улику. Простаивающее TLS-соединение к
.220рвётся ровно через 60.1 с, дважды из двух, чистым FIN. Напрашивалось записать это в «Selectel режет длинные соединения». Проверил с Beget теми же двумя пробами — 60.1 с, тоже дважды из двух. Значит это штатный keepalive самого Telegram, к переезду отношения не имеет, и в перечень мин ему не место.Механизм остаточных ошибок не установлен: воспроизвести long-poll без боевого токена нельзя, а дёргать
getUpdatesрабочим токеном я не стал — это увело бы апдейты у живого бота.Предлагаю понизить с блокера до наблюдения. Решение «оставить бота на Beget / пустить через прокси / писать в поддержку» остаётся за владельцем, но выбирать его теперь можно не в режиме аварии.
✅ Crontab разведён — пункт закрыт, проверено на обоих хостах
Beget (
gendesignиroot— одинаковые):Poincare:
Разведено ровно по смыслу: то, что требует
docker exec tradein-*, уехало; сторожа Forgejo и CouchDB остались. Бэкапы идут по факту, а не по расписанию на бумаге: дамп gendesign 26.08 03:39 (1.47 ГБ) и tradein 26.08 04:31 лежат на Poincare.Отдельно отмечу ложную тревогу, чтобы её не поднимали снова: на Beget сентинелы
backups/.last_success(39 ч) иbackups/tradein/.last_success(38 ч) выглядят просроченными. Это хвосты, оставшиеся от переноса задач, — соответствующих строк в кроне Beget больше нет, и сторож их уже не проверяет. Удалить их стоит, иначе следующий, кто посмотрит, потратит время так же, как я.⚠️ Caddy: механизм на месте, но переключён только наполовину — и у этого есть дата
Проверял не конфиг, а что Caddy реально обслуживает (
caddy adaptна живых контейнерах).git,errors,obsidian,metrics(+garmin) — только инфраструктура, верноgendsgn.ru,www,merahome,meraocenka,meraotsenka+git,errors,obsidian,metricsPoincare тянет оба файла:
CADDY_SITESтам не задан, а дефолт вCaddyfile:51—*. По задумке так и есть («в окне на SelectelCADDY_SITES=apps»), то есть это не поломка, а невыполненный пока шаг окна.Сегодня это безвредно: DNS этих трёх доменов смотрит на Beget, трафик до Poincare не доходит. Но сертификаты на Poincare уже лежат — приехали вместе с данными — и у них есть сроки обновления:
obsidian.gendsgn.rugit.gendsgn.rumetrics.gendsgn.ruЧерез одиннадцать дней после окна Poincare начнёт обновлять сертификат домена, который живёт на другой машине: HTTP-01 пойдёт на Beget, проверка не пройдёт, и попытки будут повторяться — ровно тот сценарий с rate limit, о котором issue предупреждает. Само не рассосётся.
Ставить
CADDY_SITES=appsпрямо сейчас не стал: боевой Caddy, неделя переезда, а выигрыш — устранение риска, который выстрелит не раньше 6 сентября. Это шаг окна, и в раннбуке ему место с явной датой-дедлайном, а не в списке «когда-нибудь».Обновление приёмки
Решён вопрос с Telegram→ понижено до наблюдения, бот работает, решение за владельцем без спешкиCaddyfileразведён по хостам — на Beget сделано, на Poincare нет;CADDY_SITES=appsв шаг окна, дедлайн 06.09Мелочью: убрать на Beget осиротевшие сентинелы
backups/.last_successиbackups/tradein/.last_success.Проверил разделение
CADDY_SITESзаранее — работает, но нашёл один домен, который выпадает из схемыПереключение запланировано на окно 30.08. Прогнал проверку сейчас, чтобы в окне под таймером не выяснять, что конфиг не собирается.
Текущее состояние прода
CADDY_SITES=*(дефолт), то есть Poincare грузит оба файла. Отсюда — сертификаты чужих доменов в его хранилище:DNS всех пяти инфраструктурных проверил через 8.8.8.8 — все указывают на 46.173.16.127 (Beget). То есть Poincare держит и продлевает сертификаты для доменов, запросы по которым к нему не приходят вовсе. Ровно тот сценарий, ради которого переменная и заводилась.
Проверка конфига — все три режима валидны
Гонял
caddy validateна боевом дереве конфигов, в одноразовом контейнере того же образа, только чтение, без reload:CADDY_SITESappsinfra*(сегодняшний)Значит разделение в окне не упрётся в синтаксис или недостающий сниппет.
Сверка покрытия — ни один домен из
sites/не теряетсяapps.caddygendsgn.ru,www.gendsgn.ru,meraocenka.ru,merahome.ru,meraotsenka.ru+ триwww.mera*(добавлены сегодня в #3137)infra.caddygit,errors,metrics,obsidianВосемь плюс четыре — сходится с тем, что должно остаться на каждой стороне.
🟡
garmin.gendsgn.ruиз этой схемы выпадает — и, похоже, уже сломанОн не в
sites/, а в untrackedcaddy/local/*.caddy, которыйCaddyfileимпортирует безусловно, мимоCADDY_SITES. Само по себе разделение его не затронет.Но замер показывает расхождение прямо сейчас:
https://garmin.gendsgn.ru/отдаёт 404.То есть запросы приходят на Beget, где блока нет, и упираются в catch-all. Похоже на хвост переезда продуктов на Poincare: блок уехал вместе с ними, а запись осталась.
Не трогал намеренно — это личный MCP-коннектор, и его защита построена на секрете в пути, который мне незачем брать в руки. Отмечаю, потому что в окне это всплывёт: после
CADDY_SITES=appsна Poincare блок останется там же (импорт безусловный), и расхождение сохранится, пока не решится, на каком хосте домену жить.Поправка к моему предыдущему комментарию:
garmin.gendsgn.ruне сломан, решать нечегоВыше я записал его как расхождение между хостами и предложил решить, где ему жить. Проверил по-настоящему — расхождения нет, всё уже согласовано:
garmin-mcpUp 9 days (healthy)caddy/local/garmin.caddy/data/caddy/certificates/…/garmin.gendsgn.ruВсё на одном хосте, и на том самом, куда смотрит DNS.
404 на корне — это замысел, а не поломка. Защита сервиса построена на секрете в пути (об этом прямо написано в комментарии к
import caddy/local/*.caddyв Caddyfile). Голыйhttps://garmin.gendsgn.ru/обязан отдавать 404 — по адресу без секрета там ничего и не должно быть. Я принял это за отказ, потому что сравнивал с поведением обычного сайта.Откуда взялось расхождение в моём замере: сертификат на garmin нашёлся и на Poincare — но это инертный остаток от переезда продуктов. Блока
caddy/local/на Poincare нет вовсе (каталог отсутствует), а Caddy продлевает только те домены, что есть в текущем конфиге. То есть этот сертификат просто лежит в томе и ничего не делает.Действий не требуется. Пункт про garmin из списка вопросов снимаю.
Что при этом оказалось не зря
По ходу проверки заметил, что блок был в файле, но не в работающем конфиге — Caddy не перечитывал его с момента появления файла. Прогнал
validate(Valid configuration), затемreload. После перезагрузки инфраструктурные домены проверены снаружи и целы:Так что настоящий остаток по этому issue — прежний и единственный: пять инфраструктурных сертификатов на Poincare, которые он продлевает впустую, потому что грузит
infra.caddyприCADDY_SITES=*. Их закрывает переключение в окне, и оно проверено (все три режима валидны).Перепроверка 27.08.2026 (после пересборки базы 25-26.08 и переезда продукта на Poincare). Тело тикета писалось 20-24.08 по старой инфраструктуре.
Прокси-посылка не подтвердилась. Пул сейчас = 4 ASocks;
mobileproxy.space, вокруг которого построено тело, в конфигурации отсутствует. Скрапинг Авито идёт (1174 строки за 3 суток) — то есть привязка к старому IP работу не рвёт.Также в теле неверный адрес нового хоста: не
188.246.224.93, а188.124.37.140.Что реально остаётся: блокер Telegram с Selectel. Предлагаю переписать тикет под это, остальное снять.