Как развернуть веб-приложение с помощью git, не добавляя каталог приложения при каждом развертывании? - PullRequest
1 голос
/ 08 марта 2019

Какой хороший способ использовать git для развертывания, и теперь каждый раз при развертывании приходится «chown -R» весь каталог приложения для пользователя www?

В основном я хочу развернуть, используя хук после получения. В настоящее время у меня есть хук после получения, который выглядит примерно так:

#!/bin/sh
git --work-tree=/home/www/my-web-app --git-dir=/home/john/repo/my-web-app.git checkout -f
sudo chown -R www:www /home/www/my-web-app
sudo /home/john/scripts/reload-my-web-app.sh

Это работает, но проблема в том, что шаг chown медленный, потому что в папке my-web-app находятся миллионы файлов.

Я думал, что смогу обойти проблему, используя git в качестве пользователя www, так что проверенные файлы уже имеют правильного владельца. Поэтому я изменил так, чтобы строка git в хуке post-receive была:

sudo -u www git --work-tree=/home/www/my-web-app --git-dir=/home/john/repo/my-web-app.git checkout -f

Но это не работает, потому что я получаю ошибку разрешения о невозможности записи файла index.lock в git-репо. Очевидно, что пользователь www не имеет разрешения на запись в репозитории git, и я не хочу давать разрешение www, потому что кажется, что это будет неблагоприятно для безопасности сервера.

Итак, что элегантное решение в этой ситуации? Вы бы вышли во временный каталог, а затем rsync из временного каталога в каталог / home / www / my-web-app, чтобы одновременно скопировать файлы и сменить владельца? Я чувствую, что должно быть какое-то простое решение, которое мне не хватает.

1 Ответ

0 голосов
/ 08 марта 2019

Учитывая, что Git не является инструментом развертывания, ваш rsync может быть лучшим решением.

Но проверьте, достаточно ли в вашем случае настройки группы, если в папке my-web-app указано setgid, как объяснил здесь .Это могло бы избежать необходимости сокращать файлы.

...