Публикация сайта с помощью Git.

Ссылка на статью в формате PDF

Задача

Необходимо выложить сайт (сделать деплойт) с локального компьютера (системы разработки) на сервер (web server) используя инструментарий GIT.

Это позволит достичь следующих целей:

  1. Упрощается выгрузка данных на сайт, не нужно копировать по ftp, забывая какие-то файлы, теперь для выгрузки достаточно выполнить команду push (если настроен хук см. ниже).
  2. Появляется возможность быстро откатить изменения на предыдущую версию.
  3. Можно быстро увидеть, не взломали ли ваш сайт, выполнив в директории с проектом, команду git status, которая покажет все несанкционированные изменения (конечно нужно исключить папки с кэшем и т.д.)

Решение

Деплойт сайта с помощью git

Деплойт сайта с помощью git

  1. Создать репозитарий на локальном компьютере.
    git init
  2. Необходимо создать директорию на сервере, в которую будут выгружаться изменения с локальной машины.
    git init –bare
    Например, я создал на хостинге отдельную папку mydev, где создал репозиторий.
  3. Из данной директории (п.2) необходимо создать клон в директории непосредственно уже с проектом. В директории создастся скрытая папка .git
    git clone . путь_к_папке_с_проектом, где . – это текущая директория.
  4. Создаем на локальной машине алиас для подключения по SSH.
    git remote add jino user@user.myjino.ru:~/Папка-1
  5. После того, как мы стандартно закоммитили изменения на локальной машине (add\сommit), вы грузим изменения на сервер.
    git push jino master
  6. Заходим в директорию с нашим сайтом и выгружаем изменения.
    git pull
    Данный пункт можно автоматизировать с помощью созданию хука .git/hooks/post-receive, это позволит запускать pull, автоматически после push.
    #!/bin/shcd ..
    #Указать нужный путь к папке с проектом (на схеме Папка-2)
    GIT_DIR=’.git’
    git pull
    Разрешить выполнение chmod +x .git/hooks/post-receive
  7. Создаем в папке с репозиторием и проектом, т.е. в папке(.git) на сервере файл .htaccess, прописывая в нем
    deny from all
    Это позволит в какой-то мере защититься от фсб\анб\нибиру\петровича.

Примечание:

  1. Если одновременно работать в PuTTy и Git Bash, то может возникнуть ошибка fatal: protocol error; bad line length character: Too. В этом случае, просто закройте PuTTy.
  2. В качестве хостинга я использую jino.ru и все описанные действия были протестированы на нем.
  3. В интернете советуют создавать –bare репозиторий на публичных ресурсах таких как github и bitbucket, и уже оттуда делать клон на сервер. Это безусловно лучшее решение, т.к. если злоумышленник получит доступ к серверу, то вы всегда сможете вывести на чистую вводу, используя команду git status т.к. запрос идет к публичному серверу, но если репозиторий находится на этом же сервере, то его могут подменить и git status вернет ок. К тому же это страхует от проблем с локальным компьютером.Однако для своего блога, я решил, что пока будет достаточно использовать двухуровневый ландшафт замыкая сразу локальную машину с сервером. Т.к. все файлы (в том числе по разработке) у меня расположены на yandex.disk, то получается, что репозитории и так находятся в облаке.

Дополнение:

Пока разбирался с откатами на сервере набрел на 2 интересные команды git, которые помогут полностью избавиться от всех несанкционированных изменений:

  • git reset –hard master – полный возврат к базовой версии
  • git clean –df – удаление папок

Используемые ресурсы:

  1. http://igorkov.org/gitinfo
  2. http://stackoverflow.com/questions/6403982/accessing-source-files-from-git-baremaster
  3. https://habrahabr.ru/post/178965/

Post Navigation