added Docker setup & moved database into instance folder
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -4,4 +4,5 @@ venv
|
|||||||
.venv
|
.venv
|
||||||
webapp/data/orders.json
|
webapp/data/orders.json
|
||||||
orders.json
|
orders.json
|
||||||
orders*.json
|
orders*.json
|
||||||
|
instance/
|
||||||
14
Dockerfile
Normal file
14
Dockerfile
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
# syntax=docker/dockerfile:1
|
||||||
|
|
||||||
|
FROM python:3.13-slim-trixie
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
COPY requirements.txt requirements.txt
|
||||||
|
RUN pip3 install -r requirements.txt
|
||||||
|
|
||||||
|
COPY ./webapp /app/webapp
|
||||||
|
COPY ./main.py /app/main.py
|
||||||
|
|
||||||
|
#CMD ["uwsgi", "eve_structure.ini"]
|
||||||
|
CMD [ "python3", "-m" , "flask", "--app", "webapp.app" , "run", "--host=0.0.0.0", "--debug"]
|
||||||
11
docker-compose.yml
Normal file
11
docker-compose.yml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
services:
|
||||||
|
eve_structure:
|
||||||
|
build: .
|
||||||
|
container_name: eve_structure
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- 5000:5000
|
||||||
|
|
||||||
|
# store db and other stuff outside the container (skip init-db in Dockerfile)
|
||||||
|
volumes:
|
||||||
|
- ./instance:/app/instance
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
import os
|
||||||
from flask import Flask, render_template
|
from flask import Flask, render_template
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
@@ -26,6 +27,12 @@ def create_app() -> Flask:
|
|||||||
return str(value)
|
return str(value)
|
||||||
app.jinja_env.filters["fmt_ts"] = fmt_ts
|
app.jinja_env.filters["fmt_ts"] = fmt_ts
|
||||||
|
|
||||||
|
# ensure the instance folder exists
|
||||||
|
try:
|
||||||
|
os.makedirs(app.instance_path)
|
||||||
|
except OSError:
|
||||||
|
pass
|
||||||
|
|
||||||
# Blueprints registrieren
|
# Blueprints registrieren
|
||||||
app.register_blueprint(structures_bp)
|
app.register_blueprint(structures_bp)
|
||||||
app.register_blueprint(cookbook_bp)
|
app.register_blueprint(cookbook_bp)
|
||||||
|
|||||||
3
webapp/app.py
Normal file
3
webapp/app.py
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
from . import create_app
|
||||||
|
|
||||||
|
app = create_app()
|
||||||
@@ -1,59 +0,0 @@
|
|||||||
import os, json
|
|
||||||
from tinydb import TinyDB
|
|
||||||
from tinydb.storages import Storage
|
|
||||||
|
|
||||||
# Paths
|
|
||||||
OLD_FILE = "orders.json"
|
|
||||||
ARCHIVE_FILE = "orders_old.json"
|
|
||||||
NEW_FILE = "orders_new.json" # final TinyDB JSON file
|
|
||||||
TABLE_NAME = "orders"
|
|
||||||
|
|
||||||
|
|
||||||
class PrettyJSONStorage(Storage):
|
|
||||||
"""Custom TinyDB storage that pretty-prints JSON."""
|
|
||||||
def __init__(self, path):
|
|
||||||
self.path = path
|
|
||||||
|
|
||||||
def read(self):
|
|
||||||
try:
|
|
||||||
with open(self.path, "r", encoding="utf-8") as f:
|
|
||||||
return json.load(f)
|
|
||||||
except FileNotFoundError:
|
|
||||||
return None
|
|
||||||
|
|
||||||
def write(self, data):
|
|
||||||
with open(self.path, "w", encoding="utf-8") as f:
|
|
||||||
json.dump(data, f, ensure_ascii=False, indent=2)
|
|
||||||
|
|
||||||
|
|
||||||
def migrate():
|
|
||||||
if not os.path.isfile(OLD_FILE):
|
|
||||||
print("No old JSON file found. Nothing to migrate.")
|
|
||||||
return
|
|
||||||
|
|
||||||
# Load old orders
|
|
||||||
with open(OLD_FILE, "r", encoding="utf-8") as f:
|
|
||||||
orders = json.load(f) or []
|
|
||||||
|
|
||||||
if not orders:
|
|
||||||
print("No orders found in the old JSON.")
|
|
||||||
return
|
|
||||||
|
|
||||||
print(orders)
|
|
||||||
|
|
||||||
# Open TinyDB and insert into table
|
|
||||||
db = TinyDB(NEW_FILE, storage=PrettyJSONStorage)
|
|
||||||
orders_table = db.table(TABLE_NAME)
|
|
||||||
for order in orders:
|
|
||||||
orders_table.insert(order)
|
|
||||||
|
|
||||||
# Rename old file to archive
|
|
||||||
os.rename(OLD_FILE, ARCHIVE_FILE)
|
|
||||||
os.rename(NEW_FILE, OLD_FILE)
|
|
||||||
print(f"Migrated {len(orders)} orders into table '{TABLE_NAME}'.")
|
|
||||||
print(f"Old JSON file renamed to '{ARCHIVE_FILE}'.")
|
|
||||||
print(f"New TinyDB JSON file is '{OLD_FILE}'.")
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
migrate()
|
|
||||||
File diff suppressed because it is too large
Load Diff
11
webapp/eve_structure.ini
Normal file
11
webapp/eve_structure.ini
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
[uwsgi]
|
||||||
|
chdir=/
|
||||||
|
module = webapp.app
|
||||||
|
callable = app
|
||||||
|
socket = :5000
|
||||||
|
processes = 4
|
||||||
|
threads = 2
|
||||||
|
master = true
|
||||||
|
chmod-socket = 660
|
||||||
|
vacuum = true
|
||||||
|
die-on-term = true
|
||||||
@@ -33,7 +33,7 @@ def get_db() -> TinyDB:
|
|||||||
Stored in `g` to avoid reopening the file multiple times.
|
Stored in `g` to avoid reopening the file multiple times.
|
||||||
"""
|
"""
|
||||||
if "orders_db" not in g:
|
if "orders_db" not in g:
|
||||||
db_path = os.path.join(current_app.root_path, "data", FILE_NAME)
|
db_path = os.path.join(current_app.instance_path, FILE_NAME)
|
||||||
if PRODUCTION == "dev":
|
if PRODUCTION == "dev":
|
||||||
g.orders_db = TinyDB(db_path, storage=PrettyJSONStorage )
|
g.orders_db = TinyDB(db_path, storage=PrettyJSONStorage )
|
||||||
else:
|
else:
|
||||||
|
|||||||
Reference in New Issue
Block a user