modernizing the dependencies
This commit is contained in:
1 parent
a1c6b656d7
commit
2bd853e9b5
12 files changed
+33
-36
No files matched your search
+4
-9
@@ -1,12 +1,7 @@
|
|||||||
FROM python:3.8.12-slim-buster
|
FROM python:3.15-slim-trixie
|
||||||
|
|
||||||
RUN apt-get -y update && apt-get -y upgrade && \
|
RUN apt -y update && apt -y upgrade && \
|
||||||
apt-get install --no-install-recommends -y wait-for-it lsb-release wget gnupg2 gcc libpq-dev libc-dev
|
apt install --no-install-recommends -y wait-for-it lsb-release wget gnupg2 gcc libpq-dev libc-dev vim postgresql-client && apt clean all
|
||||||
|
|
||||||
# install psql 13 (11 is the default with debian)
|
|
||||||
RUN wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
|
|
||||||
RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" | tee /etc/apt/sources.list.d/pgdg.list
|
|
||||||
RUN apt-get update && apt-get --no-install-recommends -y install postgresql-client-13 && apt-get clean all
|
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
@@ -15,7 +10,7 @@ RUN pip install -U -r requirements.txt
|
|||||||
|
|
||||||
RUN mkdir log
|
RUN mkdir log
|
||||||
|
|
||||||
ENV PYTHONPATH /app/
|
ENV PYTHONPATH=/app/
|
||||||
ENV FLASK_APP=max.app
|
ENV FLASK_APP=max.app
|
||||||
ENV FLASK_ENV=production
|
ENV FLASK_ENV=production
|
||||||
|
|
||||||
|
|||||||
+4
-9
@@ -1,12 +1,7 @@
|
|||||||
FROM python:3.8.12-slim-buster
|
FROM python:3.15-slim-trixie
|
||||||
|
|
||||||
RUN apt-get -y update && apt-get -y upgrade && \
|
RUN apt -y update && apt -y upgrade && \
|
||||||
apt-get install --no-install-recommends -y wait-for-it lsb-release wget gnupg2 gcc libpq-dev libc-dev vim
|
apt install --no-install-recommends -y wait-for-it lsb-release wget gnupg2 gcc libpq-dev libc-dev vim postgresql-client && apt clean all
|
||||||
|
|
||||||
# install psql 13 (11 is the default with debian)
|
|
||||||
RUN wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -
|
|
||||||
RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" | tee /etc/apt/sources.list.d/pgdg.list
|
|
||||||
RUN apt-get update && apt-get --no-install-recommends -y install postgresql-client-13 && apt-get clean all
|
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
@@ -16,7 +11,7 @@ RUN pip install -U -r requirements.txt -r requirements-dev.txt
|
|||||||
|
|
||||||
RUN mkdir log
|
RUN mkdir log
|
||||||
|
|
||||||
ENV PYTHONPATH /app/
|
ENV PYTHONPATH=/app/
|
||||||
ENV FLASK_APP=max.app
|
ENV FLASK_APP=max.app
|
||||||
ENV FLASK_ENV=development
|
ENV FLASK_ENV=development
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
# DEVELOPMENT SERVER
|
# DEVELOPMENT SERVER
|
||||||
|
|
||||||
build-dev:
|
build-dev:
|
||||||
docker build -t max-dev -f Dockerfile.dev .
|
docker build -t max:dev -f Dockerfile.dev .
|
||||||
|
|
||||||
run-dev: | build-dev
|
run-dev: | build-dev
|
||||||
# bash -c "trap 'docker-compose -f dc.dev.yml down' EXIT; MAX_COMMAND=\"flask run --host 0.0.0.0 --port 8000\" docker-compose -f dc.dev.yml up --build"
|
# bash -c "trap 'docker-compose -f dc.dev.yml down' EXIT; MAX_COMMAND=\"flask run --host 0.0.0.0 --port 8000\" docker-compose -f dc.dev.yml up --build"
|
||||||
@@ -29,7 +29,7 @@ run-cleanup: | build-dev
|
|||||||
# PROD
|
# PROD
|
||||||
|
|
||||||
build-prod:
|
build-prod:
|
||||||
docker build -t max .
|
docker build -t max:$(shell cat VERSION) .
|
||||||
|
|
||||||
run-prod:
|
run-prod:
|
||||||
docker-compose up -d
|
docker-compose up -d
|
||||||
|
|||||||
@@ -3,3 +3,9 @@
|
|||||||
A small little program to manage emails.
|
A small little program to manage emails.
|
||||||
|
|
||||||
The proxy should add X-Real-IP to get a better logging.
|
The proxy should add X-Real-IP to get a better logging.
|
||||||
|
|
||||||
|
## Setup
|
||||||
|
|
||||||
|
Requirements: Docker, Make
|
||||||
|
|
||||||
|
Start with `make run-dev`
|
||||||
+1
-2
@@ -1,7 +1,6 @@
|
|||||||
version: '3'
|
|
||||||
services:
|
services:
|
||||||
max:
|
max:
|
||||||
image: max-dev
|
image: max:dev
|
||||||
volumes:
|
volumes:
|
||||||
- ./max:/app/max
|
- ./max:/app/max
|
||||||
depends_on:
|
depends_on:
|
||||||
|
|||||||
+1
-2
@@ -1,7 +1,6 @@
|
|||||||
version: '3'
|
|
||||||
services:
|
services:
|
||||||
max:
|
max:
|
||||||
image: max
|
image: max:1.1.0
|
||||||
depends_on:
|
depends_on:
|
||||||
- postgresql
|
- postgresql
|
||||||
ports:
|
ports:
|
||||||
|
|||||||
+3
-3
@@ -74,9 +74,9 @@ def main():
|
|||||||
app.jinja_env.lstrip_blocks = True
|
app.jinja_env.lstrip_blocks = True
|
||||||
app.url_rule_class = Rule
|
app.url_rule_class = Rule
|
||||||
app.config.update(
|
app.config.update(
|
||||||
SECRET_KEY="123456"
|
SECRET_KEY=(
|
||||||
if app.debug
|
"123456" if app.debug else base64.b64encode(os.urandom(64)).decode("utf-8")
|
||||||
else base64.b64encode(os.urandom(64)).decode("utf-8"),
|
),
|
||||||
SESSION_COOKIE_SECURE=not app.debug,
|
SESSION_COOKIE_SECURE=not app.debug,
|
||||||
SESSION_COOKIE_SAMESITE=False,
|
SESSION_COOKIE_SAMESITE=False,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -85,9 +85,9 @@ class AliasCreate(
|
|||||||
for key in ("email", "domain", "enabled", "note"):
|
for key in ("email", "domain", "enabled", "note"):
|
||||||
if hasattr(self, key):
|
if hasattr(self, key):
|
||||||
context[key] = getattr(self, key)
|
context[key] = getattr(self, key)
|
||||||
context[
|
context["can_use_different_alias_domain"] = (
|
||||||
"can_use_different_alias_domain"
|
self.user.can_use_different_alias_domain
|
||||||
] = self.user.can_use_different_alias_domain
|
)
|
||||||
if self.user.can_use_different_alias_domain:
|
if self.user.can_use_different_alias_domain:
|
||||||
context["domains"] = get_domains()
|
context["domains"] = get_domains()
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ class Favicon(AllowAnyAccess, BaseView):
|
|||||||
|
|
||||||
def get(self):
|
def get(self):
|
||||||
random_favicon = self.get_random_favicon_filename()
|
random_favicon = self.get_random_favicon_filename()
|
||||||
return send_from_directory(FAVICON_FOLDER, random_favicon, add_etags=False)
|
return send_from_directory(FAVICON_FOLDER, random_favicon, etag=False)
|
||||||
|
|
||||||
def ensure_favicons(self):
|
def ensure_favicons(self):
|
||||||
if STATE_FAVICON_ATTR not in self._state:
|
if STATE_FAVICON_ATTR not in self._state:
|
||||||
|
|||||||
+4
-2
@@ -81,7 +81,7 @@ class SessionInterface(FlaskSessionInterface):
|
|||||||
return Signer(app.secret_key, salt="flask-session", key_derivation="hmac")
|
return Signer(app.secret_key, salt="flask-session", key_derivation="hmac")
|
||||||
|
|
||||||
def get_cookie_name(self, app):
|
def get_cookie_name(self, app):
|
||||||
return app.session_cookie_name
|
return app.config["SESSION_COOKIE_NAME"]
|
||||||
|
|
||||||
def make_session_object(self, session_id=None, data=None):
|
def make_session_object(self, session_id=None, data=None):
|
||||||
return Session(session_id, data=data)
|
return Session(session_id, data=data)
|
||||||
@@ -119,7 +119,9 @@ class SessionInterface(FlaskSessionInterface):
|
|||||||
secure = self.get_cookie_secure(app)
|
secure = self.get_cookie_secure(app)
|
||||||
expires = self.get_expiration_time(app, session)
|
expires = self.get_expiration_time(app, session)
|
||||||
session_storage[session.id] = dict(session)
|
session_storage[session.id] = dict(session)
|
||||||
session_id = self._get_signer(app).sign(want_bytes(session.id))
|
session_id = (
|
||||||
|
self._get_signer(app).sign(want_bytes(session.id)).decode("utf-8")
|
||||||
|
)
|
||||||
response.set_cookie(
|
response.set_cookie(
|
||||||
cookie_name,
|
cookie_name,
|
||||||
session_id,
|
session_id,
|
||||||
|
|||||||
+3
-3
@@ -1,3 +1,3 @@
|
|||||||
flask
|
Flask==3.1.3
|
||||||
psycopg2
|
psycopg2==2.9.13
|
||||||
gunicorn
|
gunicorn==26.2.0
|
||||||
Reference in new issue
Block a user