PHPStorm + Git + ISPManager = как наиболее оптимально настроить перечисленное на одном сервере?
В данный момент разработка ведется таким образом:
Есть рабочее места программистов: в офисе, дома, где-то еще. На этих рабочих местах стоит PHPStorm.
Есть удаленный сервер, на котором хостятся как клиенты, так и сайт команды разработчиков. На нем стоит XDebug (настроенный), Git (не настроенный), ISPmanager (настроенный, у клиентов и у сайта разработчиков, в частности, там разные учетные записи, соответственно все это в разных папках, под разными пользователями и тп).
Появляется проект, по нему начинается работа. Работа происходит таким образом, что на сайте команды разработчиков создается поддомен, который выступает в роли тестового, и на нем начинают работу по созданию проекта - разворачивая там cms, или же написание чего-то своего, и тп.
Делается так потому, что не всегда у проектов будет какой-то свой домен, который нужно оплатить и выбрать перед этим, или же домен есть, но обслуживается не на этом сервере, ну и конечно же потому, что нужен отдельно тестовый сервер, и отдельно рабочий.
Параллельно с этим для клиента, если такое требуется, заводится какой-то свой аккаунт в ISPManager (ну то есть по сути в linux), у него появляются какие-то свои плюшки. Там в будущем будет жить его проект в его рабочей версии.
В тестовой же версии происходят какие-то правки, и тд и тп. Иногда их нужно откатить только на тестовой версии, иногда их нужно в ней оставить до лучших времен, а иногда их нужно накатить на рабочую версию проекта. Но не всегда, понятное дело, и вряд ли нужно делать какой-то бекап рабочей версии проекта силами Git, если это делается - бекапы живут в другом месте.
Хочется вот что:
Понять, нет ли более оптимальных вариантов создания тестовых серверов и их тестирования в Вебе - а нужно именно в нем, потому что их нужно показывать и клиенту.
Как наиболее верно настроить Git, где хранить тестовый репозиторий проекта и где главный, и не стоит ли использовать вместо этого один репозиторий с ветками?
Можно ли и нужно использовать в PHStorm один проект, который будет изначально деплоить все в тестовую версию, и как потом из него все передавать в рабочую версию? Держать два проекта в нем можно, но тогда все разрастается и это не ок.
В вашем вопросе много лишнего, к примеру PHPStorm и ISPManager, выкидываем и получаем вопрос:
"Как деплоить php приложение из git"
Ищем тут или в гугле и находим кучу вопросов и ответов на них и даже море информации про DEV среду.
В результате вы поймёте что все решения сводятся к одной и той-же команде "git pull" и разница только в том как она выполнится - руками или автоматически.
Для продакшн и дэв не нужно отдельных репозиториев, разные ветки и "git merge" в нужный момент.
И да, вы не поняли как вообще работает GIT, судя по "и как потом из него все передавать в рабочую версию?"
Видимо, вы не до конца поняли мой вопрос или же я его по-глупому задал, если решили, что нужно выкинуть из него что-либо. Поясню.
Есть некий заказ, проект, сайт. Допустим, он пишется с нуля, а не используется какая-либо CMS или что-то вроде. Соответственно в данный момент работа начинается так:
Создается поддомен на каком-то домене, это будет место, где сайт хостится до его переноса на его рабочий адрес. В PHPStorm создается новый проект (в рамках его терминологии), в нем подключается папка того поддомена и начинается работа над проектом. Он доходит до какой-то стадии и потом все это вручную переносится уже на рабочий домен. До этого места и в такой конфигурации все работает.
При этом тестовый поддомен и рабочий домен находятся физически на одном сервере, но созданы под разными пользователями в ISManager, то есть их файлы лежат в папках разных пользователей Linux, и какого-то общего доступа между ними нет, это отдельно живущие вещи в рамках одной машины.
Вопрос в том, что есть желание внедрить Git. И вот тут возникает вопрос, как с минимумом труда и создания лишнего сделать так, чтобы в рамках одного проекта PHPStorm можно было сначала что-то писать и отправлять для тестирования на тестовом сервере, а потом, если это необходимо, уже переносить на рабочий сервер. И возможно ли вообще такая конфигурация. Работать с Git естественно планируется по максимум прозрачно через PHPStorm, чтобы он автоматически делал все то, что обычно в мануалах пишется как десятки строк команд. То есть создавать в начале какой-то репозиторий конечно же не проблема, и ручками его там прикручивать к очередному тестовому и рабочему домену, но потом все действия конечно же хочется производить из IDE, то есть в нашем случае из PHPStorm.
Станислав: вы видать сами ничего не поняли. Вам всё конкретно ответили - работать с Git вы можете как хотите - и руками, и из IDE. Поэтому упоминание PHPStorm здесь вообще не к месту, ну только если понять в общих чертах что вам нужно. То что у вас там ISPManager используется - тоже пофигу, вам нужно с Gitом разобраться.
"Создается поддомен на каком-то домене, "
создавайте что хотите - это никоим образом не относится к git.
Как выше написали - вам нужно настроить git для деплоя.
В разные папки (тестовую и продакшен) деплоить по push разные ветки (branch)
Тестовую как оттестировали сливать в продакшен ветку.
"При этом тестовый поддомен и рабочий домен находятся физически на одном сервере"
не влияет никак. Вам нужно понять как работает web server фактически, что бы таких вопросов не задавать.
То есть создавать в начале какой-то репозиторий конечно же не проблема, и ручками его там прикручивать к очередному тестовому и рабочему домену,
Поясните эту фразу пожалуйста. Что значит, в вашем понимании, прикрутить репозиторий к домену?
Алексей Ямщиков: думаю что по последнему пункту это "Указать каталог с репозиторием в качестве root_path для web сервера и не морочиться с деплоями". Могу конечно ошибаться :)
Кстати грешен, делал так но это был не проект ;)
Алексей Ямщиков: я без претензии, ребят, я действительно в этом полный ноль. Просто вопрос изначально про то, как начать работать со всем этим в PHPStorm из одного проекта, а не как просто прикрутить Git на своем сервере. На этот счет мануалов в сети полным полно, а тут более комплексно интересует.
В разные папки (тестовую и продакшен) деплоить по push разные ветки (branch)
Тестовую как оттестировали сливать в продакшен ветку.
не влияет никак. Вам нужно понять как работает web server фактически, что бы таких вопросов не задавать.
В первой цитате содержится ответ на вторую - в том-то и дело, что действительно нужно создать разные папки и деплоить по пуш в одну тестовый код, а во вторую рабочий. Ну или создать два репозитория в разных папках и один принять за главный, а другой за тестовый, и связать их через клонирование и потом "remote add shared". Но если возможно нормально работать и с одним репозиторием, а не с этой конфигурацией с двумя, то конечно этот вариант лучше. Просто изначально наткнулся на мануал с такой конфигурацией и остановился на нем.
Так вот, проблема в том, что в описанной мною конфигурации эти папки находятся в разных местах, и владельцы и группы у них тоже разные. Разные настолько, что не должны никак пересекаться, это фактически как бы разные пользователи хостинга, по сути. Вопрос в том, как и где лучше сделать один репозиторий:
в папке, к которой есть доступ у пользователя, под которым работает тестовый сайт?
в папке, к которой есть доступ у пользователя, под который работает основной сайт?
где-то в отдельной папке?
И соответственно под кем тогда должен ходить на удаленный сервер, где расположены эти папки, PHPStorm или просто локальный Git? Сделать нового пользователя, который будет иметь доступ ко всему, создать папку с репозиторием где-то отдельно, и пускай под этим пользователем все выполняется?
Или под кем-то из созданных пользователей это делать? И возможно ли это, когда пользователь, под кем крутится тестовый сайт, что-то пушит в репозиторий в рабочую папку (то есть в папку другого, не этого пользователя), и Git это сам делает, не смотря на то, что пользователь, который ему это сказал сделать, не имеет доступа к этой рабочей папке? В это слабо верится, так как тогда получается при желании можно нарушить безопасность на сервере.
Поясните эту фразу пожалуйста. Что значит, в вашем понимании, прикрутить репозиторий к домену?
Имелось ввиду, что создаются два репозитория, они связываются между собой, как указано выше, и из каждого репозитория деплоится в свою папку, в рабочую или тестовую. Но я сейчас уже понимаю, что более оптимальный вариант - один репозиторий с двумя ветками, и вопрос теперь только в том, как настроить это, при условиях, описанных выше - то есть когда есть два пользователя, не имеющих доступа к папкам друг друга, а тестовый и рабочий сайты находятся как раз в папке первого и в папке второго пользователя.
Извините, если сбивчиво и непонятно, стараюсь и текст не растягивать, и понятно описывать. Выходит не очень, видимо :)
сделайте отдельного пользователя под репозитории. В идеале поднимите GitLab, там разделение доступов можно сделать вроде.
Репозитории не должны никак быть привязаны к вашим проектам. В прод окружение, вы просто пуллите (pull) из этого центрального репозитория из ветки Прод, в тест окружение вы пуллите из этого же репозитория, но из ветки Тест.
Как то так. Да, вы всё верно начинаете понимать. Я потому вопросы и задавал, что бы вы начали задумываться об этом - так понятней будет вам самому, что нужно.
Алексей POS_troi: Станислав: Да и ещё момент, у нас для деплоя используется capifony - у нас проекты на Symfony. Этот вот фреймворк подключается на машину (под нужным пользователем), пуллит изменения, обновляет проект, чистит кеши и правит конфиги. Вот в упрощённом виде как то так.
Думаю есть ещё много вариантов систем деплоя, я просто эту не настраивал и не выбирал - до меня было. Так что гугл в помощь.
Алексей Ямщиков: я благодарен, честное слово :) В общем с пользователями разобрались, придется какого-то отдельного пользователя создавать, я вас понял, и под ним все это делать.
Есть PHPStorm, есть проект, созданный в нем. У него рут-папкой обозначена директория, на которую смотрит и веб-сервер - то есть пишу что-то на локальной машине, деплою на сервер - вуаля, код сразу на сервере. Такая конфигурация вроде как естественная для такого варианта работы, но по сарказму выше понял, что так делать в случае Git не надо :)
Верно ли я понимаю, что в итоге надо отдельного пользователя(ей) создать для работы в Git, которые заодно будут иметь доступ и ко всем папкам всех пользователей хостинга (ну то есть по сути ко всем папкам виртуальных хостов апача).
Потом нужно создать какую-то папку для репозиториев, где будут храниться все репозитории, то есть это будет что-то вида:
common.git
--site1.com.git
--site2.com.git
И так далее, где будут храниться сами репозитории. И нужно тогда PHPStorm настроить на эти репозитории, чтобы он туда файлы выгружал или как там это верно будет сказать, Git там контролировал изменения, в общем делал все то, что от него требуется, и потом, когда нужно, в PHPStorm нажимается волшебная кнопка, которая дает команду Git задеплоить код в ту папку, в которую нужно, в рабочую или в тестовую.
И тогда еще два вопроса:
1. А в рамках PHPStorm всю ту работу с ветками можно делать? Не из встроенной консоли, понятное дело - это можно откуда угодно делать :)
2. Как тогда отлаживать проекты на php в рамках PHPStorm? Ведь он будет работать с файлами, которые не в папке виртуального хоста веб сервера, а с файлами, которые где-то там отдельно живут своей жизнью вместе с Git.
Алексей POS_troi: все верно, так и планировал - иначе я не совсем понимаю, как отлаживать код, не переключаясь в IDE между его проектом, который "смотрит" в репозиторий какой-то отдельно лежащий и проектом, который "смотрит" на код собственно на тестовом или рабочем сервере.
так можно делать, если над проектом работает один человек - вы. И ваш комп будет тогда тестовым сервером. Если же несколько человек работает, то тут уже лучше работать по схеме что я обрисовал - это стандартная такая схема.
Станислав: У нас так сделано для каждого разработчика - у кажого на своей машине настроен свой вэбсервер и каждый что то меняет и у себя сразу видит. Потом просто пушат в общий репо, а уже выделенный человек сливает нужную ветку и деплоит на тест и потом на продакшен.
Алексей Ямщиков: работаю не я один и в общем-то тестировать все хотелось бы не на локальных машинах, а сразу на некоем тестовом сервере в интернете - так пропускается лишний шаг, как по мне, и заодно сразу можно смотреть, как это будет работать в интернете именно с того же сервера, только по сути с другого виртуального хоста апача.
В итоге я сейчас только не очень понимаю, кто будет играть главную роль на локальных машинах, PHPStorm или Git, кто будет в итоге отправлять файлы (изменения), куда и как в итоге отлаживать все это. В общем-то, об этом как раз комментарий выше.
Алексей Ямщиков: уточню - имеется ввиду, что над одним проектом изначально один человек работает, чтобы несколько человек над одним - да, я понимаю что тут нужен у каждого свой тестовый локальный либо удаленный сервер и на одном они по-человечески работать не смогут.
1. А в рамках PHPStorm всю ту работу с ветками можно делать? Не из встроенной консоли, понятное дело - это можно откуда угодно делать :)
В общем, сам играю, сам пляшу - на этот вопрос уже найден ответ самостоятельно, все это в рамках IDE можно делать не только через консоль :) Остается вопрос, как с отладкой быть, не переключаясь между проектами, если деплоить измениния из IDE, как я понимаю, стоит не в папку тестового или рабочего сервера напрямую, а в некую отдельно лежащую папку.
Репозитории не должны никак быть привязаны к вашим проектам. В прод окружение, вы просто пуллите (pull) из этого центрального репозитория из ветки Прод, в тест окружение вы пуллите из этого же репозитория, но из ветки Тест.
Ребят, а можно про вот это подробнее? Или где можно прочитать про такую конфигурацию.
То есть верно ли я понимаю, что в идеале работа должна строиться так:
Есть несколько разработчиков, у них есть свои репозитории на локальных машинах. Все эти репозитории связаны с одним неким bare-репозиторием на сервере, в который все разработчики пушат изменения и через него таким образом "общаются".
И на тестовом и рабочем сервере есть свои репозитории, по одному на каждый, в которых просто руками или там скриптом или еще как происходит пулл из того bare-репозитория, в рабочий сервер пуллится ветка мастер, например, а в тестовый - ветка тест. Верно?
Или на тестовом и рабочем сервере нет своих репозиториев и в них файлы как-то особым образом попадают, не через описанный мной вариант, когда у каждого сервера просто свой клон репы и он пуллит туда из той ветки что ему нужна?
Станислав: Почти верно, кроме того, что bare репозиторий по идее один. И в него и пушат все и из него пуллят все кому надо и куда надо. Хотя да, можно как то поизвращаться с несколькими репами, но я так не умею.
Определись с терминами "свой" репозиторий или "не свой" репозиторий. В любом случае ты работаешь с клоном основного репозитория и пуллиш и пушишь в основной репозиторий.
Алексей Ямщиков: я и пишу, что bare-репа одна :) Смотрите, как я предполагаю структуру в данный момент, если я остановлюсь на варианте, где средства деплоя вроде каписртано, о котором ниже пользователь рассказывает.
Есть некий центральный сервер. В нем есть хранилище, в котором есть хранилище bare-репозиториев каждого проекта. Для каждого проекта в этом хранилище ровно один bare-репозиторий.
Есть компьютеры разработчиков проектов. У них есть локально установленный git и локальные клонированные с bare-репы проекта репозитории, по одному клону на каждый проект. Они там ведут свои ветки, что-то комиттят и все такое. У каждого, если ему надо, есть свой виртуальный сервер, где они могут обкатать свои поделки прежде, чем послать их в ту или иную ветку главного, bare-репозитория.
И есть два сервера, один тестовый, другой рабочий. На каждом из них есть под каждый проект по виртуальному хосту веб-сервера. В каждом из этих хостов по сути еще один клон репы bare-репозитория, тестовый получает к себе ветку test, рабочий - master. На эти сервера комитят тогда, когда надо либо в продакш уже отправить, либо в тест, но тест, который для клиента должен быть виден или просто для всех.
Защищено это все будет например так, что на рабочем и тестовом сервере папка .git в каждом проекте будет вынесена на уровень выше той папки, куда смотрит виртуальный хост (в общем на уровень выше DocumentRoot).
То есть есть главная bare-репа, в нее комитится что-то там, происходят всякие другие штуки, и когда коммит происходит в ветки test/master, это каким-то хуком, простите за каламбур, пушится в репы test/master, ну или пуллится в репах test/master, из основного bare-репозитория.
Плюс к этому как-то решается конфликт с тем, когда кто-то вносит изменения прямо на серверах в код, в тестовом или в рабочем, не важно, какими-то тоже хуками, позволяющими при пуше в репы этих серверов сначала запушить из них самих все изменения, например.
Логичная, реализуемая схема? И еще раз спасибо вам всем за консультации, за пару дней в итоге вроде бы начал понимать, что к чему - без живого общения намного сложнее было бы :)