diff --git a/Dockerfile b/Dockerfile index 550c565..8e2aa6f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,23 +3,23 @@ FROM python:3.8-alpine3.18 as builder RUN apk update && apk upgrade RUN apk add --no-cache --virtual .build-deps build-base git -RUN apk add bash libffi-dev tzdata --upgrade --no-cache +RUN apk add --upgrade --no-cache bash sqlite libffi-dev tzdata ENV TZ America/New_York # Set the working directory in the container to /app WORKDIR /app +RUN mkdir -p /app/instance/data + # Copy the current directory contents into the container at /app COPY app.py /app COPY requirements.txt /app COPY models.py /app COPY init_db.py /app/init_db.py - # Install any needed packages specified in requirements.txt RUN pip install --no-cache-dir -r requirements.txt -RUN python /app/init_db.py RUN apk del .build-deps @@ -33,9 +33,13 @@ RUN adduser -D myuser WORKDIR /app COPY --from=builder /app /app COPY --from=builder /usr/local /usr/local +COPY --from=builder /usr/bin /usr/bin +RUN chown -R myuser:myuser /app # Switch to the created user USER myuser +RUN python3 init_db.py + # Start gunicorn with the appropriate options CMD ["gunicorn", "-b", "0.0.0.0:3000", "--log-level=debug", "--workers=3", "app:create_app('default')"] diff --git a/app.py b/app.py index ea46058..6f25dfd 100644 --- a/app.py +++ b/app.py @@ -8,15 +8,19 @@ import os def create_app(config_name): app = Flask(__name__) - app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///webpush.db' + app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///data/webpush.db' db.init_app(app) def generate_and_save_vapid_keys(): vapid = Vapid() - vapid.generate_keys() - private_key = vapid.get_private_key().to_pem().decode('utf-8').strip() - public_key = vapid.get_public_key().to_pem().decode('utf-8').strip() + try: + vapid.generate_keys() + private_key = vapid.private_pem().decode('utf-8').strip() + public_key = vapid.public_pem().decode('utf-8').strip() + + except Exception as e: + print(f"Error generating VAPID keys: {e}") key = VAPIDKey(public_key=public_key, private_key=private_key) db.session.add(key) @@ -92,4 +96,8 @@ def create_app(config_name): else: return jsonify(success=False, error="Subscription not found"), 404 + with app.app_context(): + initialize() + return app + diff --git a/init_db.py b/init_db.py index e0ad264..150ad8c 100644 --- a/init_db.py +++ b/init_db.py @@ -2,7 +2,7 @@ from models import db from flask import Flask app = Flask(__name__) -app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///webpush.db' +app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///data/webpush.db' db.init_app(app) with app.app_context(): diff --git a/models.py b/models.py index eee5197..21e0d4d 100644 --- a/models.py +++ b/models.py @@ -14,3 +14,5 @@ class Subscription(db.Model): p256dh = db.Column(db.String(255), nullable=False) auth = db.Column(db.String(255), nullable=False) vapid_key_id = db.Column(db.Integer, db.ForeignKey('vapid_key.id'), nullable=False) + +