mirror of
https://github.com/lrnselfreliance/wrolpi.git
synced 2026-10-26 19:01:39 -04:00
Running alembic migrations whenever api container is started.
This commit is contained in:
parent
78a83dc63e
commit
833f58dbfb
9 changed files with 131 additions and 28 deletions
|
|
@ -2,26 +2,30 @@ FROM python:3.11-buster
|
|||
ENV DOCKER=true
|
||||
WORKDIR /opt/wrolpi
|
||||
|
||||
# Update dependencies and install required packages.
|
||||
# Update dependencies and install required packages
|
||||
RUN apt-get update && \
|
||||
apt-get install -y ffmpeg catdoc sysstat aria2 && \
|
||||
apt-get install -y ffmpeg catdoc sysstat aria2 postgresql-client && \
|
||||
ffmpeg -version && \
|
||||
apt-get clean && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Create cache directory for yt-dlp.
|
||||
# Create cache directory for yt-dlp
|
||||
RUN mkdir /.cache && chown -R 1000:1000 /.cache
|
||||
|
||||
# Install Python dependencies.
|
||||
# Install Python dependencies
|
||||
COPY requirements.txt /opt/wrolpi/requirements.txt
|
||||
RUN pip3 install --no-cache-dir -r /opt/wrolpi/requirements.txt
|
||||
|
||||
# Copy WROLPi application files.
|
||||
# Copy WROLPi application files
|
||||
COPY main.py /opt/wrolpi/
|
||||
COPY wrolpi /opt/wrolpi/wrolpi
|
||||
COPY modules /opt/wrolpi/modules
|
||||
COPY alembic /opt/wrolpi/alembic
|
||||
COPY alembic.ini /opt/wrolpi/alembic.ini
|
||||
COPY docker/api/alembic.ini /opt/wrolpi/alembic.ini
|
||||
|
||||
ENTRYPOINT ["python3", "-OO", "/opt/wrolpi/main.py"]
|
||||
CMD ["-v", "api", "--host", "0.0.0.0"]
|
||||
# Copy and set up entrypoint script
|
||||
COPY docker/api/entrypoint.sh /entrypoint.sh
|
||||
RUN chmod +x /entrypoint.sh
|
||||
|
||||
# Use entrypoint script which will run alembic migrations before starting API.
|
||||
ENTRYPOINT ["/entrypoint.sh"]
|
||||
89
docker/api/alembic.ini
Normal file
89
docker/api/alembic.ini
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
# A generic, single database configuration.
|
||||
|
||||
[alembic]
|
||||
# path to migration scripts
|
||||
script_location = alembic
|
||||
|
||||
# template used to generate migration files
|
||||
# file_template = %%(rev)s_%%(slug)s
|
||||
|
||||
# sys.path path, will be prepended to sys.path if present.
|
||||
# defaults to the current working directory.
|
||||
prepend_sys_path = .
|
||||
|
||||
# timezone to use when rendering the date
|
||||
# within the migration file as well as the filename.
|
||||
# string value is passed to dateutil.tz.gettz()
|
||||
# leave blank for localtime
|
||||
# timezone =
|
||||
|
||||
# max length of characters to apply to the
|
||||
# "slug" field
|
||||
# truncate_slug_length = 40
|
||||
|
||||
# set to 'true' to run the environment during
|
||||
# the 'revision' command, regardless of autogenerate
|
||||
# revision_environment = false
|
||||
|
||||
# set to 'true' to allow .pyc and .pyo files without
|
||||
# a source .py file to be detected as revisions in the
|
||||
# versions/ directory
|
||||
# sourceless = false
|
||||
|
||||
# version location specification; this defaults
|
||||
# to alembic/versions. When using multiple version
|
||||
# directories, initial revisions must be specified with --version-path
|
||||
# version_locations = %(here)s/bar %(here)s/bat alembic/versions
|
||||
|
||||
# the output encoding used when revision files
|
||||
# are written from script.py.mako
|
||||
# output_encoding = utf-8
|
||||
|
||||
sqlalchemy.url = postgresql://postgres:wrolpi@db:5432/wrolpi
|
||||
|
||||
|
||||
[post_write_hooks]
|
||||
# post_write_hooks defines scripts or Python functions that are run
|
||||
# on newly generated revision scripts. See the documentation for further
|
||||
# detail and examples
|
||||
|
||||
# format using "black" - use the console_scripts runner, against the "black" entrypoint
|
||||
# hooks = black
|
||||
# black.type = console_scripts
|
||||
# black.entrypoint = black
|
||||
# black.options = -l 79 REVISION_SCRIPT_FILENAME
|
||||
|
||||
# Logging configuration
|
||||
[loggers]
|
||||
keys = root,sqlalchemy,alembic
|
||||
|
||||
[handlers]
|
||||
keys = console
|
||||
|
||||
[formatters]
|
||||
keys = generic
|
||||
|
||||
[logger_root]
|
||||
level = WARN
|
||||
handlers = console
|
||||
qualname =
|
||||
|
||||
[logger_sqlalchemy]
|
||||
level = WARN
|
||||
handlers =
|
||||
qualname = sqlalchemy.engine
|
||||
|
||||
[logger_alembic]
|
||||
level = INFO
|
||||
handlers =
|
||||
qualname = alembic
|
||||
|
||||
[handler_console]
|
||||
class = StreamHandler
|
||||
args = (sys.stderr,)
|
||||
level = NOTSET
|
||||
formatter = generic
|
||||
|
||||
[formatter_generic]
|
||||
format = %(levelname)-5.5s [%(name)s] %(message)s
|
||||
datefmt = %H:%M:%S
|
||||
17
docker/api/entrypoint.sh
Normal file
17
docker/api/entrypoint.sh
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# Wait for PostgreSQL to be ready
|
||||
echo "Waiting for PostgreSQL..."
|
||||
until pg_isready -h db -p 5432 -U postgres; do
|
||||
echo "PostgreSQL not ready, waiting..."
|
||||
sleep 2
|
||||
done
|
||||
|
||||
# Run Alembic migrations
|
||||
echo "Running Alembic migrations..."
|
||||
python3 -m alembic upgrade head
|
||||
|
||||
# Start Sanic service
|
||||
echo "Starting Sanic service..."
|
||||
exec python3 -OO /opt/wrolpi/main.py -v api --host 0.0.0.0
|
||||
Loading…
Add table
Add a link
Reference in a new issue