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
|
|
@ -1,4 +1,5 @@
|
|||
import os
|
||||
import sys
|
||||
from logging.config import fileConfig
|
||||
|
||||
from alembic import context
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ services:
|
|||
command: 'serve -s build -l 3000'
|
||||
|
||||
map:
|
||||
image: lrnselfreliance/wrolpi:wrolpi-map-latest
|
||||
image: overv/openstreetmap-tile-server:v1.6.0
|
||||
volumes:
|
||||
- openstreetmap_data:/var/lib/postgresql/12/main
|
||||
- openstreetmap_rendered_tiles:/var/lib/mod_tile
|
||||
|
|
|
|||
|
|
@ -27,7 +27,6 @@ services:
|
|||
- './test:/opt/wrolpi/test'
|
||||
- './test:/media/wrolpi'
|
||||
- './alembic:/opt/wrolpi/alembic'
|
||||
- './alembic.ini:/opt/wrolpi/alembic.ini'
|
||||
ports:
|
||||
- ${REACT_APP_API-0.0.0.0:8081}:8081
|
||||
user: '${UID-1000}:${GID-1000}'
|
||||
|
|
@ -58,7 +57,7 @@ services:
|
|||
- './app/src:/app/src'
|
||||
- './app/package.json:/app/package.json'
|
||||
- '.env:/app/.env'
|
||||
command: 'npm run start'
|
||||
command: 'serve -s build -l 3000'
|
||||
stdin_open: true
|
||||
healthcheck:
|
||||
test: [ 'CMD-SHELL', 'curl http://127.0.0.1:3000' ]
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -1,26 +1,20 @@
|
|||
# Build stage
|
||||
FROM node:18-alpine AS builder
|
||||
FROM node:18-alpine
|
||||
WORKDIR /app
|
||||
ENV PATH=/app/node_modules/.bin:$PATH
|
||||
|
||||
# Install serve and production dependencies
|
||||
RUN npm install -g serve && \
|
||||
npm cache clean --force
|
||||
|
||||
# Copy package files and install production dependencies
|
||||
COPY app/package.json app/package-lock.json ./
|
||||
RUN npm ci --omit=dev
|
||||
RUN npm ci --omit=dev && \
|
||||
npm cache clean --force
|
||||
|
||||
# Copy source files and build
|
||||
COPY app/public ./public
|
||||
COPY app/src ./src
|
||||
RUN npm run build
|
||||
|
||||
# Runtime stage
|
||||
FROM nginx:alpine
|
||||
WORKDIR /usr/share/nginx/html
|
||||
|
||||
# Copy static build from builder stage
|
||||
COPY --from=builder /app/build ./
|
||||
|
||||
# Expose port
|
||||
EXPOSE 80
|
||||
|
||||
# Run Nginx
|
||||
CMD ["nginx", "-g", "daemon off;"]
|
||||
# Serve the production build
|
||||
CMD ["serve", "-s", "build", "-l", "3000"]
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ IMAGES=(
|
|||
"lrnselfreliance/wrolpi:wrolpi-web-latest"
|
||||
"lrnselfreliance/wrolpi:wrolpi-zim-latest"
|
||||
"lrnselfreliance/wrolpi:wrolpi-help-latest"
|
||||
"lrnselfreliance/wrolpi:wrolpi-map-latest"
|
||||
"lrnselfreliance/wrolpi:wrolpi-map_https-latest"
|
||||
"lrnselfreliance/wrolpi:wrolpi-zim_https-latest"
|
||||
"lrnselfreliance/wrolpi:wrolpi-help_https-latest"
|
||||
|
|
|
|||
|
|
@ -6,6 +6,4 @@ docker volume create --name=openstreetmap-rendered-tiles
|
|||
git submodule update --init
|
||||
docker compose pull
|
||||
docker compose build --parallel
|
||||
docker compose up -d db
|
||||
docker compose run --rm api db upgrade
|
||||
docker compose stop
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue