diff --git a/.build/prod/README.md b/.build/prod/README.md index 42eec5e..8a84155 100644 --- a/.build/prod/README.md +++ b/.build/prod/README.md @@ -14,31 +14,64 @@ host.com/api/... -> backend (FastAPI, /api prefix stripped) ### Build ```sh -echo $VITE_API_TARGET=http://192.168.1.21:8000 > .build/prod/.env +echo $VITE_API_TARGET=https://radiusadmin.example.com > .build/prod/.env docker compose -f .build/prod/compose.yml up -d --build ``` ### Running from published images - compose.yml ```yml services: + database: + image: mysql + hostname: database + environment: + - MYSQL_RANDOM_ROOT_PASSWORD=yes + - MYSQL_USER=radius + - MYSQL_PASSWORD=radius + - MYSQL_DATABASE=radius + volumes: + - ./mysql:/var/lib/mysql + + freeradius: + image: freeradius/freeradius-server + hostname: freeradius + ports: + - 1812:1812/udp + - 1813:1813/udp +# volumes: +# - ./freeradius/sql:/etc/freeradius/mods-enabled/sql +# - /etc/freeradius/3.0/:/etc/freeradius/ + depends_on: + - database + + adminer: + image: dockette/adminer:mysql + hostname: adminer + ports: + - 8001:80 + depends_on: + - database + backend: - hostname: backend image: git.shihaam.dev/sarlink/radadmin/backend + hostname: backend env_file: - - .env + - .env + depends_on: + - database + frontend: - hostname: frontend image: git.shihaam.dev/sarlink/radadmin/frontend + hostname: frontend ports: - 8000:80 depends_on: - - backend -``` + - backend``` - Create `compose.yml` with the above yaml - Create .env and fill ``` # --- Database (FreeRADIUS) --- -DB_HOST=raddb +DB_HOST=database DB_PORT=3306 DB_USER=radadmin DB_PASSWORD=changeme @@ -47,3 +80,13 @@ DB_NAME=radius # --- API --- API_KEY=changeme ``` +- Start the services `docker compose up -d` and wait few mins for db to initilize +- copy db schema from freeradius and backend to mysql and import it +```shell +docker compose cp freeradius:/etc/freeradius/mods-config/sql/main/mysql/schema.sql . +docker compose cp schema.sql database:/schema.sql +docker compose exec database sh -c 'mysql -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DATABASE" < /schema.sql' +docker compose cp backend:/app/radadmin_schema.sql . +docker compose cp radadmin_schema.sql database:/radadmin_schema.sql +docker compose exec database sh -c 'mysql -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DATABASE" < /radadmin_schema.sql' +``` diff --git a/backend/radadmin_schema.sql b/backend/radadmin_schema.sql new file mode 100644 index 0000000..a1bf275 --- /dev/null +++ b/backend/radadmin_schema.sql @@ -0,0 +1,33 @@ +-- Tables required by the radadmin API that are NOT part of the FreeRADIUS +-- schema. FreeRADIUS never reads or writes these; they hold billing status and +-- human-only metadata (name/phone/alias). Import this after the FreeRADIUS +-- schema.sql. + +CREATE TABLE IF NOT EXISTS customers ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT, + username VARCHAR(64) NOT NULL, + mac_address VARCHAR(17) NOT NULL, + status VARCHAR(10) NOT NULL DEFAULT 'new', + created_at DATETIME NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (id) +); + +CREATE TABLE IF NOT EXISTS radadmin_clients ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT, + mac_address VARCHAR(17) NOT NULL, + name VARCHAR(128) NULL, + phone VARCHAR(32) NULL, + alias VARCHAR(64) NULL, + created_at DATETIME NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (id), + UNIQUE KEY uq_radadmin_clients_mac (mac_address) +); + +CREATE TABLE IF NOT EXISTS radadmin_devices ( + id INT UNSIGNED NOT NULL AUTO_INCREMENT, + mac_address VARCHAR(17) NOT NULL, + alias VARCHAR(64) NULL, + created_at DATETIME NULL DEFAULT CURRENT_TIMESTAMP, + PRIMARY KEY (id), + UNIQUE KEY uq_radadmin_devices_mac (mac_address) +);