2026-05-06 13:13:48 +00:00
|
|
|
# Hoppscotch Self-Hosted
|
2019-11-02 21:59:31 +00:00
|
|
|
|
2026-05-06 13:13:48 +00:00
|
|
|
Fork interne de Hoppscotch pour déploiement self-host.
|
2019-11-02 21:59:31 +00:00
|
|
|
|
2026-05-06 13:13:48 +00:00
|
|
|
## Contenu
|
2019-08-21 13:18:20 +00:00
|
|
|
|
2026-05-06 13:13:48 +00:00
|
|
|
- App web : `packages/hoppscotch-selfhost-web`
|
2026-05-06 07:57:24 +00:00
|
|
|
- Backend NestJS et Prisma : `packages/hoppscotch-backend`
|
2026-05-06 13:13:48 +00:00
|
|
|
- Admin : `packages/hoppscotch-sh-admin`
|
|
|
|
|
- Image Docker multi-target : `prod.Dockerfile`
|
|
|
|
|
- Compose dev live : `docker-compose.yml`
|
|
|
|
|
- Compose prod image-only : `docker-compose.prod.yml`
|
2023-09-05 06:36:47 +00:00
|
|
|
|
2026-05-06 13:13:48 +00:00
|
|
|
## Images Docker
|
2020-09-23 08:04:02 +00:00
|
|
|
|
2026-05-06 13:13:48 +00:00
|
|
|
Les images sont buildées en local puis poussées à la main sur le registry.
|
2020-09-23 08:04:02 +00:00
|
|
|
|
2026-05-06 14:51:07 +00:00
|
|
|
Image utilisée en prod :
|
2019-08-21 13:18:20 +00:00
|
|
|
|
2026-05-06 13:13:48 +00:00
|
|
|
```text
|
2026-05-06 14:51:07 +00:00
|
|
|
forge.lclr.dev/thibaud-lclr/api-client-aio:latest
|
2026-05-06 13:13:48 +00:00
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Targets Docker :
|
2019-08-21 13:18:20 +00:00
|
|
|
|
2026-05-06 13:13:48 +00:00
|
|
|
```text
|
|
|
|
|
backend -> backend + Caddy backend
|
|
|
|
|
app -> app web + webapp-server + Caddy app
|
|
|
|
|
sh_admin -> admin + Caddy admin
|
2026-05-06 14:51:07 +00:00
|
|
|
aio -> app, admin, backend et webapp-server derrière un Caddy unique
|
2026-05-06 13:13:48 +00:00
|
|
|
```
|
2019-08-21 13:18:20 +00:00
|
|
|
|
2026-05-06 13:13:48 +00:00
|
|
|
## Préparer l'environnement
|
2020-12-21 18:26:35 +00:00
|
|
|
|
2026-05-06 13:13:48 +00:00
|
|
|
Créer `.env` si besoin :
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
make ensure-env
|
|
|
|
|
```
|
|
|
|
|
|
2026-05-06 14:51:07 +00:00
|
|
|
Variables importantes pour le compose dev :
|
2020-06-12 07:39:58 +00:00
|
|
|
|
2026-05-06 07:57:24 +00:00
|
|
|
```env
|
|
|
|
|
POSTGRES_PASSWORD=<mot-de-passe-fort>
|
|
|
|
|
POSTGRES_DB=hoppscotch
|
|
|
|
|
DATA_ENCRYPTION_KEY=<chaine-de-32-caracteres>
|
2026-05-06 13:13:48 +00:00
|
|
|
|
2026-05-06 07:57:24 +00:00
|
|
|
VITE_BASE_URL=https://<domaine-app>
|
|
|
|
|
VITE_SHORTCODE_BASE_URL=https://<domaine-app>
|
|
|
|
|
VITE_ADMIN_URL=https://<domaine-admin>
|
|
|
|
|
VITE_BACKEND_GQL_URL=https://<domaine-backend>/graphql
|
|
|
|
|
VITE_BACKEND_WS_URL=wss://<domaine-backend>/graphql
|
|
|
|
|
VITE_BACKEND_API_URL=https://<domaine-backend>/v1
|
2026-05-06 13:13:48 +00:00
|
|
|
|
2026-05-06 07:57:24 +00:00
|
|
|
WHITELISTED_ORIGINS=https://<domaine-app>,https://<domaine-admin>
|
|
|
|
|
TRUST_PROXY=true
|
|
|
|
|
```
|
2019-08-27 07:32:44 +00:00
|
|
|
|
2026-05-06 13:13:48 +00:00
|
|
|
Pour le compose prod local, ces variables pilotent les images :
|
|
|
|
|
|
|
|
|
|
```env
|
|
|
|
|
API_CLIENT_REGISTRY=forge.lclr.dev
|
|
|
|
|
API_CLIENT_NAMESPACE=thibaud-lclr
|
|
|
|
|
API_CLIENT_IMAGE_PREFIX=api-client
|
|
|
|
|
API_CLIENT_TAG=latest
|
|
|
|
|
```
|
|
|
|
|
|
2026-05-06 14:51:07 +00:00
|
|
|
Le compose prod local utilise aussi les valeurs `SERVICE_*` présentes dans
|
|
|
|
|
`.env.example`. En production Coolify, ces valeurs sont générées par Coolify à
|
|
|
|
|
partir de `docker-compose.prod.yml`.
|
|
|
|
|
|
2026-05-06 13:13:48 +00:00
|
|
|
## Build et push registry
|
|
|
|
|
|
|
|
|
|
Se connecter au registry :
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
docker login forge.lclr.dev
|
|
|
|
|
```
|
|
|
|
|
|
2026-05-06 14:51:07 +00:00
|
|
|
Builder l'image prod en `latest` :
|
2026-05-06 13:13:48 +00:00
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
make docker-build-images TAG=latest
|
|
|
|
|
```
|
|
|
|
|
|
2026-05-06 14:51:07 +00:00
|
|
|
Pousser l'image prod :
|
2026-05-06 13:13:48 +00:00
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
make docker-push-images TAG=latest
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Faire les deux en une commande :
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
make docker-build-push-images TAG=latest
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Pour publier un tag de test :
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
make docker-build-push-images TAG=fork-v1.0.0
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## Déploiement prod
|
|
|
|
|
|
|
|
|
|
La prod utilise uniquement `docker-compose.prod.yml`.
|
2020-06-12 07:39:58 +00:00
|
|
|
|
2026-05-06 13:13:48 +00:00
|
|
|
Ce compose ne contient pas de `build:`. Il tire les images du registry.
|
2019-08-27 07:32:44 +00:00
|
|
|
|
2026-05-06 14:30:10 +00:00
|
|
|
Sur Coolify, `docker-compose.prod.yml` est la source de vérité des variables
|
2026-05-06 14:51:07 +00:00
|
|
|
d'environnement. Les variables sont déclarées dans les blocs `environment:` pour
|
|
|
|
|
que Coolify les crée dans son UI au chargement du compose. Il ne faut pas
|
|
|
|
|
compter sur un fichier `.env` du dépôt en prod : il est ignoré par Git.
|
|
|
|
|
|
|
|
|
|
Le compose prod utilise l'image AIO et un seul domaine Coolify :
|
|
|
|
|
|
|
|
|
|
- `/` : app web
|
|
|
|
|
- `/admin` : admin
|
|
|
|
|
- `/backend` : backend GraphQL/API
|
2026-05-06 14:30:10 +00:00
|
|
|
|
|
|
|
|
Variables générées/préremplies pour Coolify :
|
|
|
|
|
|
2026-05-06 15:16:36 +00:00
|
|
|
- `COOLIFY_URL` : URL publique du service, issue du domaine renseigné dans Coolify
|
|
|
|
|
- `COOLIFY_FQDN` : domaine public sans schéma, issu du domaine renseigné dans Coolify
|
2026-05-06 14:51:07 +00:00
|
|
|
- `SERVICE_PASSWORD_POSTGRES` : mot de passe PostgreSQL généré
|
2026-05-06 15:16:36 +00:00
|
|
|
- `SERVICE_BASE64_HOPPSCOTCH` : clé stable générée de 32 caractères pour `DATA_ENCRYPTION_KEY`
|
2026-05-06 14:30:10 +00:00
|
|
|
|
2026-05-06 15:16:36 +00:00
|
|
|
Ne pas modifier les variables `SERVICE_FQDN_*` / `SERVICE_URL_*` dans Coolify :
|
|
|
|
|
elles sont générées et peuvent être écrasées. Renseigner uniquement le domaine
|
|
|
|
|
du service `hoppscotch` dans Coolify. Les URLs app/admin/backend sont ensuite
|
|
|
|
|
dérivées par sous-chemins via `COOLIFY_URL` et `COOLIFY_FQDN`.
|
2026-05-06 14:30:10 +00:00
|
|
|
|
2026-05-06 13:13:48 +00:00
|
|
|
Démarrer avec le tag `latest` :
|
2019-08-27 07:32:44 +00:00
|
|
|
|
2026-05-06 07:57:24 +00:00
|
|
|
```sh
|
2026-05-06 13:13:48 +00:00
|
|
|
make prod-up
|
2026-05-06 07:57:24 +00:00
|
|
|
```
|
2020-12-21 18:26:35 +00:00
|
|
|
|
2026-05-06 13:13:48 +00:00
|
|
|
Démarrer avec un autre tag :
|
2019-09-04 02:05:47 +00:00
|
|
|
|
2026-05-06 07:57:24 +00:00
|
|
|
```sh
|
2026-05-06 13:13:48 +00:00
|
|
|
make prod-up TAG=fork-v1.0.0
|
2026-05-06 07:57:24 +00:00
|
|
|
```
|
2019-08-27 07:32:44 +00:00
|
|
|
|
2026-05-06 07:57:24 +00:00
|
|
|
Voir les logs :
|
2020-12-21 18:26:35 +00:00
|
|
|
|
2026-05-06 07:57:24 +00:00
|
|
|
```sh
|
2026-05-06 13:13:48 +00:00
|
|
|
make prod-logs
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Voir l'état des services :
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
make prod-ps
|
2026-05-06 07:57:24 +00:00
|
|
|
```
|
2019-11-20 14:59:23 +00:00
|
|
|
|
2026-05-06 07:57:24 +00:00
|
|
|
Arrêter :
|
2019-11-24 23:43:35 +00:00
|
|
|
|
2026-05-06 07:57:24 +00:00
|
|
|
```sh
|
2026-05-06 13:13:48 +00:00
|
|
|
make prod-down
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Services prod :
|
|
|
|
|
|
|
|
|
|
- `hoppscotch-db` : PostgreSQL 15 avec volume persistant
|
2026-05-06 14:51:07 +00:00
|
|
|
- `hoppscotch` : app web, admin, backend, serveur de bundles et migrations Prisma au démarrage
|
2026-05-06 13:13:48 +00:00
|
|
|
|
2026-05-06 14:51:07 +00:00
|
|
|
Routage prod :
|
2026-05-06 13:13:48 +00:00
|
|
|
|
2026-05-06 14:51:07 +00:00
|
|
|
- `/` : app web
|
|
|
|
|
- `/admin` : admin
|
|
|
|
|
- `/backend` : backend
|
2026-05-06 13:13:48 +00:00
|
|
|
|
|
|
|
|
## Développement local
|
|
|
|
|
|
|
|
|
|
Le compose dev est `docker-compose.yml`.
|
|
|
|
|
|
|
|
|
|
Il build une image de base locale et monte le repo en volume.
|
|
|
|
|
|
|
|
|
|
Démarrer :
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
make dev-up
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Alias :
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
make up
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Voir les logs :
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
make dev-logs
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Voir l'état :
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
make dev-ps
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Arrêter :
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
make dev-down
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Services dev :
|
|
|
|
|
|
|
|
|
|
- `hoppscotch-db`
|
|
|
|
|
- `hoppscotch-dev-deps` : installe les dépendances dans un volume Docker
|
|
|
|
|
- `hoppscotch-backend` : `pnpm run start:dev`
|
|
|
|
|
- `hoppscotch-app` : Vite sur `3000`
|
|
|
|
|
- `hoppscotch-sh-admin` : Vite sur `3100`
|
|
|
|
|
|
|
|
|
|
Volumes dev :
|
|
|
|
|
|
|
|
|
|
- le repo est monté dans `/usr/src/app`
|
|
|
|
|
- `node_modules` est dans un volume Docker
|
|
|
|
|
- le store pnpm est dans un volume Docker
|
|
|
|
|
|
|
|
|
|
## Procédure de release courte
|
|
|
|
|
|
|
|
|
|
1. Mettre à jour le code.
|
|
|
|
|
2. Vérifier localement.
|
|
|
|
|
3. Builder et pousser :
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
make docker-build-push-images TAG=latest
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
4. Déployer :
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
make prod-up
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
5. Contrôler :
|
|
|
|
|
|
|
|
|
|
```sh
|
|
|
|
|
make prod-ps
|
|
|
|
|
make prod-logs
|
2026-05-06 07:57:24 +00:00
|
|
|
```
|