diff --git a/wavefront/server/docker/floware.Dockerfile b/wavefront/server/docker/floware.Dockerfile index 15d1fe1c..92f2790f 100644 --- a/wavefront/server/docker/floware.Dockerfile +++ b/wavefront/server/docker/floware.Dockerfile @@ -36,6 +36,9 @@ COPY wavefront/server/plugins/authenticator /app/plugins/authenticator COPY wavefront/server/apps/floware /app/apps/floware +COPY wavefront/server/scripts/floware-init.sh /app/scripts/floware-init.sh +RUN chmod +x /app/scripts/floware-init.sh + RUN uv sync --package floware --frozen --no-dev # Create a non-root user and change ownership of the /app directory @@ -44,6 +47,4 @@ RUN useradd -m -u 1000 floware && \ USER floware -WORKDIR /app/apps/floware/floware - -CMD ["uv", "run", "server.py"] +ENTRYPOINT ["/app/scripts/floware-init.sh"] diff --git a/wavefront/server/scripts/floware-init.sh b/wavefront/server/scripts/floware-init.sh new file mode 100644 index 00000000..01a44f62 --- /dev/null +++ b/wavefront/server/scripts/floware-init.sh @@ -0,0 +1,40 @@ +#!/bin/bash +set -e + +export PATH="/app/.venv/bin:$PATH" + +if [ "${FLOWARE_DB_CREATE}" = "true" ]; then + echo "Creating Floware database if not exists..." + python3 -c " +import psycopg2, os + +host = os.environ['DB_HOST'] +user = os.environ['DB_USERNAME'] +password = os.environ['DB_PASSWORD'] +dbname = os.environ['DB_NAME'] + +conn = psycopg2.connect(host=host, user=user, password=password, dbname='postgres') +conn.autocommit = True +cur = conn.cursor() +cur.execute(\"SELECT 1 FROM pg_database WHERE datname = %s\", (dbname,)) + +if not cur.fetchone(): + cur.execute('CREATE DATABASE \"' + dbname.replace('\"', '\"\"') + '\"') + print('Database created') +else: + print('Database already exists, skipping') +conn.close() + +conn = psycopg2.connect(host=host, user=user, password=password, dbname=dbname) +conn.autocommit = True +cur = conn.cursor() +cur.execute('CREATE EXTENSION IF NOT EXISTS vector') +print('Ensured vector extension exists') +conn.close() +" +else + echo "FLOWARE_DB_CREATE is not true, skipping database creation" +fi + +cd /app/apps/floware/floware +exec uv run server.py