--- date: "2019-02-12:00:00+02:00" title: "Full docker example" draft: false type: "doc" menu: sidebar: parent: "setup" --- # Full docker example This docker compose configuration will run Vikunja with backend and frontend with a mariadb as database. It uses an nginx container or traefik on the host to proxy backend and frontend into a single port. For all available configuration options, see [configuration]({{< ref "config.md">}}). ### Redis To use redis, you'll need to add this to the config examples below: {{< highlight yaml >}} version: '3' services: api: image: vikunja/api environment: VIKUNJA_REDIS_ENABLED: 1 VIKUNJA_REDIS_HOST: 'redis:6379' VIKUNJA_CACHE_ENABLED: 1 VIKUNJA_CACHE_TYPE: redis volumes: - ./files:/app/vikunja/files redis: image: redis {{< /highlight >}} ## Example with traefik 2 This example assumes [traefik](https://traefik.io) version 2 installed and configured to [use docker as a configuration provider](https://docs.traefik.io/providers/docker/). We also make a few assumtions here which you'll most likely need to adjust for your traefik setup: * Your domain is `vikunja.example.com` * The entrypoint you want to make vikunja available from is called `https` * The tls cert resolver is called `acme` {{< highlight yaml >}} version: '3' services: api: image: vikunja/api environment: VIKUNJA_DATABASE_HOST: db VIKUNJA_DATABASE_PASSWORD: supersecret VIKUNJA_DATABASE_TYPE: mysql VIKUNJA_DATABASE_USER: vikunja VIKUNJA_DATABASE_DATABASE: vikunja volumes: - ./files:/app/vikunja/files networks: - web - default depends_on: - db restart: unless-stopped labels: - "traefik.enable=true" - "traefik.http.routers.vikunja-api.rule=Host(`vikunja.example.com`) && PathPrefix(`/api/v1`)" - "traefik.http.routers.vikunja-api.entrypoints=https" - "traefik.http.routers.vikunja-api.tls.certResolver=acme" frontend: image: vikunja/frontend labels: - "traefik.enable=true" - "traefik.http.routers.vikunja-frontend.rule=Host(`vikunja.example.com`)" - "traefik.http.routers.vikunja-frontend.entrypoints=https" - "traefik.http.routers.vikunja-frontend.tls.certResolver=acme" networks: - web - default restart: unless-stopped db: image: mariadb:10 environment: MYSQL_ROOT_PASSWORD: supersupersecret MYSQL_USER: vikunja MYSQL_PASSWORD: supersecret MYSQL_DATABASE: vikunja volumes: - ./db:/var/lib/mysql restart: unless-stopped command: --max-connections=1000 networks: web: external: true {{< /highlight >}} ## Example with traefik 1 This example assumes [traefik](https://traefik.io) in version 1 installed and configured to [use docker as a configuration provider](https://docs.traefik.io/v1.7/configuration/backends/docker/). {{< highlight yaml >}} version: '3' services: api: image: vikunja/api environment: VIKUNJA_DATABASE_HOST: db VIKUNJA_DATABASE_PASSWORD: supersecret VIKUNJA_DATABASE_TYPE: mysql VIKUNJA_DATABASE_USER: vikunja VIKUNJA_DATABASE_DATABASE: vikunja volumes: - ./files:/app/vikunja/files networks: - web - default depends_on: - db restart: unless-stopped labels: - "traefik.docker.network=web" - "traefik.enable=true" - "traefik.frontend.rule=Host:vikunja.example.com;PathPrefix:/api/v1" - "traefik.port=3456" - "traefik.protocol=http" frontend: image: vikunja/frontend labels: - "traefik.docker.network=web" - "traefik.enable=true" - "traefik.frontend.rule=Host:vikunja.example.com;PathPrefix:/" - "traefik.port=80" - "traefik.protocol=http" networks: - web - default restart: unless-stopped db: image: mariadb:10 environment: MYSQL_ROOT_PASSWORD: supersupersecret MYSQL_USER: vikunja MYSQL_PASSWORD: supersecret MYSQL_DATABASE: vikunja volumes: - ./db:/var/lib/mysql restart: unless-stopped command: --max-connections=1000 networks: web: external: true {{< /highlight >}} ## Example with nginx as proxy You'll need to save this nginx configuration on your host under `nginx.conf` (or elsewhere, but then you'd need to adjust the proxy mount at the bottom of the compose file): {{< highlight conf >}} server { listen 80; location / { proxy_pass http://frontend:80; } location /api/ { proxy_pass http://api:3456; } } {{< /highlight >}} `docker-compose.yml` config: {{< highlight yaml >}} version: '3' services: db: image: mariadb:10 environment: MYSQL_ROOT_PASSWORD: supersecret MYSQL_DATABASE: vikunja volumes: - ./db:/var/lib/mysql restart: unless-stopped api: image: vikunja/api environment: VIKUNJA_DATABASE_HOST: db VIKUNJA_DATABASE_PASSWORD: supersecret VIKUNJA_DATABASE_TYPE: mysql VIKUNJA_DATABASE_USER: root VIKUNJA_DATABASE_DATABASE: vikunja volumes: - ./files:/app/vikunja/files depends_on: - db restart: unless-stopped frontend: image: vikunja/frontend restart: unless-stopped proxy: image: nginx ports: - 80:80 volumes: - ./nginx.conf:/etc/nginx/conf.d/default.conf:ro depends_on: - api - frontend restart: unless-stopped {{< /highlight >}}