Claude super rough first cut of a few packages. Almost certainly entirely unusable...
This commit is contained in:
141
CloudronPackages/Resgrid/start.sh
Normal file
141
CloudronPackages/Resgrid/start.sh
Normal file
@@ -0,0 +1,141 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# Function for logging
|
||||
log() {
|
||||
echo "$(date +"%Y-%m-%d %H:%M:%S"): $1"
|
||||
}
|
||||
|
||||
log "Starting Resgrid Cloudron App..."
|
||||
|
||||
# Initialize data directory if it's the first run
|
||||
if [ ! -f /app/data/config/.initialized ]; then
|
||||
log "First run detected, initializing data directory..."
|
||||
|
||||
# Copy initial configuration files if they don't exist
|
||||
if [ ! -f /app/data/config/resgrid.env ]; then
|
||||
log "Creating initial configuration..."
|
||||
|
||||
# Generate random keys and passwords
|
||||
ADMIN_PASSWORD=$(openssl rand -base64 12)
|
||||
DB_PASSWORD=${CLOUDRON_MYSQL_PASSWORD}
|
||||
API_KEY=$(openssl rand -hex 32)
|
||||
|
||||
# Create environment configuration from template
|
||||
export RESGRID_ADMIN_PASSWORD=$ADMIN_PASSWORD
|
||||
export RESGRID_DB_PASSWORD=$DB_PASSWORD
|
||||
export RESGRID_API_KEY=$API_KEY
|
||||
export RESGRID_DB_HOST=${CLOUDRON_MYSQL_HOST}
|
||||
export RESGRID_DB_PORT=${CLOUDRON_MYSQL_PORT}
|
||||
export RESGRID_DB_USER=${CLOUDRON_MYSQL_USERNAME}
|
||||
export RESGRID_DB_NAME=${CLOUDRON_MYSQL_DATABASE}
|
||||
export RESGRID_REDIS_HOST=${CLOUDRON_REDIS_HOST}
|
||||
export RESGRID_REDIS_PORT=${CLOUDRON_REDIS_PORT}
|
||||
export RESGRID_REDIS_PASSWORD=${CLOUDRON_REDIS_PASSWORD}
|
||||
export RESGRID_RABBITMQ_HOST=${CLOUDRON_RABBITMQ_HOST}
|
||||
export RESGRID_RABBITMQ_PORT=${CLOUDRON_RABBITMQ_PORT}
|
||||
export RESGRID_RABBITMQ_USER=${CLOUDRON_RABBITMQ_USERNAME}
|
||||
export RESGRID_RABBITMQ_PASSWORD=${CLOUDRON_RABBITMQ_PASSWORD}
|
||||
export RESGRID_RABBITMQ_VHOST=${CLOUDRON_RABBITMQ_VHOST}
|
||||
export RESGRID_BASE_URL="https://${CLOUDRON_APP_DOMAIN}"
|
||||
export RESGRID_API_URL="https://${CLOUDRON_APP_DOMAIN}/api"
|
||||
export RESGRID_EVENTS_URL="https://${CLOUDRON_APP_DOMAIN}/events"
|
||||
|
||||
# OIDC Configuration for Cloudron
|
||||
export RESGRID_OIDC_ENABLED="true"
|
||||
export RESGRID_OIDC_CLIENT_ID=${CLOUDRON_OIDC_CLIENT_ID}
|
||||
export RESGRID_OIDC_CLIENT_SECRET=${CLOUDRON_OIDC_CLIENT_SECRET}
|
||||
export RESGRID_OIDC_AUTHORITY=${CLOUDRON_OIDC_ISSUER}
|
||||
export RESGRID_OIDC_CALLBACK_PATH="/api/v1/session/callback"
|
||||
|
||||
# Process the template
|
||||
envsubst < /app/code/resgrid.env.template > /app/data/config/resgrid.env
|
||||
|
||||
log "Initial configuration created successfully."
|
||||
fi
|
||||
|
||||
# Mark as initialized
|
||||
touch /app/data/config/.initialized
|
||||
log "Initialization completed successfully."
|
||||
fi
|
||||
|
||||
# Link configuration files to expected locations
|
||||
ln -sf /app/data/config/resgrid.env /app/code/resgrid.env
|
||||
ln -sf /app/code/nginx.conf /etc/nginx/sites-available/default
|
||||
|
||||
# Ensure uploads directory exists with correct permissions
|
||||
mkdir -p /app/data/uploads
|
||||
chmod 755 /app/data/uploads
|
||||
|
||||
# Wait for database to be ready
|
||||
log "Waiting for MySQL database to be ready..."
|
||||
until nc -z ${CLOUDRON_MYSQL_HOST} ${CLOUDRON_MYSQL_PORT}; do
|
||||
log "MySQL is unavailable - sleeping for 5 seconds"
|
||||
sleep 5
|
||||
done
|
||||
log "MySQL is available, continuing..."
|
||||
|
||||
# Wait for Redis to be ready
|
||||
log "Waiting for Redis to be ready..."
|
||||
until nc -z ${CLOUDRON_REDIS_HOST} ${CLOUDRON_REDIS_PORT}; do
|
||||
log "Redis is unavailable - sleeping for 5 seconds"
|
||||
sleep 5
|
||||
done
|
||||
log "Redis is available, continuing..."
|
||||
|
||||
# Wait for RabbitMQ to be ready
|
||||
log "Waiting for RabbitMQ to be ready..."
|
||||
until nc -z ${CLOUDRON_RABBITMQ_HOST} ${CLOUDRON_RABBITMQ_PORT}; do
|
||||
log "RabbitMQ is unavailable - sleeping for 5 seconds"
|
||||
sleep 5
|
||||
done
|
||||
log "RabbitMQ is available, continuing..."
|
||||
|
||||
# Pull Resgrid Docker images
|
||||
log "Pulling Resgrid Docker images..."
|
||||
docker pull resgridllc/resgridwebcore:${RESGRID_VERSION}
|
||||
docker pull resgridllc/resgridwebservices:${RESGRID_VERSION}
|
||||
docker pull resgridllc/resgridworkersconsole:${RESGRID_VERSION}
|
||||
docker pull resgridllc/resgridwebevents:${RESGRID_VERSION}
|
||||
|
||||
# Create Docker network if it doesn't exist
|
||||
docker network create resgrid-network 2>/dev/null || true
|
||||
|
||||
# Run the containers with environment variables from the config file
|
||||
log "Starting Resgrid containers..."
|
||||
source /app/data/config/resgrid.env
|
||||
|
||||
# Start API Service
|
||||
docker run -d --name resgrid-api \
|
||||
--restart unless-stopped \
|
||||
--network resgrid-network \
|
||||
-p 8001:80 \
|
||||
--env-file /app/data/config/resgrid.env \
|
||||
resgridllc/resgridwebservices:${RESGRID_VERSION}
|
||||
|
||||
# Start Web Core
|
||||
docker run -d --name resgrid-web \
|
||||
--restart unless-stopped \
|
||||
--network resgrid-network \
|
||||
-p 8002:80 \
|
||||
--env-file /app/data/config/resgrid.env \
|
||||
resgridllc/resgridwebcore:${RESGRID_VERSION}
|
||||
|
||||
# Start Events Service
|
||||
docker run -d --name resgrid-events \
|
||||
--restart unless-stopped \
|
||||
--network resgrid-network \
|
||||
-p 8003:80 \
|
||||
--env-file /app/data/config/resgrid.env \
|
||||
resgridllc/resgridwebevents:${RESGRID_VERSION}
|
||||
|
||||
# Start Workers Console
|
||||
docker run -d --name resgrid-workers \
|
||||
--restart unless-stopped \
|
||||
--network resgrid-network \
|
||||
--env-file /app/data/config/resgrid.env \
|
||||
resgridllc/resgridworkersconsole:${RESGRID_VERSION}
|
||||
|
||||
# Start supervisord to manage Nginx and other processes
|
||||
log "Starting supervisord..."
|
||||
exec /usr/bin/supervisord -c /app/code/supervisord.conf
|
Reference in New Issue
Block a user