I am hosting more than 10 services currently but only Nextcloud sends me errors periodically and only Nextcloud is super extremely painfully slow. I quit this sh*t. No more troubleshooting and optimization.

There are mainly 4 services in Nextcloud I’m using:

  • Files: as simple server for upload and download binaries
  • Calendar (with DAVx5): as sync server without web UI
  • Notes: simple note-taking
  • Network folder: mounted on Linux dolphin

Could you recommend me the alternatives for these? All services are supposed to be exposed by HTTPS, so authentication like login is needed. And I’ve tried note-taking apps like Joplin or trillium but couldn’t like it.

Thanks in advance.

  • @xiongmao1337B
    link
    fedilink
    English
    17 months ago

    This is concerning to me because I’ve been considering ditching Synology and spinning up nextcloud. I like Synology drive but I’m tired of the underpowered hardware and dumb roadblocks and vendor lock-in nonsense. I’m very curious what you end up doing!

    • @rangerelfB
      link
      fedilink
      English
      17 months ago

      Not OP, but I run it on docker with postgres and redis, behind a reverse proxy. All apps on NC have pretty good performance and haven’t had any weird issues. It’s on an old xeon with 32gb and on spinning rust.

      • @ilikepie71B
        link
        fedilink
        English
        17 months ago

        Do you have redis talking to nextcloud over the unix socket or just regular TCP? The former is apparently another way to speed up nextcloud, but I’m struggling to understand to get containers using the unix socket instead.

        • @rangerelfB
          link
          fedilink
          English
          17 months ago

          I have both Postgres and Redis talking to Nextcloud through their respective unix sockets; I store the sockets in a named volume, so I can mount it on whatever containers need to reach them.

          • @ilikepie71B
            link
            fedilink
            English
            17 months ago

            Do you mind sharing your docker config, so I can try and replicate it. Thank you

            • @rangerelfB
              link
              fedilink
              English
              17 months ago

              Sure:

              POSTGRES

              ---
              version: '3.8'
              services:
                postgres:
                  container_name: postgres
                  image: postgres:14-alpine
                  environment:
                    POSTGRES_PASSWORD: "XXXXXXXXXXXXXXXX"
                    PGDATA: "/var/lib/postgresql/data/pgdata"
                  volumes:
                    - type: bind
                      source: ./data
                      target: /var/lib/postgresql/data
                    - type: volume
                      source: postgres-socket
                      target: /run/postgresql
                  logging:
                    driver: json-file
                    options:
                      max-size: 2m
                  restart: unless-stopped
              networks:
                default:
                  external:
                    name: backend
              volumes:
                postgres-socket:
                  name: postgres-socket
              

              REDIS

              ---
              version: '3.8'
              services:
                redis:
                  image: redis:7.2-alpine
                  command:
                    - /data/redis.conf
                    - --loglevel
                    - verbose
                  volumes:
                    - type: bind
                      source: ./data
                      target: /data
                    - type: volume
                      source: redis-socket
                      target: /var/run
                  logging:
                    driver: json-file
                    options:
                      max-size: 2m
                  restart: unless-stopped
              networks:
                default:
                  external:
                    name: backend
              volumes:
                redis-socket:
                  name: redis-socket
              

              Here’s redis.conf, it took me a couple of tries to get it just right:

              # create a unix domain socket to listen on
              unixsocket /var/run/redis/redis.sock
              unixsocketperm 666
              # protected-mode no
              requirepass rrrrrrrrrrrrr
              bind 0.0.0.0
              port 6379
              tcp-keepalive 300
              daemonize no
              stop-writes-on-bgsave-error no
              rdbcompression yes
              rdbchecksum yes
              # maximum memory allowed for redis
              maxmemory 50M
              # how redis will evice old objects - least recently used
              maxmemory-policy allkeys-lru
              # logging
              # levels: debug verbose notice warning
              loglevel notice
              logfile ""
              always-show-logo yes
              

              NEXTCLOUD

              ---
              version: '3.8'
              services:
                nextcloud:
                  image: nextcloud:27-fpm
                  env_file:
                    - data/environment.txt
                  volumes:
                    - type: bind
                      source: ./data/html
                      target: /var/www/html
                    - type: volume
                      source: redis-socket
                      target: /redis
                    - type: volume
                      source: postgres-socket
                      target: /postgres
                    - type: tmpfs
                      target: /tmp:exec
                    - type: bind
                      source: ./data/zz-docker.conf
                      target: /usr/local/etc/php-fpm.d/zz-docker.conf
                    - type: bind
                      source: ./data/opcache_cli.conf
                      target: /usr/local/etc/php/conf.d/opcache_cli.conf
                  networks:
                    - web
                    - backend
                  logging:
                    driver: json-file
                    options:
                      max-size: 2m
                  restart: unless-stopped
                crond:
                  image: nextcloud:27-fpm
                  entrypoint: /cron.sh
                  env_file:
                    - data/environment.txt
                  volumes:
                    - type: bind
                      source: ./data/html
                      target: /var/www/html
                    - type: bind
                      source: ./data/zz-docker.conf
                      target: /usr/local/etc/php-fpm.d/zz-docker.conf
                    - type: volume
                      source: redis-socket
                      target: /redis
                    - type: volume
                      source: postgres-socket
                      target: /postgres
                    - type: tmpfs
                      target: /tmp:exec
                  networks:
                    - web
                    - backend
                  logging:
                    driver: json-file
                    options:
                      max-size: 2m
                  restart: unless-stopped
                collabora:
                  image: collabora/code:23.05.5.4.1
                  privileged: true
                  environment:
                    extra_params: "--o:ssl.enable=false --o:ssl.termination=true"
                    aliasgroup1: 'https://my.nextcloud.domain.org:443'
                  cap_add:
                    - MKNOD
                  networks:
                    - web
                  logging:
                    driver: json-file
                    options:
                      max-size: 2m
                  restart: unless-stopped
              networks:
                backend:
                  external:
                    name: backend
                web:
                  external:
                    name: web
              volumes:
                redis-socket:
                  name: redis-socket
                postgres-socket:
                  name: postgres-socket
              

              The environment.txt file is hostnames, logins, passwords, etc…

              POSTGRES_DB=nextcloud
              POSTGRES_USER=xxxxxxx
              POSTGRES_PASSWORD=yyyyyyyyyyyyyyyyyyy
              POSTGRES_SERVER=postgres
              POSTGRES_HOST=/postgres/.s.PGSQL.5432
              NEXTCLOUD_ADMIN_USER=aaaaa
              NEXTCLOUD_ADMIN_PASSWORD=hhhhhhhhhhhhhhhhhhh
              REDIS_HOST=redis
              REDIS_HOST_PORT=6379
              REDIS_HOST_PASSWORD=rrrrrrrrrrrrr
              

              The zz-docker.conf file sets some process tuning and log format, some might not even be necessary:

              [global]
              daemonize = no
              error_log = /proc/self/fd/2
              log_limit = 8192
              
              [www]
              access.log = /proc/self/fd/2
              access.format = "%R - %u %t \"%m %r%Q%q\" %s %f %{mili}d %{kilo}M %C%%"
              catch_workers_output = yes
              decorate_workers_output = no
              clear_env = no
              
              user = www-data
              group = www-data
              
              listen = 9000
              listen = /var/www/html/.fpm-sock
              listen.owner = www-data
              listen.group = www-data
              listen.mode = 0666
              listen.backlog = 512
              
              pm = dynamic
              pm.max_children = 16
              pm.start_servers = 6
              pm.min_spare_servers = 4
              pm.max_spare_servers = 6
              pm.process_idle_timeout = 30s;
              pm.max_requests = 512
              

              The opcache_cli.conf file has a single line:

              opcache.enable_cli=1
              

              I don’t remember why it’s there but it’s working so I’m not touching it :-D

              Good luck :-)

    • @qflaB
      link
      fedilink
      English
      17 months ago

      Also not OP. I run nextcloud on 10th gen i3 on spinning rust and performance is good. I run it on LXC container though so without docker

    • @dangernoodle01B
      link
      fedilink
      English
      17 months ago

      A confirmed, yet still not resolved bug caused me and about 200 other people lose data (metadata) for tons of files. Well, at least 200 reacted to the GitHub bugreport I filled. I think you can easily find it because it’s the most upvoted yet unresolved issue.

      Besides this, it’d often give random errors and just not function properly. My favorites are the unexplained file locks: My brother in Christ, what do you mean error while deleting a file. It’s 2023 holy shit, just delete the damn file. It’s ridiculously unreliable and fragile. They have tons, thousands of bugreports open - yet they focus on pushing new, unwanted social features to become the new facebook and zoom. They definitely should focus on fixing the foundation first.

    • @jimheimB
      link
      fedilink
      English
      17 months ago

      Nextcloud is great. I don’t doubt that OP is having problems, and I understand how frustration can set in and one might throw in the towel and look for alternatives, but OP’s experience is atypical. I’ve been running it for years without any issues. I should point out that I only use it for small-scale personal stuff, but it’s good for me. I have it syncing on eight devices, including Linux, MacOS, and Windows desktops; Android phone; iPad; Raspberry Pi. My phone auto-uploads new camera photos. I’m using WebDAV/Fuse mounts on some machines. Everything is solid.

    • @spokaleB
      link
      fedilink
      English
      17 months ago

      I dumped synology and just use proxmox for the automatic ZFS support, then I can run my apps in either containers or VMs and even do GPU passthrough if needed.