ci : ajout du script et de la doc déploiement
This commit is contained in:
Generated
+12
-3
@@ -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">
|
||||
|
||||
+22
-46
@@ -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 <repo> /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)<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 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`
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user