Add Cloudflare automation, ngrok tunnel, fix Dockerfiles
- Ansible cloudflare.yml: DNS, SSL, HSTS, Brotli, bot fight, SEO bots allow
- Vault: add cloudflare_zone_id
- Workflow: run cloudflare config before deploy
- docker-compose-dev: add ngrok tunnel, vault, minio
- Ngrok sync script: writes OUTSIDE_URL to .env.local
- Fix Dockerfiles: remove mbstring/xml (built-in PHP 8.4), fix libfreetype-dev
- Makefile: maintenance_on/off, clear_prod
- Playbook: stop_prod, install_prod, start_prod, migrate, clear steps
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 21:06:11 +01:00
|
|
|
---
|
2026-03-18 21:24:31 +01:00
|
|
|
# --- Server deployment ---
|
|
|
|
|
- name: Deploy e-ticket to production
|
|
|
|
|
hosts: production
|
|
|
|
|
become: true
|
|
|
|
|
vars_files:
|
|
|
|
|
- vault.yml
|
|
|
|
|
|
|
|
|
|
pre_tasks:
|
|
|
|
|
- name: Enable maintenance mode
|
|
|
|
|
command: make maintenance_on
|
|
|
|
|
args:
|
|
|
|
|
chdir: /var/www/e-ticket
|
|
|
|
|
|
2026-03-26 10:53:28 +01:00
|
|
|
- name: Get Docker socket GID
|
|
|
|
|
stat:
|
|
|
|
|
path: /var/run/docker.sock
|
|
|
|
|
register: docker_sock
|
|
|
|
|
|
|
|
|
|
- name: Set docker_gid fact
|
|
|
|
|
set_fact:
|
|
|
|
|
docker_gid: "{{ docker_sock.stat.gid }}"
|
|
|
|
|
|
2026-03-26 12:27:05 +01:00
|
|
|
- name: Generate analytics secret
|
|
|
|
|
set_fact:
|
|
|
|
|
analytics_secret: "{{ lookup('password', '/dev/null chars=ascii_lowercase,digits length=32') }}"
|
|
|
|
|
|
2026-03-18 21:24:31 +01:00
|
|
|
tasks:
|
|
|
|
|
- name: Deploy .env.local
|
|
|
|
|
template:
|
|
|
|
|
src: env.local.j2
|
|
|
|
|
dest: /var/www/e-ticket/.env.local
|
|
|
|
|
owner: bot
|
|
|
|
|
group: bot
|
|
|
|
|
mode: "0600"
|
|
|
|
|
|
2026-03-20 16:38:02 +01:00
|
|
|
- name: Ensure cert directory exists
|
|
|
|
|
file:
|
|
|
|
|
path: /var/www/e-ticket/config/cert
|
|
|
|
|
state: directory
|
|
|
|
|
owner: bot
|
|
|
|
|
group: bot
|
|
|
|
|
mode: "0700"
|
|
|
|
|
|
|
|
|
|
- name: Deploy S/MIME private key
|
|
|
|
|
copy:
|
|
|
|
|
content: "{{ smime_private_key }}"
|
|
|
|
|
dest: /var/www/e-ticket/config/cert/private-key.pem
|
|
|
|
|
owner: bot
|
|
|
|
|
group: bot
|
|
|
|
|
mode: "0600"
|
|
|
|
|
|
Simplify Ansible playbook: remove Cloudflare tasks, add git pull and direct dependency install
- Remove entire Cloudflare configuration play (DNS, SSL, HSTS, bot management)
- Replace make install_prod with direct git pull, composer install, bun install, bun run build
- Add Docker image pull step before container restart
- Keep server deployment: env, containers, migrations, cache, uploads, Caddy, Supervisor
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 13:05:07 +01:00
|
|
|
- name: Pull latest code
|
|
|
|
|
command: git pull origin master
|
|
|
|
|
args:
|
|
|
|
|
chdir: /var/www/e-ticket
|
|
|
|
|
become_user: bot
|
|
|
|
|
|
2026-03-20 14:07:16 +01:00
|
|
|
- name: Deploy PgBouncer config
|
|
|
|
|
template:
|
|
|
|
|
src: pgbouncer.ini.j2
|
|
|
|
|
dest: /var/www/e-ticket/docker/pgsql/pgbouncer.ini
|
|
|
|
|
owner: bot
|
|
|
|
|
group: bot
|
2026-03-20 14:22:25 +01:00
|
|
|
mode: "0644"
|
2026-03-20 14:07:16 +01:00
|
|
|
|
|
|
|
|
- name: Deploy PgBouncer userlist
|
|
|
|
|
template:
|
|
|
|
|
src: userlist.txt.j2
|
|
|
|
|
dest: /var/www/e-ticket/docker/pgsql/userlist.txt
|
|
|
|
|
owner: bot
|
|
|
|
|
group: bot
|
2026-03-20 14:22:25 +01:00
|
|
|
mode: "0644"
|
2026-03-20 14:07:16 +01:00
|
|
|
|
2026-03-20 13:31:07 +01:00
|
|
|
- name: Deploy docker-compose-prod.yml
|
|
|
|
|
template:
|
|
|
|
|
src: docker-compose-prod.yml.j2
|
|
|
|
|
dest: /var/www/e-ticket/docker-compose-prod.yml
|
|
|
|
|
owner: bot
|
|
|
|
|
group: bot
|
|
|
|
|
mode: "0600"
|
|
|
|
|
|
2026-03-20 13:23:55 +01:00
|
|
|
- name: Build Docker images
|
|
|
|
|
command: make build_prod
|
|
|
|
|
args:
|
|
|
|
|
chdir: /var/www/e-ticket
|
|
|
|
|
|
Simplify Ansible playbook: remove Cloudflare tasks, add git pull and direct dependency install
- Remove entire Cloudflare configuration play (DNS, SSL, HSTS, bot management)
- Replace make install_prod with direct git pull, composer install, bun install, bun run build
- Add Docker image pull step before container restart
- Keep server deployment: env, containers, migrations, cache, uploads, Caddy, Supervisor
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 13:05:07 +01:00
|
|
|
- name: Pull Docker images
|
|
|
|
|
command: make pull_prod
|
|
|
|
|
args:
|
|
|
|
|
chdir: /var/www/e-ticket
|
|
|
|
|
|
|
|
|
|
- name: Stop production containers
|
|
|
|
|
command: make stop_prod
|
2026-03-18 21:24:31 +01:00
|
|
|
args:
|
|
|
|
|
chdir: /var/www/e-ticket
|
|
|
|
|
|
|
|
|
|
- name: Start production containers
|
|
|
|
|
command: make start_prod
|
|
|
|
|
args:
|
|
|
|
|
chdir: /var/www/e-ticket
|
|
|
|
|
|
2026-03-20 14:18:29 +01:00
|
|
|
- name: Install PHP dependencies
|
|
|
|
|
command: composer install --no-dev --optimize-autoloader
|
2026-03-20 14:17:06 +01:00
|
|
|
args:
|
|
|
|
|
chdir: /var/www/e-ticket
|
2026-03-20 14:18:29 +01:00
|
|
|
become_user: bot
|
2026-03-20 14:17:06 +01:00
|
|
|
|
2026-03-20 14:18:29 +01:00
|
|
|
- name: Install JS dependencies
|
|
|
|
|
command: bun install
|
2026-03-20 14:17:06 +01:00
|
|
|
args:
|
|
|
|
|
chdir: /var/www/e-ticket
|
2026-03-20 14:18:29 +01:00
|
|
|
become_user: bot
|
2026-03-20 14:17:06 +01:00
|
|
|
|
2026-03-20 14:18:29 +01:00
|
|
|
- name: Build assets
|
|
|
|
|
command: bun run build
|
2026-03-20 14:17:06 +01:00
|
|
|
args:
|
|
|
|
|
chdir: /var/www/e-ticket
|
2026-03-20 14:18:29 +01:00
|
|
|
become_user: bot
|
2026-03-20 14:17:06 +01:00
|
|
|
|
2026-03-20 14:12:04 +01:00
|
|
|
- name: Wait for database to be ready
|
2026-03-20 14:21:15 +01:00
|
|
|
shell: |
|
|
|
|
|
for i in $(seq 1 30); do
|
|
|
|
|
docker compose -f docker-compose-prod.yml exec -T php php -r "new PDO('pgsql:host=pgbouncer;port=6432;dbname=e-ticket','e-ticket','{{ db_password }}');" 2>/dev/null && exit 0
|
|
|
|
|
sleep 1
|
|
|
|
|
done
|
|
|
|
|
exit 1
|
2026-03-20 14:12:04 +01:00
|
|
|
args:
|
|
|
|
|
chdir: /var/www/e-ticket
|
|
|
|
|
|
2026-03-26 12:50:35 +01:00
|
|
|
- name: Clear Symfony cache before migration
|
|
|
|
|
command: docker compose -f docker-compose-prod.yml exec -T php php bin/console cache:clear --env=prod
|
|
|
|
|
args:
|
|
|
|
|
chdir: /var/www/e-ticket
|
|
|
|
|
|
|
|
|
|
- name: Clear Redis cache pool (Doctrine L2 + app cache)
|
|
|
|
|
command: docker compose -f docker-compose-prod.yml exec -T php php bin/console cache:pool:clear cache.app --env=prod
|
|
|
|
|
args:
|
|
|
|
|
chdir: /var/www/e-ticket
|
|
|
|
|
|
2026-03-18 21:24:31 +01:00
|
|
|
- name: Run migrations
|
|
|
|
|
command: make migrate_prod
|
|
|
|
|
args:
|
|
|
|
|
chdir: /var/www/e-ticket
|
|
|
|
|
|
2026-03-26 12:50:35 +01:00
|
|
|
- name: Clear cache after migration
|
2026-03-18 21:24:31 +01:00
|
|
|
command: make clear_prod
|
|
|
|
|
args:
|
|
|
|
|
chdir: /var/www/e-ticket
|
|
|
|
|
|
2026-03-20 18:59:58 +01:00
|
|
|
- name: Compile PWA assets
|
|
|
|
|
command: make pwa_prod
|
|
|
|
|
args:
|
|
|
|
|
chdir: /var/www/e-ticket
|
|
|
|
|
|
2026-03-24 09:49:30 +01:00
|
|
|
- name: Ensure uploads directories exist with correct permissions
|
Add organizer pages, SEO breadcrumbs, Open Graph, homepage redesign, and infrastructure updates
- Add public organizers list page (/organisateurs) with neo-brutalist card grid, social icons, and logo display
- Add organizer detail page (/organisateur/{id}-{slug}) with company info, SIRET, email, address, social links, and events placeholder
- Add slug-based URLs with 301 redirect on wrong slug, getSlug() method on User entity
- Add "Voir les evenements" button on organizer cards linking to detail page
- Add JSON-LD BreadcrumbList to all 17 pages that were missing breadcrumbs (login, forgot_password, register_success, email_verified, legal/*, attestation/*, account/*)
- Add Open Graph meta tags (og:title, og:description, og:image, og:type, og:locale, og:site_name) in base.html.twig with automatic inheritance from title/description blocks
- Add og:image with organizer logo on detail page
- Update sitemap: add /organisateurs to sitemap-main, generate organizer detail URLs in sitemap-orgas with logo images
- Update navbar to highlight "Organisateurs" on detail pages
- Redesign homepage with hero section, marquee, stats counters, how-it-works, and CTA sections
- Add Tailwind v4 @source "../templates" directive to app.scss and admin.scss
- Migrate Flysystem from S3 to local storage (uploads/events, uploads/logos)
- Update Liip Imagine config with FormatExtensionResolver for webp conversion
- Add User entity social fields (website, facebook, instagram, twitter, tiktok), logo upload (Vich), __serialize/__unserialize for session safety
- Add account page settings tab with profile, logo upload, and social media for organizers
- Add Stripe Connect status display and sub-account management in account page
- Delete WebpExtensionSubscriber (replaced by FormatExtensionResolver)
- Add migration for social fields and logo columns
- Add deploy.yml chmod tasks for uploads directories
- Add HomeController tests (detail success, wrong slug redirect, 404 cases)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 10:44:31 +01:00
|
|
|
file:
|
|
|
|
|
path: "/var/www/e-ticket/public/uploads/{{ item }}"
|
|
|
|
|
state: directory
|
2026-04-10 14:04:14 +02:00
|
|
|
owner: "1001"
|
|
|
|
|
group: "1001"
|
Add organizer pages, SEO breadcrumbs, Open Graph, homepage redesign, and infrastructure updates
- Add public organizers list page (/organisateurs) with neo-brutalist card grid, social icons, and logo display
- Add organizer detail page (/organisateur/{id}-{slug}) with company info, SIRET, email, address, social links, and events placeholder
- Add slug-based URLs with 301 redirect on wrong slug, getSlug() method on User entity
- Add "Voir les evenements" button on organizer cards linking to detail page
- Add JSON-LD BreadcrumbList to all 17 pages that were missing breadcrumbs (login, forgot_password, register_success, email_verified, legal/*, attestation/*, account/*)
- Add Open Graph meta tags (og:title, og:description, og:image, og:type, og:locale, og:site_name) in base.html.twig with automatic inheritance from title/description blocks
- Add og:image with organizer logo on detail page
- Update sitemap: add /organisateurs to sitemap-main, generate organizer detail URLs in sitemap-orgas with logo images
- Update navbar to highlight "Organisateurs" on detail pages
- Redesign homepage with hero section, marquee, stats counters, how-it-works, and CTA sections
- Add Tailwind v4 @source "../templates" directive to app.scss and admin.scss
- Migrate Flysystem from S3 to local storage (uploads/events, uploads/logos)
- Update Liip Imagine config with FormatExtensionResolver for webp conversion
- Add User entity social fields (website, facebook, instagram, twitter, tiktok), logo upload (Vich), __serialize/__unserialize for session safety
- Add account page settings tab with profile, logo upload, and social media for organizers
- Add Stripe Connect status display and sub-account management in account page
- Delete WebpExtensionSubscriber (replaced by FormatExtensionResolver)
- Add migration for social fields and logo columns
- Add deploy.yml chmod tasks for uploads directories
- Add HomeController tests (detail success, wrong slug redirect, 404 cases)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 10:44:31 +01:00
|
|
|
mode: "0755"
|
|
|
|
|
recurse: true
|
|
|
|
|
loop:
|
|
|
|
|
- logos
|
|
|
|
|
|
|
|
|
|
- name: Ensure var/payouts directory exists
|
|
|
|
|
file:
|
|
|
|
|
path: /var/www/e-ticket/var/payouts
|
|
|
|
|
state: directory
|
2026-04-10 14:04:14 +02:00
|
|
|
owner: "1001"
|
|
|
|
|
group: "1001"
|
Add organizer pages, SEO breadcrumbs, Open Graph, homepage redesign, and infrastructure updates
- Add public organizers list page (/organisateurs) with neo-brutalist card grid, social icons, and logo display
- Add organizer detail page (/organisateur/{id}-{slug}) with company info, SIRET, email, address, social links, and events placeholder
- Add slug-based URLs with 301 redirect on wrong slug, getSlug() method on User entity
- Add "Voir les evenements" button on organizer cards linking to detail page
- Add JSON-LD BreadcrumbList to all 17 pages that were missing breadcrumbs (login, forgot_password, register_success, email_verified, legal/*, attestation/*, account/*)
- Add Open Graph meta tags (og:title, og:description, og:image, og:type, og:locale, og:site_name) in base.html.twig with automatic inheritance from title/description blocks
- Add og:image with organizer logo on detail page
- Update sitemap: add /organisateurs to sitemap-main, generate organizer detail URLs in sitemap-orgas with logo images
- Update navbar to highlight "Organisateurs" on detail pages
- Redesign homepage with hero section, marquee, stats counters, how-it-works, and CTA sections
- Add Tailwind v4 @source "../templates" directive to app.scss and admin.scss
- Migrate Flysystem from S3 to local storage (uploads/events, uploads/logos)
- Update Liip Imagine config with FormatExtensionResolver for webp conversion
- Add User entity social fields (website, facebook, instagram, twitter, tiktok), logo upload (Vich), __serialize/__unserialize for session safety
- Add account page settings tab with profile, logo upload, and social media for organizers
- Add Stripe Connect status display and sub-account management in account page
- Delete WebpExtensionSubscriber (replaced by FormatExtensionResolver)
- Add migration for social fields and logo columns
- Add deploy.yml chmod tasks for uploads directories
- Add HomeController tests (detail success, wrong slug redirect, 404 cases)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 10:44:31 +01:00
|
|
|
mode: "0755"
|
|
|
|
|
|
2026-03-18 21:24:31 +01:00
|
|
|
- name: Ensure Caddy sites directory exists
|
|
|
|
|
file:
|
|
|
|
|
path: /etc/caddy/sites
|
|
|
|
|
state: directory
|
|
|
|
|
owner: root
|
|
|
|
|
group: root
|
|
|
|
|
mode: "0755"
|
|
|
|
|
|
|
|
|
|
- name: Deploy Caddy config
|
|
|
|
|
template:
|
|
|
|
|
src: caddy.j2
|
|
|
|
|
dest: /etc/caddy/sites/e-ticket.conf
|
|
|
|
|
owner: root
|
|
|
|
|
group: root
|
|
|
|
|
mode: "0644"
|
|
|
|
|
notify: Reload Caddy
|
|
|
|
|
|
2026-03-22 19:52:52 +01:00
|
|
|
- name: Create backup directory
|
|
|
|
|
file:
|
|
|
|
|
path: /var/backups/e-ticket
|
|
|
|
|
state: directory
|
|
|
|
|
owner: bot
|
|
|
|
|
group: bot
|
|
|
|
|
mode: "0750"
|
|
|
|
|
|
|
|
|
|
- name: Deploy backup script
|
|
|
|
|
template:
|
|
|
|
|
src: backup.sh.j2
|
|
|
|
|
dest: /var/backups/e-ticket/backup.sh
|
|
|
|
|
owner: bot
|
|
|
|
|
group: bot
|
|
|
|
|
mode: "0750"
|
|
|
|
|
|
|
|
|
|
- name: Configure backup cron (every 30 minutes)
|
|
|
|
|
cron:
|
|
|
|
|
name: "e-ticket database backup"
|
|
|
|
|
minute: "*/30"
|
|
|
|
|
job: "/var/backups/e-ticket/backup.sh >> /var/log/e-ticket-backup.log 2>&1"
|
|
|
|
|
user: bot
|
|
|
|
|
|
Add stock management, order notifications, webhooks, expiration cron, and billet type validation
- Decrement billet quantity after purchase in BilletOrderService::generateOrderTickets
- Block purchase when stock is exhausted (quantity <= 0) in OrderController::buildOrderItems
- Add organizer email notification on new order (order_notification_orga template)
- Add organizer email notification on cancel/refund (order_cancelled_orga template)
- Add ExpirePendingOrdersCommand (app:orders:expire-pending) cron every 5min via Ansible
- Cancels pending orders older than 30 minutes, restores stock, invalidates tickets
- Includes BilletBuyerRepository::findExpiredPending query method
- 3 unit tests covering: no expired orders, stock restoration, unlimited billets
- Add payment_intent.payment_failed webhook: cancels order, logs audit, emails buyer
- Add charge.refunded webhook: sets order to refunded, invalidates tickets, notifies orga and buyer
- Validate billet type (billet/reservation_brocante/vote) against organizer offer
- getAllowedBilletTypes: gratuit=billet only, basic/sur-mesure=all types
- Server-side validation in hydrateBilletFromRequest, UI filtering in templates
- Update TASK_CHECKUP.md: all Billetterie & Commandes items now complete
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 00:12:30 +01:00
|
|
|
- name: Configure expire pending orders cron (every 5 minutes)
|
|
|
|
|
cron:
|
|
|
|
|
name: "e-ticket expire pending orders"
|
|
|
|
|
minute: "*/5"
|
|
|
|
|
job: "docker compose -f /var/www/e-ticket/docker-compose-prod.yml exec -T php php bin/console app:orders:expire-pending --env=prod >> /var/log/e-ticket-expire-orders.log 2>&1"
|
|
|
|
|
user: bot
|
|
|
|
|
|
2026-03-22 19:55:35 +01:00
|
|
|
- name: Configure messenger monitor cron (every hour)
|
|
|
|
|
cron:
|
|
|
|
|
name: "e-ticket messenger monitor"
|
|
|
|
|
minute: "0"
|
|
|
|
|
job: "docker compose -f /var/www/e-ticket/docker-compose-prod.yml exec -T php php bin/console app:monitor:messenger --env=prod >> /var/log/e-ticket-messenger.log 2>&1"
|
|
|
|
|
user: bot
|
|
|
|
|
|
Complete TASK_CHECKUP: security, UX, tests, coverage, accessibility, config externalization
Billetterie:
- Partial refund support (STATUS_PARTIALLY_REFUNDED, refundedAmount field, migration)
- Race condition fix: PESSIMISTIC_WRITE lock on stock decrement in transaction
- Idempotency key on PaymentIntent::create, reuse existing PI if stripeSessionId set
- Disable checkout when event ended (server 400 + template hide)
- Webhook deduplication via cache (24h TTL on stripe event.id)
- Email validation (filter_var) in OrderController guest flow
- JSON cart validation (structure check before processing)
- Invitation expiration after 7 days (isExpired method + landing page message)
- Stripe Checkout fallback when JS fails to load (noscript + redirect)
Config externalization:
- Move Stripe fees (STRIPE_FEE_RATE, STRIPE_FEE_FIXED) and admin email (ADMIN_EMAIL) to .env/services.yaml
- Replace all hardcoded contact@e-cosplay.fr across 13 files
- MailerService: getAdminEmail()/getAdminFrom(), default $from=null resolves to admin
UX & Accessibility:
- ARIA tabs: role=tablist/tab/tabpanel, aria-selected, keyboard nav (arrows, Home, End)
- aria-label on cart +/- buttons and editor toolbar buttons
- tabindex=0 on editor toolbar buttons for keyboard access
- data-confirm handler in app.js (was only in admin.js)
- Cart error feedback on checkout failure
- Billet designer save feedback (loading/success/error states)
- Stock polling every 30s with rupture/low stock badges
- Back to event link on payment page
Security:
- HTML sanitizer: BLOCKED_TAGS list (script, style, iframe, svg, etc.) - content fully removed
- Stripe polling timeout (15s max) with fallback redirect
- Rate limiting on public order access (20/5min)
- .catch() on all fetch() calls (sortable, billet-designer)
Tests (92% PHP, 100% JS lines):
- PCOV added to dev Dockerfile
- Test DB setup: .env.test with DATABASE_URL, Redis auth, Meilisearch key
- Rate limiter disabled in test env
- Makefile: test_db_setup, test_db_reset, run_test_php, run_test_coverage_php/js
- New tests: InvitationFlowTest (21), AuditServiceTest (4), ExportServiceTest (9), InvoiceServiceTest (4)
- New tests: SuspendedUserSubscriberTest, RateLimiterSubscriberTest, MeilisearchServiceTest
- New tests: Stripe webhook payment_failed (6) + charge.refunded (6)
- New tests: BilletBuyer refund, User suspended, OrganizerInvitation expiration
- JS tests: stock polling (6), data-confirm (2), copy-url restore (1), editor ARIA (2), XSS (9), tabs keyboard (9)
- ESLint + PHP CS Fixer: 0 errors
- SonarQube exclusions aligned with vitest coverage config
Infra:
- Meilisearch consistency command (app:meilisearch:check-consistency --fix) + cron daily 3am
- MeilisearchService: getAllDocumentIds(), listIndexes()
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-23 11:14:06 +01:00
|
|
|
- name: Configure Meilisearch consistency check cron (daily at 3am)
|
|
|
|
|
cron:
|
|
|
|
|
name: "e-ticket meilisearch consistency"
|
|
|
|
|
minute: "0"
|
|
|
|
|
hour: "3"
|
|
|
|
|
job: "docker compose -f /var/www/e-ticket/docker-compose-prod.yml exec -T php php bin/console app:meilisearch:check-consistency --fix --env=prod >> /var/log/e-ticket-meilisearch.log 2>&1"
|
|
|
|
|
user: bot
|
|
|
|
|
|
2026-03-26 09:58:14 +01:00
|
|
|
- name: Configure Stripe sync cron (every 6 hours)
|
|
|
|
|
cron:
|
|
|
|
|
name: "e-ticket stripe sync"
|
|
|
|
|
minute: "0"
|
|
|
|
|
hour: "*/6"
|
|
|
|
|
job: "docker compose -f /var/www/e-ticket/docker-compose-prod.yml exec -T php php bin/console app:stripe:sync --env=prod >> /var/log/e-ticket-stripe-sync.log 2>&1"
|
|
|
|
|
user: bot
|
|
|
|
|
|
2026-03-26 11:19:26 +01:00
|
|
|
- name: Configure infra snapshot cron (every 5 minutes)
|
|
|
|
|
cron:
|
|
|
|
|
name: "e-ticket infra snapshot"
|
|
|
|
|
minute: "*/5"
|
|
|
|
|
job: "docker compose -f /var/www/e-ticket/docker-compose-prod.yml exec -T php php bin/console app:infra:snapshot --env=prod >> /var/log/e-ticket-infra.log 2>&1"
|
|
|
|
|
user: bot
|
|
|
|
|
|
2026-03-18 21:24:31 +01:00
|
|
|
post_tasks:
|
|
|
|
|
- name: Disable maintenance mode
|
|
|
|
|
command: make maintenance_off
|
|
|
|
|
args:
|
|
|
|
|
chdir: /var/www/e-ticket
|
|
|
|
|
|
|
|
|
|
handlers:
|
|
|
|
|
- name: Reload Caddy
|
|
|
|
|
systemd:
|
|
|
|
|
name: caddy
|
|
|
|
|
state: reloaded
|
|
|
|
|
|