Suggest a feature
×

Welcome to TagMyCode

Please login or create account to add a snippet.
0
0
 
0
Language: Bash
Posted by: Сергей Шевченко
Added: Feb 3, 2020 11:49 AM
Modified: Feb 3, 2020 11:50 AM
Views: 103
  1. #!/bin/bash
  2.  
  3. set -eux
  4.  
  5. touch ./var/projectSetupLog
  6.  
  7. function addLogMessage {
  8.     echo -e "\n>>>>>>>>>>>> $1 <<<<<<<<<<<<\n"
  9.     echo "[$(date)] $1" >> ./var/projectSetupLog
  10. }
  11.  
  12. function parseUserIsset {
  13.     USER_ISSET=$(
  14.         php bin/console doctrine:query:sql "$1" \
  15.             | awk -F "string '" '{print $2}'    \
  16.             | awk -F "' \(length=" '{print $1}' \
  17.             | tr -d '[:space:]'
  18.     )
  19. }
  20.  
  21. # Если проект не установлен, то устанавливаем его
  22. if [[ ! -f ./var/projectIsInstalled ]]; then
  23.     addLogMessage "Начало установки проекта..."
  24.     RANDOM_STRING=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)
  25.  
  26.     addLogMessage 'Генерация ключей авторизации...'
  27.     openssl genrsa -out ./config/jwt/private.pem -aes256 -passout pass:${RANDOM_STRING} 4096
  28.     openssl rsa -pubout -in ./config/jwt/private.pem -out ./config/jwt/public.pem -passin pass:${RANDOM_STRING}
  29.     chmod 644 ./config/jwt/private.pem
  30.     cp ./phpunit.xml.dist ./phpunit.xml
  31.  
  32.     addLogMessage 'Создание и наполнение переменных окружений в проект...'
  33.     env | sort
  34.     # Application
  35.     cp ./.env ./.env.local && chmod 777 ./.env.local
  36.     sed -i "s/^APP_SECRET=/APP_SECRET=${RANDOM_STRING}/" ./.env.local
  37.     sed -i "s/^JWT_PASSPHRASE=/JWT_PASSPHRASE=${RANDOM_STRING}/" ./.env.local
  38.     sed -i "s/^LOCALE=/LOCALE=ru_Ru/" ./.env.local
  39.     sed -i "s/^WORKSPACE_IP=/WORKSPACE_IP=ibs-mysql/" ./.env.local
  40.     sed -i "s/^MYSQL_HOST=/MYSQL_HOST=ibs-mysql/" ./.env.local
  41.     sed -i "s/^MYSQL_PORT=/MYSQL_PORT=3306/" ./.env.local
  42.     sed -i "s/^MYSQL_ROOT_PASSWORD=/MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}/" ./.env.local
  43.     sed -i "s/^MYSQL_DATABASE=/MYSQL_DATABASE=${MYSQL_DATABASE}/" ./.env.local
  44.     sed -i "s/^MYSQL_USER=/MYSQL_USER=${MYSQL_USER}/" ./.env.local
  45.     sed -i "s/^MYSQL_PASSWORD=/MYSQL_PASSWORD=${MYSQL_PASSWORD}/" ./.env.local
  46.     sed -i "s/^NGINX_HOST_HTTP_PORT=/NGINX_HOST_HTTP_PORT=${NGINX_HOST_HTTP_PORT}/" ./.env.local
  47.     sed -i "s/^NGINX_HOST_HTTPS_PORT=/NGINX_HOST_HTTPS_PORT=${NGINX_HOST_HTTPS_PORT}/" ./.env.local
  48.     source ./.env.local
  49.     # Tests
  50.     cp ./.env.test ./.env.test.local && chmod 777 ./.env.test.local
  51.     sed -i "s/^APP_SECRET=/APP_SECRET=${RANDOM_STRING}/" ./.env.test.local
  52.     sed -i "s/^JWT_PASSPHRASE=/JWT_PASSPHRASE=${RANDOM_STRING}/" ./.env.test.local
  53.     sed -i "s/^LOCALE=/LOCALE=ru_Ru/" ./.env.test.local
  54.     sed -i "s/^WORKSPACE_IP=/WORKSPACE_IP=ibs-mysql/" ./.env.test.local
  55.     sed -i "s/^MYSQL_HOST=/MYSQL_HOST=ibs-mysql/" ./.env.test.local
  56.     sed -i "s/^MYSQL_PORT=/MYSQL_PORT=3306/" ./.env.test.local
  57.     sed -i "s/^MYSQL_ROOT_PASSWORD=/MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}-test/" ./.env.test.local
  58.     sed -i "s/^MYSQL_DATABASE=/MYSQL_DATABASE=${MYSQL_DATABASE}-test/" ./.env.test.local
  59.     sed -i "s/^MYSQL_USER=/MYSQL_USER=${MYSQL_USER}-test/" ./.env.test.local
  60.     sed -i "s/^MYSQL_PASSWORD=/MYSQL_PASSWORD=${MYSQL_PASSWORD}-test/" ./.env.test.local
  61.     sed -i "s/^NGINX_HOST_HTTP_PORT=/NGINX_HOST_HTTP_PORT=${NGINX_HOST_HTTP_PORT}-test/" ./.env.test.local
  62.     sed -i "s/^NGINX_HOST_HTTPS_PORT=/NGINX_HOST_HTTPS_PORT=${NGINX_HOST_HTTPS_PORT}-test/" ./.env.test.local
  63.  
  64.     # Заменяем переменные на значения в конфигурациях (названия и их значения берем из env)
  65.     addLogMessage 'Заменяем переменные на значения в конфигурациях (названия и их значения берем из env)...'
  66.     addLogMessage "/usr/local/etc/php/conf.d/xdebug.ini OLD ==> $(grep remote_host /usr/local/etc/php/conf.d/xdebug.ini)"
  67.     IFS=$'\n'
  68.     for ENV_VARIABLE in $(env | grep IBS)
  69.     do
  70.         ENV_VARIABLE_NAME=$(echo ${ENV_VARIABLE} | cut -f1 -d=)
  71.         ENV_VARIABLE_VALUE=$(echo ${ENV_VARIABLE} | cut -f2 -d=)
  72.         sed -i "s/\${${ENV_VARIABLE_NAME}}/${ENV_VARIABLE_VALUE}/g" /usr/local/etc/php/conf.d/xdebug.ini
  73.     done
  74.     addLogMessage "/usr/local/etc/php/conf.d/xdebug.ini NEW ==> $(grep remote_host /usr/local/etc/php/conf.d/xdebug.ini)"
  75.  
  76.     addLogMessage 'Подтягиваем composer зависимости...'
  77.     composer install -n
  78.  
  79.  
  80.     addLogMessage 'Обновление таблиц в БД по схемам сущностей...'
  81.     php ./bin/console doctrine:schema:update --force
  82.  
  83.  
  84.     addLogMessage 'Создаем пользователей...'
  85.  
  86.     ### super-admin ###
  87.     # TODO: Попробовать научить доктринку форматировать вывод не в стиле php var_dump()
  88.     parseUserIsset "SELECT COUNT(username) FROM user WHERE username = 'super-admin'"
  89.     if [[ ${USER_ISSET} == 0 ]]; then
  90.         php bin/console fos:user:create super-admin super-admin@example.com super-admin-password --super-admin
  91.         addLogMessage 'Пользователь admin:admin-password с ролью ROLE_SUPER_ADMIN успешно создан.'
  92.     else
  93.         addLogMessage 'Пользователь admin:admin-password с ролью ROLE_SUPER_ADMIN уже существует.'
  94.     fi
  95.  
  96.     ### admin ###
  97.     parseUserIsset "SELECT COUNT(username) FROM user WHERE username = 'admin'"
  98.     if [[ ${USER_ISSET} == 0 ]]; then
  99.         php bin/console fos:user:create admin admin@example.com admin-password
  100.         php ./bin/console fos:user:promote admin ROLE_ADMIN
  101.         addLogMessage 'Пользователь admin:admin-password с ролью ROLE_ADMIN успешно создан.'
  102.     else
  103.         addLogMessage 'Пользователь admin:admin-password с ролью ROLE_ADMIN уже существует.'
  104.     fi
  105.  
  106.     ### test ###
  107.     parseUserIsset "SELECT COUNT(username) FROM user WHERE username = 'test'"
  108.     if [[ ${USER_ISSET} == 0 ]]; then
  109.         php bin/console fos:user:create test test@example.com test-password
  110.         addLogMessage 'Пользователь test:test-password успешно создан, активированный, но не имеет ни одной роли.'
  111.     else
  112.         addLogMessage 'Пользователь test:test-password уже существует, активированный, но не имеет ни одной роли.'
  113.     fi
  114.  
  115.     ### inactive-user ###
  116.     parseUserIsset "SELECT COUNT(username) FROM user WHERE username = 'inactive-user'"
  117.     if [[ ${USER_ISSET} == 0 ]]; then
  118.         php bin/console fos:user:create inactive-user inactive-user@example.com inactive-user-password --inactive
  119.         addLogMessage 'Пользователь inactive-user:inactive-user-password успешно создан, не активирован и не имеет ни одной роли.'
  120.     else
  121.         addLogMessage 'Пользователь inactive-user:inactive-user-password уже существует, не активирован и не имеет ни одной роли.'
  122.     fi
  123.  
  124.     touch ./var/projectIsInstalled && chmod 777 ./var/projectIsInstalled
  125.     echo "[$(date)] The project has been successfully installed!" > ./var/projectIsInstalled
  126. fi
  127.  
  128. addLogMessage 'Запускаем php-fpm...'
  129. exec "${@}"
  130.