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


date: 2017-12-29 02:30:40 +0300


Main

About

Contacts


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


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



Автоматическое развертывание


Ниже показан код скрипта, который позволяет развертывать сайт на 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/