#!/bin/bash export BASEHTML="/var/www/html" export DOCROOT="/var/www/html/web" export GRPID=$(stat -c "%g" /var/lib/mysql/) export DRUSH="${DOCROOT}/vendor/bin/drush" export LOCAL_IP=$(hostname -I| awk '{print $1}') export HOSTIP=$(/sbin/ip route | awk '/default/ { print $3 }') export DRUPALVER=9.0.x echo "${HOSTIP} dockerhost" >> /etc/hosts echo "Started Container: $(date)" # Create a basic mysql install if [ ! -d /var/lib/mysql/mysql ]; then echo "**** No MySQL data found. Creating data on /var/lib/mysql/ ****" mysqld --initialize-insecure else echo "**** MySQL data found on /var/lib/mysql/ ****" fi # Start supervisord supervisord -c /etc/supervisor/conf.d/supervisord.conf -l /tmp/supervisord.log # If there is no index.php, download drupal if [ ! -f ${DOCROOT}/index.php ]; then echo "**** No Drupal found. Downloading latest to ${DOCROOT}/ ****" cd ${BASEHTML}; # ${DRUSH} -vy dl drupal --default-major=${DRUPALVER} --drupal-project-rename="web" git clone --depth 1 --single-branch -b ${DRUPALVER} \ https://git.drupalcode.org/project/drupal.git web; cd web; composer require drush/drush:~10 drupal/console; composer install chmod a+w ${DOCROOT}/sites/default; mkdir ${DOCROOT}/sites/default/files; wget "http://www.adminer.org/latest.php" -O ${DOCROOT}/adminer.php chown -R www-data:${GRPID} ${DOCROOT} chmod -R ug+w ${DOCROOT} else echo "**** ${DOCROOT}/index.php found ****" fi # Setup Drupal if services.yml or settings.php is missing if ( ! grep -q 'database.*=>.*drupal' ${DOCROOT}/sites/default/settings.php 2>/dev/null); then # Generate random passwords DRUPAL_DB="drupal" DEBPASS=$(grep password /etc/mysql/debian.cnf |head -n1|awk '{print $3}') ROOT_PASSWORD=`pwgen -c -n -1 12` DRUPAL_PASSWORD=`pwgen -c -n -1 12` echo ${ROOT_PASSWORD} > /var/lib/mysql/mysql/mysql-root-pw.txt echo ${DRUPAL_PASSWORD} > /var/lib/mysql/mysql/drupal-db-pw.txt # Wait for mysql echo -n "Waiting for mysql " while ! mysqladmin status >/dev/null 2>&1; do echo -n . ; sleep 1; done; echo; # Create and change MySQL creds mysqladmin -u root password ${ROOT_PASSWORD} 2>/dev/null mysql -uroot -p${ROOT_PASSWORD} -e \ "GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED WITH mysql_native_password BY '$DEBPASS';" 2>/dev/null mysql -uroot -p${ROOT_PASSWORD} -e \ "CREATE DATABASE drupal; GRANT ALL PRIVILEGES ON drupal.* TO 'drupal'@'%' IDENTIFIED WITH mysql_native_password BY '$DRUPAL_PASSWORD'; FLUSH PRIVILEGES;" 2>/dev/null cd ${DOCROOT} cp sites/default/default.settings.php sites/default/settings.php ${DRUSH} site-install standard -y --account-name=admin --account-pass=admin \ --db-url="mysql://drupal:${DRUPAL_PASSWORD}@localhost:3306/drupal" \ --site-name="Drupal9 docker App" | grep -v 'continue?' 2>/dev/null # TODO: move this to composer.json ${DRUSH} -y dl memcache >/dev/null 2>&1 ${DRUSH} -y en memcache | grep -v 'continue?' | grep -v error 2>/dev/null else echo "**** ${DOCROOT}/sites/default/settings.php database found ****" ROOT_PASSWORD=$(cat /var/lib/mysql/mysql/mysql-root-pw.txt) DRUPAL_PASSWORD=$(cat /var/lib/mysql/mysql/drupal-db-pw.txt) fi # Change root password echo "root:${ROOT_PASSWORD}" | chpasswd # Clear caches and reset files perms chown -R www-data:${GRPID} ${DOCROOT}/sites/default/ chmod -R ug+w ${DOCROOT}/sites/default/ chown -R mysql:${GRPID} /var/lib/mysql/ chmod -R ug+w /var/lib/mysql/ find -type d -exec chmod +xr {} \; (sleep 3; drush --root=${DOCROOT}/ cache-rebuild 2>/dev/null) & echo echo "---------------------- USERS CREDENTIALS ($(date +%T)) -------------------------------" echo echo " DRUPAL: http://${LOCAL_IP} with user/pass: admin/admin" echo echo " MYSQL : http://${LOCAL_IP}/adminer.php drupal/${DRUPAL_PASSWORD} or root/${ROOT_PASSWORD}" echo " SSH : ssh root@${LOCAL_IP} with user/pass: root/${ROOT_PASSWORD}" echo echo " Please report any issues to https://github.com/ricardoamaro/drupal9-docker-app" echo " USE CTRL+C TO STOP THIS APP" echo echo "------------------------------ STARTING SERVICES ---------------------------------------" tail -f /tmp/supervisord.log