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:
@@ -13,5 +13,12 @@ jobs:
|
|||||||
- name: Install Ansible
|
- name: Install Ansible
|
||||||
run: apt-get update && apt-get install -y 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 }}")
|
run: ansible-playbook -i ansible/hosts.ini ansible/deploy-caddy.yml --vault-password-file <(echo "${{ secrets.ANSIBLE_VAULT_PASSWORD }}")
|
||||||
|
|||||||
14
Makefile
14
Makefile
@@ -32,7 +32,7 @@ install_dev: ## Install les dependances dev via Docker
|
|||||||
docker compose -f docker-compose-dev.yml exec bun bun install
|
docker compose -f docker-compose-dev.yml exec bun bun install
|
||||||
|
|
||||||
install_prod: ## Install les dependances et build les assets pour la prod
|
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 install
|
||||||
bun run build
|
bun run build
|
||||||
|
|
||||||
@@ -45,3 +45,15 @@ migrate_dev: ## Execute les migrations via Docker dev
|
|||||||
|
|
||||||
migrate_prod: ## Execute les migrations en prod via Docker
|
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
|
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
119
README.md
@@ -1,31 +1,122 @@
|
|||||||
# E-Ticket
|
# 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
|
## Stack technique
|
||||||
|
|
||||||
- Symfony 8
|
| Composant | Technologie |
|
||||||
- PHP 8.4
|
|-----------|-------------|
|
||||||
- PostgreSQL
|
| 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
|
- Redis
|
||||||
- Messenger
|
- Caddy installe sur la machine hote
|
||||||
- Amazon SES
|
|
||||||
- Cloudflare
|
|
||||||
|
|
||||||
## Prérequis
|
## Prerequis
|
||||||
|
|
||||||
- PHP 8.4+
|
- Docker & Docker Compose
|
||||||
- Composer
|
- Make
|
||||||
- Symfony CLI
|
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
```bash
|
```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
|
```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).
|
||||||
|
|||||||
@@ -5,6 +5,12 @@
|
|||||||
vars_files:
|
vars_files:
|
||||||
- vault.yml
|
- vault.yml
|
||||||
|
|
||||||
|
pre_tasks:
|
||||||
|
- name: Enable maintenance mode
|
||||||
|
command: make maintenance_on
|
||||||
|
args:
|
||||||
|
chdir: /var/www/e-ticket
|
||||||
|
|
||||||
tasks:
|
tasks:
|
||||||
- name: Ensure Caddy sites directory exists
|
- name: Ensure Caddy sites directory exists
|
||||||
file:
|
file:
|
||||||
@@ -14,6 +20,31 @@
|
|||||||
group: root
|
group: root
|
||||||
mode: "0755"
|
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
|
- name: Deploy Caddy config
|
||||||
template:
|
template:
|
||||||
src: caddy.j2
|
src: caddy.j2
|
||||||
@@ -23,8 +54,26 @@
|
|||||||
mode: "0644"
|
mode: "0644"
|
||||||
notify: Reload Caddy
|
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:
|
handlers:
|
||||||
- name: Reload Caddy
|
- name: Reload Caddy
|
||||||
systemd:
|
systemd:
|
||||||
name: caddy
|
name: caddy
|
||||||
state: reloaded
|
state: reloaded
|
||||||
|
|
||||||
|
- name: Reload Supervisor
|
||||||
|
command: supervisorctl reread && supervisorctl update
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
[production]
|
[production]
|
||||||
ticket.e-cosplay.fr ansible_user=bot
|
34.90.187.4 ansible_user=bot ansible_become=yes ansible_become_method=sudo
|
||||||
|
|
||||||
[production:vars]
|
[production:vars]
|
||||||
deploy_path=/var/www/e-ticket/
|
deploy_path=/var/www/e-ticket/
|
||||||
|
|||||||
12
ansible/messenger.j2
Normal file
12
ansible/messenger.j2
Normal 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
|
||||||
Reference in New Issue
Block a user