### Construire l'image

```shell
docker build -t iut/pgsql:2025-12 -f postgresql.Dockerfile .
```

```shell
docker network create pg_net
```

```shell
docker run --detach --name pgsql --restart=always \
  --network pg_net -p "5432:5432" \
  -e "POSTGRES_INITDB_ARGS=--locale-provider=icu --icu-locale=fr-FR" \
  -e "POSTGRES_PASSWORD=ChangeMe" \
  -e "POSTGRES_USER=iut" \
  -v pgsql_data:/var/lib/postgresql:rw \
  -v caddy_data:/data \
  iut/pgsql:2025-12
```

## Données

### Conventions de nommage

Le nom des tables est au singulier et en minuscule

### Schéma

table    |colonnes
---      |---
adherent | id, nom, prenom, genre, naissance, codepostal
famille  | code, famille, code_parent, arborescence (ltree), gauche, droite
article  | code, article, famille_code, factpoids, prix
ticket   | id, date_ticket, adherent_id, mode_rglt
ligne    | id, ticket_id, article_code, prix_unitaire, quantite

### Export

```shell
psql -h 127.0.0.1 -d sql -U sql -c "\copy (select * from ligne order by id) to './ligne.csv' with csv header"
psql -h 127.0.0.1 -d sql -U sql -c "\copy (select id, source, target, cost, reverse_cost, ST_AsText(geom) from route order by id) to './route.csv' with csv header"

```

### Jeux de données

- https://www.kaggle.com/datasets/alexandrelemercier/food-detailed-nutritional-content


## Proxy inverse

Un proxy inverse (ou reverse proxy) est un service intermédiaire placé entre les utilisateurs et les applications web internes. Il reçoit les requêtes HTTP/HTTPS et les redirige automatiquement vers le bon service backend, souvent sur un autre port ou un autre conteneur.

Il permet notamment :

- d’avoir un seul point d’entrée pour plusieurs services ;
- de simplifier les URLs (par exemple pgadmin.localhost au lieu de localhost:5050) ;
- de gérer les certificats TLS/HTTPS automatiquement ;
- d’assurer la découverte automatique et le load balancing entre conteneurs.

Les solutions pour réaliser un reverse proxy sont généralement [Traefik](https://traefik.io/traefik), [Nginx Proxy Manager](https://nginxproxymanager.com/) et [Caddy](https://caddyserver.com/).

**Caddy** se démarque par sa grande simplicité : il se configure presque entièrement à partir de labels Docker et gère automatiquement la création de certificat HTTPS, ce qui le rend idéal pour les environnements de développement ou les projets personnels.

**Traefik**, de son côté, est plus complet et mieux adapté aux environnements de production complexes : il offre une gestion fine du routage, et s’intègre parfaitement avec des orchestrateurs comme Docker Swarm ou Kubernetes.

**Nginx Proxy Manager** propose une approche visuelle grâce à son interface web d’administration. Il est apprécié des utilisateurs qui préfèrent tout configurer par le navigateur, mais il reste moins automatisé que Caddy et moins flexible que Traefik pour les infrastructures dynamiques.

```yaml
  caddy:
    image: lucaslorentz/caddy-docker-proxy:2.10
    restart: "no"
    ports:
      - "80:80"
      - "443:443/tcp"
      - "443:443/udp"
      - "2019:2019"
    networks:
      - caddy_net
    environment:
      CADDY_INGRESS_NETWORKS: ${COMPOSE_PROJECT_NAME}_caddy_net
      CADDY_ADMIN: "0.0.0.0:2019"
    volumes:
      - ./data:/usr/share/caddy
      - /var/run/docker.sock:/var/run/docker.sock:ro
    labels:
      caddy_admin: "on"
```

### Administration

pgAdmin est un outil d’administration et de gestion pour PostgreSQL.
C’est l’équivalent d’un « phpMyAdmin » pour MySQL, mais conçu pour PostgreSQL.

### PostGraphile

```shell
docker build -t iut/postgraphile:2025-12 -f postgraphile.Dockerfile .
```


### Podman

```shell
sudo ausearch -c "caddy" --raw | audit2allow -M my-caddy
sudo semodule -i my-caddy.pp
```
