]> git.giorgioravera.it Git - network-manager.git/commitdiff
Added entrypoint to automatically creted db.
authorGiorgio Ravera <giorgio.ravera@gmail.com>
Fri, 2 Jan 2026 19:46:35 +0000 (20:46 +0100)
committerGiorgio Ravera <giorgio.ravera@gmail.com>
Fri, 2 Jan 2026 19:46:35 +0000 (20:46 +0100)
Dockerfile
create_db.sh [deleted file]
docker-compose.yaml
entrypoint.sh [new file with mode: 0755]

index 92bfa6b09eaf4fd236fdb6b01e97c15ce2271117..ca092c910648f93c5aebdfc26e0301ecec8f3e8e 100644 (file)
@@ -3,6 +3,9 @@ FROM python:3.12-slim
 
 WORKDIR /var/www/network-manager
 
+# Install system dependencies 
+RUN apt-get update && apt-get install -y sqlite3 && rm -rf /var/lib/apt/lists/*
+
 # Install dependencies
 RUN pip install --no-cache-dir fastapi uvicorn[standard]
 
@@ -10,12 +13,20 @@ RUN pip install --no-cache-dir fastapi uvicorn[standard]
 COPY backend/ /var/www/network-manager/backend/
 COPY frontend/ /var/www/network-manager/frontend/
 
+# Copy entrypoint
+COPY entrypoint.sh /entrypoint.sh
+RUN chmod +x /entrypoint.sh
+
 # Default environment variables
 ENV DB_PATH=/data/database.db
+ENV DB_RESET=0
 ENV HTTP_PORT=8000
+ENV DOMAIN=example.com
+ENV PUBLIC_IP=127.0.0.1
 
 # Expose the port dynamically
 EXPOSE ${HTTP_PORT}
 
 # Use the env var in the startup command
+ENTRYPOINT ["/entrypoint.sh"]
 CMD ["sh", "-c", "uvicorn backend.main:app --host 0.0.0.0 --port ${HTTP_PORT}"]
diff --git a/create_db.sh b/create_db.sh
deleted file mode 100755 (executable)
index 0fa1f66..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-#!/bin/bash
-set -euo pipefail
-
-DB_FILE="database.db"
-RESET=0
-DOMAIN="example.com"
-PUBLIC_IP="127.0.0.1"
-
-# ================================
-# Parse arguments
-# ================================
-while [[ $# -gt 0 ]]; do
-    case "$1" in
-        --reset)
-            RESET=1
-            shift
-            ;;
-        --domain)
-            DOMAIN="$2"
-            shift 2
-            ;;
-        --public-ip)
-            PUBLIC_IP="$2"
-            shift 2
-            ;;
-        *)
-            echo "Unknown argument: $1"
-            exit 1
-            ;;
-    esac
-done
-
-# ================================
-# Reset database if requested
-# ================================
-if [[ $RESET -eq 1 && -f "$DB_FILE" ]]; then
-    echo "[*] Removing existing database..."
-    rm -f "$DB_FILE"
-fi
-
-# ================================
-# Skip creation if DB already exists
-# ================================
-if [[ -f "$DB_FILE" ]]; then
-    echo "[✓] Database already exists. Nothing to do."
-    exit 0
-fi
-
-echo "[*] Creating database: $DB_FILE"
-
-# ================================
-# Create DB with dynamic settings
-# ================================
-sqlite3 "$DB_FILE" <<EOF
-PRAGMA foreign_keys = ON;
-
--- ============================================
---  GLOBAL SETTINGS
--- ============================================
-CREATE TABLE settings (
-    key TEXT PRIMARY KEY,
-    value TEXT
-);
-
-INSERT INTO settings (key, value) VALUES ('domain', '${DOMAIN}');
-INSERT INTO settings (key, value) VALUES ('external_ipv4', '${PUBLIC_IP}');
-
--- ============================================
---  HOSTS
--- ============================================
-CREATE TABLE hosts (
-    id INTEGER PRIMARY KEY AUTOINCREMENT,
-    name TEXT NOT NULL UNIQUE,
-    ipv4 TEXT,
-    ipv6 TEXT,
-    mac TEXT,
-    note TEXT,
-    ssl_enabled INTEGER NOT NULL DEFAULT 0
-);
-
-CREATE INDEX idx_hosts_name ON hosts(name);
-
--- ============================================
---  ALIASES
--- ============================================
-CREATE TABLE aliases (
-    id INTEGER PRIMARY KEY AUTOINCREMENT,
-    host_id INTEGER NOT NULL,
-    alias TEXT NOT NULL,
-    note TEXT,
-    ssl_enabled INTEGER NOT NULL DEFAULT 0,
-    FOREIGN KEY (host_id) REFERENCES hosts(id)
-);
-
-CREATE INDEX idx_aliases_host ON aliases(host_id);
-
--- ============================================
---  TXT RECORDS
--- ============================================
-CREATE TABLE txt_records (
-    id INTEGER PRIMARY KEY AUTOINCREMENT,
-    name TEXT NOT NULL,
-    value TEXT NOT NULL,
-    note TEXT,
-    host_id INTEGER,
-    FOREIGN KEY (host_id) REFERENCES hosts(id)
-);
-
-CREATE INDEX idx_txt_host ON txt_records(host_id);
-EOF
-
-echo "[✓] Database initialized successfully."
\ No newline at end of file
index 0fbfbd2210059c75b48d9c305ed7d419e82e7ba4..3c7a1bf0fce08b7bb7dd67665c72a5900e03906c 100644 (file)
@@ -7,8 +7,6 @@ services:
       - "8080:8000"
     environment:
       - TZ=${DOCKER_TZ}
-      - DB_PATH=/data/database.db
-      - HTTP_PORT=8000
     volumes:
       - ${DOCKER_CFG_DIR}/network:/data
     networks:
diff --git a/entrypoint.sh b/entrypoint.sh
new file mode 100755 (executable)
index 0000000..029ca13
--- /dev/null
@@ -0,0 +1,122 @@
+#!/bin/bash
+set -euo pipefail
+
+# ================================
+# Variables
+# ================================
+DB_FILE="${DB_PATH:-database.db}"
+DB_RESET="${DB_RESET:-0}"
+DOMAIN="${DOMAIN:-example.com}"
+PUBLIC_IP="${PUBLIC_IP:-127.0.0.1}"
+
+function create_db() {
+    # Reset database if requested
+    if [[ $DB_RESET -eq 1 && -f "$DB_FILE" ]]; then
+        echo "INFO:     [*] Removing existing database..."
+        rm -f "$DB_FILE"
+    fi
+
+    # Skip creation if DB already exists
+    if [[ -f "$DB_FILE" ]]; then
+        echo "INFO:     [✓] Database already exists. Nothing to do."
+        return 0
+    fi
+
+    echo "INFO:     [*] Creating database: $DB_FILE"
+
+    # Create DB with dynamic settings
+    sqlite3 "$DB_FILE" <<EOF
+PRAGMA foreign_keys = ON;
+
+-- ============================================
+--  GLOBAL SETTINGS
+-- ============================================
+CREATE TABLE settings (
+    key TEXT PRIMARY KEY,
+    value TEXT
+);
+
+INSERT INTO settings (key, value) VALUES ('domain', '${DOMAIN}');
+INSERT INTO settings (key, value) VALUES ('external_ipv4', '${PUBLIC_IP}');
+
+-- ============================================
+--  HOSTS
+-- ============================================
+CREATE TABLE hosts (
+    id INTEGER PRIMARY KEY AUTOINCREMENT,
+    name TEXT NOT NULL UNIQUE,
+    ipv4 TEXT,
+    ipv6 TEXT,
+    mac TEXT,
+    note TEXT,
+    ssl_enabled INTEGER NOT NULL DEFAULT 0
+);
+
+CREATE INDEX idx_hosts_name ON hosts(name);
+
+-- ============================================
+--  ALIASES
+-- ============================================
+CREATE TABLE aliases (
+    id INTEGER PRIMARY KEY AUTOINCREMENT,
+    host_id INTEGER NOT NULL,
+    alias TEXT NOT NULL,
+    note TEXT,
+    ssl_enabled INTEGER NOT NULL DEFAULT 0,
+    FOREIGN KEY (host_id) REFERENCES hosts(id)
+);
+
+CREATE INDEX idx_aliases_host ON aliases(host_id);
+
+-- ============================================
+--  TXT RECORDS
+-- ============================================
+CREATE TABLE txt_records (
+    id INTEGER PRIMARY KEY AUTOINCREMENT,
+    name TEXT NOT NULL,
+    value TEXT NOT NULL,
+    note TEXT,
+    host_id INTEGER,
+    FOREIGN KEY (host_id) REFERENCES hosts(id)
+);
+
+CREATE INDEX idx_txt_host ON txt_records(host_id);
+EOF
+
+    echo "INFO:     [✓] Database initialized successfully for $DOMAIN."
+    echo "INFO:     [✓] Public IP: $PUBLIC_IP."
+}
+
+# ================================
+# Parse arguments
+# ================================
+while [[ $# -gt 0 ]]; do
+    case "$1" in
+        --reset)
+            DB_RESET=1
+            shift
+            ;;
+        --domain)
+            DOMAIN="$2"
+            shift 2
+            ;;
+        --public-ip)
+            PUBLIC_IP="$2"
+            shift 2
+            ;;
+        --)
+            shift
+            break
+            ;;
+        *)
+            break
+            ;;
+    esac
+done
+
+create_db
+
+# ================================
+# Continue to CMD
+# ================================
+exec "$@"