From 2b591014a5fae35bd2b408f97490ddd90508c277 Mon Sep 17 00:00:00 2001 From: Luna Simons Date: Mon, 29 Jan 2024 00:18:04 +0100 Subject: [PATCH] docs: actual documentation and docker compose (#29) * feat: added example docker-compose * docs: added first rev of README * docs: added banner image --- .github/assets/banner.jpg | Bin 0 -> 17776 bytes README.md | 64 +++++++++++++++++++++++++++++--------- docker-compose.yml | 27 ++++++++++++++++ 3 files changed, 77 insertions(+), 14 deletions(-) create mode 100644 .github/assets/banner.jpg create mode 100644 docker-compose.yml diff --git a/.github/assets/banner.jpg b/.github/assets/banner.jpg new file mode 100644 index 0000000000000000000000000000000000000000..492a0ee12036267828db472cda0773a6f3c0a50c GIT binary patch literal 17776 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 z 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 53aca94..8fd893d 100644 --- a/README.md +++ b/README.md @@ -1,31 +1,67 @@ # untis-ics-sync +[![Node CI](https://github.com/bddvlpr/untis-ics-sync/actions/workflows/node-ci.yaml/badge.svg)](https://github.com/bddvlpr/untis-ics-sync/actions/workflows/node-ci.yaml) [![Docker CD](https://github.com/bddvlpr/untis-ics-sync/actions/workflows/docker-cd.yaml/badge.svg)](https://github.com/bddvlpr/untis-ics-sync/actions/workflows/docker-cd.yaml) + Serves a calendar API (ICS) for events provided from Untis. +![Banner](.github/assets/banner.jpg) + + ## Use case Some schools, universities, or workspaces do not enable the iCalendar API that Untis provides by default. Due to this limitation, I've written my implementation to dynamically sync class schedules to my agenda. ## Installation -Simply clone the repository and cd into it using `git clone https://github.com/bddvlpr/untis-ics-sync && cd untis-ics-sync`. -If you're planning on using Docker, you could use the [bddvlpr/untis-ics-sync](https://hub.docker.com/r/bddvlpr/untis-ics-sync/) image from Docker Hub instead of the git repository. - -### Redis - -Version 0.7.0 and above require a redis server to be supplied in environment variables for queue processing. Either externally provide one, or define one in a Docker compose environment. +### Using Docker -### Setup SSL +To deploy a quick Docker environment, fill in the target school credentials in `docker-compose.yml` and start the service by running `docker compose up -d`. Do note that if you'd like to use SSL, add any reverse proxy such as Nginx, Caddy or Traefik. View the table below for all possible environment variables. -From version 0.2.6 and forward, SSL will not be natively supported anymore. Please use a reverse proxy instead of supplying the docker container with an SSL certificate. +### Using NixOS -### Using Docker +Firstly add this repository to your flake's inputs. +```nix +{ + inputs = { + # ... + untis-ics-sync.url = "github:bddvlpr/untis-ics-sync/"; + untis-ics-sync.inputs.nixpkgs.follows = "nixpkgs"; + }; -To run the app using Docker, copy over the `.env.example` to `.env` and fill in the parameters to get the app to work. -Deploy the app (in a test environment) using `docker run -d --env-list .env -p 3000:3000 bddvlpr/untis-ics-sync`. + # ... +} +``` -### Using Yarn +Secondly, enable the service. Please **DO NOT** use a writeText derivative as this will add your credentials to the Nix store. Use agenix or nix-sops. A local Redis service will automatically be started. +```nix +{ + inputs, + ... +}: { + imports = [ + inputs.untis-ics-sync.nixosModules.default + ]; -To run the app using Yarn, copy over the `.env.example` to `.env` and fill in the parameters to get the app to work. -Hot run the app using `yarn start:dev`, or build it using `yarn build`. + services.untis-ics-sync = { + enable = true; + envFile = ./; # Path to your credentials. + }; +} +``` +## Environment +| Name | Type | Default | Description | +| - | - | - | - | +| UNTIS_SCHOOLNAME | string | `null` | The school's (Untis) service name. | +| UNTIS_USERNAME | string | `null` | The school's user name. | +| UNTIS_PASSWORD | string | `null` | The school's password. | +| UNTIS_BASEURL | string | `null` | The school's (Untis) base-url. | +| BULL_REDIS_HOST | string | `null` | The Redis service hostname or address. | +| BULL_REDIS_PORT | number | `null` | The Redis service port. | +| BULL_REDIS_PATH | string | `null` | The Redis service path for Unix socket connection. | +| CORS_ORIGIN | string | http://localhost:5173 | CORS Origin header to be sent for untis-ics-sync-ui. | +| MAINTENANCE_TITLE | string | `null` | Maintenance notification title. | +| MAINTENANCE_DESCRIPTION | string | `null` | Maintenance notification description. | +| MAINTENANCE_LOCATION | string | `null` | Maintenance notification location. | +| LESSONS_TIMETABLE_BEFORE | number | 7 | The amount of days to fetch before today. | +| LESSONS_TIMETABLE_AFTER | number | 14 | The amount of days to fetch after today. | diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..22ea9ff --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,27 @@ +version: "3.9" + +services: + server: + image: bddvlpr/untis-ics-sync:latest + restart: unless-stopped + environment: + UNTIS_SCHOOLNAME: + UNTIS_USERNAME: + UNTIS_PASSWORD: + UNTIS_BASEURL: + + BULL_REDIS_HOST: redis + BULL_REDIS_PORT: 6379 + ports: + - 3000:3000 + depends_on: + - redis + redis: + image: redis:7 + restart: unless-stopped + command: redis-server + volumes: + - redis-data:/data + +volumes: + redis-data: