# Les projets

> Regrouper les services qui vont ensemble, et leur donner un réseau privé.

Un projet réunit des services et leur donne un **réseau privé** : ils se joignent
entre eux par leur nom, et rien d'autre ne les joint.

Tes services fonctionnent très bien sans. Un projet devient utile quand une
application a besoin d'une base de données, ou quand tu veux voir ce que coûte un
ensemble plutôt qu'une ligne.

## Le canevas

Dans l'espace client, un projet s'ouvre sur un **canevas** : une carte par service,
une flèche quand l'un se sert de l'autre. Les flèches ne sont pas décoratives — elles
suivent les variables d'environnement. Si l'application `boutique` a une variable qui
contient l'alias de la base `pg-boutique`, la flèche apparaît toute seule.

Clic droit sur une carte pour ouvrir la console, les journaux, les réglages, ou
démarrer et arrêter.

## Ajouter un service sans quitter le canevas

Le bouton **Ajouter un service** ouvre une fenêtre en deux temps : d'abord la gamme,
ensuite la configuration. On ne quitte jamais le canevas, et la carte apparaît à la fin.

<AccordionGroup>
  <Accordion title="Serveur de jeu (AGS)" icon="gamepad-2">
    La fenêtre liste les jeux du catalogue, avec leur tarif de départ ; ceux qui ne sont
    pas encore servis restent visibles, grisés. Une fois le jeu choisi, tout se règle au
    même endroit : l'édition, le nom, la taille — un gabarit tout prêt ou les trois
    curseurs —, les réglages du jeu (version, joueurs, liste blanche…) et les options.
  </Accordion>

  <Accordion title="Image Docker (ACS)" icon="container">
    La fenêtre rappelle ce qu'Arkya attend de ton image, demande un nom, un nœud et une
    taille, puis réserve l'emplacement. Elle te rend ensuite les trois commandes qui
    poussent ton image. Voir [Déployer une image Docker](/guides/deployer-une-application).
  </Accordion>

  <Accordion title="Base de données (ACS)" icon="database">
    L'édition — PostgreSQL, MySQL, Redis —, le nom qui servira d'alias interne, et les
    trois curseurs. Rien d'autre à remplir.
  </Accordion>

  <Accordion title="Instance, machine virtuelle, dédié, stockage" icon="clock">
    Pas encore commandables depuis le canevas : ces gammes s'affichent en « bientôt ».
  </Accordion>
</AccordionGroup>

Le tarif se recalcule à chaque réglage, sous la forme d'un prix mensuel et du nombre de
jours que ton solde couvre. Si le solde ne couvre pas la première journée, la fenêtre
propose la recharge sur place : ta configuration est mise de côté pendant le paiement,
et au retour tu reviens sur le canevas avec la fenêtre rouverte, remplie comme tu
l'avais laissée.

Le service commandé rejoint le projet et son réseau privé sans étape supplémentaire.

## Depuis le terminal

```bash
ark project ls
```

```
nom         contenu       identifiant
Production  3 service(s)  prj_0d3b6964bcbe4fd8518f
Bac à sable 1 service(s)  prj_7c21ab4419ee2a71f102
```

```bash
ark project create "Client Dupont"
ark project attach api-boutique Production
ark project show Production
```

`ark project show` détaille ce que chaque service a coûté sur la période :

```
service       produit       détail                 sur 30 j
api-boutique  Application   2 vCPU · 2 Go · 20 Go     6.10 €
pg-boutique   PostgreSQL    1 vCPU · 2 Go · 40 Go     4.20 €
cache         Redis         1 vCPU · 1 Go · 5 Go      1.90 €

total  12.20 €
```

## L'alias interne

Chaque service d'un projet reçoit un **alias** dérivé de son nom : `API boutique`
devient `api-boutique`. À l'intérieur du projet, c'est son adresse.

```bash
ark net pg-boutique
```

```
alias interne  pg-boutique
projet         Production
port interne   5432
sur Internet   fermé
```

Dans les variables de l'application, tu écris l'alias plutôt qu'une adresse IP :

```bash
ark env set api-boutique DATABASE_HOST=pg-boutique DATABASE_PORT=5432
```

Au démarrage, Arkya remplace la référence par l'adresse réelle. Si la base change de
nœud, tu n'as rien à changer.

<Note>
  L'alias ne sort pas du projet. Un service extérieur ne joint pas `pg-boutique`, même
  en connaissant le nom : c'est tout l'intérêt.
</Note>

## Ouvrir ou fermer sur Internet

Un service d'un projet peut rester joignable uniquement de l'intérieur, ou être publié :

```bash
ark net api-boutique --public
ark net pg-boutique --private
```

La règle qui évite les ennuis : **publie ce qui doit répondre à un navigateur, ferme
le reste.** Une base de données n'a presque jamais besoin d'être sur Internet.

## Supprimer un projet

Supprimer un projet ne supprime pas ses services : ils redeviennent autonomes et
restent dans ta liste. Ce que tu perds, c'est le regroupement et le réseau privé.
