ilia 0a937fd1b4
All checks were successful
CI / skip-ci-check (push) Successful in 1m23s
CI / lint-and-test (push) Successful in 1m27s
CI / ansible-validation (push) Successful in 2m59s
CI / secret-scanning (push) Successful in 1m24s
CI / dependency-scan (push) Successful in 1m29s
CI / sast-scan (push) Successful in 2m41s
CI / license-check (push) Successful in 1m27s
CI / vault-check (push) Successful in 2m29s
CI / playbook-test (push) Successful in 2m38s
CI / container-scan (push) Successful in 1m56s
CI / sonar-analysis (push) Successful in 2m33s
CI / workflow-summary (push) Successful in 1m21s
feat(app_setup): Improves deployment reliability for app projects and adds support for mirrormatch deployment with Prisma/Next.js requirements. (#5)
## Summary

Improves deployment reliability for app projects and adds support for mirrormatch deployment with Prisma/Next.js requirements.

## Changes

### Core Improvements (affects all app projects)

1. **Deploy Script (`deploy_app.sh.j2`)**
   - Fixed clone logic to handle non-git directories gracefully
   - Preserves `.env.*` files during repository clone
   - Uses temporary directory for initial clone to avoid permission issues
   - Added `sudo` to systemctl restart commands (appuser needs sudo for service management)

2. **Environment Template (`env.j2`)**
   - Removed comment lines to prevent `xargs` errors when sourcing env files
   - Cleaner, more reliable env file format

3. **App Setup Role (`app_setup/tasks/main.yml`)**
   - Added initial deploy task to run deploy script during first configure
   - Ensures app is fully deployed before systemd service starts

4. **Configure Playbook (`configure_app.yml`)**
   - Fixed migrate command precedence: checks `env_def.backend_migrate_cmd` first
   - Allows per-environment override of migrate commands (e.g., `db:push` for dev/qa)

### Mirrormatch-Specific Configuration

- Added `mirrormatch` project definition with dev/qa/prod environments
- Configured `backend_migrate_cmd: "npm run db:push"` for dev/qa (no shadow DB needed)
- Added `backend_seed_cmd` support for dev/qa environments
- Configured NextAuth v5 environment variables (`AUTH_TRUST_HOST`)

### Documentation

- Updated `docs/guides/app_stack_proxmox.md` with:
  - Project-specific configuration examples
  - Environment file naming notes
  - Command precedence documentation

## Impact Analysis

###  Backward Compatible

- **pote**: No impact (uses separate `pote` role)
- **punimTagFE/BE**: Will benefit from improved deploy script, no breaking changes
- **mirrormatch**: Uses new features, fully supported

### Project-Specific Configs (isolated)

All mirrormatch-specific settings are in `app_projects.mirrormatch` and don't affect other projects:
- `backend_migrate_cmd: "npm run db:push"` (per-environment)
- `backend_seed_cmd: "npm run db:seed"` (per-environment)
- `AUTH_TRUST_HOST: "true"` (in env_vars)

## Testing

-  Mirrormatch dev environment successfully deployed
-  Service starts correctly after deployment
-  Environment variables loaded properly
-  Database schema pushed and seeded

## Related

Fixes deployment issues encountered during mirrormatch setup:
- Non-git directory handling
- Env file preservation during clone
- Service restart permissions
- Prisma migrate vs db:push workflow

Reviewed-on: #5
2026-01-04 16:59:48 -05:00

Ansible Infrastructure Management

Ansible automation for development machines, service hosts, and Proxmox-managed guests (LXC-first, with a path for KVM VMs).

Quick start

# Install Python deps + Ansible collections
make bootstrap

# Edit secrets (Proxmox credentials, SSH public key, etc.)
make edit-group-vault

# Validate the repo
make test-syntax

Proxmox app projects (LXC-first)

This repo can provision and configure dev/qa/prod guests per application project using the app_projects model.

  • Configure projects: inventories/production/group_vars/all/main.yml (app_projects)
  • Configure secrets: inventories/production/group_vars/all/vault.yml (encrypted)
  • Run end-to-end:
make app PROJECT=projectA

Other useful entry points:

  • Provision only: make app-provision PROJECT=projectA
  • Configure only: make app-configure PROJECT=projectA
  • Info / safety: make proxmox-info [PROJECT=projectA] [ALL=true] [TYPE=lxc|qemu|all]

Safety notes:

  • IP conflict precheck: provisioning fails if the target IP responds (override with -e allow_ip_conflicts=true only if you really mean it).
  • VMID/CTID collision guardrail: provisioning fails if the VMID exists but the guest name doesn't match (override with -e allow_vmid_collision=true only if you really mean it).
  • No destructive playbooks: this repo intentionally does not ship “destroy/decommission” automation.

Docs:

  • docs/guides/app_stack_proxmox.md
  • docs/guides/app_stack_execution_flow.md

Project structure (relevant paths)

ansible/
├── Makefile
├── ansible.cfg
├── collections/requirements.yml
├── inventories/production/
│   ├── hosts
│   ├── group_vars/all/
│   │   ├── main.yml
│   │   ├── vault.yml
│   │   └── vault.example.yml
│   └── host_vars/
├── playbooks/
│   ├── app/
│   │   ├── site.yml
│   │   ├── provision_vms.yml
│   │   ├── configure_app.yml
│   │   └── proxmox_info.yml
│   └── site.yml
└── roles/
    ├── proxmox_vm/
    ├── base_os/
    ├── app_setup/
    └── pote/

Documentation

  • Guides: docs/guides/
  • Reference: docs/reference/
  • Project docs (architecture/standards/workflow): project-docs/index.md
Description
No description provided
Readme 1.1 MiB
Languages
Makefile 45.4%
Python 22.3%
Shell 18%
Jinja 14.3%