Intereting Posts

Создание www-данных для локального репликации git

Итак, я создаю систему, которая управляет всеми сайтами drupal, которые находятся в определенной папке (в этой папке могут быть созданы новые веб-сайты).

Следующий шаг – создать способ разрешить пользователю вернуть веб-сайт в предыдущую версию.

Мое решение? Создайте локальный «git-сервер» и для каждого действия, выполняемого в моей системе (например: обновление / установка модулей, обновление ядра и т. Д.). Я создаю новую версию этого сайта.

Я создал пользователя «git», который отвечает за создание репозиториев на /~/gitrepos/ . И для каждого нового веб-сайта я использую sudo -u git внутри пользователя apache (www-data) для запуска mkdir и git init --bare . В настоящее время я могу создавать новые папки и инициализировать репозитории git на них.

Но когда я пытаюсь подтолкнуть изменения веб-сайта к этим репозиториям, я получаю «Permission denied».

Когда обнаружен новый сайт, я делаю следующее:

  1. Создайте репозиторий [используя www-data и sudo -u git ]
    • mkdir и git init
  2. Инициализировать git-репозиторий (папка .git) в каталоге веб-сайта [с использованием www-data]
    • git init
  3. Добавить файлы в очередь фиксации [используя www-data]
    • git add *
  4. Зафиксируйте изменения, чтобы заполнить вновь созданный репозиторий [используя www-data]
    • git commit -m 'msg'
  5. Добавить удаленный адрес репозитория [используя www-data]
    • git remote add origin ssh://git@localhost/path/to/repo/
  6. Нажмите изменения [используя www-data]
    • git push -u origin master

И теперь я застрял на этом шаге, так как всегда получаю «Разрешение отказано».

Есть ли способ для меня изменить локальный «git-сервер» без необходимости аутентификации?

Или еще, какие ssh-ключи я должен создать, чтобы www-данные могли вносить изменения в локальный «git-сервер»?

Я действительно потерялся здесь, если у кого-то есть пошаговый способ настроить локальный «git-сервер», на который пользователь www-data может нажать, это было бы здорово .

Примечание. Домашний каталог для www-data – /var/www/ , поэтому хранить ssh-ключи в этом каталоге не рекомендуется


Да, я потратил не менее 4 часов, пытаясь понять это, прежде чем спрашивать здесь.

Некоторые из ресурсов, которые я пытался выполнить:

  • http://www.hackido.com/2010/01/installing-git-on-server-ubuntu-or.html
  • http://toroid.org/ams/git-website-howto
  • http://pthree.org/2008/11/28/setup-a-git-repository/
  • Рабочий процесс развертывания на основе Git
  • http://tumblr.intranation.com/post/766290565/how-set-up-your-own-private-git-server-linux
  • http://blogs.gurulabs.com/aaron/2008/11/setup-a-git-repository.html

Причина, по которой я цитирую «git server», состоит в том, что нет такой вещи, как git- сервер .

Цитата из http://blogs.gurulabs.com/aaron/2008/11/setup-a-git-repository.html :

Другими словами, нет такой вещи, как «git server» и «git client». Git был разработан разработчиками файловой системы с учетом атрибутов файловой системы. Таким образом, вместо этого у нас есть удаленный репозиторий Git, который мы называем «источником» и локальным репозиторием Git (…)

Решение:

Предположения:

  • Домашний каталог www-data/var/www/
  • Пользователь, который будет обрабатывать все команды git, – gituser

шаги:

Чтобы пользователь www-data нажимал изменения в репозиторий git без необходимости вводить пароль, просто:

  • Создайте новый ssh-ключ для пользователя www-data
    • www-data:~$ ssh-keygen -t rsa
    • нажмите enter для каждого вопроса (оставьте пароль пустым)
  • Добавьте вновь созданный ssh-ключ в /home/gituser/.ssh/authorized_keys
    • gituser:~$ touch ~/.ssh/authorized_keys
    • gituser:~$ chmod 0600 ~/.ssh/authorized_keys
    • gituser:~$ cat /var/www/.ssh/id_rsa.pub >> /home/gituser/.ssh/authorized_keys

Идея этого заключается в том, чтобы добавить ssh-ключ www-data к «доверенным» ключам gituser . После этого www-data сможет подключаться к серверу через ssh и аутентифицироваться как gituser без необходимости вводить пароль.

Помните, что git требует доступа ssh к серверу (по крайней мере, в среде, на которой я нахожусь).

Это может помочь: http://www.linuxproblem.org/art_9.html