Compare commits

...

2 Commits

Author SHA1 Message Date
tobias
dfffae35b2 Attempt at drone deploy
Some checks reported errors
GitHub Pages Deploy / deploy (push) Waiting to run
JS Lint / lint (push) Waiting to run
HTMLProofer / test (2.7) (push) Waiting to run
HTMLProofer / test (3.0) (push) Waiting to run
continuous-integration/drone/push Build encountered an error
2024-07-10 10:00:42 +02:00
tobias
cc07af72c5 Setup local docker-based development environment 2024-07-09 14:36:39 +02:00
9 changed files with 202 additions and 0 deletions

32
.drone.yml Normal file
View File

@ -0,0 +1,32 @@
---
kind: pipeline
name: publish pipeline
steps:
- name: publish jekyll container
image: plugins/docker
settings: &docker-build-settings
username: 3wordchant
password:
from_secret: git_autonomic_zone_token_3wc
repo: git.autonomic.zone/autonomic-cooperative/kcl-site
auto_tag: true
registry: git.autonomic.zone
when:
branch:
- main
event:
exclude:
- custom
- name: deploy-site
image: git.coopcloud.tech/coop-cloud/docker-cp-deploy:latest
settings:
host: small-clients.autonomic.zone
service: kcl_autonomic_zone_app
source: /srv/jekyll/dist/
dest: /usr/share/nginx/html/
exec_pre: rm -rf /usr/share/nginx/html/*
deploy_key:
from_secret: drone_ssh_swarm-demo.autonomic.zone
depends_on:
- publish-jekyll-container

35
Dockerfile Normal file
View File

@ -0,0 +1,35 @@
# Stage 1: Build the Jekyll site
FROM ruby:3.0.0 AS builder
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
git \
&& rm -rf /var/lib/apt/lists/*
# Install the specific version of Bundler
RUN gem install bundler:2.2.13
WORKDIR /srv/jekyll
# Copy Gemfile and Gemfile.lock and install dependencies
COPY Gemfile Gemfile.lock ./
RUN bundle _2.2.13_ install
# Copy the rest of the application files
COPY . .
# Build the Jekyll site
RUN jekyll build -d /dist
# Stage 2: Serve the Jekyll site using Nginx
FROM nginx:1.26.0
WORKDIR /usr/share/nginx/html
# Copy the generated site from the builder stage
COPY --from=builder /dist .
# Expose port 80 for the web server
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

30
Dockerfile.dev Normal file
View File

@ -0,0 +1,30 @@
FROM ruby:3.0.0 as jekyll
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
git \
&& rm -rf /var/lib/apt/lists/*
# used in the jekyll-server image, which is FROM this image
COPY docker-entrypoint.sh /usr/local/bin/
RUN gem update --system && gem install jekyll && gem cleanup
EXPOSE 4000
WORKDIR /site
ENTRYPOINT [ "jekyll" ]
CMD [ "--help" ]
# build from the image we just built with different metadata
FROM jekyll as jekyll-serve
COPY --from=jekyll /usr/local/bin/docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
# on every container start, check if Gemfile exists and warn if it's missing
ENTRYPOINT [ "docker-entrypoint.sh" ]
CMD [ "bundle", "exec", "jekyll", "serve", "--force_polling", "-H", "0.0.0.0", "-P", "4000" ]

View File

@ -33,3 +33,5 @@ gem 'wdm', '~> 0.1.1', platforms: %i[mingw x64_mingw mswin]
gem 'html-proofer', '~> 3.19'
gem 'rake', '~> 13.0'
gem 'webrick'

View File

@ -99,6 +99,7 @@ GEM
typhoeus (1.4.0)
ethon (>= 0.9.0)
unicode-display_width (1.7.0)
webrick (1.8.1)
yell (2.2.2)
PLATFORMS
@ -115,6 +116,7 @@ DEPENDENCIES
tzinfo (~> 1.2)
tzinfo-data
wdm (~> 0.1.1)
webrick
BUNDLED WITH
2.2.13

9
docker-compose.dev.yml Normal file
View File

@ -0,0 +1,9 @@
# no version needed since 2020
services:
jekyll:
image: git.autonomic.zone/autonomic-cooperative/kcl-site-dev:latest
volumes:
- .:/site
ports:
- '4000:4000'

37
docker-compose.yml Normal file
View File

@ -0,0 +1,37 @@
---
version: "3.8"
services:
app:
image: git.autonomic.zone/autonomic-cooperative/kcl-site:latest
networks:
- proxy
volumes:
- html_content:/usr/share/nginx/html
configs:
- source: nginx_conf
target: /etc/nginx/nginx.conf
deploy:
update_config:
failure_action: rollback
order: start-first
labels:
- "traefik.enable=true"
- "traefik.http.services.${STACK_NAME}-jekyll.loadbalancer.server.port=80"
- "traefik.http.routers.${STACK_NAME}-jekyll.rule=Host(`${DOMAIN}`)"
- "traefik.http.routers.${STACK_NAME}-jekyll.entrypoints=web-secure"
- "traefik.http.routers.${STACK_NAME}-jekyll.tls.certresolver=production"
networks:
proxy:
external: true
internal:
volumes:
html_content:
configs:
nginx_conf:
name: ${STACK_NAME}_nginx_conf_${NGINX_CONF_VERSION}
file: nginx.conf
template_driver: golang

19
docker-entrypoint.sh Normal file
View File

@ -0,0 +1,19 @@
#!/bin/bash
set -e
if [ ! -f Gemfile ]; then
echo "NOTE: hmm, I don't see a Gemfile so I don't think there's a jekyll site here"
echo "Either you didn't mount a volume, or you mounted it incorrectly."
echo "Be sure you're in your jekyll site root and use something like this to launch"
echo ""
echo "docker run -p 4000:4000 -v \$(pwd):/site bretfisher/jekyll-serve"
echo ""
echo "NOTE: To create a new site, you can use the sister image bretfisher/jekyll like:"
echo ""
echo "docker run -v \$(pwd):/site bretfisher/jekyll new ."
exit 1
fi
bundle install --retry 5 --jobs 20
exec "$@"

36
nginx.conf Normal file
View File

@ -0,0 +1,36 @@
events {
worker_connections 1024;
}
http {
include mime.types;
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
server {
listen 80;
location / {
root /usr/share/nginx/html;
try_files $uri $uri/ =404;
}
location /error_page.html {
internal;
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js|htm|html)$ {
root /usr/share/nginx/html;
expires 30d;
add_header Pragma public;
add_header Cache-Control "public";
}
error_page 404 /error_page.html;
}
}