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]
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}"]
+++ /dev/null
-#!/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
- "8080:8000"
environment:
- TZ=${DOCKER_TZ}
- - DB_PATH=/data/database.db
- - HTTP_PORT=8000
volumes:
- ${DOCKER_CFG_DIR}/network:/data
networks:
--- /dev/null
+#!/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 "$@"