Развертывание сайта c Jekyll на FTP
date: 2017-12-29 02:30:40 +0300
Для Jekyll отлично подходит хостинг без использования баз данных, языков программирования и т.п, т.е. хостинг статичных страниц.
Собственно, все развертывание сайта в таком случае сводится к его копированию в определенную директорию на FTP.
Вот что говорит документация jekyll:
To upload a Jekyll site to a web host using FTP, simply run the jekyll build
command and copy the contents of the generated _site folder to the root folder
of your hosting account. This is most likely to be the httpdocs or public_html
folder on most hosting providers.
Т.е. для того, чтобы развернуть свой сайт прямо на ftp, нужно выполнить команду `jekyll build`, после чего вручную скопировать содержимое директории `_site` на FTP (конкретные наименования корневых директорий могут быть разными, например `httpdocs`, `htdocs`, `public_html`).
Ручное копирование на FTP
Для того, чтобы скопировать нужные файлы на FTP, можно воспользоваться
файловым менеджером Midnight Commander.
Для этого после его запуска
- `F9 - lp`
- Вводим данные для логина в формате `username:password@host` (т.е. строка может выглядеть так - `myusername:123456@ftp.service.location.net`)
- Заходим в нужную директорию на FTP.
- Клавишей `tab` переключаемся на правую панель
- Выделяем через `shift` все файлы, которые находятся в директории `_site` и нажимаем `F5`(копировать)
Автоматическое развертывание
Ниже показан код скрипта, который позволяет развертывать сайт на ftp
хостера автоматически.
__UPD 2018-09-27__
Сейчас я использую гем `glynn`, и параметры он может брaть
напрямую из _config.yml
#!/usr/bin/perl use strict; use warnings; use Net::FTP; use Net::FTP::Recursive; use File::Path; use Getopt::Long; my $host = 'ftp.ezio.neolocation.net'; my $username = 'username'; my $password = 'password'; my $rootpath = '/htdocs'; my $backup = ''; my $backuppath = './backup'; my $contentpath = './_site'; GetOptions("host=s" => \$host, "username=s" => \$username, "password=s" => \$password, "rootpath=s" => \$rootpath, "backup" => \$backup, "backuppath=s" => \$backuppath, "contentpath=s" => \$contentpath); sub backup { my ($connection,$backuppath, $rootpath) = @_; my $rmcount = File::Path::remove_tree($backuppath); mkdir $backuppath; chdir $backuppath; $connection->cwd($rootpath) or die "Cannot change working directory to $rootpath"; $connection->rget(); chdir '../'; return $rmcount; } sub upload { my ($connection, $rootpath, $contentpath) = @_; $connection -> cwd($rootpath) or die "Cannot switch ftp directory to $rootpath"; $connection -> rdelete(); chdir $contentpath; $connection -> rput(); return; } sub _connect { my ($host, $username, $password) = @_; my $ftp = Net::FTP::Recursive->new($host, Debug => 0) or die "Cannot connect to $host"; $ftp->login($username, $password) or die "Cannot login to ftp"; $ftp->binary(); return $ftp; } my $ftp = _connect($host, $username, $password); if ($backup) { backup($ftp, $backuppath, $rootpath); } upload($ftp, $rootpath, $contentpath); $ftp->quit;
Этот скрипт нужно скопировать в корневую директорию Jekyll- сайта и
дать возможность запускать его без указания слова "perl":
chmod +x deploy.pl
Если скрипт был запущен с опцией `--backup`, то сначала будет создан бэкап указанной корневой директории(той, что на ftp) в папку `backup`, после чего удаляет все содержимое корневой директории(`htdocs`) и копирует туда содержимое директории `_site`.
Наименование директории, в которую будет делаться бэкап, можно задать так: `--backuppath=backupfolder'.
Скрипт написан быстро и грязно, но позволяет делать то, что нужно запуском команды из jekyll директории сайта:
./deploy.pl
Для того, чтобы собрать сайт и сразу же отправить его на ftp,
можно использовать команду:
jekyll build && ./deploy.pl
/posts/