Commit Graph

46 Commits

Author SHA1 Message Date
abc819294c fix(images): unblock guest-exec in RHEL-family cloud images
Some checks failed
Backend Tests / pytest (Python 3.12) (push) Failing after 1m45s
Deploy to Production / Trigger production update (push) Failing after 12s
SonarCloud / SonarCloud Analysis (push) Failing after 3m3s
The RHEL-family qemu-guest-agent package starts the agent with an allow-list
that omits guest-exec, guest-exec-status and guest-file-* (FILTER_RPC_ARGS in
/etc/sysconfig/qemu-ga; older packages spelled the same restriction as
BLOCK_RPCS or BLACKLIST_RPC). The agent answered "The command guest-exec has
been disabled for this instance", so running scripts in a VM, assigning extra
IP addresses and growing the filesystem after a disk resize did not work on
Rocky Linux, AlmaLinux, CentOS Stream and Fedora guests.

- patch-cloud-images.sh: clear all three variants while building the mirror
  (UNBLOCK_RPC=0 opts out) and add an ONLY filter to rebuild only part of the
  catalog. Three `[ ... ] && ...` statements that aborted the script under
  set -e are now plain ifs -- the one before mirrors.json generation killed
  every run that passed BASE_URL
- builtin.py: point the five RHEL-family amd64 entries at the rebuilt mirror
  release 2026-08-22 with their new checksums. Ubuntu and Debian images are
  unaffected and stay in the previous releases, so older panel versions keep
  working
- client.py: annotate the Proxmox error with what to clear inside the guest,
  the raw message names neither the file nor the variable
- WIKI, CHANGELOG: document the restriction and the unblock command
2026-08-22 14:03:49 +05:00
d80623c0d8 docs: release v1.18.0
Some checks failed
Deploy to Production / Trigger production update (push) Failing after 10s
SonarCloud / SonarCloud Analysis (push) Failing after 3m1s
Turn the accumulated Unreleased notes into the v1.18.0 section and document
the multi-address feature in both languages.

- CHANGELOG: several IP addresses per instance (model, Network tab card,
  aliases inside the guest, surviving a reboot, pending/runtime_only
  states, new endpoints, migration 43), the IPAM discovery fixes and the
  guest-agent payload fix
- README: version badge, IPAM line and a feature bullet about extra
  addresses
- WIKI: the five new guest-address endpoints plus the allocation filters
  in the API reference, a feature bullet, and a new section in the IPAM
  chapter covering the card actions, how an address is applied (SSH to
  the node for LXC, guest-exec for VMs) and the four apply states
- VERSION: 1.17.0 -> 1.18.0
2026-08-22 01:53:03 +05:00
markmorado
295d3fc06e docs: add changelog and API reference entries for NFS export scan
Some checks failed
Deploy to Production / Trigger production update (push) Failing after 10s
SonarCloud / SonarCloud Analysis (push) Failing after 2m21s
Document the new GET /api/backups/scan-nfs/{server_id} endpoint and
the storage-add dialog's export scan button in CHANGELOG(.ru).md and
WIKI(.ru).md.
2026-08-20 10:25:17 +05:00
ec076959db docs: release notes and version bump for v1.16.0
Some checks failed
Deploy to Production / Trigger production update (push) Failing after 10s
2026-08-14 20:06:12 +05:00
a7fda196b5 docs: release notes and version bump for v1.15.0
Some checks failed
Deploy to Production / Trigger production update (push) Failing after 10s
2026-08-13 15:41:27 +05:00
bddbf15652 feat(rbac): split setting:view into panel settings and a permission-free profile
Some checks failed
Backend Tests / pytest (Python 3.12) (push) Failing after 1m22s
Deploy to Production / Trigger production update (push) Failing after 11s
setting:view used to gate the whole /settings page, which mixed panel-wide
configuration with a user's own account. Revoking it to keep a standard user
out of the panel settings also took away their profile, password, 2FA and SSH
keys, so the permission could not be used for what it names.

The account half now lives at /profile: its endpoints are self-scoped and only
require a session, so the page carries no permission at all and is reached from
the user menu (and Ctrl+K) rather than a sidebar group. /settings keeps the
panel-wide tabs behind setting:view, with saving gated on setting:update,
security on setting:manage and the SMTP/Telegram channels on is_admin, matching
what each endpoint checks.

The shipped "user" role no longer gets setting:view. Migration 42 drops it from
roles holding it without setting:update/manage, since those grants only existed
to reach the profile page; it runs once (marker in panel_settings) so a later
deliberate grant is not reverted on the next start.
2026-08-11 20:07:34 +05:00
markmorado
dfe91964d9 docs: release notes and version bump for v1.13.0
Some checks failed
Deploy to Production / Trigger production update (push) Has been cancelled
2026-07-24 06:58:21 +05:00
markmorado
d0b4c70c72 docs: release notes and version bump for v1.12.0
Some checks failed
Deploy to Production / Trigger production update (push) Has been cancelled
2026-07-24 06:39:24 +05:00
markmorado
b804a9bec5 docs: release notes and version bump for v1.11.0
Some checks failed
Deploy to Production / Trigger production update (push) Has been cancelled
2026-07-24 06:30:51 +05:00
markmorado
fca14828dc docs(wiki): expand RBAC guide and add full Russian WIKI.ru.md
Rewrite the RBAC/Security section with a detailed model: permission
format, engine evaluation order (admin bypass, wildcard, manage-implies),
requires dependencies, full permission catalogue, per-page permission
map, built-in role breakdown, and the ownership-based user isolation
(vm:manage, not vm:view, grants the global view). Fix stale references
(version 1.10.2, Networks needs server:manage, SSH keys user:manage).

Add WIKI.ru.md as a complete Russian translation mirroring WIKI.md,
including the expanded RBAC section.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-23 22:58:18 +05:00
markmorado
ceec83d2fb docs: release notes and version bump for v1.10.2
Some checks failed
Deploy to Production / Trigger production update (push) Has been cancelled
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-23 22:22:10 +05:00
markmorado
d0824df0f5 docs: release notes and version bump for v1.10.0
Document the command palette, reorganized instance menu/tabs, global
minimized-operations tray, owner-scoped live Proxmox resources, and the
React Query cache clear on login/logout; bump VERSION and README badges.
2026-07-23 21:59:24 +05:00
markmorado
6a79dd2048 fix(appstore): DNS, per-server golden template, bind-mount perms, delete race
All checks were successful
Backend Tests / pytest (Python 3.12) (push) Successful in 1m1s
Deploy to Production / Trigger production update (push) Successful in 8s
App Store install/update pipeline reliability fixes:
- explicit nameserver (APPSTORE_NAMESERVER) on App Store LXCs and the golden
  template build CT, instead of inheriting a node resolver that may be
  unreachable from the container network (e.g. Tailscale-only DNS)
- golden template storage/resolution moved from one global setting to
  per-server_id (migration 37: app_operations.server_id) — building it on one
  Proxmox server no longer overwrites the template configured for another
- golden template automated build fixed: vzdump export step no longer fails
  on "unable to parse directory volume name 'vztmpl/probe'"
- bind-mount host directories are pre-created with permissive ownership
  before `docker compose up`, fixing Permission denied for non-root
  containers (e.g. MariaDB) writing to Docker-auto-created root-owned dirs
- delete/teardown now waits for Proxmox to actually confirm the destroy task
  finished (was silently proceeding after a short timeout, letting a new
  install reuse the VMID while the node was still wiping the old disk)
- pct create retries a few times on transient "got lock" config errors
- failed pipeline steps now report the tail of command output (4000 chars)
  instead of the head, so the real error isn't buried under pull/progress noise
- install error box in the UI wraps long text and scrolls instead of
  stretching the dialog

Also carries forward in-progress script catalog / instances / RBAC changes
that were already uncommitted in the working tree before this session.

Bump to v1.9.1, update WIKI.md/docs/CHANGELOG accordingly.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-17 04:49:40 +05:00
markmorado
aebb726231 perf(appstore): быстрый синк Umbrel — иконки с CDN параллельно + стартовый синк
All checks were successful
Backend Tests / pytest (Python 3.12) (push) Successful in 56s
Deploy to Production / Trigger production update (push) Successful in 7s
A1: иконки Umbrel тянутся пофайлово с GitHub Pages CDN в пуле из 16 потоков
(<app-id>/icon.svg) вместо тяжёлого tarball галереи со скриншотами. Синк
Umbrel: ~7.5 мин → ~13-17с, 379/379 иконок. Настройка UMBREL_APPSTORE_GALLERY_CDN
заменяет UMBREL_APPSTORE_GALLERY_REPO. 404/сетевой сбой отдельного запроса
просто пропускает иконку, не роняя синк.

A2: на свежем деплое каталог пуст, а IntervalTrigger впервые сработает лишь
через сутки. Теперь при пустом каталоге планировщик ставит разовый синк
немедленно (trigger=date) — каталог наполняется на старте без ручной кнопки.

Проверено на стенде: стартовый синк наполнил каталог 644 (runtipi 265 +
umbrel 379) за 16.5с; эндпоинт логотипа отдаёт 200 image/svg+xml.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-09 01:40:39 +05:00
markmorado
ebc1c8429e docs: релизы v1.8.1 (Umbrel в App Store) и v1.9.0 (IPAM-привязка, FQDN нод)
All checks were successful
Deploy to Production / Trigger production update (push) Successful in 8s
- VERSION → 1.9.0
- CHANGELOG: запись v1.8.1 (Umbrel как второй источник каталога, адаптер
  compose, иконки из галереи, мультиисточниковый синк, фильтр/бейдж источника,
  кастомный порт установки, мгновенная чистка инстанса) и v1.9.0 (привязка
  IPAM-сетей к серверу/ноде и области с автовыбором в визардах, приём FQDN в
  поле хоста ноды)
- README (en/ru): App Store — мультиисточниковый каталог (Runtipi + Umbrel)
- WIKI: источники, env-настройки Umbrel, иконки из галереи, фильтр/бейдж,
  параметр source в REST

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-09 01:32:44 +05:00
markmorado
490c4ad18d docs(appstore): актуализировать README/CHANGELOG/WIKI, версия 1.8.0
All checks were successful
Deploy to Production / Trigger production update (push) Successful in 12s
- VERSION → 1.8.0
- CHANGELOG (ru/en): запись v1.8.0 с разделом App Store
- README (ru/en): бейдж версии + категория App Store в возможностях
- WIKI: раздел «App Store» (предпосылки, env, install, My Apps, права, REST API) + оглавление

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-07 23:12:13 +05:00
9b1000ba76 docs: document per-user quotas and bump version to v1.7.0
All checks were successful
Deploy to Production / Trigger production update (push) Successful in 8s
Update README/README.ru, CHANGELOG/CHANGELOG.ru, WIKI and VERSION to
cover the per-user resource quotas feature (commit 35dcbfd): instance/
vCPU/RAM/disk limits, HTTP 429 enforcement, quota:view/quota:manage
permissions, admin + self-service endpoints and UI.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 23:59:08 +05:00
0510c1739d docs(images): document cloud-image catalog; bump to v1.6.0
All checks were successful
Deploy to Production / Trigger production update (push) Successful in 8s
Add v1.6.0 CHANGELOG entries (EN/RU) for the Images module: cloud-image
catalog, auto-convert to VM template, custom mirrors, arch-aware filtering.
Add feature bullet to README (EN/RU) and a dedicated WIKI section + TOC entry.
Bump VERSION 1.5.2-1 -> 1.6.0.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 01:38:22 +05:00
a675976303 docs: fix UI port from 8000 to 3001 in all docs
All checks were successful
Deploy to Production / Trigger production update (push) Successful in 8s
Frontend (React/nginx) is served on port 3001, not 8000.
Port 8000 is the backend FastAPI — API endpoint and /docs
references at 8000 are kept as-is since they are correct.

Fixed in: README.md, README.ru.md, WIKI.md (quick-start URL
and standalone deployment port description).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 18:27:13 +05:00
efcefb5ae3 docs: sync README and WIKI to v1.5.2-1
All checks were successful
Deploy to Production / Trigger production update (push) Successful in 9s
- README.ru.md: bump badge from 1.5.0 to 1.5.2-1; add real-time
  disk/IOPS/network metrics, per-user language and ConfirmDialog entries
- README.md: add same new feature bullets to Monitoring and Other sections
- WIKI: fix language-switch path (Panel → Profile since v1.5.2);
  update log-retention note (log_retention_days now in UI, not DB-only);
  update footer date and version (May 7 / 1.5.0 → June 20 / 1.5.2-1)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 18:13:32 +05:00
48215cbc0b chore(release): bump to v1.5.2-1
All checks were successful
Deploy to Production / Trigger production update (push) Successful in 8s
Update VERSION, README badge, CHANGELOG (en/ru) and WIKI for v1.5.2-1.
Patch release: styled ConfirmDialog replaces all native browser confirm() popups.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 17:50:46 +05:00
9b4fbf13ba chore(release): bump to v1.5.2
All checks were successful
Deploy to Production / Trigger production update (push) Successful in 8s
Update VERSION, README badge, CHANGELOG (en/ru) and WIKI for v1.5.2.
Covers: real-time disk/IOPS/network metrics, per-user language preference,
settings UX fixes (SMTP fields, Telegram Chat ID, Webhook URL removal).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-20 08:57:36 +05:00
8a879f36fa release: v1.5.1
- Bump VERSION and README badge to 1.5.1
- WIKI: add new 'Logs & Audit' section (page layout, levels, API,
  query params, response shape, RBAC, retention) and bump version
  in the top note; also extend ToC
- CHANGELOG / CHANGELOG.ru: add v1.5.1 entry covering the missing
  LogsPage component fix and the .gitignore collision fix
2026-06-04 03:14:38 +05:00
markmorado
0743dee005 docs: bump version to 1.5.0, update CHANGELOG, README, WIKI 2026-05-07 00:40:27 +02:00
markmorado
4546a798d0 v1.4.0: Networks page — SDN zone/vnet editing, node interfaces CRUD, IPAM auto-create 2026-04-06 21:13:38 +02:00
markmorado
6a0564cea2 v1.3.1: VM list node/server filtering + responsive toolbar redesign
- Add server filter dropdown (populated dynamically from loaded VMs)
- Add node filter dropdown (narrows to nodes of selected server)
- Both filters persisted in URL params and restored on reload
- Toolbar restructured into 2 rows: filters row + actions row
- Responsive breakpoints: ≤900px text labels hidden, ≤768px 2-per-row,
  ≤480px full-width filters, stats hidden on mobile
- Snapshots toolbar migrated to inline flex (no legacy class dependency)
- Update VERSION, CHANGELOG, README, WIKI to v1.3.1
2026-04-05 21:47:16 +02:00
markmorado
abeb8d53a3 chore: release v1.3.0
- VERSION: 1.2.0 → 1.3.0
- CHANGELOG: add v1.3.0 section (VNC & Terminal fixes)
- README: update version badge to 1.3.0
- WIKI: bump version header, expand Console section (VNC/xterm.js),
  update VNC troubleshooting section
2026-03-27 21:36:21 +01:00
markmorado
4ef79112be fix: wait for Proxmox resize task before VM start (v1.2.0)
- configure_vm: capture resize UPID and call wait_for_task(120s)
  before returning; prevents lock conflict when VM is started right
  after disk resize
- resize_vm_disk / resize_container_disk (x2): same fix applied
- remove unnecessary restart_vm() after manual QEMU disk resize —
  resize is a storage-layer operation and does not require a reboot;
  the auto-restart was causing a second lock conflict

Fixes: can't lock file '/var/lock/qemu-server/lock-xxx.conf' - got timeout
Fixes: command '/usr/bin/qemu-img resize' failed: got timeout
2026-03-16 20:23:06 +01:00
markmorado
57575d58ce feat: v1.1.8 — user-server assignment, VM/LXC ownership, smart login redirect, RBAC migrations
- Migration 20: user_servers association table (User ↔ ProxmoxServer)
- API: GET/PUT /api/users/{id}/servers — assign servers to users with workspace-conflict validation
- API: GET /api/users/{id}/server-assignments — enriched server list (assigned + compatible flags)
- Non-admin server filter: intersection of assigned_servers and workspace servers
- Migration 21: dashboard:view = false for user role (new key format)
- Migration 22: proxmox.cluster.manage → cluster:manage for admin role
- API: GET/PUT /api/{server_id}/vm/{vmid}/owner — VM/LXC owner assignment (admin-only)
- Login: smart redirect based on user permissions after authentication
- Login: returnUrl param support for post-login redirect
- Roles API: user_count field per role in GET /api/roles
- node_uptime added to server detail API response
- Remove redundant PermissionChecker from GET /users HTML route
2026-03-16 08:27:36 +01:00
markmorado
c09c0c5b63 refactor(i18n): move translations to JSON locale files
- Extract 1149 translation keys from i18n.py into locales/ru.json and locales/en.json
- Rewrite i18n.py as a lightweight JSON loader (5287 → 128 lines)
- Add I18nService.reload() for runtime hot-reload without restart
- Add I18nService.available_languages() to list loaded language codes
- Public API unchanged: t(), get(), get_all(), add_translation()
- New languages require only a new *.json file in locales/ — no code changes

Bump version: 1.1.6 → 1.1.7
2026-03-16 04:08:28 +01:00
markmorado
4940cbe77f v1.1.6: fix LXC xterm.js terminal (termproxy auth handshake)
- Add mandatory Proxmox termproxy auth: send 'USERNAME:VNCTICKET\n' as
  first WebSocket message, wait for 'OK' before starting PTY proxy
- Fix server.username → server.api_user (token suffix stripped)
- Fix CSRFPreventionToken sent in body → header only
- Fix additional_headers → extra_headers (websockets v12)
- Add URL-encoding for vncticket, PVEAuthCookie WS header, subprotocols=['binary']
- Forward initial terminal data arriving with OK frame
- Bump VERSION 1.1.5 → 1.1.6
2026-03-16 03:07:14 +01:00
markmorado
5a67981f9a feat: v1.1.5 — UPID task tracking, Task Drawer clear button, auto-expire, pve CLI fix 2026-03-15 20:34:17 +01:00
markmorado
c4778d2972 chore: bump version to 1.1.4 — Workspaces feature 2026-03-15 02:38:15 +01:00
markmorado
3947dae7b9 feat: v1.1.3 — dashboard alerts panel, sparkline charts, log sanitisation, CSS vars 2026-03-10 14:10:00 +01:00
markmorado
d788ac78c3 feat: v1.1.2 — dashboard redesign, pve CLI tool, sidebar cluster selector 2026-03-08 20:35:43 +01:00
markmorado
b8c6e52c9a fix(update): host-side watchdog replaces in-container rebuild
Root cause: docker compose down killed the nohup script inside the
container before rebuild could complete — only git pull was visible
(updated VERSION file).

Changes:
- update_host.sh: new host-side watchdog (poll .update_trigger every 3s)
  runs: git pull → docker compose down → build --no-cache app → up -d
  PROJECT_DIR and User are dynamic (set at install time, not hardcoded)
- update_service.py: perform_update() now writes .update_trigger instead
  of running git/docker commands inside the container
- deploy.sh: added install_update_watchdog() + --watchdog CLI option;
  generates /etc/systemd/system/pvemanager-update.service dynamically
  with correct User= and WorkingDirectory= for any install path/user
- .gitignore: ignore .update_trigger and generated systemd/ files
- CHANGELOG, VERSION, WIKI: bump to v1.1.1, document new update flow
2026-03-08 19:02:40 +01:00
markmorado
2c8becc6d4 chore: bump version to 1.1.0
- Backup module with PBS support, APScheduler, storage management
- IPAM: server/node subnet binding, link-allocations modal
- Fix: update system rebuilds Docker image after git pull
- Theme: replace hardcoded colors with CSS variables
- i18n: Uzbek keys for IPAM node selector
2026-03-08 18:27:47 +01:00
markmorado
f1d82ff7ea docs: update WIKI.md to v1.0.5 — IPAM server/node binding, Uzbek locale note 2026-03-08 18:24:56 +01:00
markmorado
a3abf58453 Update repository URL to git.tzim.uz/markmorado/pvemanager 2026-03-08 12:31:42 +01:00
8a29e3a087 Update WIKI with git repository selection instructions 2025-12-16 20:05:54 +05:00
2541360f51 Fix password reset commands - remove emoji to avoid encoding issues 2025-12-16 19:51:25 +05:00
1fda6a595b Add password reset instructions to troubleshooting guide 2025-12-16 19:49:13 +05:00
aa8c06116d Add in-app notifications for new panel version availability
- Add notify_update_available() method to NotificationService
- Add translations for update notifications (ru/en)
- Add 'update' type to default notification types
- Add check_for_panel_updates() background task (runs every 6 hours)
- Notifications include link to settings page for easy update access
- Prevent duplicate notifications for same version
2025-12-16 19:38:04 +05:00
3113aa5905 Docs consolidation: merge API and Deployment guides into WIKI; remove duplicates; set version to v1.0; align init.sql header 2025-12-15 22:30:53 +05:00
5153a668d6 Release v1.0 - Update version across all files 2025-12-15 13:07:24 +05:00
f5a3903f5d Add complete project structure and all files 2025-12-15 13:03:29 +05:00