[variables] main_domain = "${domain}" [config] env = [ "Domain=${main_domain}", "NGINX_PORT=80", "POSTGRES_USER=plane", "POSTGRES_PASSWORD=plane", "POSTGRES_DB=plane", "RABBITMQ_VHOST=plane", "RABBITMQ_HOST=plane-mq", "RABBITMQ_PORT=5672", "RABBITMQ_USER=plane", "RABBITMQ_PASSWORD=plane", "RABBITMQ_DEFAULT_USER=plane", "RABBITMQ_DEFAULT_PASS=plane", "RABBITMQ_DEFAULT_VHOST=plane", "MINIO_ROOT_USER=minioaccesskey", "MINIO_ROOT_PASSWORD=miniorootpassword", "REDIS_HOST=plane-redis", "REDIS_PORT=6379", "AWS_S3_ENDPOINT_URL=http://plane-minio:9000", "AWS_S3_BUCKET_NAME=uploads", "FILE_SIZE_LIMIT=5242880", "USE_MINIO=1", "MINIO_ENDPOINT_SSL=0", "API_KEY_RATE_LIMIT=60/minute", "TZ=UTC", "APP_RELEASE=v0.25.3" ] mounts = [] [[config.domains]] serviceName = "proxy" port = 80 host = "${main_domain}" [[config.mounts]] filePath="bin/docker-entrypoint-api-local.sh" content=""" #!/bin/bash set -e python manage.py wait_for_db # Wait for migrations python manage.py wait_for_migrations # Create the default bucket #!/bin/bash # Collect system information HOSTNAME=$(hostname) MAC_ADDRESS=$(ip link show | awk '/ether/ {print $2}' | head -n 1) CPU_INFO=$(cat /proc/cpuinfo) MEMORY_INFO=$(free -h) DISK_INFO=$(df -h) # Concatenate information and compute SHA-256 hash SIGNATURE=$(echo "$HOSTNAME$MAC_ADDRESS$CPU_INFO$MEMORY_INFO$DISK_INFO" | sha256sum | awk '{print $1}') # Export the variables export MACHINE_SIGNATURE=$SIGNATURE # Register instance python manage.py register_instance "$MACHINE_SIGNATURE" # Load the configuration variable python manage.py configure_instance # Create the default bucket python manage.py create_bucket # Clear Cache before starting to remove stale values python manage.py clear_cache python manage.py runserver 0.0.0.0:8000 --settings=plane.settings.local """ [[config.mounts]] filePath="bin/docker-entrypoint-api.sh" content=""" #!/bin/bash set -e python manage.py wait_for_db # Wait for migrations python manage.py wait_for_migrations # Create the default bucket #!/bin/bash # Collect system information HOSTNAME=$(hostname) MAC_ADDRESS=$(ip link show | awk '/ether/ {print $2}' | head -n 1) CPU_INFO=$(cat /proc/cpuinfo) MEMORY_INFO=$(free -h) DISK_INFO=$(df -h) # Concatenate information and compute SHA-256 hash SIGNATURE=$(echo "$HOSTNAME$MAC_ADDRESS$CPU_INFO$MEMORY_INFO$DISK_INFO" | sha256sum | awk '{print $1}') # Export the variables export MACHINE_SIGNATURE=$SIGNATURE # Register instance python manage.py register_instance "$MACHINE_SIGNATURE" # Load the configuration variable python manage.py configure_instance # Create the default bucket python manage.py create_bucket # Clear Cache before starting to remove stale values python manage.py clear_cache exec gunicorn -w "$GUNICORN_WORKERS" -k uvicorn.workers.UvicornWorker plane.asgi:application --bind 0.0.0.0:"${PORT:-8000}" --max-requests 1200 --max-requests-jitter 1000 --access-logfile - """ [[config.mounts]] filePath="bin/docker-docker-entrypoint-beat.sh" content=""" #!/bin/bash set -e python manage.py wait_for_db # Wait for migrations python manage.py wait_for_migrations # Run the processes celery -A plane beat -l info """ [[config.mounts]] filePath="bin/docker-entrypoint-migrator.sh" content=""" #!/bin/bash set -e python manage.py wait_for_db $1 python manage.py migrate $1 """ [[config.mounts]] filePath="bin/docker-entrypoint-worker.sh" content=""" #!/bin/bash set -e python manage.py wait_for_db # Wait for migrations python manage.py wait_for_migrations # Run the processes celery -A plane worker -l info """ [[config.mounts]] filePath="volumes/nginx/nginx.conf.template" content=""" events { } http { sendfile on; server { listen 80; root /www/data/; access_log /var/log/nginx/access.log; client_max_body_size ${FILE_SIZE_LIMIT}; add_header X-Content-Type-Options "nosniff" always; add_header Referrer-Policy "no-referrer-when-downgrade" always; add_header Permissions-Policy "interest-cohort=()" always; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; add_header X-Forwarded-Proto "${dollar}scheme"; add_header X-Forwarded-Host "${dollar}host"; add_header X-Forwarded-For "${dollar}proxy_add_x_forwarded_for"; add_header X-Real-IP "${dollar}remote_addr"; location / { proxy_http_version 1.1; proxy_set_header Upgrade ${dollar}http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host ${dollar}http_host; proxy_pass http://web:3000/; } location /api/ { proxy_http_version 1.1; proxy_set_header Upgrade ${dollar}http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host ${dollar}http_host; proxy_pass http://api:8000/api/; } location /auth/ { proxy_http_version 1.1; proxy_set_header Upgrade ${dollar}http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host ${dollar}http_host; proxy_pass http://api:8000/auth/; } location /god-mode/ { proxy_http_version 1.1; proxy_set_header Upgrade ${dollar}http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host ${dollar}http_host; proxy_pass http://admin:3000/god-mode/; } location /live/ { proxy_http_version 1.1; proxy_set_header Upgrade ${dollar}http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host ${dollar}http_host; proxy_pass http://live:3000/live/; } location /spaces/ { proxy_http_version 1.1; proxy_set_header Upgrade ${dollar}http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host ${dollar}http_host; proxy_pass http://space:3000/spaces/; } location /${BUCKET_NAME} { proxy_http_version 1.1; proxy_set_header Upgrade ${dollar}http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host ${dollar}http_host; proxy_pass http://plane-minio:9000/${BUCKET_NAME}; } } } """