From e89b3cb9761875267d55dd63d24bb81b6ee37b7c Mon Sep 17 00:00:00 2001 From: Pavan Date: Mon, 30 Mar 2026 16:27:46 -0700 Subject: [PATCH] [documentation / submitty.org] Containerize documentation site --- .dockerignore | 8 ++++++++ Dockerfile | 26 ++++++++++++++++++++++++++ README.md | 34 ++++++++++++++++++++++++++++++++++ docker-compose.yml | 15 +++++++++++++++ 4 files changed, 83 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..c5e8aa32 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,8 @@ +_site/ +.sass-cache/ +.jekyll-metadata +.git/ +.idea/ +*.iml +.DS_Store +vendor/ \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..269062ae --- /dev/null +++ b/Dockerfile @@ -0,0 +1,26 @@ + +FROM ruby:3.2-slim + +# Install build dependencies required by native gem extensions (e.g., nokogiri) +# and libcurl for htmlproofer link checking +RUN apt-get update && \ + apt-get install -y --no-install-recommends \ + build-essential \ + git \ + libcurl4-openssl-dev \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /site + +# Install gems first (layer caching - only re-runs when Gemfile changes) +COPY Gemfile Gemfile.lock ./ +RUN bundle install + +# Copy the rest of the site +COPY . . + +EXPOSE 4000 + +# Serve the site, binding to 0.0.0.0 so it's accessible outside the container +CMD ["bundle", "exec", "jekyll", "serve", "--host", "0.0.0.0", "--livereload"] + \ No newline at end of file diff --git a/README.md b/README.md index e26d2eca..fbd3704c 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,40 @@ For Bundler, depending on your system, you may need to also install the Ruby development headers (e.g. `ruby-dev`). On Ubuntu/Debian, for example, this would be accomplished by doing `sudo apt-get install ruby-dev`. + +### Docker Setup (Recommended) + +If you have [Docker](https://www.docker.com/) installed, you can skip +the Ruby/Bundler prerequisites entirely: + +1. Clone the repository: + ```bash + git clone https://github.com/Submitty/submitty.github.io.git + cd submitty.github.io + ``` +2. Start the development server: + ```bash + docker compose up + ``` + The first run takes a few minutes to install dependencies. Subsequent + runs start in seconds. + +3. Visit [http://localhost:4000](http://localhost:4000) to view the site. + Changes to files will automatically trigger a rebuild and refresh your + browser. + +4. To stop the server, press `Ctrl+C` or run: + ```bash + docker compose down + ``` + To run the link checker with Docker: + ```bash + docker compose exec docs bundle exec jekyll build + docker compose exec docs bundle exec htmlproofer ./_site --assume-extension --empty-alt-ignore --disable_external + ``` +If you prefer to set up Ruby natively, see the manual instructions below. + + ### Setup 1. Clone the respository on your local machine, e.g., diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..8927eb96 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,15 @@ +services: + docs: + build: . + ports: + - "4000:4000" + - "35729:35729" + volumes: + - .:/site + - bundle_cache:/usr/local/bundle + environment: + - JEKYLL_ENV=development + command: bundle exec jekyll serve --host 0.0.0.0 --livereload --force_polling + +volumes: + bundle_cache: \ No newline at end of file