title: Nextcloud installed from docker. How do I download and install custom apps?
body: <p>Ubuntu 18.04
  Docker version 20.10.2
  docker-compose version 1.27.4</p>
  <p>The main problem here is that i have pretty little experience with dockers.</p>
  <p>From this <a href="https://help.nextcloud.com/t/manually-downloading-installing-apps/9655/15" rel="nofollow noreferrer">page</a> I think I need to download and place the apps in <code>/var/www/nextcloud/apps</code>, the thing is... that route as I understand is the one inside the docker.</p>
  <p>I may be able to copy the files like <a href="https://stackoverflow.com/questions/22907231/how-to-copy-files-from-host-to-docker-container">this solution</a>, but I want a cleaner version where I can keep editing and updating the apps.</p>
  <p>In my .yml file I have one entry like this:</p>
  <pre><code>volumes:
    - /data/ncweb:/var/www/html
  </code></pre>
  <p>I think I should add another entry to link that virtual path with a real one outside the docker.</p>
  <p>2 issues here:</p>
  <ol>
  <li>I don't know which entry should be</li>
  <li>Not sure if I have to tell Nextcloud to look there and how, in my opinion there will be no need.</li>
  </ol>
  <p>Maybe this?</p>
  <pre><code>volumes:
    - /data/ncweb:/var/www/html
    - /data/ncapps:/var/www/nextcloud/apps
  </code></pre>
  <p>I don't know either how to look for the path of <code>apps</code> inside the docker, so that route may be totally wrong. I tried with a tool named <a href="https://github.com/wagoodman/dive" rel="nofollow noreferrer">dive</a> but I'm using it in the wrong way.</p>
  <p>Thanks in advance</p>
  <p>..... EDIT .....</p>
  <p>Here there is the full .yml file</p>
  <pre><code>version: &quot;3.3&quot;
  
  networks:
    web:
      external: true
    internal:
      external: false
  
  services:
    nextcloud:
      image: nextcloud:20
      container_name: nextcloud-web
      environment:
        MYSQL_HOST: nextcloud-db:3306
        MYSQL_DATABASE: nextdb
        MYSQL_USER: nextuser
        MYSQL_PASSWORD: abcdefghijklm
      volumes:
        - ./ncweb:/var/www/html
      restart: unless-stopped
      labels:
        - &quot;traefik.enable=true&quot;
        - &quot;traefik.docker.network=web&quot;
        - &quot;traefik.http.routers.nc.rule=Host(`example.com`)&quot;
        - &quot;traefik.http.routers.nc.entrypoints=websecure&quot;
        - &quot;traefik.http.routers.nc.tls=true&quot;
        - &quot;traefik.http.routers.nc.tls.certresolver=le&quot;
        - &quot;traefik.http.routers.nc.middlewares=nc-header&quot;
        - &quot;traefik.http.routers.nc.service=nextcloud&quot;
        - &quot;traefik.http.services.nextcloud.loadbalancer.server.port=80&quot;
        - &quot;traefik.http.middlewares.nc-header.headers.referrerPolicy=no-referrer&quot;
        - &quot;traefik.http.middlewares.nc-header.headers.stsSeconds=31536000&quot;
        - &quot;traefik.http.middlewares.nc-header.headers.forceSTSHeader=true&quot;
        - &quot;traefik.http.middlewares.nc-header.headers.stsPreload=true&quot;
        - &quot;traefik.http.middlewares.nc-header.headers.stsIncludeSubdomains=true&quot;
        - &quot;traefik.http.middlewares.nc-header.headers.browserXssFilter=true&quot;
        - &quot;traefik.http.middlewares.nc-header.headers.customRequestHeaders.X-Forwarded-Proto=https&quot;
      networks:
        - internal
        - web
      depends_on:
        - nextcloud-db
        - ooserver
      logging:
        options:
          max-size: '1m'
          max-file: '10'
        driver: json-file
  
    ooserver:
      image: alehoho/oo-ce-docker-license
      container_name: ooserver
      environment:
        # Uncomment strings below to enable the JSON Web Token validation.
        - JWT_ENABLED=true
        - JWT_SECRET=abcdefghijklm
        - JWT_HEADER=Authorization
        - JWT_IN_BODY=true
      networks:
        - web
      stdin_open: true
      tty: true
      restart: unless-stopped
      volumes:
        - ./oodata:/var/www/onlyoffice/Data
        - ./oolib:/var/lib/onlyoffice
        - ./oodb:/var/lib/postgresql
        - ./oologs:/var/log/onlyoffice
      labels:
        - &quot;traefik.enable=true&quot;
        - &quot;traefik.docker.network=web&quot;
        - &quot;traefik.http.routers.oo.service=oo&quot;
        - &quot;traefik.http.routers.oo.entrypoints=websecure&quot;
        - 'traefik.http.routers.oo.rule=Host(&quot;ooserver.example.com&quot;)'
        - &quot;traefik.http.routers.oo.tls=true&quot;
        - &quot;traefik.http.routers.oo.tls.certresolver=le&quot;
        - &quot;traefik.http.routers.oo.middlewares=oo-header&quot;
        - &quot;traefik.http.services.oo.loadbalancer.server.port=80&quot;
        - &quot;traefik.http.middlewares.oo-header.headers.referrerPolicy=no-referrer&quot;
        - &quot;traefik.http.middlewares.oo-header.headers.stsSeconds=31536000&quot;
        - &quot;traefik.http.middlewares.oo-header.headers.forceSTSHeader=true&quot;
        - &quot;traefik.http.middlewares.oo-header.headers.stsPreload=true&quot;
        - &quot;traefik.http.middlewares.oo-header.headers.stsIncludeSubdomains=true&quot;
        - &quot;traefik.http.middlewares.oo-header.headers.browserXssFilter=true&quot;
        - &quot;traefik.http.middlewares.oo-header.headers.customRequestHeaders.X-Forwarded-Proto=https&quot;
      logging:
        options:
          max-size: '1m'
          max-file: '10'
        driver: json-file
  
    nextcloud-db:
      image: mariadb:10
      container_name: nextcloud-db
      command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
      environment:
        MYSQL_ROOT_PASSWORD: abcdefghijklm
        MYSQL_DATABASE: nextdb
        MYSQL_USER: nextuser
        MYSQL_PASSWORD: abcdefghijklm
      volumes:
        - nextdb-data:/var/lib/mysql
      restart: unless-stopped
      networks:
        - internal
      labels:
        - &quot;traefik.enable=false&quot;
      logging:
        options:
          max-size: '1m'
          max-file: '10'
        driver: json-file
  
    adminer:
      image: adminer
      container_name: nextcloud-dbadmin
      environment:
        ADMINER_DEFAULT_SERVER: nextcloud-db
      labels:
        - &quot;traefik.enable=true&quot;
        - &quot;traefik.docker.network=web&quot;
        - &quot;traefik.http.routers.dbncadmin.rule=Host(`dbadmin.example.com`)&quot;
        - &quot;traefik.http.routers.dbncadmin.entrypoints=websecure&quot;
        - &quot;traefik.http.routers.dbncadmin.tls=true&quot;
        - &quot;traefik.http.routers.dbncadmin.tls.certresolver=le&quot;
        - &quot;traefik.http.routers.dbncadmin.service=dbncadmin&quot;
        - &quot;traefik.http.routers.dbncadmin.middlewares=securelogin&quot;
        - &quot;traefik.http.services.dbncadmin.loadbalancer.server.port=8080&quot;
        - &quot;traefik.http.middlewares.securelogin.basicauth.users=xxxxxx:$$apr1$$abcdefghijklm$$abcdefghijklm&quot;
      networks:
        - internal
        - web
      depends_on:
        - nextcloud-db
  
  volumes:
    nextdb-data:
  </code></pre>