93 lines
2.3 KiB
Markdown
93 lines
2.3 KiB
Markdown
|
|
## Production deployment
|
|
|
|
Both services build from the repo root (monorepo). The frontend container runs
|
|
nginx, which serves the built SPA at `/` and reverse-proxies `/api` to the
|
|
backend container. Only the frontend port needs to be published — the backend
|
|
is reached internally over the compose network as `backend:8000`.
|
|
|
|
```
|
|
host.com/ -> frontend (nginx static SPA)
|
|
host.com/api/... -> backend (FastAPI, /api prefix stripped)
|
|
```
|
|
|
|
### Build
|
|
|
|
```sh
|
|
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:
|
|
image: git.shihaam.dev/sarlink/radadmin/backend
|
|
hostname: backend
|
|
env_file:
|
|
- .env
|
|
depends_on:
|
|
- database
|
|
|
|
frontend:
|
|
image: git.shihaam.dev/sarlink/radadmin/frontend
|
|
hostname: frontend
|
|
ports:
|
|
- 8000:80
|
|
depends_on:
|
|
- backend
|
|
```
|
|
- Create `compose.yml` with the above yaml
|
|
- Create .env and fill
|
|
```
|
|
# --- Database (FreeRADIUS) ---
|
|
DB_HOST=database
|
|
DB_PORT=3306
|
|
DB_USER=radadmin
|
|
DB_PASSWORD=changeme
|
|
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 exec backend python migrate.py
|
|
rm radadmin_schema.sql schema.sql
|
|
```
|