add docker environment

This commit is contained in:
Matthieu Lamalle 2020-01-20 15:58:04 +01:00
parent bcd17e1038
commit 3a9243bfb8
7 changed files with 117 additions and 20 deletions

View File

@ -13,7 +13,7 @@ RUN apt-get update && apt-get install -y \
&& apt-get clean && apt-get clean
RUN git clone --branch develop ${TIRAMISU_REPO_URL} /srv/src/tiramisu 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 docker ${RISOTTO_REPO_URL} /srv/src/risotto
RUN git clone --branch master ${ROUGAIL_REPO_URL} /srv/src/rougail 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/tiramisu/tiramisu /usr/local/lib/python3.7
@ -24,6 +24,6 @@ RUN pip install Cheetah3
RUN cd /srv/src/risotto && pip install -r requirements.txt RUN cd /srv/src/risotto && pip install -r requirements.txt
# Installation # Installation
RUN cp -r /srv/src/risotto/messages/ /usr/local/lib/ RUN cp -r /srv/src/risotto/messages/ /usr/local/lib/
RUN mkdir -p /var/cache/risotto/servermodel RUN mkdir -p /var/cache/risotto/servermodel
RUN mkdir /srv/src/risotto/database RUN mkdir -p /var/cache/risotto/database

View File

@ -11,5 +11,4 @@ Docker-Compose
``` ```
cd docker cd docker
docker-compose up docker-compose up
docker-compose exec postgres /srv/src/postgres/postgres.init.sh
``` ```

View File

@ -5,18 +5,24 @@ services:
context: ../ context: ../
dockerfile: docker/Dockerfile dockerfile: docker/Dockerfile
volumes: volumes:
- .:/srv/src/risotto - ../.:/srv/src/risotto
ports: ports:
- "8080:8080" - "8080:8080"
depends_on:
- postgres
links:
- postgres
#command: tail -F /var/log
command: python /srv/src/risotto/script/server.py
restart: unless-stopped restart: unless-stopped
postgres: postgres:
image: postgres:11-alpine image: postgres:11-alpine
environment: environment:
POSTGRES_USER: ${POSTGRES_USER:-postgres} POSTGRES_USER: ${POSTGRES_USER:-postgres}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
PGDATA: /data/postgres PGDATA: /data/postgres
volumes: volumes:
- ./postgres-init:/srv/src/postgres - ./postgres-init/:/docker-entrypoint-initdb.d/
ports: ports:
- "5432:5432" - "5432:5432"
restart: unless-stopped restart: unless-stopped

View File

@ -0,0 +1,103 @@
#!/bin/bash
set -e
psql --username "$POSTGRES_USER" <<-EOSQL
CREATE ROLE risotto WITH LOGIN PASSWORD 'risotto';
CREATE DATABASE risotto;
GRANT ALL ON DATABASE risotto TO risotto;
\c risotto
CREATE EXTENSION hstore;
EOSQL
psql --username "risotto" --password "risotto" <<-EOSQL
-- Création de la table Source
CREATE TABLE Source (
SourceId SERIAL PRIMARY KEY,
SourceName VARCHAR(255) NOT NULL UNIQUE,
SourceURL TEXT
);
-- Création de la table Release
CREATE TABLE Release (
ReleaseId SERIAL PRIMARY KEY,
ReleaseName VARCHAR(255) NOT NULL,
ReleaseSourceId INTEGER NOT NULL,
ReleaseDistribution VARCHAR(20) CONSTRAINT releasedistribution_choice CHECK (ReleaseDistribution IN ('last', 'n-1', 'n-2')),
UNIQUE (ReleaseName, ReleaseSourceId),
UNIQUE (ReleaseDistribution, ReleaseSourceId),
FOREIGN KEY (ReleaseSourceId) REFERENCES Source(SourceId)
);
-- Création de la table Servermodel
CREATE TABLE Servermodel (
ServermodelId SERIAL PRIMARY KEY,
ServermodelName VARCHAR(255) NOT NULL,
ServermodelDescription VARCHAR(255) NOT NULL,
ServermodelParentsId INTEGER [] DEFAULT '{}',
ServermodelReleaseId INTEGER NOT NULL,
ServermodelApplicationServiceId INTEGER NOT NULL,
ServermodelUsers hstore,
UNIQUE (ServermodelName, ServermodelReleaseId)
);
-- Création de la table ApplicationService
CREATE TABLE ApplicationService (
ApplicationServiceId SERIAL PRIMARY KEY,
ApplicationServiceName VARCHAR(255) NOT NULL,
ApplicationServiceDescription VARCHAR(255) NOT NULL,
ApplicationServiceReleaseId INTEGER NOT NULL,
ApplicationServiceDependencies JSON,
UNIQUE (ApplicationServiceName, ApplicationServiceReleaseId)
);
-- Server table creation
CREATE TABLE Server (
ServerId SERIAL PRIMARY KEY,
ServerName VARCHAR(255) NOT NULL UNIQUE,
ServerDescription VARCHAR(255) NOT NULL,
ServerServermodelId INTEGER NOT NULL
);
-- User, Role and ACL table creation
CREATE TABLE RisottoUser (
UserId SERIAL PRIMARY KEY,
UserLogin VARCHAR(100) NOT NULL UNIQUE,
UserName VARCHAR(100) NOT NULL,
UserSurname VARCHAR(100) NOT NULL
);
CREATE TABLE UserRole (
RoleId SERIAL PRIMARY KEY,
RoleUserId INTEGER NOT NULL,
RoleName VARCHAR(255) NOT NULL,
RoleAttribute VARCHAR(255),
RoleAttributeValue VARCHAR(255),
FOREIGN KEY (RoleUserId) REFERENCES RisottoUser(UserId)
);
CREATE TABLE URI (
URIId SERIAL PRIMARY KEY,
URIName VARCHAR(255) NOT NULL UNIQUE
);
CREATE TABLE RoleURI (
RoleName VARCHAR(255) NOT NULL,
URIId INTEGER NOT NULL,
FOREIGN KEY (URIId) REFERENCES URI(URIId),
PRIMARY KEY (RoleName, URIId)
);
-- Log table creation
CREATE TABLE log(
Msg VARCHAR(255) NOT NULL,
Level VARCHAR(10) NOT NULL,
Path VARCHAR(255),
Username VARCHAR(100) NOT NULL,
Data JSON,
Date timestamp DEFAULT current_timestamp
);
EOSQL

View File

@ -1,9 +0,0 @@
#!/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

View File

@ -1,5 +1,5 @@
MESSAGE_ROOT_PATH = 'messages' MESSAGE_ROOT_PATH = 'messages'
DATABASE_DIR = 'database' DATABASE_DIR = '/var/cache/risotto/database'
INTERNAL_USER = 'internal' INTERNAL_USER = 'internal'
CONFIGURATION_DIR = 'configurations' CONFIGURATION_DIR = 'configurations'
TEMPLATE_DIR = 'templates' TEMPLATE_DIR = 'templates'

View File

@ -249,7 +249,6 @@ class RegisterDispatcher:
# valid function's arguments # valid function's arguments
db_conf = get_config().get('database') db_conf = get_config().get('database')
#postgres://user:pass@host:port/database?option=value.
engine = db_conf.get('engine') engine = db_conf.get('engine')
host = db_conf.get('host') host = db_conf.get('host')
dbname = db_conf.get('dbname') dbname = db_conf.get('dbname')
@ -257,7 +256,6 @@ class RegisterDispatcher:
dbpassword = db_conf.get('password') dbpassword = db_conf.get('password')
dbport = db_conf.get('port') dbport = db_conf.get('port')
cfg = "{}://{}:{}@{}:{}/{}".format(engine, dbuser, dbpassword, host, dbport, dbname) cfg = "{}://{}:{}@{}:{}/{}".format(engine, dbuser, dbpassword, host, dbport, dbname)
print(cfg)
self.pool = await asyncpg.create_pool(cfg) self.pool = await asyncpg.create_pool(cfg)
async with self.pool.acquire() as connection: async with self.pool.acquire() as connection:
async with connection.transaction(): async with connection.transaction():