Create basic Helm chart for LiveKit agent framework deployment on Kubernetes, inspired by meet-summary FastAPI server configuration. Integrate chart into local tilt development stack and properly handle certificate issues that typically occur when calling LiveKit server with nip.io domain names.
132 lines
4.3 KiB
Plaintext
132 lines
4.3 KiB
Plaintext
load('ext://uibutton', 'cmd_button', 'bool_input', 'location')
|
|
load('ext://namespace', 'namespace_create', 'namespace_inject')
|
|
namespace_create('meet')
|
|
|
|
DEV_ENV = os.getenv('DEV_ENV', 'dev')
|
|
|
|
if DEV_ENV == 'dev-dinum':
|
|
update_settings(suppress_unused_image_warnings=["localhost:5001/meet-frontend-generic:latest"])
|
|
|
|
if DEV_ENV == 'dev-keycloak':
|
|
update_settings(suppress_unused_image_warnings=["localhost:5001/meet-frontend-dinum:latest"])
|
|
|
|
|
|
def clean_old_images(image_name):
|
|
local('docker images -q %s | tail -n +2 | xargs -r docker rmi' % image_name)
|
|
|
|
docker_build(
|
|
'localhost:5001/meet-backend:latest',
|
|
context='..',
|
|
dockerfile='../Dockerfile',
|
|
only=['./src/backend', './src/mail', './docker'],
|
|
target = 'backend-production',
|
|
live_update=[
|
|
sync('../src/backend', '/app'),
|
|
run(
|
|
'pip install -r /app/requirements.txt',
|
|
trigger=['./api/requirements.txt']
|
|
)
|
|
]
|
|
)
|
|
clean_old_images('localhost:5001/meet-backend')
|
|
|
|
docker_build(
|
|
'localhost:5001/meet-frontend-dinum:latest',
|
|
context='..',
|
|
dockerfile='../docker/dinum-frontend/Dockerfile',
|
|
only=['./src/frontend', './docker', './.dockerignore'],
|
|
target = 'frontend-production',
|
|
live_update=[
|
|
sync('../src/frontend', '/home/frontend'),
|
|
]
|
|
)
|
|
clean_old_images('localhost:5001/meet-frontend-dinum')
|
|
|
|
docker_build(
|
|
'localhost:5001/meet-frontend-generic:latest',
|
|
context='..',
|
|
dockerfile='../src/frontend/Dockerfile',
|
|
only=['./src/frontend', './docker', './.dockerignore'],
|
|
target = 'meet-dev',
|
|
live_update=[
|
|
sync('../src/frontend', '/home/frontend'),
|
|
]
|
|
)
|
|
clean_old_images('localhost:5001/meet-frontend-generic')
|
|
|
|
docker_build(
|
|
'localhost:5001/meet-summary:latest',
|
|
context='../src/summary',
|
|
dockerfile='../src/summary/Dockerfile',
|
|
only=['.', '../../docker', '../../.dockerignore'],
|
|
target = 'production',
|
|
live_update=[
|
|
sync('../src/summary', '/home/summary'),
|
|
]
|
|
)
|
|
clean_old_images('localhost:5001/meet-summary')
|
|
|
|
docker_build(
|
|
'localhost:5001/meet-agents:latest',
|
|
context='../src/agents',
|
|
dockerfile='../src/agents/Dockerfile',
|
|
only=['.'],
|
|
target = 'production',
|
|
live_update=[
|
|
sync('../src/agents', '/app'),
|
|
]
|
|
)
|
|
clean_old_images('localhost:5001/meet-agents')
|
|
|
|
# Copy the mkcert root CA certificate to our Docker build context
|
|
# This is necessary because we need to inject the certificate into our LiveKit container
|
|
local_resource(
|
|
'copy-root-ca',
|
|
cmd='cp -f "$(mkcert -CAROOT)/rootCA.pem" ../docker/livekit/rootCA.pem',
|
|
deps=[], # No dependencies needed
|
|
)
|
|
# Build a custom LiveKit Docker image that includes our root CA certificate
|
|
# This allows LiveKit to trust our local development certificates
|
|
docker_build(
|
|
'localhost:5001/meet-livekit:latest',
|
|
context='../docker/livekit',
|
|
dockerfile='./../docker/livekit/Dockerfile',
|
|
only=['.'],
|
|
)
|
|
clean_old_images('localhost:5001/meet-livekit')
|
|
|
|
k8s_yaml(local('cd ../src/helm && helmfile -n meet -e ${DEV_ENV:-dev} template .'))
|
|
|
|
k8s_resource('minio-bucket', resource_deps=['minio'])
|
|
k8s_resource('meet-backend', resource_deps=['postgresql', 'minio', 'redis', 'livekit-livekit-server'])
|
|
k8s_resource('meet-backend-migrate', resource_deps=['meet-backend'])
|
|
k8s_resource('livekit-livekit-server-test-connection', resource_deps=['livekit-livekit-server'])
|
|
k8s_resource('keycloak', resource_deps=['kc-postgresql'])
|
|
k8s_resource('meet-backend-createsuperuser', resource_deps=['meet-backend-migrate'])
|
|
|
|
migration = '''
|
|
set -eu
|
|
# get k8s pod name from tilt resource name
|
|
POD_NAME="$(tilt get kubernetesdiscovery meet-backend -ojsonpath='{.status.pods[0].name}')"
|
|
kubectl -n meet exec "$POD_NAME" -- python manage.py makemigrations
|
|
'''
|
|
cmd_button('Make migration',
|
|
argv=['sh', '-c', migration],
|
|
resource='meet-backend',
|
|
icon_name='developer_board',
|
|
text='Run makemigration',
|
|
)
|
|
|
|
pod_migrate = '''
|
|
set -eu
|
|
# get k8s pod name from tilt resource name
|
|
POD_NAME="$(tilt get kubernetesdiscovery meet-backend -ojsonpath='{.status.pods[0].name}')"
|
|
kubectl -n meet exec "$POD_NAME" -- python manage.py migrate --no-input
|
|
'''
|
|
cmd_button('Migrate db',
|
|
argv=['sh', '-c', pod_migrate],
|
|
resource='meet-backend',
|
|
icon_name='developer_board',
|
|
text='Run database migration',
|
|
)
|