Обновление сайта без Github
2023-06-16
Итак, есть сайт на локальной машине и его точная копия есть на виртуальном хостинге. В локальной версии будут делаться какие-то доработки. Задача самая простая - обновить сайт на виртуальном хостинге.
Так как работа на сайте ведется одним человеком, то для контроля всех изменений достаточно установить Git локально.
Все действия проводятся только на локальной машине через терминал. Для начала установим гит.
Когда git установлен, то перед тем как вносить какие-то изменения нужно его настроить.
Для начала делаем такие настройки, где указываем свои имя и почту:
git config --global user.email "Моя почта"
Переходим в директорию сайта (/var/www/my-site.ru/)и запускаем команду
После этого в корне сайта появится папка .git, в которой будет хранится вся информация о проекте и его изменениях.
Добавляем директорию где находится сайт:
Теперь добавляем все файлы проекта в репозиторий:
Делаем снимок репозитория:
Теперь можно начинать работать над сайтом и вносить изменения - все изменения файлов и директорий будут фиксироваться системой git. Чтобы посмотреть список измененных файлов можно написать команду: git status. Когда работа над изменениями окончена нужно выполнить следующие команды:
git commit -m "Вторая версия сайта" - новый снимок сайта.
В итоге у нас есть два снимка(коммита) сайта - до изменений и после изменений. Далее во всех инструкциях написано, что нужно выгрузить изменения в какой-то некий Хаб, сгененрировать ключи, и всякие другие заморочки, а нам нужно всего-то получить измененные файлы и закинуть их к хостеру на сервер.
Обновление сайта архивом
Для решения такой задачи можно сформировать архив сайта и просто закинуть его на хостинг
Постоянно таскать архив всего сайта незачем, можно выгрузить архив только с измененными файлами:
В результате этой команды - в директории сайта появится архив update.zip - его нужно скопировать на хостинг и разархивировать. Кстати, при создании следующих коммитов, гит будет говорить что появился файл update.zip, чтобы он его не отслеживал, нужно в папке проекта создать файл .gitignore и прописать в него строку update.zip. И добавить файл .gitignore в гит командой:
Для загрузки и распаковки архива удобно пользоваться программой WinSCP. Подключаемся к хостингу по SSH, закидываем архив в корень сайта.
Для того чтобы распаковать архив, нужно в Options/Preferences/Commands добавить команду unzip -o "!".
Теперь можно, нажав правой кнопкой на архив, выбрать File Custom Commands и сделать unzip прямо в папку с архивом. Старые файлы заменятся на новые.
Обновление сайта через git push
Этот метод немного сложнее, зато полностью автоматизирует процесс обновления.
Сначала нужно убедиться, что на хостинге установлен git, если это не так, попросите техподдержку установить его. Если гит на сервере установлен - продолжаем.
Первым делом нужно сделать клон текущего проекта, сначала выйти в родительскую папку проекта и выполнить:
В результате получим копию репозитория в папке с окончанием .git. Дальше закидываем эту папку на сервер любым способом, куда удобно.
Переходим в папку, которую вы только что загрузили, затем в папку hooks и создайте файл post-receive.
#!/usr/bin/bash git --work-tree=/home/pathto/docs --git-dir=/home/path/to/papka-s-saytom.git checkout -f
Нужно указывать полный путь, до рабочей папки сайта и репозитория. Этот файл нужно сохранить в формате utf-8, и затем выполнить команду:
Этот файл будет выполняться сразу после получения обновления, здесь checkout, копирует файлы из git-dir в work-dir.
Теперь можно вносить изменения в проект, коммитить его и отправлять на сервер командой:
Эта команда создаст ssh подключение и загрузит последний коммит на сервер в репозиторий papka-s-saytom.git. После ввода пароля от учетной записи пользователя, произойдет загрузка и выполнение файла post-receive, который обновит файлы в рабочем каталоге сайта.
Таким образом можно обновлять проект на хостинге без всяких Githubов и прочих сторонних сервисов.
Отключение пароля ssh
Чтобы, выполняя команду git push, не вводить каждый раз пароль пользователя, можно организовать подключение не по паролю, по ssh-ключу. Делается это очень просто:
На локальном компьютере нужно сгенерировать ключи, выполнив команду:
Система сгенерирует ключ. Теперь нужно скопировать содержимое этого ключа на сервер. Выполните команду cat ~/.ssh/id_rsa.pub, подключитесь к серверу, создайте каталог и файл ~/.ssh/authorized_keys, и скопируйте содержимое файла id_rsa.pub в файл authorized_keys на сервере.
Теперь при подключении по ssh авторизация будет происходить по ключу, если ключ не будет обнаружен - запросит пароль.