Network automation tool with Intent based networking using AI Agentic routing workflow.
1.5K
ENV Variable
#* Application Configuration
APP_NAME=XNETMANAGER
CONFIG_NAME=Production
FLASK_APP=run.py
SECRET_KEY=SECRET
#! Database Configuration
DATABASE_URL=postgresql://xnetmanager:[email protected]:5432/xnetmanager
POSTGRES_USER=xnetmanager
POSTGRES_PASSWORD=xnetmanager
POSTGRES_DB=xnetmanager
#* Security Configuration
BCRYPT_LOG_ROUNDS=13
# Mail Configuration
MAIL_SERVER=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=EMAIL
MAIL_PASSWORD=PASSWORD
MAIL_USE_TLS=True
MAIL_USE_SSL=False
#! AI and External API Configuration
OPENAI_API_KEY=API-KEY
TALITA_API_KEY=API-KEY
TALITA_URL=https://talita.lintasarta.co.id/api/portal
#* Data Directory Configuration
BACKUP_DIR=data/backups
CONFIG_DIR=data/configurations
TEMPLATE_DIR=data/templates
#* Cloudflare Configuration
CLOUDFLARED_TOKEN=SECRET
ENTRYPOINT
#!/bin/bash
# Entrypoint script for initial database setup and application start
# Tunggu hingga PostgreSQL siap
until pg_isready -h db -U ${POSTGRES_USER}; do
echo "Waiting for PostgreSQL to be ready..."
sleep 2
done
echo "Memulai proses inisialisasi dan aplikasi XnetManager..."
#! Inisialisasi Database
echo "DB Initialization..."
flask db init
#! Lanjutkan dengan migrasi dan upgrade
echo "Menjalankan 'flask db migrate' dan 'flask db upgrade'..."
flask db migrate -m "Initial Migration"
flask db upgrade
#! Menjalankan inisialisasi database tambahan dari db_init.py
echo "Menjalankan inisialisasi database dengan db_init.py..."
python db_init.py
# Mulai aplikasi menggunakan Gunicorn
echo "Memulai aplikasi XnetManager dengan Gunicorn..."
exec gunicorn --bind 0.0.0.0:8000 --workers 4 run:app
NGINX CONFIGURATION (http)
upstream xnetmanager_flask {
server xnetmanager_flask:8000;
}
server {
listen 80;
server_name xnetmanager.dopnetindo.net;
location / {
proxy_pass http://xnetmanager_flask;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# Konfigurasi untuk Certbot HTTP challenge
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
}
NGINX CONFIGURATION (https)
upstream xnetmanager_flask {
server xnetmanager_flask:8000;
}
server {
listen 443 ssl;
server_name xnetmanager.dopnetindo.net;
ssl_certificate /etc/letsencrypt/live/xnetmanager.dopnetindo.net/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/xnetmanager.dopnetindo.net/privkey.pem;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
location / {
proxy_pass http://xnetmanager_flask;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_redirect off;
}
location /static/ {
root /var/www/src;
}
}
server {
listen 80;
server_name xnetmanager.dopnetindo.net;
return 301 https://$host$request_uri;
}
DOCKER-COMPOSE
services:
xnetmanager:
image: deckiokmal/xnetmanager:latest
container_name: xnetmanager_flask
volumes:
- xnetmanager_backups:/var/www/data/backups
- xnetmanager_configurations:/var/www/data/configurations
- xnetmanager_templates:/var/www/data/templates
- .env:/var/www/.env:ro
env_file:
- .env
ports:
- "8000:8000"
command: ["/bin/sh", "-c", "./entrypoint.sh"]
networks:
- xnetmanager_bridge
depends_on:
- db
restart: unless-stopped
db:
image: postgres:15
container_name: xnetmanager_postgres
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
env_file:
- .env
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- xnetmanager_bridge
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB} || exit 1"]
interval: 10s
timeout: 5s
retries: 5
nginx:
image: nginx:latest
container_name: xnetmanager_nginx
volumes:
- ./src/static:/var/www/src/static
- ./certbot/www:/var/www/certbot
- ./certbot/conf:/etc/letsencrypt
- ./default.conf:/etc/nginx/conf.d/default.conf:ro
ports:
- "80:80"
- "443:443"
networks:
- xnetmanager_bridge
depends_on:
- xnetmanager
restart: unless-stopped
certbot:
image: certbot/certbot
container_name: xnetmanager_certbot
volumes:
- ./certbot/www:/var/www/certbot
- ./certbot/conf:/etc/letsencrypt
entrypoint: "/bin/sh -c 'trap exit TERM; while :; do sleep 1; done'"
networks:
- xnetmanager_bridge
cloudflared:
image: cloudflare/cloudflared:latest
container_name: xnetmanager_cloudflared
command: tunnel --no-autoupdate run --token ${CLOUDFLARED_TOKEN}
env_file:
- .env
networks:
- xnetmanager_bridge
restart: unless-stopped
volumes:
postgres_data:
xnetmanager_backups:
xnetmanager_configurations:
xnetmanager_templates:
networks:
xnetmanager_bridge:
driver: bridge
GENERATE SSL using Lets Encrypt
sudo docker run --rm \
-v $(pwd)/certbot/conf:/etc/letsencrypt \
-v $(pwd)/certbot/www:/var/www/certbot \
certbot/certbot certonly \
--webroot \
--webroot-path=/var/www/certbot \
--email [email protected] \
--agree-tos \
--no-eff-email \
-d yourdomain.net
Content type
Image
Digest
sha256:0f2e07042…
Size
589 MB
Last updated
5 months ago
docker pull deckiokmal/xnetmanager