Пользователю исключительно в целях использования модуля «Экстранет» разрешается создать на базе одной копии Программы один раздел «Экстранет» в рамках одного дополнительного Портала, имеющего и использующего с основным Порталом общее доменное имя, программное Ядро и базу данных. К разделу «Экстранет» может быть предоставлен доступ любым зарегистрированным пользователям. Положения настоящего пункта не распространяются на Пользователей лицензии «CRM».
Т.е. публичных страниц, не предусмотренных стандартной архитектурой (таких как CRM форм итд) лицензионным соглашением не предусмотрено. Если для вас поднимать магазин это нормальная практика, то это не значит, что подобные действия не нарушают лиц. соглашения.
Выдержки представленные вами ранее относятся к Битрикс24 (облако) и никакого отношения к коробке не имеют.
3. В админке все сгруппировано по сущностям\модулям. Пока вы не поймете что есть что, то оно так и будет казаться кашей. Рекомендую пройти базовый обучающий курс. Вот как раз сюда подлезть в принципе можно, но не самая тривиальная задача.
4. В Битриксе, конечно, в нынешних реалиях, механизм редактирования меню кривовато, но все же, верхний уровень меню можно редактировать из любого места публичной части. А меню раздела, находясь непосредственно внутри раздела https://prnt.sc/gk1kry Также в некотором роде этот функционал продублирован в админке https://prnt.sc/gk1ld3
99.9% вероятность того, что у вас кешируется результат выполнения компонента и как следствие $APPLICATION->SetPageProperty не выполняется. Вынесите свой код в component_epilog.php
возможно стоит прочитать рекомендации к платформе bitrix. прежде чем обновляться на свежие версии php mysql etc. так же в админке есть раздел Проверка системы.
А чем рекомендации помогут? Вы можете назвать поверсионно вплоть до минорной версии когда Битрикс полноценно без ошибок стал поддерживать PHP5.5.x/5.6.x/7.0.x/7.1.x ? А если клиенту хочется обновиться с PHP 5.5 до 7.0.x но у него нет последних обновлений - ваши действия? У клиента отдел безопасности, который требует обновиться до 7й версии - ваши действия?
Ваш перфекционно сферический вакуум здесь не работает от слова совсем. Удивительно, не правда ли?
Цитата
вы код ядра чтоли правили все это время?
При необходимости правили. Да, и сейчас приходится править не зависимо от версий ПО. Передаю пламенный привет поддержке handlersocket от Битрикс. Да и "полезностей" в новых версиях куда больше, чем просто генераторы, очень прискорбно что вы их либо не знаете, либо не умеете использовать.
Это надо было делать еще несколько лет назад, и актуализировать каждый год, как минимум. На счет 5.6 вас не напрягает, что поддержки данной версии уже нет, кроме ошибок безопасности?
Цитата
вы используете докер для обновлений на продакшене ? я вам сочуствую.
А вы используете BitrixVM? То мне вас еще больше жаль
Цитата
вы не поверите - но сейчас можно поднять копию сайта и там обновить окружение и протестировать сайт и все это никак не затрагивая рабочий сайт и без использования докера и откатов назад.
Тут вопрос времени, сколько займет времени протестировать проект, например CRM на 5.6\7.0\7.1? час? два? день? у нас это занимает 1-2 часа с нуля. Время=Деньги
Особенно интересно посмотреть как вы все это будет делать, когда у клиента корпоративный стандарт suse enterprise или debian итд.
Марат Шамшутдинов, Наш первичный entrypoint для php-fpm (я его слегка почистил) выглядел вот так
Код
#!/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
- каким образом версия PHP влияет на штатное api bitrix которое реализовано под php 5.3 ?
1. Сделайте поиск по коду Битрикса "/bug.php" и увидите сколько есть "костылей" для того чтобы пофиксить те или иные баги РНР. И это только те, которые не получилось обойти более красивым образом. Отсюда вывод, что самим тоже надо тестировать, особенно в самых популярных версиях РНР. 2. Передаю пламенный привет версии РНР 7.1, которая более менее стала стабильно работать спустя пол года с официального релиза 3. Передаю напалмовый привет версии РНР 7.2, на которой битрикс не заведется в нынешнем его виде в принципе 4. Передаю злобный привет будущей версии 7.3, где Битриксу придется "выпилить" все свои костыли связанные с mbstring, собственно как и всем остальным разработчикам которые надеялись на эту фичу.
Цитата
- каким образом версия mysql влияет на на штатное api D7 а в основом вообще только api инфоблоков bitrix которое не предполагает прямых запросов?
1. Передаю привет MySQL 5.7 и всем его форкам, в особенности тем, кто воспользовался "сомнительной" поддержкой handlersocket от Битрикса, ибо handlersocket просто выпилили из версии 5.7. Хотя, с другой стороны, handlersocket Битриксом не поддерживается на должном уровне, ибо там баг багом погоняет, не смотря на заявления вендора https://dev.1c-bitrix.ru/learning/course/?COURSE_ID=43&LESSON_ID=5746
Цитата
- каким образом доукер решает вышеназванные проблемыс несовместимостями на хостингах где докера нет впринципе (либо шаред-хостинг либо готовое bitrix окружение)?
Как минимум докер позволяет быстро развернуть окружение и все протестировать и производить относительно плавный переход с версии на версию и при необходимости откатываться назад. Хотел бы я посмотреть как вы будете откатываться назад, используя Битрикс окружение когда что-то пошло не так, особенно когда даунтайм не должен превышать 10 минут, покажите нам мастеркласс.
мне надо сделать бекап БД в несколько гигабайт и потом поднять на локале докер как тут поможет?
Добавляете немного логики в entrypoint и будет делать что душе угодно.
Цитата
еще так никто не ответил кто будет делать докер образы bitrix?
Кто хотел уже для личных целей сделал, а т.к. Битриксо сообщество в целом не готово к докеру, то вряд ли найдется много энтузиастов делать, что то хорошее, получая осуждающие комментарии от соседей по цеху.
Цитата
таким образом в случае КП - докер не особо полезен.
Серьезно? Как такое умозаключение появилось?
Цитата
или если только програмист криворукий и не умеет писать универсальный код работающий на разных версиях БД и php например не использует api bitrix и любит обмазываться сторонними расширениями php тогда докер конечно необходим
Вот это эпично! Сразу видно, что никогда массовыми продуктами не занимались. Да и полагаться на вендора 100%, тоже не стоит. Я уже подустал багрепорты строчить, хотя бы "двойную порцию компота к чаю" за это бы давали. Вдвойне весело когда заявленный функционал не работает в принципе и не будет работать.
Есть момент, я правильно понимаю, поработал, затушил контейнер и данные например в MySQL сказали тебе до свидания?
Вы можете примонтировать папку\диск и все сохранится и никуда не убежит, если не примонтируете, то да "до свидания".
У нас например для разработки есть конфиг который разворачивает окружение + согласно .env файлу поднимает чистый битрикс, либо затаскивает git репозиторий, либо выгружает и разворачивает бекап с дальноего сайта, либо ничего не делает если настройки нет. И все это в автоматическом режиме, выполнив одну лишь команду
Код
docker-compose up -d
Докер конечно не серебренная пуля, но кое в чем очень помогает.
Т.е. вы не тестируете свои решение под MySQL 5.6\5.7, PHP 5.6\7.0.x\7.1.x\7.2.x ? В докере окружение пересобирается за десяток секунд + все конфиги переносимы.
Также каждому контейнеру вы можете выделить определенное количество ресурсов за которые он просто не сможет вылезти, с обычной виртуалкой такой фокус провернуть сложнее.
Еще можно на одной машине запустить скажем битрикс и что нибудь эдакое, например MSSQL, всего за десяток другой секунда. Хотел бы я посмотреть как это вы "побыстрому" сделаете в битриксовской виртуальной машине.
Естественно когда вы работаете только 1 или проекты довольно простые и в особом тестировании не нуждаются, то да, возможно он вам и не нужен, а вот нам докер экономит десятки человеко-часов в месяц
ЗЫ. забыл еще приятную мелочь, используя докер, вы сможете быстро откатиться назад если с окружением что то пошло не так, а вот с Битрикс окружением дела обстоят посложнее.
Если быть более точным, то Битрикс24 (учитывая все ребрендиги, такие как Битрикс: Корпоративный портал итп) уже около 9 лет и естественно есть люди у которых опыт работы\внедрения ~9 лет. Если же говорить про облако то ему более 5 лет. Вот такая вот занимательная математика
Больше похоже на то, что вы смотрите шаблон через "Битрикс", а прав на просмотр РНР кода у вас нет. Попросите заказчика предоставить вам нормальный административный доступ или уже лучше FTP\SSH (имхо)
Я про конфиги docker'а предоставленные здесь и говорил. Для РНР вполне подойдет php:7.0-fpm-alpine или php:7.0-alpine, а вот nginx, быстрее всего, придется собирать руками с нуля т.к. нужны дополнительные модули. Еще надо будет не забыть про catdoc и все сопутствующие с ним библиотеки