PostgreSQL dans une jail FreeBSD


On avance ces pions pour le futur

Plusieurs services que je veux mettre en place ou que j’ai déjà mis en place (peertube, mastodon) utilisent PostgreSQL. Chacun d’entre eux tourne, ou va tourner, dans une Jail FreeBSD. Est-il possible de faire une jail commune pour tous ces services ? C’est ce que nous allons essayer de faire avec PostgreSQL.

Les pré-requis

Bien sûr, vous savez ce qu’est une jail FreeBSD et vous êtes capable d’en mettre une en place, mininale, avec accés au réseau. Si ce n’est pas le cas, je vous invite à lire, sur ce même blog, les articles qui traitent de la mise en place de jails  jail

Installation de PostgreSQL

Et si je vous disais qu’il n’y a rien de plus simple ?

Nous allons tout simple installer les paquets qui nous intéressent avec la commande pkg.

 si vous avez une poudriere, pensez à l’utiliser en ajoutant le fichier /usr/local/etc/pkg/repos/poudriere.conf avec l’accès a votre dépôt local.

1
# pkg install postgresql95_server postgresql95_client

Paramètrage de FreeBSD

Afin de fonctionner pour les autres jails, qui seront clientes de celle de PostgreSQL nous devons ajouter changer un paramètre du kernel :

1
# security.jail.sysvipc_allowed=1

Pour rendre ce paramètre persistant au redémarrage, il faut le mettre dans le fichier /etc/sysctl.conf.

1
security.jail.sysvipc_allowed=1

Lancement de PostgreSQL au démarrage de la jail

Ajoutons une ligne au fichier /etc/rc.conf pour que PostgreSQL soit démarré au lancement de la jail :

1
# sysrc postgresql="YES"

Initialisation de la base de données

PostgreSQL utilise… PostgreSQL en interne pour gérer ces propres tables. Il est donc nécessaire d’initialiser celles-ci.

1
# service postgresql initdb 

Démarrage de PostgreSQL

Enfin, nous pouvons démarrer PostgreSQL :

1
# service postgresql start

Vérification

Il est grand temps de vérifier que cela fonctionne1

1
2
3
4
5
# sudo -u postgres psql
psql (9.6.8)
Type "help" for help.

postgres=# 

L’avantage de cette commande, c’est qu’elle vous place directement, avec l’utilisateur postgres dans l’interface de PostgreSQL.

Voyons la liste des bases de données (celles qui ont été créées à l’initialisation) :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
postgres-# \l
                             List of databases
   Name    |  Owner   | Encoding | Collate | Ctype |   Access privileges   
-----------+----------+----------+---------+-------+-----------------------
 postgres  | postgres | UTF8     | C       | C     | 
 template0 | postgres | UTF8     | C       | C     | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres
 template1 | postgres | UTF8     | C       | C     | =c/postgres          +
           |          |          |         |       | postgres=CTc/postgres
 test_db   | postgres | UTF8     | C       | C     | 
(4 rows)

Tant que nous sommes dans l’interface de postgreSQL, nous allons changer le mot de passe2 de super utilisateur qu’est postgres :

1
2
3
postgres=# \password postgres
Enter new password: 
Enter it again:

Tout va bien, notre PostgreSQL semble tourner et avoir ces tables de base. Nous pouvons quitter et être satisfaits du travail accompli.

1
postgres-# \q

Permettre les connexions réseaux

Nous allons utiliser notre installation PostgreSQL depuis d’autres jails, en passant par le réseau. Par défaut seules les connexions locales sont autorisées. Nous allons modifier le fichier /var/db/postgres/data96/postgres.conf et en particulier la ligne #listen_addresses = 'localhost'. Nous allons suivre les directives des différents tutoriaux en mettant la ligne :

1
listen_addresses = '*'
Nous allons aussi et plus finement autoriser les machines les unes après les autres en modifiant le fichier /var/db/postgres/data96/pg-hba.conf. Pour chacune des applications qui devra se connecter à la base, nous allons ajouter une ligne du type host database user address method. Cela peut donner pour mastodon :3

1
host	mastodon	mastodon	192.168.12.4	password

Sauvons nos fichiers et relançons postgresql :

1
# service postgresql restart

Conclusion

Nous avons maintenant une jail qui fait tourner PostgreSQL, tout seul. Nous vérifirons à l’installation d’une application cliente que la connexion réseau fonctionne.


  1. je ne suis pas un pro de postgreSQL, les rares commandes que je peux vous donner sont les plus simples. ↩︎

  2. pensez à noter ce mot de passe dans votre gestionnaire de mot de passe. ↩︎

  3. il faudra penser à ajouter une ligne de ce type pour chacune des jails cliente de PostgreSQL. ↩︎

powered by FreeBSD