Compare commits

...

2 Commits

Author SHA1 Message Date
d3289c8497 fix : correction du path URI pour la création d'un poids dans une réception
All checks were successful
Auto Tag Develop / tag (push) Successful in 5s
Build Release Artefact / build (push) Successful in 1m13s
2026-01-22 10:21:45 +01:00
9f589bc86c ci : ajout du script et de la doc déploiement
All checks were successful
Auto Tag Develop / tag (push) Successful in 5s
Build Release Artefact / build (push) Successful in 1m12s
2026-01-21 21:18:47 +01:00
5 changed files with 134 additions and 50 deletions

15
.idea/workspace.xml generated
View File

@@ -5,8 +5,9 @@
</component>
<component name="ChangeListManager">
<list default="true" id="7c107abe-5995-4428-8429-b146aaca8386" name="Changes" comment="ci : fix release artefact">
<change beforePath="$PROJECT_DIR$/.gitignore" beforeDir="false" afterPath="$PROJECT_DIR$/.gitignore" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/DEPLOYMENT.md" beforeDir="false" afterPath="$PROJECT_DIR$/DEPLOYMENT.md" afterDir="false" />
<change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -262,7 +263,7 @@
<workItem from="1768374298711" duration="12403000" />
<workItem from="1768460547451" duration="26946000" />
<workItem from="1768547023783" duration="11371000" />
<workItem from="1768894030675" duration="33744000" />
<workItem from="1768894030675" duration="36043000" />
</task>
<task id="LOCAL-00001" summary="feat : Ajout de pinia, création de la table weight et reception mise en place du système de step pour les receptions (WIP)">
<option name="closed" value="true" />
@@ -416,7 +417,15 @@
<option name="project" value="LOCAL" />
<updated>1769022071620</updated>
</task>
<option name="localTasksCounter" value="20" />
<task id="LOCAL-00020" summary="ci : fix release artefact">
<option name="closed" value="true" />
<created>1769024603812</created>
<option name="number" value="00020" />
<option name="presentableId" value="LOCAL-00020" />
<option name="project" value="LOCAL" />
<updated>1769024603812</updated>
</task>
<option name="localTasksCounter" value="21" />
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">

View File

@@ -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. Cer le dossier de déploiement
```bash
sudo mkdir -p /var/www
sudo git clone <repo> /var/www/ferme
sudo mkdir -p /var/www/ferme
sudo chown -R malio:malio /var/www/ferme
```
2. Variables denvironnement
- Backend : `/var/www/ferme/.env.local`
2. Créer le fichier denvironnement
- 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)<br>
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 lapp
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`

View File

@@ -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 <br>
Sur la machine, il est disponible dans /usr/local/bin/deploy-ferme <br>
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

View File

@@ -65,7 +65,7 @@ export const useWeighing = ({
})
} else {
await createWeight({
reception: `/receptions/${reception.value.id}`,
reception: `api/receptions/${reception.value.id}`,
type: mode,
dsd: baseDsd,
weight: baseWeight,

85
scripts/deploy-release.sh Normal file
View File

@@ -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