templates/blueprints/plane/template.toml
2025-04-02 23:35:55 -07:00

238 lines
6.3 KiB
TOML

[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};
}
}
}
"""