How to access Vikunja docker-compose container from my home network

The Vikunja Frontend docker container actually already contains a self-signed certificate. You should be able to use parts of that as a blueprint.

Something like this should work for the proxy container (untested):

Dockerfile:

FROM nginx

RUN apt-get update && apt-get install -y apt-utils openssl && \
  mkdir -p /etc/nginx/ssl && \
  openssl genrsa -out /etc/nginx/ssl/dummy.key 2048 && \
  openssl req -new -key /etc/nginx/ssl/dummy.key -out /etc/nginx/ssl/dummy.csr -subj "/C=DE/L=Berlin/O=Vikunja/CN=Vikunja Snakeoil" && \
  openssl x509 -req -days 3650 -in /etc/nginx/ssl/dummy.csr -signkey /etc/nginx/ssl/dummy.key -out /etc/nginx/ssl/dummy.crt

COPY nginx.conf /etc/nginx/nginx.conf

nginx.conf (you will need to put that in the same directory as the Dockerfile):

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    server {
        listen 80;
        listen 443 default_server ssl http2;

        server_name  _;

        expires $expires;

        ssl_certificate       /etc/nginx/ssl/dummy.crt;
        ssl_certificate_key   /etc/nginx/ssl/dummy.key;

        location / {
            proxy_pass http://frontend:80;
        }

        location ~* ^/(api|dav|\.well-known)/ {
            proxy_pass http://api:3456;
            client_max_body_size 20M;
        }
    }
}

Save both files next to your docker-compose.yml file as Dockerfile and nginx.conf and change the proxy service in to this:

  proxy:
    build: .
    ports:
      - 443:443
    depends_on:
      - api
      - frontend
    restart: unless-stopped

In theory, you could also just mount the nginx.conf from above to /etc/nginx/nginx.conf and mount the ssl certificates generated in the previous step.