Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -43,4 +43,13 @@ FAUCET_AND_INDEX_ENABLED="False" # this enables the calls to account index and F
RADIUS_DESK_USERNAME=<USERNAME>
RADIUS_DESK_PASSWORD=<PASSWORD>
# Celery config
CELERY_BROKER_URL="redis://redis:6379/0"
CELERY_BROKER_URL="redis://redis:6379/0"
# ===============
# Traefik Configuration
TRAEFIK_BACKEND_HOST="backend.inethicloud.net"
TRAEFIK_ENTRYPOINTS="websecure"
TRAEFIK_CERTRESOLVER="letsencrypt"
TRAEFIK_NETWORK_BRIDGE="inethi-bridge-traefik"

SUPERUSER_USERNAME=<USERNAME>
SUPERUSER_PASSWORD=<PASSWORD>
13 changes: 4 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,10 @@ The backend for the bespoke iNethi system.

## Commands

### Prerequisites

Read the [docs](./docs/README.md) for details of the set up and requirements.

### Running the Code

Look at [.env.example](.env.example) and create a `.env` file with all the variables listed in this file. See
Expand Down Expand Up @@ -55,12 +59,3 @@ print(f"Your encryption key: {encryption_key.decode()}")
from django.core.management.utils import get_random_secret_key
print(get_random_secret_key())
```

## Contributing

Pull requests and issues are welcome! Please open an issue to discuss major changes or new features.

## License

> [!WARNING]
> Closed-source commercial usage of this code is not permitted with the GPL-3.0. If that license is not compatible with your use case, please contact keeganthomaswhite@gmail.com for queries.
25 changes: 14 additions & 11 deletions docker-compose-dev.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
services:
app:
container_name: inethi-backend
container_name: inethi-backend-dev
restart: no
env_file:
- ./.env
Expand All @@ -13,7 +13,9 @@ services:
volumes:
- ./inethi:/inethi
command: >
sh -c "python manage.py wait_for_db &&
sh -c "sleep 10 &&
python manage.py wait_for_db &&
python manage.py makemigrations &&
python manage.py migrate &&
python manage.py runserver 0.0.0.0:8000"
environment:
Expand All @@ -28,36 +30,37 @@ services:
db:
image: timescale/timescaledb:latest-pg17
restart: no
container_name: inethi-backend-db-timescale
container_name: inethi-backend-db-timescale-dev
env_file:
- ./.env
volumes:
- dev-db-data-timescale:/var/lib/postgresql/data
- dev-db-data-timescale-dev:/var/lib/postgresql/data
environment:
- POSTGRES_DB=${DB_NAME:-devdb}
- POSTGRES_USER=${DB_USER:-devuser}
- POSTGRES_PASSWORD=${DB_PASS:-devpass}
command: postgres -c shared_preload_libraries=timescaledb

keycloak:
image: quay.io/keycloak/keycloak:25.0.6
restart: no
container_name: inethi-keycloak
container_name: inethi-keycloak-dev
env_file:
- ./.env
ports:
- "8080:8080"
command:
- start-dev
volumes:
- dev-keycloak-data:/opt/keycloak
- dev-keycloak-data-dev:/opt/keycloak
environment:
- KEYCLOAK_ADMIN=${KEYCLOAK_MASTER_ADMIN:-devuser}
- KEYCLOAK_ADMIN_PASSWORD=${KEYCLOAK_MASTER_ADMIN_PASSWORD:-devpass}

redis:
image: redis:alpine
restart: no
container_name: inethi-backend-celery-redis
container_name: inethi-backend-celery-redis-dev

celery:
build:
Expand All @@ -71,7 +74,7 @@ services:
environment:
- CELERY_BROKER=redis://redis:6379/0
- CELERY_BACKEND=redis://redis:6379/0
container_name: inethi-backend-celery
container_name: inethi-backend-celery-dev
depends_on:
- redis
- db
Expand All @@ -87,11 +90,11 @@ services:
environment:
- CELERY_BROKER=redis://redis:6379/0
- CELERY_BACKEND=redis://redis:6379/0
container_name: inethi-backend-celery-beat
container_name: inethi-backend-celery-beat-dev
depends_on:
- redis
- db

volumes:
dev-db-data-timescale:
dev-keycloak-data:
dev-db-data-timescale-dev:
dev-keycloak-data-dev:
24 changes: 12 additions & 12 deletions docker-compose-prod.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
services:
app:
container_name: inethi-backend
container_name: inethi-backend-v1
restart: unless-stopped
env_file:
- ./.env
Expand All @@ -25,29 +25,30 @@ services:
- db
labels:
- "traefik.enable=true"
- "traefik.http.routers.backend.rule=Host(`backend.inethicloud.net`)"
- "traefik.http.routers.backend.entrypoints=websecure"
- "traefik.http.routers.backend.rule=Host(`${TRAEFIK_BACKEND_HOST:-backend.inethicloud.net}`)"
- "traefik.http.routers.backend.entrypoints=${TRAEFIK_ENTRYPOINTS:-websecure}"
- "traefik.http.services.backend.loadbalancer.server.port=8000"
- "traefik.http.routers.backend.tls.certresolver=${TRAEFIK_CERTRESOLVER:-letsencrypt}"

db:
image: timescale/timescaledb:latest-pg17
restart: unless-stopped
container_name: inethi-backend-db-timescale
container_name: inethi-backend-db-timescale-v1
env_file:
- ./.env
volumes:
- prod-db-data-timescale:/var/lib/postgresql/data
- prod-db-data-timescale-v1:/var/lib/postgresql/data
environment:
- POSTGRES_DB=${DB_NAME:-devdb}
- POSTGRES_USER=${DB_USER:-devuser}
- POSTGRES_PASSWORD=${DB_PASS:-devpass}
labels:
- "traefik.enable=true"
- "traefik.http.routers.backenddb.entrypoints=websecure"
- "traefik.http.routers.backenddbv1.entrypoints=${TRAEFIK_ENTRYPOINTS:-websecure}"

redis:
image: redis:alpine
container_name: inethi-backend-celery-redis
container_name: inethi-backend-celery-redis-v1

celery:
build:
Expand All @@ -61,7 +62,7 @@ services:
environment:
- CELERY_BROKER=redis://redis:6379/0
- CELERY_BACKEND=redis://redis:6379/0
container_name: inethi-backend-celery
container_name: inethi-backend-celery-v1
depends_on:
- redis
- db
Expand All @@ -76,16 +77,15 @@ services:
environment:
- CELERY_BROKER=redis://redis:6379/0
- CELERY_BACKEND=redis://redis:6379/0
container_name: inethi-backend-celery-beat
container_name: inethi-backend-celery-beat-v1
depends_on:
- redis
- db


networks:
default:
external:
name: "inethi-bridge-traefik"
name: "${TRAEFIK_NETWORK_BRIDGE:-inethi-bridge-traefik}"

volumes:
prod-db-data-timescale:
prod-db-data-timescale-v1:
13 changes: 13 additions & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Setting Up The System

1. Populate a `.env` file.
2. If you don't have keycloak and radiusdesk you need to set these up. The details for Keycloak can be found [here](./keycloak/README.md).
3. Run the compose file of your choosing then run `docker exec inethi-backend python manage.py create_superuser`.
4. Create json files and place them in the [inethi dir](../inethi/) for your NETWORK admin user(s), RADIUSDesk instance(s) and smart contract(s) commands, see the [users example](./examples/users.json), [RADIUSDesk example](./examples/sample_radiusdesk_config.json) and the contracts [example](./examples/smart_contracts.json) then run the following:

```
docker exec -it inethi-backend sh
python manage.py create_users_from_json user.json
python manage.py create_smart_contracts_from_json smart_contracts.json
python manage.py create_radiusdesk_from_json sample_radiusdesk_config.json
```
148 changes: 148 additions & 0 deletions docs/examples/sample_radiusdesk_config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
[
{
"name": "Main RADIUSdesk Instance",
"base_url": "https://radiusdesk.example.com",
"username": "admin",
"password": "admin_password",
"accepts_crypto": true,
"administrators": ["devuser", "network_admin"],
"clouds": [
{
"name": "Main Cloud",
"radius_desk_id": 1,
"realms": [
{
"name": "Default Realm",
"radius_desk_id": 1,
"profiles": [
{
"name": "Basic Plan",
"radius_desk_id": 1,
"data_limit_enabled": true,
"data_limit_gb": 5.0,
"data_limit_reset": "monthly",
"speed_limit_enabled": true,
"speed_limit_mbs": 10.0,
"limit_session_enabled": false,
"session_limit": 0,
"cost": 0.0
},
{
"name": "Premium Plan",
"radius_desk_id": 2,
"data_limit_enabled": true,
"data_limit_gb": 20.0,
"data_limit_reset": "monthly",
"speed_limit_enabled": true,
"speed_limit_mbs": 50.0,
"limit_session_enabled": false,
"session_limit": 0,
"cost": 10.0
},
{
"name": "Unlimited Plan",
"radius_desk_id": 3,
"data_limit_enabled": false,
"data_limit_gb": 0,
"data_limit_reset": "never",
"speed_limit_enabled": true,
"speed_limit_mbs": 100.0,
"limit_session_enabled": true,
"session_limit": 1,
"cost": 25.0
}
]
},
{
"name": "Guest Realm",
"radius_desk_id": 2,
"profiles": [
{
"name": "Guest Access",
"radius_desk_id": 4,
"data_limit_enabled": true,
"data_limit_gb": 1.0,
"data_limit_reset": "daily",
"speed_limit_enabled": true,
"speed_limit_mbs": 5.0,
"limit_session_enabled": true,
"session_limit": 2,
"cost": 0.0
}
]
}
]
},
{
"name": "Secondary Cloud",
"radius_desk_id": 2,
"realms": [
{
"name": "Business Realm",
"radius_desk_id": 3,
"profiles": [
{
"name": "Business Basic",
"radius_desk_id": 5,
"data_limit_enabled": true,
"data_limit_gb": 50.0,
"data_limit_reset": "monthly",
"speed_limit_enabled": true,
"speed_limit_mbs": 25.0,
"limit_session_enabled": false,
"session_limit": 0,
"cost": 15.0
},
{
"name": "Business Pro",
"radius_desk_id": 6,
"data_limit_enabled": true,
"data_limit_gb": 100.0,
"data_limit_reset": "monthly",
"speed_limit_enabled": true,
"speed_limit_mbs": 100.0,
"limit_session_enabled": true,
"session_limit": 5,
"cost": 35.0
}
]
}
]
}
]
},
{
"name": "Test RADIUSdesk Instance",
"base_url": "https://test-radiusdesk.example.com",
"username": "test_admin",
"password": "test_password",
"accepts_crypto": false,
"administrators": ["devuser"],
"clouds": [
{
"name": "Test Cloud",
"radius_desk_id": 1,
"realms": [
{
"name": "Test Realm",
"radius_desk_id": 1,
"profiles": [
{
"name": "Test Profile",
"radius_desk_id": 1,
"data_limit_enabled": false,
"data_limit_gb": 0,
"data_limit_reset": "never",
"speed_limit_enabled": false,
"speed_limit_mbs": 0,
"limit_session_enabled": false,
"session_limit": 0,
"cost": 0.0
}
]
}
]
}
]
}
]
20 changes: 20 additions & 0 deletions docs/examples/smart_contracts.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
[
{
"name": "iNethi Registry",
"address": "0x9b1a3F8FadD0dc86FBae5Cf66Fa682fDcd84a9b0",
"contract_type": "account index",
"description": "iNethi account registry for celo eth faucet",
"write_access": false,
"read_access": false,
"user_name": "inethiofficial"
},
{
"name": "iNethi Faucet",
"address": "0xB821E49ADB53F0AbeD834278d5dFc57901c30Eea",
"contract_type": "eth faucet",
"description": "iNethi faucet for celo",
"write_access": false,
"read_access": false,
"user_name": "inethiofficial"
}
]
12 changes: 12 additions & 0 deletions docs/examples/users.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
[
{
"username": "network_admin_1",
"password": "password1",
"email": "network_admin_1@inethi.com"
},
{
"username": "network_admin_2",
"password": "password2",
"email": "network_admin_2@inethi.com"
}
]
Loading