Skip to content
Mettre à jour alessandria docker postgresql authored by henry's avatar henry
# Installation d'Alessandria dans un conteneur Docker avec PostgreSQL #Installation d'alessandria dans un container docker, avec une base de données postgresql située sur le serveur et non dans le container(-v /home/henry/docker/postgres)
\ No newline at end of file
##1. On crée un serveur de bases de données Postgresql
* *Attention la base de données ne peut pas se trouver dans le même répertoire que le dockerfile*
* On utilise une image existante de postgresql
* Lancement sans rendre la main (-d) pour pouvoir créer une base
docker run -e POSTGRES_PASSWORD=postgres -p 5432:5432 -v /home/henry/docker/postgres:/var/lib/postgresql/data -d postgres
**Nota : Pensez à modifier le chemin d’accès à votre base de données (`/home/henry/docker/postgres`) en fonction de votre ordinateur**
##2. On se connecte à ce serveur
Pour cela il faut connaître l’identifiant du container (on tape la commande suivante) :
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
386304828f82 postgres "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 0.0.0.0:5432->5432/tcp stoic_dijkstra
* On Releve le CONTAINER ID : 386304828f82*
* On recherche l’adresse IP de notre serveur :*
docker inspect 386304828f82
* Relever "IPAddress": "172.17.0.2" et lancer psql*
psql -h 172.17.0.2 -U postgres
Password for user postgres:
psql (10.6 (Ubuntu 10.6-0ubuntu0.18.04.1), server 11.1 (Debian 11.1-1.pgdg90+1))
WARNING: psql major version 10, server major version 11.
Some psql features might not work.
Type "help" for help.
postgres=#
##3. On crée un utilisateur pour notre future base et on crée la base de données avec comme propriétaire l’utilisateur créé:
postgres=# CREATE USER toto WITH PASSWORD 'lune';
CREATE ROLE
postgres=# CREATE DATABASE livres WITH OWNER=toto;
CREATE DATABASE
*On quitte psql*
postgres=# \q
##4. On remplit la base livres avec le contenu du fichier livres.sql et l'utilisateur toto créé précédement
*Nota : Si l’utilisateur que vous avez créé n’est pas celui qui est inscrit dans le fichier livres.sql, il faut entrer dans le fichier livres.sql et remplacer l’utilisateur par le votre, à l'aide d'une commande cherche et remplace.*
psql -h172.17.0.2 -U toto -d livres -f ./livres.sql
*A présent la base est prête et on a plus besoin du container qui vient de nous servir :*
docker stop 386304828f82
docker rm 386304828f82
##5. Création d’une image pour notre application alessandria
* On crée un fichier `requirements.txt` dont le contenu est:
Django>=1.8,<2.1
psycopg2-binary
django-ajax-selects<1.8
django-countries<5.2
python-dateutil
isbnlib==3.5.8
Pillow==3.2.0
simplejson==3.8.2
django-extensions
* On crée un fichier `dockerfile` dont le contenu est :
FROM python:3
ENV PYTHONUNBUFFERED 1
RUN apt-get update \
&& apt-get install git
RUN apt-get install nano
RUN git clone https://gitlab.com/mirelsol/alessandria.git
WORKDIR /alessandria
ADD requirements.txt /alessandria/
RUN pip install -r requirements.txt
ADD . /alessandria/
RUN python3 setup.py install
RUN django-admin startproject alex
* Ce fichier va mettre en place l'application alessandria (git clone...),
* mettre en place les prérequis(pip install -r requirements.txt),
* lancer le setup de l'application et créer le projet django alex
* Pour utiliser le dockerfile, il suffit de taper la commande
* (depuis le répertoire où se trouve le fichier `dockerfile`):
`docker build -t alessandria_50 .`
* On a accède à l'image en tapant la commande suivante:
`docker run -i -t alessandria_50:latest /bin/bash`
* La on fait les modifications prévues dans le fichier settings.py du projet alex
* Puis dans le fichier urls.py du projet alex :
* D’abord le ficier alex/alex/settings.py :
`ALLOWED_HOSTS = ['*']`
* A INSTALLED_APPS:
INSTALLED_APPS = (
...
'alessandria',
'alessandria.templatetags.tag_extras',
'ajax_select',
)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql', # on utilise l'adaptateur postgresql
'NAME': 'livres', # le nom de notre base de donnees creee precedemment
'USER': 'toto', # attention : remplacez par votre nom d'utilisateur
'PASSWORD': 'lune', #remplacez par votre mot de passe
'HOST': 'db',
'PORT': '5432',
}
}
LANGUAGE_CODE = 'fr-FR'
TIME_ZONE = 'Europe/Paris'
Voila c'est tout pour ce fichier pour l'instant(fin de la modification du fichier settings.py du projet)
Maintenant on modifie le fichier urls.py de notre projet (alex/alex/urls.py):
Ajouter cet import en début de fichier:
from django.conf.urls import url, include
from ajax_select import urls as ajax_select_urls
A urls_patterns ajouter:
urlpatterns = patterns('',
...
url(r'^admin/', admin.site.urls),
# 'alessandria' (the 2nd parameter of the tuple passed to include) is the app_name
url(r'^', include(('alessandria.urls', 'alessandria'), namespace='home')),
url(r'^alessandria/', include(('alessandria.urls', 'alessandria'), namespace='alessandria')),
url(r'^alessandria/ajax_lookups/', include(ajax_select_urls)),
)
* Fin de la modification d'urls.py
A ce stade il faut dans une autre fenêtre de terminal lancer la commande suivante:
docker ps
* On repère le numéro du container
docker commit <numéro du container> alessandria_50
* A présent on quitte le container en tapant exit dans la première fenêtre de terminal
* voila passons à la dernière phase :
##6. On crée le fichier docker-compose.yml suivant :
* Nota : Pensez à modifier le chemin d’accès à votre base de données (/home/henry/docker/postgres) en fonction de votre ordinateur#
version: '3'
services:
db:
image: postgres
environment:
- POSTGRES_USER=toto
- POSTGRES_PASSWORD=lune
- POSTGRES_DB=livres
volumes:
- '/home/henry/docker/postgres:/var/lib/postgresql/data'
web:
image: alessandria_52
environment:
- POSTGRES_HOST=db
- POSTGRES_PORT_NUMBER=5432
- POSTGRES_DB=livres
- POSTGRES_USER=toto
- POSTGRES_PASSWORD=lune
command: python3 ./alex/manage.py runserver 0.0.0.0:8000
ports:
- "8050:8000"
depends_on:
- db
volumes:
db_data:
driver: local
##7.Maintenant on lance notre application :
docker-compose up -d
##8.Maintenant vous pouvez accéder à l'appliquation depuis votre navigateur en tapant l'adresse suivante :
http://127.0.0.1:8050
* Nota: Dans la base de données, le mot de passe de toto est 'lune de miel'[requirements.txt](uploads/42075fc3e5df6e98963192e7a742059a/requirements.txt)[Dockerfile](uploads/10dc147a2cf18e07ad1db027842c4709/Dockerfile)[docker-compose.yml](uploads/37991651e8fba42ad7187e8a2c5364c6/docker-compose.yml)[livres.sql](uploads/8a79d75f8472e145ef0f6b8b3292a207/livres.sql)
\ No newline at end of file