|
| 1 | +#!/bin/bash |
| 2 | +set -e |
| 3 | + |
| 4 | +# Paths |
| 5 | +WEB_DIR="/var/www/html" |
| 6 | +SUMA_DIR="/app/suma" |
| 7 | +SUMA_LOG="/var/log/suma.log" |
| 8 | + |
| 9 | +# Generate Apache config with environment variables |
| 10 | +cat > /etc/apache2/sites-available/000-default.conf <<EOF |
| 11 | +<VirtualHost *:80> |
| 12 | + DocumentRoot ${WEB_DIR} |
| 13 | +
|
| 14 | + Alias /sumaserver ${SUMA_DIR}/service/web |
| 15 | + Alias /suma/client ${SUMA_DIR}/web |
| 16 | + Alias /suma/analysis ${SUMA_DIR}/analysis |
| 17 | +
|
| 18 | + <Location "/suma"> |
| 19 | + Options -Indexes +FollowSymLinks |
| 20 | + Require all granted |
| 21 | + </Location> |
| 22 | +
|
| 23 | + <Location "/sumaserver"> |
| 24 | + Options -Indexes +FollowSymLinks |
| 25 | + AllowOverride All |
| 26 | + RewriteEngine On |
| 27 | + RewriteCond %{REQUEST_FILENAME} -s [OR] |
| 28 | + RewriteCond %{REQUEST_FILENAME} -l [OR] |
| 29 | + RewriteCond %{REQUEST_FILENAME} -d |
| 30 | + RewriteRule ^.*$ - [NC,L] |
| 31 | + RewriteRule ^.*$ index.php [NC,L] |
| 32 | + Require all granted |
| 33 | + </Location> |
| 34 | +
|
| 35 | + ErrorLog \${APACHE_LOG_DIR}/error.log |
| 36 | + CustomLog \${APACHE_LOG_DIR}/access.log combined |
| 37 | +</VirtualHost> |
| 38 | +EOF |
| 39 | + |
| 40 | +# Enable rewrite module (already enabled in Dockerfile but safe here) |
| 41 | +a2enmod rewrite |
| 42 | + |
| 43 | +# Generate Suma config.yaml from env vars if not exists |
| 44 | +CONFIG_PATH="${SUMA_DIR}/service/web/config/config.yaml" |
| 45 | +if [ ! -f "$CONFIG_PATH" ]; then |
| 46 | + echo "Generating Suma config.yaml..." |
| 47 | + cat > "$CONFIG_PATH" <<EOC |
| 48 | +SUMA_SERVER_PATH: $SUMA_DIR/service |
| 49 | +SUMA_CONTROLLER_PATH: $SUMA_DIR/service/controllers |
| 50 | +SUMA_BASE_URL: /sumaserver |
| 51 | +SUMA_DEBUG: true |
| 52 | +EOC |
| 53 | +fi |
| 54 | + |
| 55 | +# Generate Suma config.yaml from env vars if not exists |
| 56 | +ANALYSIS_CONFIG_PATH="${SUMA_DIR}/analysis/config/config.yaml" |
| 57 | +if [ ! -f "$ANALYSIS_CONFIG_PATH" ]; then |
| 58 | + echo "Generating Suma Analysis config.yaml..." |
| 59 | + cat > "$ANALYSIS_CONFIG_PATH" <<EOC |
| 60 | +showErrors: false |
| 61 | +serverIO: |
| 62 | + baseUrl: ${SERVICE_URL}/sumaserver/query |
| 63 | +analysisBaseUrl: ${SERVICE_URL}/suma/analysis/reports |
| 64 | +nightly: |
| 65 | + timezone: ${SUMA_ANALYTICS_TIMEZONE} |
| 66 | + displayFormat: Y-m-d |
| 67 | + recipients: ${SUMA_ANALYTICS_RECIPIENTS} |
| 68 | + errorRecipients: ${SUMA_ANALYTICS_ERROR_RECIPIENTS} |
| 69 | + emailFrom: "${SUMA_ANALYTICS_EMAIL_FROM}" |
| 70 | + emailSubj: "${SUMA_ANALYTICS_EMAIL_SUBJECT}" |
| 71 | +EOC |
| 72 | +fi |
| 73 | + |
| 74 | +# Generate Suma Database config.yaml from env vars if not exists |
| 75 | +DB_CONFIG_PATH="${SUMA_DIR}/service/config/config.yaml" |
| 76 | +if [ ! -f "$DB_CONFIG_PATH" ]; then |
| 77 | + echo "Generating Suma DB config.yaml..." |
| 78 | + cat > "$DB_CONFIG_PATH" <<EOC |
| 79 | +production: |
| 80 | + sumaserver: |
| 81 | + db: |
| 82 | + host: ${DB_HOST} |
| 83 | + platform: Pdo_Mysql |
| 84 | + dbname: ${DB_NAME} |
| 85 | + user: ${DB_USER} |
| 86 | + pword: ${DB_PASS} |
| 87 | + port: ${DB_PORT} |
| 88 | + log: |
| 89 | + path: |
| 90 | + name: ${SUMA_LOG} |
| 91 | + admin: |
| 92 | + user: ${SUMA_ADMIN_USER} |
| 93 | + pass: ${SUMA_ADMIN_PASS} |
| 94 | + queryserver: |
| 95 | + db: |
| 96 | + limit: 10000 |
| 97 | +
|
| 98 | +development: |
| 99 | + _extends: production |
| 100 | + sumaserver: |
| 101 | + db: |
| 102 | + dbname: sumadev |
| 103 | + log: |
| 104 | + path: |
| 105 | +EOC |
| 106 | +fi |
| 107 | + |
| 108 | +SUMA_CLIENT_CONFIG_PATH="${SUMA_DIR}/web/config/spaceassessConfig.js" |
| 109 | +if [ ! -f "$SUMA_CLIENT_CONFIG_PATH" ]; then |
| 110 | + echo "Generating Suma spaceassessConfig.js..." |
| 111 | + cp ${SUMA_DIR}/web/config/spaceassessConfig_example.js ${SUMA_CLIENT_CONFIG_PATH} |
| 112 | +fi |
| 113 | + |
| 114 | + |
| 115 | +# Install PHP dependencies if composer.json is present |
| 116 | +if [ -f "${SUMA_DIR}/composer.json" ]; then |
| 117 | + echo "Installing PHP dependencies via Composer..." |
| 118 | + cd "${SUMA_DIR}" |
| 119 | + composer install --no-interaction --prefer-dist --optimize-autoloader |
| 120 | + chown -R www-data:www-data ${SUMA_DIR} |
| 121 | +fi |
| 122 | + |
| 123 | +# create suma.log file |
| 124 | +echo "Touching suma.log..." |
| 125 | +touch ${SUMA_LOG} |
| 126 | +chown www-data:www-data ${SUMA_LOG} |
| 127 | + |
| 128 | +# Chown of files for webserver |
| 129 | +chown www-data:www-data ${SUMA_CLIENT_CONFIG_PATH} ${DB_CONFIG_PATH} ${CONFIG_PATH} |
| 130 | + |
| 131 | +# Wait for MySQL to be ready before starting Apache |
| 132 | +if [ -n "$DB_HOST" ]; then |
| 133 | + echo "Waiting for MySQL at $DB_HOST:$DB_PORT..." |
| 134 | + for i in {1..30}; do |
| 135 | + if mysqladmin ping -h"$DB_HOST" -P"${DB_PORT:-3306}" --silent; then |
| 136 | + echo "MySQL is up!" |
| 137 | + break |
| 138 | + fi |
| 139 | + echo "Waiting for MySQL... retry $i/30" |
| 140 | + sleep 2 |
| 141 | + done |
| 142 | +fi |
| 143 | + |
| 144 | +exec "$@" |
0 commit comments