🆕 Nový Projekt
Počiatočné Ročenie
Žiadna diskušia → pád
Vždy začíname s jasným požiadavkou. Ak nie je zadaná explicitne, považujeme za nedostatočnú.
# Nesprávne:
"urob to what ever"
# Správne:
"Implementovať auth s JWT pre API endpoint /api/login s rate limitingom"
Navrhnut DB schému (ak potrebné) → Vytvor migráciu
Ak projekt vyžaduje databázu, navrhnut schému a vytvor migračný skript. Zabezpečte, že migrácie sú idempotentné a možnostej spätné vrátenie (down migration).
-- migrations/001_init_schema.sql
CREATE TABLE IF NOT EXISTS projects (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT NOW()
);
Potom aplikuj migráciu cez Dokku:
dokku run <app> psql -f migrations/001_init_schema.sql
Vytvor GitHub Repo (private)
Vytvor nové private GitHub repozitár s názvom sardonicrepulsion/<project-name>.
# Použi GitHub CLI
gh repo create <project-name> --private --source=. --remote
# Alebo manuálne cez UI a potom:
git remote add origin git@github.com:sardonicrepulsion/<project-name>.git
git push -u origin main
Vytvor Dokku App
dokku apps:create <project-name>
Konfigurácia siete (ak potrebné MySQL)
Ak projekt vyžaduje MySQL alebo iné služby, pripojiť sieť:
dokku network:set <project-name> attach-post-deploy dokku-services
# Pre MySQL:
dokku mysql:link <project-name> <mysql-service-name>
Nasadiť prvú verziu
git push dokku main
Nastaviť SSL
# Získaj certifikát pomocou Certbot (webroot)
certbot certonly --webroot -w /var/www/html -d <project>.sardonicrepulsion.com
# Alebo použij Dokku Let's Encrypt plugin:
dokku letsencrypt <project-name>
Pridať do Projects DB
Ak ide o "project" a nie len nástroj, pridaj záznam do Projekty DB pomocou API alebo priamo.
curl -X POST https://internal.db/api/projects \
-H "Authorization: Bearer $INTERNAL_TOKEN" \
-d '{"name":"<project-name>","domain":"<project>.sardonicrepulsion.com","repo":"sardonicrepulsion/<project-name>"}'
Pridať do Backup Scriptu
Ak projekt vyžaduje špeciálne zálohovanie, uprav skript/zálohu (napr. /opt/scripts/backup.sh).
# Backup <project> database
pg_dump -Fc -U postgres <project-db> > /backup/<project>/$(date +%F).dump
Pridať do Monitoring/Healthcheck
Pridaj doménu do monitorovacieho skriptu, ktorý pravidelně kontroluje health endpointy.
# V monitoring/check_all.sh alebo podobnom
services+=("https://<project>.sardonicrepulsion.com/health")
Pridať DNS A záznam
Ak subdoména ešte neexistuje, pridaj A záznam smerujúci na server IP (pomocou provider API alebo manuálne).
# Príklad: Cloudflare API
curl -X POST "https://api.cloudflare.com/client/v4/zones/<zone-id>/dns_records" \
-H "Authorization: Bearer $CF_TOKEN" \
-d '{"type":"A","name":"<project>","content":"<server-ip>","ttl":120}'
Vytvoriť Webhook pre Auto-Deploy
V Deployer UI (https://deploy.sardonicrepulsion.com) vytvor nový webhook pre toto projekt, ktorý spustí automatické nasadenie pri push na GitHub main.
# URL: https://deploy.sardonicrepulsion.com/webhook?app=<project-name>
# Secret: nakonfigurované v Deployer
Testovať Health Endpoint a Logs
curl -f https://<project>.sardonicrepulsion.com/health || echo "FAIL"
dokku logs <project-name> --tail
Zatvoriť Task a Dokumentovať v MEMORY
Označ úlohu ako hotovú a zaznamenej v MEMORY systéme:
memory-cli task close <task-id> --note "Project setup complete"
# A pridaj sumár do MEMORY.md
🔄 Aktualizácia Existujúceho Projektu
Receive Task/Feature
Prijať úlohu z konverzácie, memory system alebo project board.
Create Feature Branch
Vytvor feature branch podľa Conventional Commits:
git checkout main
git pull origin main
git checkout -b feature/functional-a-auth
Naming: fix/, feat/, chore/, docs/, refactor/
Make Changes
Vykonaj potrebné zmeny v kóde, konfigurácii alebo assets.
Commit (Semantic)
git add .
git status # Verify
git commit -m "feat(auth): add JWT login endpoint with rate limiting"
# If multiple logical changes, split commits:
git add <file1> <file2>
git commit -m "feat(api): add login validation"
git add <file3>
git commit -m "feat(security): implement rate limiting"
Push Branch
git push origin feature/functional-a-auth
Open PR on GitHub
Vytvor Pull Request s template:
- Title: feat(scope): short description
- Description:
- What changed
- Why it changed
- Testing steps (curl examples)
- Related issues
# Testing example:
curl -X POST https://api.example.com/login \
-H "Content-Type: application/json" \
-d '{"email":"test@example.com","password":"secret"}' \
-v
Review
- Self-review changes via GitHub UI
- Zavolať Petera pre高风险 zmeny (DB schema, infra, security)
- Wait for approvals (min 1 if required)
Merge to Main
Po schválení:
# Squash merge (one commit per PR)
# Use GitHub UI: "Squash and merge"
# Or CLI:
git checkout main
git pull origin main
git merge --squash feature/functional-a-auth
git commit -m "feat(auth): add JWT login endpoint"
# Cleanup
git branch -d feature/functional-a-auth
git push origin main
Deploy
GitHub webhook spustí Deployer, ktorý zavolá Dokku:
# Dokku deploy (automatic via webhook)
# Manual fallback:
git remote add dokku dokku@localhost:workflow
git push dokku main
Monitor deployment logs:
dokku logs workflow --tail
Verify
Overi health endpoint a logs:
curl -f https://workflow.sardonicrepulsion.com/health || echo "FAIL"
curl -s https://workflow.sardonicrepulsion.com/metrics # Prometheus
# Stream logs:
dokku logs workflow --tail
# Or via remote:
ssh dokku@localhost "logs workflow --tail"
Update DB/Records
Ak treba, aktualizuj tasks/projects DB prostredníctvom API:
curl -X PATCH https://internal.db/api/tasks/123 \
-H "Authorization: Bearer $INTERNAL_TOKEN" \
-d '{"status":"deployed","deployed_at":"$(date -Iseconds)"}'
Close Task in Memory
Označ úlohu ako hotovú vmemory systéme:
# Memory system CLI (example)
memory-cli task close 123 --note "Deployed to production"
Post-Update Checks
- Ensure DB migrations are reversible (test rollback on staging or by applying down migration)
- Ensure backup coverage includes new/changed databases/tables
- Check SSL renewal works:
certbot renew --dry-runand verify cron job
🔧 Dodatočné Postupy
🔐 SSO Migration
- Kopíruj DB tabuľku
usersdo pomocnejusers_migration - Pridaj stĺpce:
sso_provider,sso_id - Vytvor konfiguračný env:
SSO_PROVIDER=keycloak - Pre každého usera s
sso_provider IS NULL:# Generate SSO link (example Keycloak) python scripts/migrate_user_to_sso.py --user-id=42 --dry-run=false - Overi, že login s SSO funguje pre migrovaných užívateľov
- Pre staré credentials (local password) nastav
sso_provider='local' - Po 48h odstráň local password hashe (set
password_hash=NULL)
🗄️ DB Migration
- Priprav migračný skript s idempotentnými operáciami:
- Aplikuj cez dokku alebo priamo:
- Zaznamenej v
schema_migrationstabuľke - Overi aplikáciu - bez chýb, query plánuje index
-- migrations/2025-02-add-user-index.sql
BEGIN;
-- Check if index exists (idempotent)
DO $$ BEGIN
IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE indexname = 'idx_users_email') THEN
CREATE INDEX CONCURRENTLY idx_users_email ON users(email);
END IF;
END $$;
COMMIT;
dokku run <app> psql -f migrations/xxx.sql
# alebo
docker exec -i <container> psql -U postgres -d app < migrations/xxx.sql
💾 Backup Procedure
- PGSQL:
- Redis:
- S3/assets:
- Nastav crontab na denné/zálohovanie:
# Full backup
pg_dumpall -U postgres > backup_$(date +%F).sql
# Specific DB
pg_dump -Fc -U postgres appdb > backup_appdb_$(date +%F).dump
# Restore
pg_restore -U postgres -d appdb backup_appdump.dump
redis-cli --rdb /tmp/redis.rdb
# Copy /tmp/redis.rdb to backup storage
aws s3 sync s3://app-uploads/ /backup/uploads_$(date +%F)/
0 2 * * * /opt/scripts/backup.sh >> /var/log/backup.log 2>&1