timelimit-server/docs/usage/docker.md
2020-08-10 02:00:00 +02:00

2.9 KiB

Docker

You can run the timelimit server with docker. Here are two example configuration files:

Important

The image: 'timelimit-server:latest' will not work out of the box. You have to build this image yourself (using sudo docker build -t timelimit-server . within the root directory of this git repository) or you can replace it by image: docker.timelimit.io/timelimit-server which will use prebuilt docker images.

In case of self building the image, don't forget to run docker-compose up again to make docker use the new image.

example docker-compose.yml with included database

version: '3'
services:
  api:
    image: 'timelimit-server:latest'
    environment:
      NODE_ENV: production
      DATABASE_URL: mariadb://timelimit:timelimitpassword@database:3306/timelimit
      PORT: 8080
      MAIL_SENDER: me@my.timelimit.server
      MAIL_TRANSPORT: '{"host": "localhost", "port": 25}'
      ALWAYS_PRO: yes
      # put additional config variables here
    ports:
     - "8080:8080"
    restart: always
    # you can enable logging during testing by commenting this out,
    # but logging is not needed when everything works
    logging:
      driver: none
    links:
    - database
  database:
    image: 'mariadb:10'
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: timelimit
      MYSQL_USER: timelimit
      MYSQL_PASSWORD: timelimitpassword
    volumes:
     - ./database:/var/lib/mysql
    # you can enable logging during testing by commenting this out,
    # but logging is not needed when everything works
    logging:
      driver: none

The database files will be saved at the folder which contains the docker-compose.yml. You should change the passwords.

Docker starts both (TimeLimit and the database) at the same time, so the TimeLimit server will crash a few times due to the missing database before it starts working.

example docker-compose.yml with external databases

version: '2'
services:
  api:
    image: 'timelimit-server:latest'
    environment:
      NODE_ENV: production
      DATABASE_URL: postgres://user:pass@example.com:5432/dbname
      PORT: 8080
      MAIL_SENDER: me@my.timelimit.server
      MAIL_TRANSPORT: '{"host": "localhost", "port": 25}'
      ALWAYS_PRO: yes
      # put additional config variables here
    restart: always
    # you can enable logging during testing by commenting this out,
    # but logging is not needed when everything works
    logging:
      driver: none
    # easy solution to use a database which does not run within docker
    network_mode: "host"
    # otherwise:
    # redirect host port 9000 to guest port 8080 (to allow access to the API)
    # ports:
    #  - "9000:8080"
    # in case the database runs outside of docker and you don't want to use the host network mode, see
    # https://forums.docker.com/t/accessing-host-machine-from-within-docker-container/14248