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.
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:
- Site 1: http://192.168.10.10:4010
- Site 2: http://192.168.10.10:4020
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