Update deployment pipeline, Makefile and README

- Makefile: add install_dev, install_prod, migrations, clear_prod, maintenance commands
- Playbook: full deploy flow (maintenance, stop, install, start, migrate, clear, caddy, messenger)
- Supervisor config for 2 messenger instances
- Workflow: SSH key setup with server IP
- hosts.ini: use IP instead of domain, sudo without password
- README: full documentation

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Serreau Jovann
2026-03-18 20:52:01 +01:00
parent f822a9a069
commit 507500e20d
6 changed files with 188 additions and 17 deletions

View File

@@ -13,5 +13,12 @@ jobs:
- name: Install Ansible
run: apt-get update && apt-get install -y ansible
- name: Deploy Caddy config
- name: Setup SSH key
run: |
mkdir -p ~/.ssh
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
ssh-keyscan 34.90.187.4 >> ~/.ssh/known_hosts
- name: Deploy
run: ansible-playbook -i ansible/hosts.ini ansible/deploy-caddy.yml --vault-password-file <(echo "${{ secrets.ANSIBLE_VAULT_PASSWORD }}")

View File

@@ -32,7 +32,7 @@ install_dev: ## Install les dependances dev via Docker
docker compose -f docker-compose-dev.yml exec bun bun install
install_prod: ## Install les dependances et build les assets pour la prod
composer install --no-dev --optimize-autoloader
docker compose -f docker-compose-prod.yml exec php composer install --no-dev --optimize-autoloader
bun install
bun run build
@@ -45,3 +45,15 @@ migrate_dev: ## Execute les migrations via Docker dev
migrate_prod: ## Execute les migrations en prod via Docker
docker compose -f docker-compose-prod.yml exec php php bin/console doctrine:migrations:migrate --no-interaction --env=prod
## —— Cache ————————————————————————————————————————
clear_prod: ## Clear le cache Symfony et le pool opcache en prod via Docker
docker compose -f docker-compose-prod.yml exec php php bin/console cache:clear --env=prod
docker compose -f docker-compose-prod.yml exec php php bin/console cache:pool:clear --all --env=prod
## —— Maintenance ——————————————————————————————————
maintenance_on: ## Active le mode maintenance
touch public/.update
maintenance_off: ## Desactive le mode maintenance
rm -f public/.update

119
README.md
View File

@@ -1,31 +1,122 @@
# E-Ticket
Plateforme destinée aux associations pour la vente de tickets événementiels, la réservation de tables, l'organisation de brocantes et le vote en ligne.
Plateforme destinee aux associations pour la vente de tickets evenementiels, la reservation de tables, l'organisation de brocantes et le vote en ligne.
## Stack technique
- Symfony 8
- PHP 8.4
- PostgreSQL
| Composant | Technologie |
|-----------|-------------|
| Backend | Symfony 8 / PHP 8.4 |
| Base de donnees | PostgreSQL 16 |
| Cache / Queue | Redis 7 |
| Async | Symfony Messenger |
| Frontend | Bun / Vite / Tailwind CSS |
| Serveur web | Caddy |
| Email | Amazon SES |
| DNS / CDN | Cloudflare |
| Deploiement | Ansible / Gitea Actions |
## Architecture
### Developpement
| Service | Port |
|---------|------|
| Caddy (web) | `localhost:8000` |
| Vite (HMR) | `localhost:5173` |
| PostgreSQL | `localhost:5432` |
| Redis | `localhost:6379` |
| Mailpit (SMTP) | `localhost:1025` |
| Mailpit (UI) | `localhost:8025` |
| RedisInsight | `localhost:5540` |
### Production
- 2x PHP-FPM (load balancing via Caddy)
- PostgreSQL master / slave (replication)
- PgBouncer (connection pooling)
- 2x Messenger workers
- Redis
- Messenger
- Amazon SES
- Cloudflare
- Caddy installe sur la machine hote
## Prérequis
## Prerequis
- PHP 8.4+
- Composer
- Symfony CLI
- Docker & Docker Compose
- Make
## Installation
```bash
composer install
# Build les images
make build_dev
# Lance les containers
make start_dev
# Install les dependances
make install_dev
```
## Lancement
## Commandes disponibles
```bash
symfony server:start
make help
```
| Commande | Description |
|----------|-------------|
| `make build_dev` | Build les images Docker dev |
| `make build_prod` | Build les images Docker prod |
| `make start_dev` | Lance les containers dev |
| `make start_prod` | Lance les containers prod (background) |
| `make stop_dev` | Arrete les containers dev |
| `make stop_prod` | Arrete les containers prod |
| `make purge_dev` | Arrete et purge tout (volumes, images) |
| `make install_dev` | Install les dependances via Docker |
| `make install_prod` | Install les dependances et build les assets |
| `make migration_dev` | Genere une migration |
| `make migrate_dev` | Execute les migrations en dev |
| `make migrate_prod` | Execute les migrations en prod |
## Base de donnees
### Dev
| Param | Valeur |
|-------|--------|
| Host | `localhost` |
| Port | `5432` |
| Database | `e-ticket` |
| User | `app` |
| Password | `secret` |
### Prod
PostgreSQL master/slave avec PgBouncer. Replication streaming asynchrone.
## Deploiement
Le deploiement se fait via Gitea Actions (declenchement manuel) + Ansible.
```bash
# Deployer la config Caddy
ansible-playbook -i ansible/hosts.ini ansible/deploy-caddy.yml --ask-vault-pass
```
### Mode maintenance
Pour activer la maintenance :
```bash
touch /var/www/e-ticket/public/.update
```
Pour desactiver :
```bash
rm /var/www/e-ticket/public/.update
```
## Licence
Licence proprietaire. Voir [LICENSE.md](LICENSE.md).

View File

@@ -5,6 +5,12 @@
vars_files:
- vault.yml
pre_tasks:
- name: Enable maintenance mode
command: make maintenance_on
args:
chdir: /var/www/e-ticket
tasks:
- name: Ensure Caddy sites directory exists
file:
@@ -14,6 +20,31 @@
group: root
mode: "0755"
- name: Stop production containers
command: make stop_prod
args:
chdir: /var/www/e-ticket
- name: Install dependencies and build assets
command: make install_prod
args:
chdir: /var/www/e-ticket
- name: Start production containers
command: make start_prod
args:
chdir: /var/www/e-ticket
- name: Run migrations
command: make migrate_prod
args:
chdir: /var/www/e-ticket
- name: Clear cache
command: make clear_prod
args:
chdir: /var/www/e-ticket
- name: Deploy Caddy config
template:
src: caddy.j2
@@ -23,8 +54,26 @@
mode: "0644"
notify: Reload Caddy
- name: Deploy Messenger supervisor config
template:
src: messenger.j2
dest: /etc/supervisor/conf.d/e-ticket.conf
owner: root
group: root
mode: "0644"
notify: Reload Supervisor
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
- name: Reload Supervisor
command: supervisorctl reread && supervisorctl update

View File

@@ -1,5 +1,5 @@
[production]
ticket.e-cosplay.fr ansible_user=bot
34.90.187.4 ansible_user=bot ansible_become=yes ansible_become_method=sudo
[production:vars]
deploy_path=/var/www/e-ticket/

12
ansible/messenger.j2 Normal file
View File

@@ -0,0 +1,12 @@
[program:e-ticket-messenger]
command=docker compose -f /var/www/e-ticket/docker-compose-prod.yml exec php php bin/console messenger:consume async --time-limit=3600 --memory-limit=256M --limit=500
directory=/var/www/e-ticket
user=bot
numprocs=2
process_name=%(program_name)s_%(process_num)02d
autostart=true
autorestart=true
startsecs=0
startretries=10
stdout_logfile=/var/log/supervisor/e-ticket-messenger-%(process_num)02d.log
stderr_logfile=/var/log/supervisor/e-ticket-messenger-%(process_num)02d-error.log