Какой хороший способ использовать 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, чтобы одновременно скопировать файлы и сменить владельца? Я чувствую, что должно быть какое-то простое решение, которое мне не хватает.