• Как сделать автоматический деплой веб-сервиса на поддомен?

    Adamos
    @Adamos
    На коленке сделанное, но рабочее решение для OctoberCMS - это та же Ларавель, только обернутая админкой.
    Скрипт запускается с двумя аргументами - поддоменом и тем плагином, который добавляется к системе, помимо базового плагина, общего для всех клиентов.
    Проверяется, корректный ли поддомен и не занят ли он, копируется основной код Октября и нужные плагины, создается новая БД под этот конкретный поддомен, ее параметры прописываются в настройки сайта, голым SQL вносится пара поправок, чтобы не лезть за этим в админку, а все остальное выполняет запуск artisan.
    Nginx настроен так, что любая папка внутри /var/www, кроме начинающихся на подчеркивание, отображается на поддомен.
    Добавляем сайт-одностраничник, работающий с сохраненными данными по поддоменам и запускающий на бэке этот скрипт с нужными ключами - и продажник может за минуту соорудить пробник проекта для потенциального клиента, не дергая программиста вообще.
    #!/bin/bash
    SUB=$1
    PLUGIN=$2
    
    if [[ "${SUB}" =~ ^[-0-9a-z]{2,12}$ ]]; then
    	FOLDER="/var/www/${SUB}"
        if [ ! -d "${FOLDER}" ]; then
    		cp -a /var/www/_fish/October "${FOLDER}"
    		DB_PASSWORD=`date | md5sum | cut -c1-32`
    		DB_NAME=prefix_`echo "$SUB"|sed s/-/_/g`
    		DB_USER="${DB_NAME}"
    		sed -i "s/#DB_NAME#/${DB_NAME}/g;s/#DB_USER#/${DB_USER}/g;s/#DB_PASSWORD#/${DB_PASSWORD}/g" "${FOLDER}/public/config/database.php"
    		ROOT_USER=mysqladmin
    		ROOT_PASSWORD=123456
    		mysql -u${ROOT_USER} -p${ROOT_PASSWORD} -e "CREATE DATABASE ${DB_NAME} CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
    		mysql -u${ROOT_USER} -p${ROOT_PASSWORD} -e "CREATE USER ${DB_USER}@localhost IDENTIFIED BY '${DB_PASSWORD}';"
    		mysql -u${ROOT_USER} -p${ROOT_PASSWORD} -e "GRANT ALL PRIVILEGES ON ${DB_NAME}.* TO '${DB_USER}'@'localhost';"
    		mysql -u${ROOT_USER} -p${ROOT_PASSWORD} -e "FLUSH PRIVILEGES;"
    		cd "${FOLDER}"/public
    		php artisan october:up
    		ADMIN_PASSWORD=`echo ${DB_PASSWORD} | cut -c1-10`
    		ADMIN_HASH=`php -r "echo password_hash('${ADMIN_PASSWORD}', PASSWORD_BCRYPT);"`
    		mysql --database=${DB_NAME} -u${DB_USER} -p${DB_PASSWORD} <<-SQL
    			UPDATE \`backend_users\` SET \`password\` = '${ADMIN_HASH}' WHERE \`id\` = 1;
    			INSERT INTO \`system_parameters\` SET \`namespace\` = 'cms', \`group\` = 'theme', \`item\` = 'active', \`value\` = '\"theme\"';
    			SQL
    		/bin/cp -a /var/www/_fish/Plugins/base/public "${FOLDER}"
    		/bin/cp -a /var/www/_fish/Plugins/"${PLUGIN}"/public "${FOLDER}"
    		php artisan october:up
    	else
    		echo "Error: Subdomain already used or invalid"
    	fi
    else
        echo "Error: Invalid subdomain: " $SUB
    fi
    Ответ написан
    4 комментария
  • Как сделать автоматический деплой веб-сервиса на поддомен?

    SignFinder
    @SignFinder
    Wintel\Unix Engineer\DevOps
    Технология автоматизации развертывания и доставки контента клиенту в разработке называется CI/CD (Continuous Integration, Continuous Delivery — непрерывная интеграция и доставка).
    Ответ написан
    Комментировать
  • Как написать SQL запрос, когда 2 поля из первой таблицы ссылаются на вторую таблицу?

    rozhnev
    @rozhnev Куратор тега SQL
    Fullstack programmer, DBA, медленно, дорого
    select 
        `events`.`name`, 
        `users`.`name`  as `user_name`,
        `executors`.`name` as `executor_name`
    from `events` 
    left join `users`  `executors` on `events`.`executor_id` =  `executors `.`id`
    left join `users`   on `events`.`user_id` = `users`.`id`
    Ответ написан
    2 комментария
  • Как получить доступ к элементу объекта в php?

    @Hnkhame
    Нельзя обратиться с приватному свойству, по идее должен быть публичный метод который возвращает это свойство, например вот так: sandbox.onlinephpfunctions.com/code/38bd8772d5950f...
    Ответ написан
    3 комментария