What you guys are hosting instead of Nextcloud? I'm sick of it. - eviltoast

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.

  • ilikepie71@alien.topB
    link
    fedilink
    English
    arrow-up
    1
    ·
    1 year 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.

    • rangerelf@alien.topB
      link
      fedilink
      English
      arrow-up
      1
      ·
      1 year 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.

        • rangerelf@alien.topB
          link
          fedilink
          English
          arrow-up
          1
          ·
          1 year 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 :-)