-- Leo's gemini proxy

-- Connecting to ychbn.flounder.online:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini; charset=utf-8

Развертывание сайта 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.


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


`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

-- Response ended

-- Page fetched on Sat May 4 03:59:33 2024