У меня есть сервер Apache, на котором будут размещены несколько сайтов и частный веб-интерфейс, который призван автоматизировать развертывание сайта с помощью git SSH URL. Эти репозитории git находятся на одном компьютере, удерживаются локальным экземпляром Gitlab и принадлежат пользователю root, поэтому необходим SSH (или мне что-то не хватает).
Итак, у нас есть PHP, выполняющий команды оболочки как www-data для клонирования общедоступных веб-сайтов из защищенного корневым репо на том же компьютере.
Виртуальные хосты управляются с помощью mod_vhost_alias
если это важно. Я также знаю о cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys
.
Но создание ssh-ключей для www-данных не кажется хорошей идеей.
Если я создам для этого специального «веб-пользователя» и сгенерирую для него ключи ssh, то www-data не сможет клонировать в этом каталоге. Я могу использовать ACL для папки, но он по-прежнему не получает доступа по ssh.
Или, может быть, я должен su web
сначала с PHP? В этом случае файлы не будут принадлежать www-data, что может привести к тому, что сайты не будут работать.
Это доходит до того, что я теряю из виду, что хорошо, а что безопасно. В конце концов я смогу найти рабочее решение, но оно не будет чистым и, вероятно, небезопасным.
Дополнительная информация :
Это не рабочий сервер. Все сайты (около 10 одновременно) получат очень ограниченный трафик, и большинство из них в любом случае будут защищены паролем (я сказал «общедоступный» выше, чтобы охватить самые крайние случаи).
Разработка ведется в локальной среде, изменения переносятся в онлайн-версию с помощью git hooks.
Есть только один веб-интерфейс, который может запустить процесс развертывания. Только несколько доверенных пользователей имеют к нему доступ.
Развертывание не изменит конфигурацию Apache, поскольку mod_vhost_alias
будет обрабатывать vhosts, и больше ничего не нужно.
Все сайты будут иметь общую папку, остальные файлы будут недоступны. Скрипт развертывания уже написан во время развертывания и может быть легко использован для этой цели.
Проблемы в середине развертывания не нужно решать.
Не смешивайте разработку и производство. В идеале рабочий сервер НЕ содержит VCS - или каких-либо других следов инструментальной цепочки разработки. Поскольку теперь вы прилагаете усилия к автоматизации развертывания, увеличивайте разделение, пока вы занимаетесь этим.
Кроме того: отдельные разрешения для отдельных задач. Интерфейс администратора запрашивает развертывание. Веб-сервер обслуживает в основном неизменяемые файлы. Сценарий развертывания записывает файлы.
Как я это сделал в явно похожей настройке: скрипт, принадлежащий пользователю и выполняемый cron deploy
(часть группы www-data
). Пользователь deploy
имеет ключ ssh для учетной записи только для чтения на сервере git (в вашем случае, управляемом через gitlab). Сценарий выбирает помеченные имена репозиториев и развертывает их следующим образом: