Марат Шамшутдинов,
Наш первичный entrypoint для php-fpm (я его слегка почистил) выглядел вот так
[CODE]#!/bin/bash
APPLICATION_DIR="{application_dir}"
APPLICATION_DOMAIN="{application_domain}"
APPLICATION_FROM="{application_from}"
MYSQL_DATABASE="{mysql_database}"
MYSQL_USER="{mysql_user}"
MYSQL_PASSWORD="{mysql_password}"
APPLICATION_FROM_SOURCE=${APPLICATION_FROM:0:5}
APPLICATION_FROM_SOURCE=${APPLICATION_FROM_SOURCE,,}
#todo: add error\exceptions
function destinationExists(){
local EXIST=$(wget -s -q $1 -O - 2>&1 | grep 'HTTP')
if [ -z "${EXIST}" ]; then
echo "true"
else
echo "false"
fi
}
if [ ${APPLICATION_FROM_SOURCE} = "https" ] || [ ${APPLICATION_FROM_SOURCE} = "http:" ]; then
APPLICATION_FROM_SOURCE="archive"
else
APPLICATION_FROM_SOURCE="git"
fi
###BITRIX###
#################################
# Bitrix not installed
if [ ! -d "${APPLICATION_DIR}/bitrix" ]; then
# Fr om archive
if [ ${APPLICATION_FROM_SOURCE} = "archive" ]; then
EXISTS=true
COUNTER=0
# Download
while [ ${EXISTS} = true ]
do
URL=${APPLICATION_FROM}
if (( ${COUNTER} > 0 )); then
URL+=".${COUNTER}"
fi
EXISTS=$(destinationExists "${URL}")
if [ ${EXISTS} = true ]; then
wget ${URL} -P ${APPLICATION_DIR}
fi
let COUNTER=COUNTER+1
done
# Full archive name without path
ARCHIVE="${APPLICATION_FROM##*/}"
# Archive name without .tar.gz
ARCHIVE_NAME="${ARCHIVE::-7}"
# Prepare archive
cat ${APPLICATION_DIR}/${ARCHIVE}* > ${APPLICATION_DIR}/archive.tar.gz
rm -rf ${APPLICATION_DIR}/${ARCHIVE}*
# Extract
tar -xzf ${APPLICATION_DIR}/archive.tar.gz -C ${APPLICATION_DIR}
# Delete archive
rm ${APPLICATION_DIR}/archive.tar.gz
# Copy database file to root folder
if [ -f "${APPLICATION_DIR}/bitrix/backup/${ARCHIVE_NAME}.sql" ]; then
mv ${APPLICATION_DIR}/bitrix/backup/${ARCHIVE_NAME}.sql ${APPLICATION_DIR}/bitrix.sql
fi
if [ -f "${APPLICATION_DIR}/bitrix/backup/${ARCHIVE_NAME}_after_connect.sql" ]; then
mv ${APPLICATION_DIR}/bitrix/backup/${ARCHIVE_NAME}_after_connect.sql ${APPLICATION_DIR}/bitrix_after_connect.sql
fi
# From git repository
else
# Clone
shopt -s dotglob \
&& find . -mindepth 1 -delete \
&& git clone --depth 1 ${APPLICATION_FROM} ${APPLICATION_DIR} \
&& rm -rf ${APPLICATION_DIR}/.git \
&& shopt -u dotglob
fi
# Upd ate after_connect_d7.php if exists
if [ -f "${APPLICATION_DIR}/bitrix/php_interface/after_connect_d7.php" ]; then
sed -i "s@utf8@utf8mb4@g" ${APPLICATION_DIR}/bitrix/php_interface/after_connect_d7.php
fi
# Update after_connect.php if exists
if [ -f "${APPLICATION_DIR}/bitrix/php_interface/after_connect.php" ]; then
sed -i "s@utf8@utf8mb4@g" ${APPLICATION_DIR}/bitrix/php_interface/after_connect.php
fi
# @todo add escape for password
if [ -f "${APPLICATION_DIR}/bitrix/php_interface/dbconn.php" ]; then
sed -i -E "s|\\\$DBHost.+|\\\$DBHost = \"mysql\";|g" ${APPLICATION_DIR}/bitrix/php_interface/dbconn.php \
&& sed -i -E "s|\\\$DBName.+|\\\$DBName = \"${MYSQL_DATABASE}\";|g" ${APPLICATION_DIR}/bitrix/php_interface/dbconn.php \
&& sed -i -E "s|\\\$DBLogin.+|\\\$DBLogin = \"${MYSQL_USER}\";|g" ${APPLICATION_DIR}/bitrix/php_interface/dbconn.php \
&& sed -i -E "s|\\\$DBPassword.+|\\\$DBPassword = \"${MYSQL_PASSWORD}\";|g" ${APPLICATION_DIR}/bitrix/php_interface/dbconn.php
# Switch on MySQLi
if ! (( $(grep -wc "BX_USE_MYSQLI" "${APPLICATION_DIR}/bitrix/php_interface/dbconn.php") > 0 )); then
sed -i "s@<?@<?php\ndefine(\"BX_USE_MYSQLI\", true);\n?><?@1" ${APPLICATION_DIR}/bitrix/php_interface/dbconn.php
fi
fi
if [ -f "${APPLICATION_DIR}/bitrix/.settings.php" ]; then
sed -i "s@//#docker@@g" ${APPLICATION_DIR}/bitrix/.settings.php \
&& sed -i -E "s@'host' =>.+,@'host' => 'mysql',@g" ${APPLICATION_DIR}/bitrix/.settings.php \
&& sed -i -E "s@'database' =>.+,@'database' => '${MYSQL_DATABASE}',@g" ${APPLICATION_DIR}/bitrix/.settings.php \
&& sed -i -E "s@'login' =>.+,@'login' => '${MYSQL_USER}',@g" ${APPLICATION_DIR}/bitrix/.settings.php \
&& sed -i -E "s@'password' =>.+,@'password' => '${MYSQL_PASSWORD}',@g" ${APPLICATION_DIR}/bitrix/.settings.php \
# Switch on MySQLi
sed -i -E "s@MysqlConnection@MysqliConnection@g" ${APPLICATION_DIR}/bitrix/.settings.php
fi
fi
#################################
###DNS###
#################################
# Se t IP for requests to self
if [ ${APPLICATION_DOMAIN} != "_" ]; then
while [ -z $(dig +short nginx) ]
do
sleep 2
done
NGINX_IP=$(dig +short nginx | head -1)
echo "${NGINX_IP} ${APPLICATION_DOMAIN}" >> /etc/hosts
fi
#################################
###DB###
#################################
if [ -f "${APPLICATION_DIR}/bitrix.sql" ]; then
# Wait until DB will be available
while [ -z $(dig +short mysql) ]
do
sleep 2
done
# Check if DB is empty 0 - empty; !0 - some tables exists
MYSQL_EMPTY=$(mysql -hmysql -u"${MYSQL_USER}" -p"${MYSQL_PASSWORD}" -sse "sel ect count(*) fr om information_schema.tables wh ere table_schema = '${MYSQL_DATABASE}';" | sed s/[^0-9]*//)
# Import DB if DB is empty and import SQL file exists
if [ ${MYSQL_EMPTY} = "0" ]; then
mysql -hmysql -u"${MYSQL_USER}" -p"${MYSQL_PASSWORD}" ${MYSQL_DATABASE} < ${APPLICATION_DIR}/bitrix.sql
# Delete sensitive SQL data
if [ -f "${APPLICATION_DIR}/bitrix.sql" ]; then
rm -rf ${APPLICATION_DIR}/bitrix.sql
fi
if [ -f "${APPLICATION_DIR}/bitrix_after_connect.sql" ]; then
rm -rf ${APPLICATION_DIR}/bitrix_after_connect.sql
fi
fi
fi
#################################
###END###
# Run PHP-FPM
php-fpm[/CODE]
Соотвественно у нас в .env файл есть переменная APPLICATION_FROM которая принимает значения в виде ссылки на бэкап сайта
[URL=https://dev.1c-bitrix.ru/bitrix/backup/1234567890.tar.gz]https://dev.1c-bitrix.ru/bitrix/backup/1234567890.tar.gz[/URL]
или ссылки на git репозиторий
[URL=mailto:git@github.com]git@github.com[/URL]:jquery/jquery.git
Сейчас у нас немного другой механизм, но большая часть логики аналогична или не без изменений.