Merge branch 'main' of lain.church:bartholin/flask-server
This commit is contained in:
commit
71c05404af
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,5 +2,6 @@ env
|
|||||||
.env
|
.env
|
||||||
movielist.sqlite
|
movielist.sqlite
|
||||||
posters/*
|
posters/*
|
||||||
|
db/*
|
||||||
__pycache__
|
__pycache__
|
||||||
*~
|
*~
|
||||||
|
31
Dockerfile
Normal file
31
Dockerfile
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
# Use an official Python runtime as the base image
|
||||||
|
FROM python:3.9-slim
|
||||||
|
|
||||||
|
# Set the working directory in the container
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Copy the project files into the container
|
||||||
|
COPY . .
|
||||||
|
RUN chmod +x docker-entrypoint.sh
|
||||||
|
|
||||||
|
# Create a volume for the posters
|
||||||
|
VOLUME /app/posters
|
||||||
|
VOLUME /app/db
|
||||||
|
|
||||||
|
# Install the project dependencies
|
||||||
|
RUN pip install --no-cache-dir -r requirements.txt
|
||||||
|
|
||||||
|
# Set environment variables
|
||||||
|
ENV FLASK_APP=kinolist
|
||||||
|
ENV FLASK_RUN_HOST=0.0.0.0
|
||||||
|
ENV FLASK_DATABASE=/app/db/movielist.sqlite
|
||||||
|
ENV FLASK_IMAGE_WIDTH=200
|
||||||
|
|
||||||
|
# Initialize the database
|
||||||
|
RUN flask --app kinolist init-db
|
||||||
|
|
||||||
|
# Expose the port the app runs on
|
||||||
|
EXPOSE 8000
|
||||||
|
|
||||||
|
# Run the application
|
||||||
|
CMD ["/app/docker-entrypoint.sh"]
|
@ -50,6 +50,3 @@ If you are not in the virtual environment (the `(env)` keyword does not appear i
|
|||||||
python -m flask --app kinolist run --port 8000 --debug
|
python -m flask --app kinolist run --port 8000 --debug
|
||||||
```
|
```
|
||||||
You can access the site at the adress `localhost:8000` on your web browser. Do `Ctrl+C` to stop the server.
|
You can access the site at the adress `localhost:8000` on your web browser. Do `Ctrl+C` to stop the server.
|
||||||
|
|
||||||
# Remarks
|
|
||||||
For some reasons, I need a symbolic link from `posters/` to `kinolist/posters/`, I guess it is because python keeps changing the base directory, so the fix I have found is to have two `posters` folders which are actually the same.
|
|
||||||
|
10
configure.sh
10
configure.sh
@ -1,10 +0,0 @@
|
|||||||
if [ ! -d env ]; then
|
|
||||||
python -m venv env
|
|
||||||
source env/bin/activate
|
|
||||||
python -m pip install -r requirements.txt
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ ! -f movielist.sqlite ]; then
|
|
||||||
source env/bin/activate
|
|
||||||
python -m flask --app kinolist init-db
|
|
||||||
fi
|
|
22
docker-compose.yml
Normal file
22
docker-compose.yml
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
web:
|
||||||
|
build: .
|
||||||
|
ports:
|
||||||
|
- "8000:8000"
|
||||||
|
volumes:
|
||||||
|
- ./posters:/app/posters
|
||||||
|
- ./db/:/app/db
|
||||||
|
environment:
|
||||||
|
- FLASK_SECRET_KEY=${FLASK_SECRET_KEY}
|
||||||
|
- FLASK_OMDB_KEY=${FLASK_OMDB_KEY}
|
||||||
|
- FLASK_ADMIN_PASSWORD=${FLASK_ADMIN_PASSWORD}
|
||||||
|
- FLASK_DATABASE=/app/db/movielist.sqlite
|
||||||
|
- FLASK_IMAGE_WIDTH=200
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
posters:
|
||||||
|
db:
|
10
docker-entrypoint.sh
Normal file
10
docker-entrypoint.sh
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Check if the database file exists
|
||||||
|
if [ ! -f /app/db/movielist.sqlite ]; then
|
||||||
|
echo "Initializing database..."
|
||||||
|
python -m flask --app kinolist init-db
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Start the Flask application
|
||||||
|
exec gunicorn --bind 0.0.0.0:8000 "kinolist:create_app()"
|
@ -30,4 +30,10 @@ def create_app():
|
|||||||
database.init_app(app)
|
database.init_app(app)
|
||||||
|
|
||||||
app.register_blueprint(pages.bp)
|
app.register_blueprint(pages.bp)
|
||||||
|
|
||||||
|
base_dir = os.path.abspath(os.path.dirname(__file__))
|
||||||
|
|
||||||
|
# Set the UPLOAD_FOLDER to the parent directory of your project
|
||||||
|
app.config['UPLOAD_FOLDER'] = os.path.join(base_dir, '..', 'posters')
|
||||||
|
|
||||||
return app
|
return app
|
||||||
|
@ -93,7 +93,7 @@ def manage():
|
|||||||
poster = request.files["poster"]
|
poster = request.files["poster"]
|
||||||
filename = posters.save(poster.filename, poster.read())
|
filename = posters.save(poster.filename, poster.read())
|
||||||
update_poster(id, filename)
|
update_poster(id, filename)
|
||||||
return filename;
|
return filename
|
||||||
elif "plot" in request.form:
|
elif "plot" in request.form:
|
||||||
update_plot(id, request.form["plot"])
|
update_plot(id, request.form["plot"])
|
||||||
elif "watched" in request.form:
|
elif "watched" in request.form:
|
||||||
|
@ -1 +0,0 @@
|
|||||||
../posters
|
|
@ -18,15 +18,17 @@
|
|||||||
from flask import (current_app, send_from_directory)
|
from flask import (current_app, send_from_directory)
|
||||||
from hashlib import sha1
|
from hashlib import sha1
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from os import path
|
import os
|
||||||
|
|
||||||
def save(name, content):
|
def save(name, content):
|
||||||
h = sha1(content).hexdigest()
|
h = sha1(content).hexdigest()
|
||||||
filename = h + Path(name).suffix
|
filename = h + Path(name).suffix
|
||||||
file = open(path.join(current_app.config['UPLOAD_FOLDER'], filename), "wb")
|
file_path = os.path.join(current_app.config['UPLOAD_FOLDER'], filename)
|
||||||
|
|
||||||
|
with open(file_path, "wb") as file:
|
||||||
file.write(content)
|
file.write(content)
|
||||||
file.close()
|
|
||||||
return filename
|
return filename
|
||||||
|
|
||||||
def get(name):
|
def get(name):
|
||||||
return send_from_directory(current_app.config["UPLOAD_FOLDER"], name)
|
return send_from_directory(current_app.config['UPLOAD_FOLDER'], name)
|
||||||
|
@ -3,4 +3,4 @@ Flask
|
|||||||
Flask-Login
|
Flask-Login
|
||||||
python-dotenv
|
python-dotenv
|
||||||
requests
|
requests
|
||||||
|
gunicorn
|
||||||
|
Loading…
Reference in New Issue
Block a user