diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 7b60560..d710e64 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -5,8 +5,9 @@
-
+
+
@@ -262,7 +263,7 @@
-
+
@@ -416,7 +417,15 @@
1769022071620
-
+
+
+ 1769024603812
+
+
+
+ 1769024603812
+
+
diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md
index 98357f4..169183f 100644
--- a/DEPLOYMENT.md
+++ b/DEPLOYMENT.md
@@ -1,4 +1,4 @@
-# Déploiement Ferme (recette)
+# Déploiement Ferme (release Gitea)
## 1) Premier déploiement
@@ -17,19 +17,7 @@
php8.4-mbstring php8.4-xml php8.4-curl php8.4-intl \
php8.4-zip php8.4-gd php8.4-pgsql php8.4-opcache
```
-3. Installer Composer
- ```bash
- php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
- sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
- rm composer-setup.php
- ```
-4. Installer Node via NVM
- ```bash
- curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
- source ~/.bashrc
- nvm install --lts
- ```
-5. Installer PostgreSQL (si la DB est locale)
+3. Installer PostgreSQL (si la DB est locale)
```bash
sudo apt install -y postgresql postgresql-contrib
sudo -u postgres psql
@@ -41,15 +29,14 @@
\q
```
-### Déploiement applicatif
-1. Cloner le repo
+### Dossier de déploiement
+1. Créer le dossier de déploiement
```bash
- sudo mkdir -p /var/www
- sudo git clone /var/www/ferme
+ sudo mkdir -p /var/www/ferme
sudo chown -R malio:malio /var/www/ferme
```
-2. Variables d’environnement
- - Backend : `/var/www/ferme/.env.local`
+2. Créer le fichier d’environnement
+ - Backend : `/var/www/ferme/.env`
- `APP_ENV=prod`
- `APP_DEBUG=0`
- `APP_SECRET=...`
@@ -59,45 +46,34 @@
- `JWT_PASSPHRASE=...`
- `COOKIE_SECURE=1`
- `PONT_BASCULE_BYPASS=false`
- - Frontend : `/var/www/ferme/frontend/.env`
- - `NUXT_PUBLIC_APP_BASE=/`
- - `NUXT_PUBLIC_API_BASE=/api`
3. Générer les clés JWT
```bash
cd /var/www/ferme
mkdir -p config/jwt
php bin/console lexik:jwt:generate-keypair
```
-4. Config Nginx (sous-domaine)
+4. Config Nginx (sous-domaine)
+ Copier le fichier de conf /deploy/nginx/ferme.conf dans /etc/nginx/sites-available/ferme.conf
```bash
- sudo cp /var/www/ferme/deploy/nginx/ferme.conf /etc/nginx/sites-available/ferme.conf
sudo ln -s /etc/nginx/sites-available/ferme.conf /etc/nginx/sites-enabled/ferme.conf
sudo nginx -t && sudo systemctl reload nginx
```
-6. Déployer l’app
+5. Installer le script de déploiement (disponible /scripts/deploy-release.sh)
```bash
- cd /var/www/ferme
- ./scripts/deploy-native.sh
+ sudo nano /usr/local/bin/deploy-ferme
+ sudo chmod +x /usr/local/bin/deploy-ferme
```
-7. Vérifications
- - Front : `http://ferme.malio-dev.fr/`
- - API : `http://ferme.malio-dev.fr/api/users`
- - Login : `POST http://ferme.malio-dev.fr/api/login_check`
-## 2) Déployer une nouvelle version (app déjà en place)
+## 2) Déployer une release
-1. Mettre à jour le code + build + migrations
+1. Créer un tag sur `develop` (auto-tag `v0.0.X`)
+2. Attendre que la release Gitea soit publiée
+3. Déployer la release
```bash
- cd /var/www/ferme
- ./scripts/deploy-native.sh
- ```
-2. Si changement de conf Nginx
- ```bash
- sudo cp /var/www/ferme/deploy/nginx/ferme.conf /etc/nginx/sites-available/ferme.conf
- sudo nginx -t && sudo systemctl reload nginx
- ```
-3. Si besoin, purger le cache Symfony
- ```bash
- php /var/www/ferme/bin/console cache:clear --env=prod
- php /var/www/ferme/bin/console cache:warmup --env=prod
+ sudo DEPLOY_OWNER=malio /usr/local/bin/deploy-ferme v0.0.X
```
+
+### Vérifications
+- Front : `http://ferme.malio-dev.fr/`
+- API : `http://ferme.malio-dev.fr/api/users`
+- Login : `POST http://ferme.malio-dev.fr/api/login_check`
diff --git a/README.md b/README.md
index 670678a..0ab3b4b 100644
--- a/README.md
+++ b/README.md
@@ -71,6 +71,20 @@ Le frontend ne lit jamais directement le token, le navigateur envoie automatique
- Le cookie est automatiquement envoyé pour les futures requêtes.
- La déconnexion utilise `POST /api/logout` et redirige vers `/login`.
+
+## Livraison en recette
+### Préparatifs
+Avant de déployer, il faut penser à ajouter les variables d'env s'il y a des changements/modifications.
+Le .env se trouve /var/www/ferme/.env
+
+Le script de livraison est version dans le repo dans script/deploy-release.sh
+Sur la machine, il est disponible dans /usr/local/bin/deploy-ferme
+Pour le modifier, il faut copier le contenu du deploy-release.sh dans le deploy-ferme
+### Livraison
+Sur le serveur de recette, il suffit d'utiliser cette commande pour livrer
+```bash
+sudo DEPLOY_OWNER=malio /usr/local/bin/deploy-ferme vX.X.X
+```
## Commandes utiles
Pour restart le container
```bash
diff --git a/scripts/deploy-release.sh b/scripts/deploy-release.sh
new file mode 100644
index 0000000..e5fba38
--- /dev/null
+++ b/scripts/deploy-release.sh
@@ -0,0 +1,85 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+# Usage: ./scripts/deploy-release.sh v0.0.1
+# Requires: curl, tar, (optional) rsync
+#
+# Auth token: set RELEASE_TOKEN env var or create /etc/ferme-release-token
+
+TAG="${1:-}"
+if [ -z "$TAG" ]; then
+ echo "Usage: $0 v0.0.1" >&2
+ exit 1
+fi
+
+REPO_OWNER="MALIO-DEV"
+REPO_NAME="Ferme"
+GITEA_API="https://gitea.malio.fr/api/v1"
+DEPLOY_DIR="/var/www/ferme"
+
+if [ -f /etc/ferme-release-token ] && [ -z "${RELEASE_TOKEN:-}" ]; then
+ RELEASE_TOKEN="$(cat /etc/ferme-release-token)"
+fi
+
+tmp_dir="$(mktemp -d)"
+cleanup() {
+ rm -rf "$tmp_dir"
+}
+trap cleanup EXIT
+
+release_json="$tmp_dir/release.json"
+curl_opts=(-sS)
+if [ -n "${RELEASE_TOKEN:-}" ]; then
+ curl_opts+=(-H "Authorization: token ${RELEASE_TOKEN}")
+fi
+curl "${curl_opts[@]}" \
+ "${GITEA_API}/repos/${REPO_OWNER}/${REPO_NAME}/releases/tags/${TAG}" \
+ -o "$release_json"
+
+asset_url="$(python3 - "$release_json" <<'PY'
+import json, sys
+data = json.load(open(sys.argv[1], 'r'))
+assets = data.get("assets", [])
+for a in assets:
+ name = a.get("name", "")
+ if name.startswith("ferme-") and name.endswith(".tar.gz"):
+ print(a.get("browser_download_url", ""))
+ break
+PY
+)"
+
+if [ -z "$asset_url" ]; then
+ echo "Release asset not found for tag ${TAG}" >&2
+ exit 1
+fi
+
+archive="$tmp_dir/artefact.tar.gz"
+curl "${curl_opts[@]}" -L "$asset_url" -o "$archive"
+
+tar -xzf "$archive" -C "$tmp_dir"
+
+if command -v rsync >/dev/null 2>&1; then
+ rsync -a --delete \
+ --exclude ".env" \
+ --exclude ".env.local" \
+ --exclude "config/jwt" \
+ --exclude "var" \
+ "$tmp_dir"/ "$DEPLOY_DIR"/
+else
+ cp -a "$tmp_dir"/. "$DEPLOY_DIR"/
+fi
+
+echo "Release ${TAG} deployed to ${DEPLOY_DIR}"
+
+if [ -n "${DEPLOY_OWNER:-}" ]; then
+ DEPLOY_GROUP="${DEPLOY_GROUP:-www-data}"
+ chown -R "${DEPLOY_OWNER}:${DEPLOY_GROUP}" "$DEPLOY_DIR"
+ chmod -R g+rx,o+rx "$DEPLOY_DIR"
+fi
+
+if [ -f "${DEPLOY_DIR}/.env.local" ]; then
+ echo "Running migrations (if any)..."
+ php "${DEPLOY_DIR}/bin/console" doctrine:migrations:migrate --no-interaction --env=prod
+else
+ echo "Skip migrations: ${DEPLOY_DIR}/.env.local not found" >&2
+fi