ychbn

Main | About | Contact | Archive

Развертывание сайта c Jekyll на FTP

Для 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.

Для этого после его запуска

  1. F9 - lp
  2. Вводим данные для логина в формате username:password@host (т.е. строка может выглядеть так - myusername:123456@ftp.service.location.net)
  3. Заходим в нужную директорию на FTP.
  4. Клавишей tab переключаемся на правую панель
  5. Выделяем через 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
comments powered byDisqus

Build with Jekyll and true minimal theme