Skip to content

Latest commit

 

History

History
112 lines (91 loc) · 4.09 KB

README.md

File metadata and controls

112 lines (91 loc) · 4.09 KB

GroupWriter

GroupWriter is a collaborative text editing application, similar and influenced by etherpad. Create and edit documents in real-time with colleagues or friends, while sharing images, adding comments, and making suggestions. File upload is based on s3 compatible storage like minio.

Setup

The application is divided into a backend and frontend docker image.

Docker Compose

services:
  editor:
    image: ghcr.io/b310-digital/groupwriter-frontend:latest
    ports:
      - "${APP_FRONTEND_PORT:-8080}:8080"
  backend:
    image: ghcr.io/b310-digital/groupwriter-backend:latest
    container_name: backend
    environment:
      DATABASE_URL: postgresql://groupwriter-user:groupwriter-password@postgres/groupwriter-backend-dev
      PORT: 3000
      OBJECT_STORAGE_BUCKET: groupwriter
      OBJECT_STORAGE_SCHEME: "http://"
      OBJECT_STORAGE_HOST: minio
      OBJECT_STORAGE_PORT: 9000
      OBJECT_STORAGE_REGION: local
      OBJECT_STORAGE_USER: ${DOCKER_COMPOSE_APP_OBJECT_STORAGE_USER}
      OBJECT_STORAGE_PASSWORD: ${DOCKER_COMPOSE_APP_OBJECT_STORAGE_PASSWORD}
      # needs to be exactly 32 chars
      VAULT_ENCRYPTION_KEY_BASE64: ${DOCKER_COMPOSE_APP_VAULT_ENCRYPTION_KEY_BASE64}
      # delete old documents
      FEATURE_REMOVE_DOCUMENTS_TOGGLE: ${DOCKER_COMPOSE_APP_FEATURE_REMOVE_DOCUMENTS_TOGGLE:-false}
      FEATURE_REMOVE_DOCUMENTS_MAX_AGE_IN_DAYS: ${DOCKER_COMPOSE_APP_FEATURE_REMOVE_DOCUMENTS_MAX_AGE_IN_DAYS:-730}
    ports:
      - "3000:3000"
    restart: always
  postgres:
    image: postgres:15-alpine
    environment:
      PGDATA: /var/lib/postgresql/data/pgdata
      POSTGRES_DB: ${POSTGRES_DB:-groupwriter-backend-dev}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-groupwriter-password}
      POSTGRES_USER: ${POSTGRES_USER:-groupwriter-user}

    # Exposing the port is not needed unless you want to access this database instance from the host.
    # Be careful when other postgres docker container are running on the same port
    ports:
      - "${POSTGRES_PORT:-5432}:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data/pgdata

  minio:
    image: minio/minio
    container_name: minio
    ports:
      - "9000:9000"
      - "9001:9001"
    environment:
      MINIO_ROOT_USER: ${DOCKER_COMPOSE_MINIO_USER:-ROOTNAME}
      MINIO_ROOT_PASSWORD: ${DOCKER_COMPOSE_MINIO_PASSWORD:-CHANGEME123}
    volumes:
      - ~/minio/data:/data
    command: server /data --console-address ":9001"

volumes:
  postgres_data:

Example for a .env file:

PORT=3000
DOCKER_COMPOSE_APP_OBJECT_STORAGE_USER=
DOCKER_COMPOSE_APP_OBJECT_STORAGE_PASSWORD=
# needs to be exactly 32 chars
DOCKER_COMPOSE_APP_VAULT_ENCRYPTION_KEY_BASE64=
DOCKER_COMPOSE_APP_FEATURE_REMOVE_DOCUMENTS_TOGGLE=false
DOCKER_COMPOSE_APP_FEATURE_REMOVE_DOCUMENTS_MAX_AGE_IN_DAYS=730

DOCKER_COMPOSE_MINIO_USER=minio
DOCKER_COMPOSE_MINIO_PASSWORD=

Then start it:

docker compose up -d

And visit the app at localhost:8080!

Options and configurations

Please see the dedicated backend repo for details on configuration options.

Testimonials / Sponsors

kits is a project platform hosted by a public institution for quality development in schools (Lower Saxony, Germany) and focusses on digital tools and media in language teaching. GroupWriter can be found on https://kits.blog/tools and can be used by schools for free.

Logos and text provided with courtesy of kits.

Acknowledgements