Иде в целом не важно, разве что уметь в xdebug и в закидывание файлов на сервер. Все иде имеют свои минусы и плюсы.
- Шторм хорош в автокомплите, работе с ветками, тасками, закидывании нужной части за раз, еще хорош в работе с базами. Но при этом плох с vim mode, расширения пишутся плохо, любая нестандартная настройка превращается в головную боль. Отдельная боль это сниппеты.
- Саблайм приятен в сниппетах и плагинах, не умеет хорошо в работу с базой, расширение для xdebug нещадно тормозит, дерево файлов в wsl не обновляется. Зато максимально приятные настройки. В плагинах есть свои ограничения, хочешь дерево компонентов - шаблонов - страдай и пиши его отдельно от редактора.
- VsCode сейчас пробую, хорош в xdebug, приятное создание сниппетов, плагины на js пишутся не сложно. Плох в разных установках, если заблокированы айпишники мелкомягких.
Но все это не имеет отношения к процессу. А процесс сильно упрощается если перенести его на линукс, ну или хотя бы wsl 2.
Итого собираем докер-компоуз файлик, примерно под нужную систему, с xdebug и mailhog. Заодно туда же какую-нибудь панель просмотра базы например adminer или phpMyAdmin. Это все позволит работать с локальной копией вместо боевой, заодно перехватывая исходящую почту или смотря что-то прямо в базе. Туда же в типовой конфиг можно забиндить папку скриптов, чтобы открывая /scripts/addme.php можно было добавить своего пользователя, или сделать еще что-то разовое для локалки.
Естественно тут же возникает проблемы
- Обновление файлов с сервера. Не все пользователи готовы работать через гит, вплоть до того что сеошник может начать править .htaccess из админки
- Обновление базы.
- Закидывание файлов на сервер
- Закидывание базы на сервер
Что ж, с файлами с сервера вам в помощь rsync который сравнит локальную папку с удаленной и архивчиком скачает изменения
Код |
---|
cd $SITE_DIR && /usr/bin/rsync --no-inc-recursive --info=progress2 -rza --exclude="managed_cache" --exclude="cache" --exclude="backup" "$PROD_SSH:$PROD_PATH" ./
|
Так можно скачать весь проект, а если попутно составить нужный .rsyncignore то заодно можно выкачивать минимум, впрочем даже так скачивается крайне быстро, а с фильтром вплоть до времени менее секунды в зависимости от пинга до сервера.
Скачивание базы тоже не сложно
Код |
---|
ssh -C $PROD_SSH " mysqldump --no-tablespaces -u $MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE | gzip -c" | pv | gunzip | docker exec -i $PROJECT"db" "mysql" "-u$MYSQL_USER" "-p$MYSQL_PASSWORD" $MYSQL_DATABASE |
И вуаля у вас актуальная база менее чем за минуту) На дешевом хостинге загрузка магазина заняла 26 секунд. При хорошем хостинге может сильно сокращаться. Ну и конечно можете убрать кучу не нужных таблиц для ускорения.
С последними двумя пунктами у меня пока нет таких красивых решений) как правило я на таск завожу коммит, поэтому у меня есть как минимум список измененных файлов/папок, которые я могу закинуть из редактора. А базу зачастую правлю на сервере и скачиваю себе скриптом выше. Впрочем хорошо бы найти возможность логгировать изменения базы чтобы быстро глянув их повторить на сервере, а еще лучше логгировать изменения из битры чтобы закидывать не мускул, а выполнять команды api. Но это пока не настолько актуально.
Все эти команды, как и куча других у меня упакованы в shell скрипты и маунтятся в .zshrc, в итоге получаются команды:
oprj - открыть проект заполняя все переменные такие как $MYSQL_USER
openSite - открыть локальную копию, ибо мне лень помнить айпишники всех проектов
prodSsh - очевидно открыть ssh в папке проекта на проде
browseRemote - открыть winscp с параметрами из проекта, т.е. чтобы не вводить пароль, и не искать папку
backward - скачать по весьма длинному .rsyncignore скачивается все что обычно не является частью битры
forward - обратная закачка с удалением (сейчас не пользуюсь ибо писал давно, что-то могло поменяться)
downloadMedia - скачать upload, тоже через rsync
downloadAll - скачать все, часть его кода как раз выше
mysqlLoad - скачать базу, по коду выше
mysqlLocal - консоль локальной базы
mysqlProd - консоль базы на проде
dockerUp - dockerDown - dockerRestart - управление запуском виртуалки, dockerUp заодно откроет бразузер
runTest - запустить e2e тест, для них я использую testcafe, весьма удобно когда нужно что-то сделать с заказом
mkProject - создать проект, тут можно указать все данные уникальные для проекта вплоть до пароля от ssh по которому он зайдет для создания ключа
rmProject - удалить проект
gatherBitrixConfig - в докере база как правило на другой машинке поэтому нужно создать локальные конфиги, заодно их параметры можно записать в .env
Код |
---|
function gatherBitrixConfig () {
cd $SITE_DIR
cp bitrix/.settings.php $BASE_DIR/override/bitrix/.settings.php
cp bitrix/php_interface/dbconn.php $BASE_DIR/override/bitrix/php_interface/dbconn.php
sed -i "s/localhost/db/g" $BASE_DIR/override/bitrix/.settings.php
sed -i "s/localhost/db/g" $BASE_DIR/override/bitrix/php_interface/dbconn.php
local DBName
DBName=$(php -r 'include "./bitrix/php_interface/dbconn.php"; echo $DBName;')
local DBLogin
DBLogin=$(php -r 'include "./bitrix/php_interface/dbconn.php"; echo $DBLogin;')
local DBPassword
DBPassword=$(php -r 'include "./bitrix/php_interface/dbconn.php"; echo $DBPassword;')
cd $BASE_DIR
sed -i "s/DBName/$DBName/g" .env
sed -i "s/DBLogin/$DBLogin/g" .env
sed -i "s/DBPassword/$DBPassword/g" .env
}
|
И прочее мелкое вспомогательное как список занятых айпишников для виртуалок.
Итого мой типичный алгоритм состоит в
- oprj myAwesomeProject
- backward
- mysqlLoad
- если есть изменения то коммитим их
- gaa && gcam "download remote changes"
- работаем
- после git status и его вариации чтобы понять что я изменил, хотя зачастую меняется один - два файла и можно не париться
- закидываю это из редактора например в саблайме ctrl+alt+u ctrl+alf+f
- коммитим таск
- gaa && gcam "task 123"
- все)
В зависимости от проекта добавляются вариации например загрузка перед отгрузкой и т.д.
Новый проект создается полчаса - час, но зато сразу со всеми настройками, локальной копией, настроенным редактором (в том числе настроенным xdebug), и скриптом который создаст мне пользователя админа причем только на локалке.