From bcd17e10383f419e730573cd9f804e60343110a0 Mon Sep 17 00:00:00 2001 From: Matthieu Lamalle Date: Mon, 20 Jan 2020 11:34:16 +0100 Subject: [PATCH] set docker --- README.md | 4 ++-- docker/Dockerfile | 29 +++++++++++++++++++++++++++ docker/README.md | 15 ++++++++++++++ docker/docker-compose.yaml | 22 ++++++++++++++++++++ docker/postgres-init/postgres.init.sh | 9 +++++++++ script/database_manager.py | 11 +++++++++- src/risotto/config.py | 4 +++- src/risotto/register.py | 13 +++++++++++- 8 files changed, 102 insertions(+), 5 deletions(-) create mode 100644 docker/Dockerfile create mode 100644 docker/README.md create mode 100644 docker/docker-compose.yaml create mode 100755 docker/postgres-init/postgres.init.sh diff --git a/README.md b/README.md index f367670..0676113 100644 --- a/README.md +++ b/README.md @@ -20,8 +20,8 @@ docker run -d --add-host reload.example.com:127.0.0.1 -p 80:80 coudot/lemonldap- Démarrer un serveur postgresql de test ``` -podman pull docker.io/library/postgres:11-alpine -podman run -dt -p 5432:5432 postgres:11-alpine +docker run -dt -p 5432:5432 --name postgres postgres:11-alpine +docker exec -ti postgres bash psql -U postgres -h localhost -c "CREATE ROLE risotto WITH LOGIN PASSWORD 'risotto';" psql -U postgres -h localhost -c "CREATE DATABASE risotto;" diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..fab29bb --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,29 @@ +FROM python:3.7 + +# Requirements +ARG TIRAMISU_REPO_URL=https://framagit.org/tiramisu/tiramisu.git +ARG RISOTTO_REPO_URL=https://forge.cadoles.com/Infra/risotto.git +ARG ROUGAIL_REPO_URL=https://forge.cadoles.com/Infra/rougail.git + +RUN apt-get update && apt-get install -y \ + vim \ + curl \ + git \ + jq \ + && apt-get clean + +RUN git clone --branch develop ${TIRAMISU_REPO_URL} /srv/src/tiramisu +RUN git clone --branch develop ${RISOTTO_REPO_URL} /srv/src/risotto +RUN git clone --branch master ${ROUGAIL_REPO_URL} /srv/src/rougail + +RUN ln -s /srv/src/tiramisu/tiramisu /usr/local/lib/python3.7 +RUN ln -s /srv/src/rougail/src/rougail /usr/local/lib/python3.7 +RUN ln -s /srv/src/risotto/src/risotto /usr/local/lib/python3.7 + +RUN pip install Cheetah3 +RUN cd /srv/src/risotto && pip install -r requirements.txt + +# Installation +RUN cp -r /srv/src/risotto/messages/ /usr/local/lib/ +RUN mkdir -p /var/cache/risotto/servermodel +RUN mkdir /srv/src/risotto/database \ No newline at end of file diff --git a/docker/README.md b/docker/README.md new file mode 100644 index 0000000..fdc2e25 --- /dev/null +++ b/docker/README.md @@ -0,0 +1,15 @@ +Docker +``` +cd docker +docker build -t cadoles/risotto . +docker run -t -d --name risotto cadoles/risotto +docker exec -ti risotto bash + +``` + +Docker-Compose +``` +cd docker +docker-compose up +docker-compose exec postgres /srv/src/postgres/postgres.init.sh +``` \ No newline at end of file diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml new file mode 100644 index 0000000..9730ee7 --- /dev/null +++ b/docker/docker-compose.yaml @@ -0,0 +1,22 @@ +version: '2.2' +services: + risotto: + build: + context: ../ + dockerfile: docker/Dockerfile + volumes: + - .:/srv/src/risotto + ports: + - "8080:8080" + restart: unless-stopped + postgres: + image: postgres:11-alpine + environment: + POSTGRES_USER: ${POSTGRES_USER:-postgres} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme} + PGDATA: /data/postgres + volumes: + - ./postgres-init:/srv/src/postgres + ports: + - "5432:5432" + restart: unless-stopped \ No newline at end of file diff --git a/docker/postgres-init/postgres.init.sh b/docker/postgres-init/postgres.init.sh new file mode 100755 index 0000000..ed68bf3 --- /dev/null +++ b/docker/postgres-init/postgres.init.sh @@ -0,0 +1,9 @@ +#!/bin/bash +set -e + +psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" -h localhost <<-EOSQL + CREATE ROLE risotto WITH LOGIN PASSWORD 'risotto'; + CREATE DATABASE risotto; + GRANT ALL ON DATABASE risotto TO risotto; + CREATE EXTENSION hstore; +EOSQL diff --git a/script/database_manager.py b/script/database_manager.py index 1d42684..56017ce 100644 --- a/script/database_manager.py +++ b/script/database_manager.py @@ -97,7 +97,15 @@ CREATE TABLE log( async def main(): db_conf = get_config().get('database') - pool = await asyncpg.create_pool(database=db_conf.get('dbname'), user=db_conf.get('user')) + #asyncpg.connect('postgresql://postgres@localhost/test') + engine = db_conf.get('engine') + host = db_conf.get('host') + dbname = db_conf.get('dbname') + dbuser = db_conf.get('user') + dbpassword = db_conf.get('password') + dbport = db_conf.get('port') + cfg = "{}://{}:{}@{}:{}/{}".format(engine, dbuser, dbpassword, host, dbport, dbname) + pool = await asyncpg.create_pool(cfg) async with pool.acquire() as connection: async with connection.transaction(): returns = await connection.execute(VERSION_INIT) @@ -106,3 +114,4 @@ if __name__ == '__main__': loop = asyncio.get_event_loop() loop.run_until_complete(main()) # asyncio.run(main()) + diff --git a/src/risotto/config.py b/src/risotto/config.py index 2f08aef..fc10ffa 100644 --- a/src/risotto/config.py +++ b/src/risotto/config.py @@ -12,7 +12,8 @@ from pathlib import PurePosixPath CURRENT_PATH = PurePosixPath(__file__) def get_config(): - return {'database': {'host': 'localhost', + return {'database': {'engine': 'postgres', + 'host': 'postgres', 'port': 5432, 'dbname': 'risotto', 'user': 'risotto', @@ -30,3 +31,4 @@ def get_config(): 'source': {'root_path': '/srv/seed'}, 'cache': {'root_path': '/var/cache/risotto'} } + diff --git a/src/risotto/register.py b/src/risotto/register.py index c190f05..4d89e99 100644 --- a/src/risotto/register.py +++ b/src/risotto/register.py @@ -248,7 +248,17 @@ class RegisterDispatcher: async def load(self): # valid function's arguments db_conf = get_config().get('database') - self.pool = await asyncpg.create_pool(database=db_conf.get('dbname'), user=db_conf.get('user')) + + #postgres://user:pass@host:port/database?option=value. + engine = db_conf.get('engine') + host = db_conf.get('host') + dbname = db_conf.get('dbname') + dbuser = db_conf.get('user') + dbpassword = db_conf.get('password') + dbport = db_conf.get('port') + cfg = "{}://{}:{}@{}:{}/{}".format(engine, dbuser, dbpassword, host, dbport, dbname) + print(cfg) + self.pool = await asyncpg.create_pool(cfg) async with self.pool.acquire() as connection: async with connection.transaction(): for version, messages in self.messages.items(): @@ -271,3 +281,4 @@ class RegisterDispatcher: module_name) await self.insert_message(connection, f'{version}.{message}') +