this post was submitted on 27 Nov 2023
7 points (100.0% liked)

Self-Hosted Main

502 readers
1 users here now

A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don't control.

For Example

We welcome posts that include suggestions for good self-hosted alternatives to popular online services, how they are better, or how they give back control of your data. Also include hints and tips for less technical readers.

Useful Lists

founded 1 year ago
MODERATORS
 

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.

you are viewing a single comment's thread
view the rest of the comments
[โ€“] [email protected] 1 points 9 months ago (1 children)

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

[โ€“] [email protected] 1 points 9 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 :-)