|
| 1 | +#!/bin/bash |
| 2 | +set -eo pipefail |
| 3 | + |
| 4 | +[[ $DEBUG == true ]] && set -x |
| 5 | + |
| 6 | +check_database_connection() { |
| 7 | + case ${DB_DRIVER} in |
| 8 | + mysql) |
| 9 | + prog="mysqladmin -h ${DB_HOST} -u ${DB_USERNAME} ${DB_PASSWORD:+-p$DB_PASSWORD} status" |
| 10 | + ;; |
| 11 | + pgsql) |
| 12 | + prog=$(find /usr/lib/postgresql/ -name pg_isready) |
| 13 | + prog="${prog} -h ${DB_HOST} -U ${DB_USERNAME} -d ${DB_DATABASE} -t 1" |
| 14 | + ;; |
| 15 | + esac |
| 16 | + timeout=60 |
| 17 | + while ! ${prog} >/dev/null 2>&1 |
| 18 | + do |
| 19 | + timeout=$(( $timeout - 1 )) |
| 20 | + if [[ $timeout -eq 0 ]]; then |
| 21 | + echo |
| 22 | + echo "Could not connect to database server. Aborting..." |
| 23 | + return 1 |
| 24 | + fi |
| 25 | + echo -n "." |
| 26 | + sleep 1 |
| 27 | + done |
| 28 | + echo |
| 29 | +} |
| 30 | + |
| 31 | +initialize_system() { |
| 32 | + APP_ENV=${APP_ENV:-development} |
| 33 | + APP_DEBUG=${APP_DEBUG:-true} |
| 34 | + APP_URL=${APP_URL:-http://localhost} |
| 35 | + APP_KEY=${APP_KEY:-SECRET} |
| 36 | + |
| 37 | + DB_DRIVER=${DB_DRIVER:-pgsql} |
| 38 | + DB_HOST=${DB_HOST:-postgres} |
| 39 | + DB_DATABASE=${DB_DATABASE:-cachet} |
| 40 | + DB_USERNAME=${DB_USERNAME:-postgres} |
| 41 | + DB_PASSWORD=${DB_PASSWORD:-postgres} |
| 42 | + DB_PORT=${DB_PORT:-5432} |
| 43 | + |
| 44 | + CACHE_DRIVER=${CACHE_DRIVER:-apc} |
| 45 | + SESSION_DRIVER=${SESSION_DRIVER:-apc} |
| 46 | + QUEUE_DRIVER=${QUEUE_DRIVER:-database} |
| 47 | + |
| 48 | + MAIL_DRIVER=${MAIL_DRIVER:-smtp} |
| 49 | + MAIL_HOST=${MAIL_HOST:-mailtrap.io} |
| 50 | + MAIL_PORT=${MAIL_PORT:-2525} |
| 51 | + MAIL_USERNAME=${MAIL_USERNAME:-null} |
| 52 | + MAIL_PASSWORD=${MAIL_PASSWORD:-null} |
| 53 | + MAIL_ADDRESS=${MAIL_ADDRESS:-null} |
| 54 | + MAIL_NAME=${MAIL_NAME:-null} |
| 55 | + |
| 56 | + REDIS_HOST=${REDIS_HOST:-null} |
| 57 | + REDIS_DATABASE=${REDIS_DATABASE:-null} |
| 58 | + REDIS_PORT=${REDIS_PORT:-null} |
| 59 | + |
| 60 | + # configure env file |
| 61 | + |
| 62 | + sed 's,{{APP_ENV}},'"${APP_ENV}"',g' -i /var/www/html/.env |
| 63 | + sed 's,{{APP_DEBUG}},'"${APP_DEBUG}"',g' -i /var/www/html/.env |
| 64 | + sed 's,{{APP_URL}},'"${APP_URL}"',g' -i /var/www/html/.env |
| 65 | + sed 's,{{APP_KEY}},'${APP_KEY}',g' -i /var/www/html/.env |
| 66 | + |
| 67 | + sed 's,{{DB_DRIVER}},'"${DB_DRIVER}"',g' -i /var/www/html/.env |
| 68 | + sed 's,{{DB_HOST}},'"${DB_HOST}"',g' -i /var/www/html/.env |
| 69 | + sed 's,{{DB_DATABASE}},'"${DB_DATABASE}"',g' -i /var/www/html/.env |
| 70 | + sed 's,{{DB_USERNAME}},'"${DB_USERNAME}"',g' -i /var/www/html/.env |
| 71 | + sed 's,{{DB_PASSWORD}},'"${DB_PASSWORD}"',g' -i /var/www/html/.env |
| 72 | + |
| 73 | + sed 's,{{CACHE_DRIVER}},'"${CACHE_DRIVER}"',g' -i /var/www/html/.env |
| 74 | + sed 's,{{SESSION_DRIVER}},'"${SESSION_DRIVER}"',g' -i /var/www/html/.env |
| 75 | + sed 's,{{QUEUE_DRIVER}},'"${QUEUE_DRIVER}"',g' -i /var/www/html/.env |
| 76 | + |
| 77 | + sed 's,{{MAIL_DRIVER}},'"${MAIL_DRIVER}"',g' -i /var/www/html/.env |
| 78 | + sed 's,{{MAIL_HOST}},'"${MAIL_HOST}"',g' -i /var/www/html/.env |
| 79 | + sed 's,{{MAIL_PORT}},'"${MAIL_PORT}"',g' -i /var/www/html/.env |
| 80 | + sed 's,{{MAIL_USERNAME}},'"${MAIL_USERNAME}"',g' -i /var/www/html/.env |
| 81 | + sed 's,{{MAIL_PASSWORD}},'"${MAIL_PASSWORD}"',g' -i /var/www/html/.env |
| 82 | + sed 's,{{MAIL_ADDRESS}},'"${MAIL_ADDRESS}"',g' -i /var/www/html/.env |
| 83 | + sed 's,{{MAIL_NAME}},'"${MAIL_NAME}"',g' -i /var/www/html/.env |
| 84 | + |
| 85 | + sed 's,{{REDIS_HOST}},'"${REDIS_HOST}"',g' -i /var/www/html/.env |
| 86 | + sed 's,{{REDIS_DATABASE}},'"${REDIS_DATABASE}"',g' -i /var/www/html/.env |
| 87 | + sed 's,{{REDIS_PORT}},'"${REDIS_PORT}"',g' -i /var/www/html/.env |
| 88 | + |
| 89 | + php composer.phar install --no-dev -o |
| 90 | + php artisan app:install |
| 91 | + rm -rf bootstrap/cache/* |
| 92 | + touch /var/www/.cachet-installed |
| 93 | + start_system |
| 94 | +} |
| 95 | + |
| 96 | +start_system() { |
| 97 | + check_database_connection |
| 98 | + [ -f "/var/www/.cachet-installed" ] && echo "Starting Cachet" || initialize_system |
| 99 | + php artisan config:cache |
| 100 | + sudo /usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf |
| 101 | +} |
| 102 | + |
| 103 | +case ${1} in |
| 104 | + init|start) |
| 105 | + |
| 106 | + case ${1} in |
| 107 | + start) |
| 108 | + start_system |
| 109 | + ;; |
| 110 | + init) |
| 111 | + initialize_system |
| 112 | + ;; |
| 113 | + esac |
| 114 | + ;; |
| 115 | + help) |
| 116 | + echo "Available options:" |
| 117 | + echo " start - Starts the Cachet server (default)" |
| 118 | + echo " init - Initialize the Cachet server (e.g. create databases, compile assets)." |
| 119 | + echo " help - Displays the help" |
| 120 | + echo " [command] - Execute the specified command, eg. bash." |
| 121 | + ;; |
| 122 | + *) |
| 123 | + exec "$@" |
| 124 | + ;; |
| 125 | +esac |
| 126 | + |
| 127 | +exit 0 |
0 commit comments