Post

Jekyll Multi-Site op Docker (Synology NAS)

In deze handleiding installeer je Jekyll met meerdere sites op een Synology NAS via Docker & Docker Compose, zonder dat je Ruby lokaal hoeft te installeren.

Jekyll Multi-Site op Docker (Synology NAS)

In deze handleiding installeer je Jekyll met meerdere sites op een Synology NAS via Docker & Docker Compose, zonder dat je Ruby lokaal hoeft te installeren.

Benodigdheden

  • Synology NAS met Docker & Docker Compose geïnstalleerd.
  • SSH-toegang tot de NAS.

Verbinden met de Server via SSH

Open een terminal en verbind met je server via SSH:

1
ssh gebruikersnaam@ipsynology

Vervang gebruikersnaam door je eigen NAS-gebruikersnaam en ipsynology door het IP-adres van je NAS. Zodra je verbonden bent, verkrijg je rootrechten door het volgende commando uit te voeren:

1
sudo -i

Na het invoeren van het wachtwoordt krijg je de benodigde rechten om Docker en Docker Compose te beheren.

Mappenstructuur opzetten

Maak een directory voor Jekyll en de sites:

1
2
mkdir -p /volume1/docker/jekyll_multi/{site1,site2}
cd /volume1/docker/jekyll_multi

Gemfile aanmaken

Maak een bestand Gemfile in /volume1/docker/jekyll_multi en voeg deze inhoud toe:

1
2
3
4
5
6
source "https://rubygems.org"

gem "jekyll", "4.4.1"
gem "minima", "~> 2.5.2"
gem "jekyll-feed", "~> 0.17.0"
gem "jekyll-seo-tag", "~> 2.8.0"

Gemfile.lock genereren met Docker

Omdat je geen Ruby op de NAS hebt, gebruik je Docker om de Gemfile.lock te maken:

1
docker run --rm -v "$(pwd):/srv/jekyll" -w /srv/jekyll ruby:3.2 bash -c "bundle install"

Dit zorgt ervoor dat Gemfile.lock correct wordt aangemaakt in jekyll_multi.

Dockerfile aanmaken

Maak een bestand Dockerfile in /volume1/docker/jekyll_multi en voeg deze inhoud toe:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
FROM ruby:3.2

# Installeer Node.js (voor Jekyll-assets)
RUN apt-get update && apt-get install -y \
    nodejs \
    npm \
    && rm -rf /var/lib/apt/lists/*

# Installeer Jekyll & Bundler
RUN gem install bundler jekyll

# Stel werkdirectory in
WORKDIR /srv/jekyll

# Kopieer Gemfile en Gemfile.lock
COPY ./Gemfile ./Gemfile.lock /srv/jekyll/

# Installeer gems
RUN bundle install

# Expose de Jekyll server-poort
EXPOSE 4000

# Start Jekyll automatisch
CMD ["jekyll", "serve", "--host", "0.0.0.0", "--watch", "--force_polling"]

Docker Compose configureren

Maak een bestand docker-compose.yml in /volume1/docker/jekyll_multi en voeg het volgende toe:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
version: '3'
services:
  site1:
    build:
      context: /volume1/docker/jekyll_multi
      dockerfile: Dockerfile
    container_name: jekyll_site1
    environment:
      - JEKYLL_ENV=production
    volumes:
      - /volume1/docker/jekyll_multi/site1:/srv/jekyll:rw
    ports:
      - "4010:4000"
    command: jekyll serve --host 0.0.0.0 --watch --force_polling

  site2:
    build:
      context: /volume1/docker/jekyll_multi
      dockerfile: Dockerfile
    container_name: jekyll_site2
    environment:
      - JEKYLL_ENV=production
    volumes:
      - /volume1/docker/jekyll_multi/site2:/srv/jekyll:rw
    ports:
      - "4020:4000"
    command: jekyll serve --host 0.0.0.0 --watch --force_polling

Jekyll-sites aanmaken

Genereer nieuwe Jekyll-projecten binnen de sites:

1
2
docker run --rm -v /volume1/docker/jekyll_multi/site1:/srv/jekyll -w /srv/jekyll ruby:3.2 bash -c "gem install jekyll bundler && jekyll new . --force"
docker run --rm -v /volume1/docker/jekyll_multi/site2:/srv/jekyll -w /srv/jekyll ruby:3.2 bash -c "gem install jekyll bundler && jekyll new . --force"

Installeer Gems in de sites

Elke site heeft zijn eigen bundle install nodig:

1
2
cd /volume1/docker/jekyll_multi/site1 && docker run --rm -v "$(pwd):/srv/jekyll" -w /srv/jekyll ruby:3.2 bash -c "bundle install"
cd /volume1/docker/jekyll_multi/site2 && docker run --rm -v "$(pwd):/srv/jekyll" -w /srv/jekyll ruby:3.2 bash -c "bundle install"

Start Jekyll met Docker Compose

Nu alles is ingesteld, kun je de containers opstarten:

1
2
cd /volume1/docker/jekyll_multi
docker-compose up -d --build

Jekyll draait nu op de volgende poorten:

Veelgebruikte commando’s

Logs bekijken van een specifieke site

1
docker-compose logs -f site1

Een site opnieuw starten

1
docker-compose restart site1

Een site herstarten na een wijziging in Gemfile

1
2
docker-compose exec site1 bundle install
docker-compose restart site1

Beide sites stoppen

1
docker-compose down

Hoe voeg je een nieuwe gem toe aan alle sites?

Bewerk de centrale Gemfile (/volume1/docker/jekyll_multi/Gemfile) en voeg je gem toe.

Update de afhankelijkheden met Docker

1
docker run --rm -v "$(pwd):/srv/jekyll" -w /srv/jekyll ruby:3.2 bash -c "bundle install"

Dit update Gemfile.lock.

Kopieer de nieuwe Gemfile & Gemfile.lock naar alle sites

1
2
cp Gemfile Gemfile.lock site1/
cp Gemfile Gemfile.lock site2/

Installeer de nieuwe afhankelijkheden per site

1
2
docker-compose exec site1 bundle install
docker-compose exec site2 bundle install

Herstart de containers

1
docker-compose restart
This post is licensed under CC BY 4.0 by the author.