Skip to content

Commit

Permalink
Feat postgres docker compose (#68)
Browse files Browse the repository at this point in the history
* Add support for postgres dialect

* Refactor env variables

* Refactor docker-compose
  • Loading branch information
EduKav1813 authored Jul 8, 2024
1 parent 8b596ea commit 1271840
Show file tree
Hide file tree
Showing 11 changed files with 134 additions and 324 deletions.
6 changes: 3 additions & 3 deletions docker/web/Dockerfile → Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@ ENV PYTHONPATH=${PYTHONPATH}:${PWD}
RUN pip3 install poetry
RUN poetry config virtualenvs.create false

COPY pyproject.toml poetry.lock /app/
COPY pyproject.toml /app/
COPY poetry.lock /app/

WORKDIR /app
RUN poetry install --no-dev
COPY . .

#default config
ENV SECRET_KEY secret
ENV DB_PATH /data/whoisdevices.db
ENV SECRET_KEY S3cret

RUN mkdir /data && chown nobody /data
VOLUME ["/data"]
Expand Down
5 changes: 1 addition & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,7 @@ poetry install
- Create .env file, buy it doesn't work. Go figure

```shell
cat >> .env <<EOF
PYTHONPATH=.
SECRET_KEY=<your_secret_key>
EOF
source env.sh
```

- Create database
Expand Down
33 changes: 19 additions & 14 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,31 +1,36 @@
version: '3'
services:
rabbitmq:
image: 'rabbitmq:3.6-management-alpine'
ports:
- '5672:5672'
- '15672:15672'
web:
build: ./docker/web
build: .
environment:
# you should change secret key
- SECRET_KEY=<your_secret_key>
- DB_PATH=/data/whoisdevices.db
- APP_DB_DIALECT=postgresql
- APP_DB_NAME=whohacks
- APP_DB_USER=whohacks
- APP_DB_PASSWORD=S3cret
- APP_DB_HOST=postgres
- APP_DB_PORT=5432
#- APP_OAUTH_OPENID="http://sso.hsp.sh/auth/realms/hsp/.well-known/openid-configuration"

ports:
# use 127.0.0.1:8000:8000
- "8000:8000"
volumes:
- database:/data
- /etc/localtime:/etc/localtime:ro
restart: always
worker:
build: ./docker/worker
environment:
- DB_PATH=/data/whoisdevices.db

postgres:
image: postgres:latest
ports:
- 5432:5432
volumes:
- database:/data
- /etc/localtime:/etc/localtime:ro
restart: always
- ~/apps/postgres:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=S3cret
- POSTGRES_USER=whohacks
- POSTGRES_DB=whohacks

volumes:
database:
Expand Down
25 changes: 0 additions & 25 deletions docker/worker/Dockerfile

This file was deleted.

8 changes: 8 additions & 0 deletions env.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
export APP_DB_DIALECT="postgresql"
export APP_DB_NAME="whohacks"
export APP_DB_USER="whohacks"
export APP_DB_PASSWORD="S3cret"
export APP_DB_HOST="localhost"
export APP_DB_PORT="5432"
export APP_OAUTH_OPENID="http://sso.hsp.sh/auth/realms/hsp/.well-known/openid-configuration"
env | grep APP_ > .env
2 changes: 1 addition & 1 deletion helpers/db_create.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("db_create")

logger.info("connect to db at {}".format(os.environ.get("DB_PATH", "whoisdevices.db")))
# logger.info("connect to db at {}".format(os.environ.get("DB_PATH", "whoisdevices.db")))
db.connect()
logger.info("creating tables")
db.create_tables([Device, User])
Expand Down
338 changes: 72 additions & 266 deletions poetry.lock

Large diffs are not rendered by default.

3 changes: 2 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ description = ""
authors = ["Norbert Szulc <[email protected]>"]

[tool.poetry.dependencies]
python = "^3.6"
python = "^3.11"
authlib = "0.15.3"
certifi = "2023.7.22"
cffi = "1.14.5"
Expand All @@ -29,6 +29,7 @@ six = "1.15.0"
urllib3 = "1.26.18"
werkzeug = "1.0.1"
pytz = "^2024.1"
psycopg2-binary = "^2.9.9"

[tool.poetry.dev-dependencies]

Expand Down
18 changes: 17 additions & 1 deletion whois/database.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,23 @@
import peewee as pw
from werkzeug.security import check_password_hash, generate_password_hash

db = pw.SqliteDatabase(os.environ.get("DB_PATH", "whoisdevices.db"))

db_dialect = os.environ.get("APP_DB_DIALECT", "sqlite")

if db_dialect == "sqlite":
db_path = os.environ.get("APP_DB_PATH", "whoisdevices.db")
db = pw.SqliteDatabase(db_path)
elif db_dialect == "postgresql":
db_name = os.environ.get("APP_DB_NAME", "whohacks")
db_user = os.environ.get("APP_DB_USER", "whohacks")
db_password = os.environ.get("APP_DB_PASSWORD")
db_host = os.environ.get("APP_DB_HOST", "localhost")
db_port = os.environ.get("APP_DB_PORT", "5432")
db = pw.PostgresqlDatabase(
db_name, user=db_user, password=db_password, host=db_host, port=db_port
)
else:
raise RuntimeError(f"Unknown db dialect '{db_dialect}' (envvar APP_DB_DIALECT)")


class User(pw.Model):
Expand Down
17 changes: 9 additions & 8 deletions whois/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,9 @@

APP_TIMEZONE = timezone(os.environ.get("APP_TIMEZONE", "Europe/Warsaw"))

MIKROTIK_URL = os.environ.get("MIKROTIK_URL")
MIKROTIK_USER = os.environ.get("MIKROTIK_USER")
MIKROTIK_PASS = os.environ.get("MIKROTIK_PASS")
MIKROTIK_URL = os.environ.get("APP_MIKROTIK_URL")
MIKROTIK_USER = os.environ.get("APP_MIKROTIK_USER")
MIKROTIK_PASS = os.environ.get("APP_MIKROTIK_PASS")

# mikrtotik ip, or other reporting devices

Expand All @@ -33,11 +33,12 @@

oidc_enabled = True
# OAuth settings
SSO_CLIENT_ID = os.environ.get("OAUTH_CLIENT_ID")
SSO_CLIENT_SECRET = os.environ.get("OAUTH_CLIENT_SECRET")
SSO_AUTH_URL = os.environ.get("OAUTH_AUTH_URL")
SSO_TOKEN_URL = os.environ.get("OAUTH_TOKEN_URL")
SSO_USERINFO_URL = os.environ.get("OAUTH_USERINFO_URL")
SSO_CLIENT_ID = os.environ.get("APP_OAUTH_CLIENT_ID")
SSO_CLIENT_SECRET = os.environ.get("APP_OAUTH_CLIENT_SECRET")
SSO_AUTH_URL = os.environ.get("APP_OAUTH_AUTH_URL")
SSO_TOKEN_URL = os.environ.get("APP_OAUTH_TOKEN_URL")
SSO_USERINFO_URL = os.environ.get("APP_OAUTH_USERINFO_URL")
APP_OAUTH_OPENID = os.environ.get("APP_OAUTH_OPENID")

# production
ip_mask = "192.168.88.1-255"
Expand Down
3 changes: 2 additions & 1 deletion whois/web.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import logging
import os
from datetime import datetime

from flask import (
Expand Down Expand Up @@ -44,7 +45,7 @@
oauth = OAuth(app)
oauth.register(
"sso",
server_metadata_url="http://sso.hsp.sh/auth/realms/hsp/.well-known/openid-configuration",
server_metadata_url=settings.APP_OAUTH_OPENID,
client_kwargs={"scope": "openid profile email"},
)

Expand Down

0 comments on commit 1271840

Please sign in to comment.