• 0 Posts
  • 8 Comments
Joined 1 year ago
cake
Cake day: June 12th, 2023

help-circle




  • The separate cron container made the most sense to me. Other variants “work” but imo are mostly workarounds to avoid setting up a real cronjob. Beyond this I have no real reason, nor can I vouch that is is more or less performant than others.

    Yes, the mysqldump container is for easier restores. It’s much easier to restore from a .sql file than a raw data dir that was copied while the DB was running ;) (speaking from experience…)


  • sdw@lemmy.catoSelfhosted@lemmy.worldNextcloud alternatives
    link
    fedilink
    English
    arrow-up
    15
    ·
    1 year ago

    Just want to say that I’ve been there. There was a time my Nextcloud install was incredibly slow. Fortunately (or unfortunately?), it is featureful enough and widely supported that once you figure this issue out, it is a nice service to keep running.

    For me, adding Redis was essential. It doesn’t really make sense to me why (nothing I do on Nextcloud is intensive or data heavy) but it has greatly improved the performance of my app.

    My entire setup is a containerized Nextcloud, Nextcloud Cron, MariaDB (if I knew Postgres was an option, I would’ve chosen that), and Redis:

    version: '2'
    services:
      nextcloud:
        container_name: nextcloud
        image: nextcloud:27-apache
        restart: unless-stopped
        environment:
          - MYSQL_PASSWORD=nextcloud
          - MYSQL_HOST=db
          - MYSQL_DATABASE=nextcloud
          - MYSQL_USER=nextcloud
        labels:
          - 'public-service=true'
          - 'traefik.enable=true'
          - 'traefik.http.routers.cloud.rule=Host(`nextcloud.some.domain`)'
          - 'traefik.http.routers.cloud.tls=true'
          - 'traefik.http.services.cloud.loadbalancer.server.port=80'
        volumes:
          - /some/data/dir/nextcloud/data:/var/www/html
          - /some/external/dir:/wew:ro
    
      nextcloud-cron:
        image: nextcloud:27-apache
        restart: unless-stopped
        command: [/cron.sh]
        environment:
          - MYSQL_HOST=db
          - MYSQL_DATABASE=nextcloud
          - MYSQL_USER=nextcloud
          - MYSQL_PASSWORD=nextcloud
        volumes:
          - /some/data/dir/nextcloud/data:/var/www/html
          - /some/external/dir/:/wew:ro
    
      db:
        image: mariadb:10.4
        restart: unless-stopped
        environment:
          MYSQL_DATABASE: nextcloud
          MYSQL_USER: nextcloud
          MYSQL_ROOT_PASSWORD: nextcloud
        volumes:
          - /some/data/dir/nextcloud/db:/var/lib/mysql
    
      mysqldump:
        image: mariadb:10.4
        depends_on: [db]
        # restart: never # cronjob
        labels:
          - 'cron.schedule=0 0 8 * * ?'
        entrypoint: [mysqldump, -h, db, -u, nextcloud, -pnextcloud, --all-databases, -r, /out/nextcloud.sql]
        user: root
        volumes:
          - /some/data/dir/nextcloud/db-dump:/out
    
      redis:
        image: redis
        restart: unless-stopped