Commit Graph

11 Commits

Author SHA1 Message Date
f9425082f7 chore: ignore local session summaries under docs/summaries
Some checks failed
Deploy to Production / Trigger production update (push) Failing after 10s
SonarCloud / SonarCloud Analysis (push) Failing after 2m39s
Session write-ups are kept locally next to docs/plans and
docs/superpowers, not pushed to the repository.
2026-08-21 21:31:03 +05:00
c981a14cf9 chore(nginx): stop tracking the generated site config
Some checks failed
Deploy to Production / Trigger production update (push) Failing after 11s
nginx/conf.d/pvemanager.conf is not source: setup_nginx_config() writes it
on every deploy by copying one of the .template files and substituting the
domain. Tracking it meant the repository carried one deployment's hostname,
and every deploy showed the file as modified.

Untrack it and ignore it. The templates it is generated from stay tracked,
so nothing is lost — a missing copy is restored by re-running deploy.sh, or
by hand:

    cp nginx/conf.d/pvemanager.conf.template nginx/conf.d/pvemanager.conf
    sed -i "s/DOMAIN_NAME/<domain>/g" nginx/conf.d/pvemanager.conf

Note for existing checkouts: this commit deletes the path, so a deployed
host that pulls it will lose its live config unless the file is regenerated
afterwards.
2026-08-11 21:10:09 +05:00
c6a32255df fix(ssl): stop reporting a working certificate as a failed deployment
The SSL deployment aborted even when Let's Encrypt had issued a perfectly
valid certificate. obtain_ssl_certificate() confirmed success with

    [ -d "nginx/certbot/conf/live/${domain}" ]

but certbot runs as root inside its container and creates live/, archive/
and accounts/ with mode 0700. Whenever deploy.sh runs as a non-root user
that test fails with EACCES no matter what is on disk, so every SSL deploy
fell back to the HTTP-only config and printed "Failed to obtain SSL
certificate" right after certbot reported the certificate was fine.

Check the certificate from inside a container instead, and treat the files
on disk as the source of truth rather than certbot's exit code, so a
certificate that is present and not yet due for renewal counts as success.
Pass --keep-until-expiring to make that case explicit.

Also drop the recursive chmod on nginx/certbot: it could not touch the
root-owned files it was aimed at (producing the wall of "Operation not
permitted" noise) and would have exposed the private keys if it had.

Verify nginx actually came up after switching to the SSL config and roll
back to HTTP if it did not — a crash-looping nginx takes the whole panel
offline, which is worse than serving without HTTPS.

Reload nginx every 6h so renewed certificates are picked up: nginx reads
the certificate once at startup, so the renewal loop would otherwise keep
serving the old one until the container happened to restart.

Ignore nginx/certbot/ — it holds Let's Encrypt private keys and was
untracked but not ignored.
2026-08-11 20:28:58 +05:00
markmorado
b66424de12 chore: ignore .claude directory 2026-07-24 04:02:54 +05:00
markmorado
4c164bec72 chore: убрать план из репозитория и игнорировать docs/plans/
Планы разработки не хранятся в репозитории — только пользовательская
документация. Файл сохранён у автора отдельно.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-09 01:28:36 +05:00
af10009375 chore: ignore local superpowers specs/plans and SDD scratch
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-21 21:35:15 +05:00
34fe9b4924 chore: ignore graphify-out/ and local preview config
All checks were successful
Deploy to Production / Trigger production update (push) Successful in 15s
Also drop the stray markdown code fences that wrapped the file and were
being treated as literal ignore patterns.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 22:21:07 +05: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
qwen.ai[bot]
58d1c3f5be update branch 2026-03-02 14:54:42 +00:00
qwen.ai[bot]
79dd95c6d4 Initialize default admin user on startup to resolve missing credentials issue
- Updated `backend/app/main.py`: Added automatic execution of `/app/init_admin.py` during application startup to create default admin account
- Modified `.gitignore`: Removed `.env` from ignored files to ensure environment configuration is available during deployment
- Enhanced `lifespan` context manager: Integrated admin initialization with proper error handling and logging
- Improved startup reliability: Ensures default credentials are provisioned regardless of deployment environment

The fix ensures that new deployments automatically set up the default admin user, resolving widespread issues with missing login credentials. The change is robust, idempotent, and logs all initialization steps for debugging.
2026-03-02 14:38:01 +00:00
f5a3903f5d Add complete project structure and all files 2025-12-15 13:03:29 +05:00