Selfhosted

41265 readers
466 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.

Rules:

  1. Be civil: we're here to support and learn from one another. Insults won't be tolerated. Flame wars are frowned upon.

  2. No spam posting.

  3. Posts have to be centered around self-hosting. There are other communities for discussing hardware or home computing. If it's not obvious why your post topic revolves around selfhosting, please include details to make it clear.

  4. Don't duplicate the full text of your blog or github here. Just post the link for folks to click.

  5. Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).

  6. No trolling.

Resources:

Any issues on the community? Report it using the report flag.

Questions? DM the mods!

founded 2 years ago
MODERATORS
1
 
 

First, a hardware question. I'm looking for a computer to use as a... router? Louis calls it a router but it's a computer that is upstream of my whole network and has two ethernet ports. And suggestions on this? Ideal amount or RAM? Ideal processor/speed? I have fiber internet, 10 gbps up and 10 gbps down, so I'm willing to spend a little more on higher bandwidth components. I'm assuming I won't need a GPU.

Anyways, has anyone had a chance to look at his guide? It's accompanied by two youtube videos that are about 7 hours each.

I don't expect to do everything in his guide. I'd like to be able to VPN into my home network and SSH into some of my projects, use Immich, check out Plex or similar, and set up a NAS. Maybe other stuff after that but those are my main interests.

Any advice/links for a beginner are more than welcome.

Edit: thanks for all the info, lots of good stuff here. OpenWRT seems to be the most frequently recommended thing here so I'm looking into that now. Unfortunately my current router/AP (Asus AX6600) is not supported. I was hoping to not have to replace it, it was kinda pricey, I got it when I upgraded to fiber since it can do 6.6gbps. I'm currently looking into devices I can put upstream of my current hardware but I might have to bite the bullet and replace it.

Edit 2: This is looking pretty good right now.

2
389
submitted 2 years ago* (last edited 2 years ago) by devve to c/selfhosted
 
 

Hello everyone! Mods here 😊

Tell us, what services do you selfhost? Extra points for selfhosted hardware infrastructure.

Feel free to take it as a chance to present yourself to the community!

🦎

3
 
 

For those that run Element server and run postgresql version older than 13 will need to update their postgresql major version.

I found these instructions by 'maxkratz' on their github page which worked perfectly for me to go from 11 to 16.

Hopefully this helps someone!

4
247
submitted 10 hours ago* (last edited 10 hours ago) by piotrkulpinski to c/selfhosted
 
 

Hey, community :)

I run a website that showcases the best open-source companies. Recently, I've added a new feature that filters self-hosted tools and presents them in a searchable format. Although there are other options available, like Awesome-Selfhosted, I found it difficult to find what I needed there, so I decided to display the information in a more digestible format.

You can check out the list here: https://openalternative.co/self-hosted

Let me know if there’s anything else I should add to the list.

Thanks!

5
 
 

Hello to everyone!

Very new to WebDEV and I’m pulling my hair out trying to set up it on Windows 11 for local network use only (no internet access needed). I’ve hit two major roadblocks, and I’m hoping someone here can save me from this nightmare.

The problems:

  1. HTTPS connection fails:
    I can only get WebDAV to work over HTTP, not HTTPS. I’ve created a self-signed certificate, but it’s still not working. Am I missing something obvious?

  2. Sync issues with Android apps and another computer:
    I’ve tried syncing with apps like Joplin, EasySync, DataBackup, and Diarium. While they can push data to the WebDAV server, they can’t pull data back. It’s like the PUT method works, but GET doesn’t. Is this a certificate issue, a permissions problem, or something else entirely?


What I’ve done so far:

Here’s my setup process in case it helps diagnose the issue:

1. Windows Features:

  • Enabled Internet Information Services (IIS) (which auto-enabled Web Management Tools and World Wide Web Services).
  • Enabled WebDAV Publishing under World Wide Web Services > Common HTTP Features.
  • Enabled Basic Authentication under World Wide Web Services > Security.

2. IIS Manager:

  • In Default Web Site > WebDAV Authoring Rules, I enabled WebDAV and added an authoring rule for All users with Read, Source, and Write permissions.
  • Enabled Basic Authentication and disabled Anonymous Authentication and ASP .NET Impersonation.
  • Created a self-signed certificate under Server Certificates and bound it to the Default Web Site for HTTPS.

3. Folder Setup:

  • Created a folder (e.g. C:\WebDAVShare) and added it as a Virtual Directory in IIS with an alias (e.g. webdav).
  • Set permissions for a local user (DESKTOP-PC\webdavuser) with Full Control.

4. Directory Browsing:

  • Enabled Directory Browsing in IIS.

5. Accessing WebDAV:

  • Accessed the server via https://192.168.1.10/webdav in my browser.
  • Entered credentials (DESKTOP-PC\webdavuser + password) and could see the files, but the connection was HTTP, not HTTPS.

Additional info:

  • I’ve exported and installed the self-signed certificate on both my Android devices (Android 13 & 15) as VPN and app user certificates. I couldn’t install them as CA certificates - not sure if that’s the issue.

What am I missing?

  • Why isn’t HTTPS working despite the self-signed certificate?
  • Why can’t my Android apps pull data from the WebDAV server (nor another computer on same network)?
  • Is there a specific Windows feature, permission, or setting I’ve overlooked?

I’m at my wit’s end here, so any help would be hugely appreciated. If you’ve dealt with WebDAV on Windows 11 or have any insights, please chime in!

Thanks in advance and I'm sorry if this is not the right place to ask this :(

6
 
 

Hi,

I'm trying and failing to get spamassassin to load user prefs from a mysql database. I'm using spamass-milter and I can't find any way in the docs to send anything. spamass fails to parse the recipient as the user and just uses it's running user in it's call to spamd. The database is properly configured and I can connect and set settings from roundcube. The sql config is added to local.cf.

I know that you can use spamd as a pipe, and then you can pass more variables, but I can't figure out the correct config for this setup.

This is what I have in /etc/default/spamd: OPTIONS="-Q -x --max-children 5 -D sql,bayes -H /etc/mail/spamassassin/" I've also tried multiple combinations with the flags -q, without -x...

And this is what I have in /etc/default/spamass-milter OPTIONS="-u spamass-milter -x -i 127.0.0.1" Where again I've tried without -u, with -e domain.com to explicitly set the domain.

If anyone has any advice or can point me to a recent tutorial for Ubuntu 24.04, I would be really grateful!

7
 
 

UPDATE: Thank you guys for all the suggestions! I got Navidrome installed on my NAS in a matter of minutes, got to test like a half dozen Subsonic compatible apps (both FOSS and Play Store), and it looks like Symfonium + Navidrome meets my needs. I'll keep testing before my free trial for Symfonium ends, but I really appreciate the nudge to try a new music server!


I'm self-hosting my music collection (synology NAS), and while I've liked Poweramp, it only reads local music files, which means I have to copy many GB of music to my phone, even if I'm not particularly listening to it.

The Synology DS Audio app actually does what I want: it caches music locally as you're streaming it, but it reads directly from the NAS.

The only problem with DS Audio is that it sucks as an actual music player.

Are there any Android music players, preferably FOSS or at least privacy-friendly, that will read from the NAS and cache in an intelligent way but also works well as an actual music player?

I did try Symfonium, but couldn't get it to work with Webdav or SMB, plus the dev comes off as a real asshole, so I'd rather not give them money.

EDIT: To clarify what I'm looking for:

  • The app must be able to connect to my NAS music collection (through my local network is fine).
  • Most importantly, the app must be able to cache my music either as I'm streaming it, or in advance when I'm running through a playlist... then future plays of the song should be from the cache.
  • I do NOT want to have to manually download or sync files, which is how I've been doing, and I don't like this at all.

If you've used the Synology DS Audio app, then you'll know exactly the behaviour I'm looking for. It really is a shame that DS Audio sucks as a music player, or else it would be exactly what I'm looking for.

8
42
submitted 1 day ago* (last edited 1 day ago) by sol6_vi to c/selfhosted
 
 

EDIT: Thanks everyone for your time and responses. To break as little as possible attempting to fix this I've opted to go with ZeroSSL's DNS process to acquire a new cert. I wish I could use this process for all of my certs as it was very quick and easy. Now I just have to figure out the error message lemmy is throwing about not being able to run scripts.

Thank you all for your time sincerely. I understand a lot more than I did last night.


Original Post

As the title says I'm unable to renew a cert on a self-hosted lemmy instance. A friend of mine just passed away and he had his hands all up in this and had it working like magic. I'm not an idiot and have done a ton of the legwork to get our server running and working - but lemmy specifically required a bit of fadanglin' to get working correctly. Unfortunately he's not here to ask for help, so I'm turning to you guys. I haven't had a problem with any of my other software such as nextcloud or pixelfed but for some reason lemmy just refuses to cooperate. I'm using acme.sh to renew the cert because that's what my buddy was using when he had set this all up. I'm running apache2 on a bare metal ubuntu server.

Here's my httpd-ssl.conf:

https://pastebin.com/YehfTPNV

Here's some recent output from my acme.sh/acme.log:

https://pastebin.com/PESVVNg4

Here's the terminal read out and what I'm attempting to execute:

https://pastebin.com/jfHfiaE0

If you can make any suggestions at all on what I might be missing or what may be configured incorrectly I'd greatly appreciate a nudge in the right direction as I'm ripping my hair out.

Thank you kindly for your time.

9
 
 

TL;DR: I made the switch an hour ago and thought I'd share my motivations and experiences here in case anyone wants to do the same.


A few years ago, when the number of devices in my LAN threatened to get out of hand for reasonable maintainability, I made the switch to network-wide ad blocking. An older Raspberry Pi model connected directly to my router turned out to be a good solution. After checking the available options, I ran AdGuard Home on it for a while, which is (in my opinion) a nicer solution than the top dog Pi-Hole, but essentially does the same thing: every DNS request is forwarded to a customisable DNS server and filtered using equally customisable blocking lists, plus there's a nice web interface.

Third-party DNS servers have some advantages, but they are not protected against censorship (e.g. the attacks by corporations against Quad9) and surveillance. Because what used to be called ‘paranoia’ can now be called healthy caution again, my own DNS server wouldn't be such a bad idea, I thought. The most obvious solution, setting up an Unbound in addition to AdGuard Home, did not seem wise to me for two reasons: Firstly, I have had rather mixed experiences with setting up and running Unbound on my mail server, and secondly, the concept of having to run two different services on the same device for the same purpose, which then have to talk to each other, seemed ill-conceived to me: not only is it quite complex and seems partially redundant, it is also more error-prone than a standardised solution.

Shortly afterwards, I accidentally found the answer to my doubts with the Technitium DNS server. Technitium (they have more products, but I'll cut it short for now) is something similar to AdGuard Home and Pi-Hole: you start a software and this software then acts as a DNS server. Technitium does not (necessarily) use a third-party service, but sends all queries directly to the root nodes. This takes a little longer than usual the first time a domain is called, but is censorship-free and then (naturally, because it is within the local network) lightning-fast.

Technitium works without further configuration, right after starting (and setting the admin password) it is fully operational. Fine-tuning is possible, there are also some plugins, I myself have actually only set up a few ad filters, because Technitium can also use these by default. I like it.

I regret not having started until 2025. I was always put off by Unbound. If I had known that something like Technitium existed (for over five years now), I would probably have skipped AdGuard Home straight away. I am happy to recommend it.

10
44
submitted 2 days ago* (last edited 16 hours ago) by [email protected] to c/selfhosted
 
 

Hello.

Notesnook is an end-to-end encrypted note taking alternative to Evernote. I wanted to self-host a Notesnook sync server really badly, but I'm a noob. So, I worked hard on it and came up with this noob-proof tutorial on how to set up a Notesnook sync server with local file storage, getting inspiration from the provided docker-compose in the repository.

That's my way of giving back to the self-hosting community. I hope it can help some people.


Overview

This guide will help you set up a self-hosted instance of Notesnook using Docker Compose.


Prerequisites

  • Linux server with Docker and Docker Compose installed.
  • Domain name with the ability to create subdomains.
  • Basic understanding of terminal commands.
  • Ports 5264, 6264, 7264, 8264, 9090 and 9009 available. Or you can change them but take good note of your changes.

1. Directory Structure Setup

Create the required directories:

# Create data directories
mkdir -p /srv/Files/Notesnook/db
mkdir -p /srv/Files/Notesnook/s3
mkdir -p /srv/Files/Notesnook/setup

2. Configuration Files

2.1. Environment File

Create the .env file:

cd /srv/Files/Notesnook/setup
nano .env

Add the following content (modify the values accordingly):

# Instance Configuration
INSTANCE_NAME=My Notesnook
DISABLE_SIGNUPS=false
NOTESNOOK_API_SECRET=your_secure_api_secret_here

# SMTP Configuration
[email protected]
SMTP_PASSWORD=your_smtp_password
SMTP_HOST=smtp.your-server.com
SMTP_PORT=587

# Public URLs (replace domain.com with your domain)
AUTH_SERVER_PUBLIC_URL=https://auth.domain.com/
NOTESNOOK_APP_PUBLIC_URL=https://notes.domain.com/
MONOGRAPH_PUBLIC_URL=https://mono.domain.com/
ATTACHMENTS_SERVER_PUBLIC_URL=https://files.domain.com/

# MinIO Configuration
MINIO_ROOT_USER=admin
MINIO_ROOT_PASSWORD=your_secure_password_here

2.2. Docker Compose File

Create the docker-compose.yml file:

nano docker-compose.yml

Paste the following content:

x-server-discovery: &server-discovery
  NOTESNOOK_SERVER_PORT: 5264
  NOTESNOOK_SERVER_HOST: notesnook-server
  IDENTITY_SERVER_PORT: 8264
  IDENTITY_SERVER_HOST: identity-server
  SSE_SERVER_PORT: 7264
  SSE_SERVER_HOST: sse-server
  SELF_HOSTED: 1
  IDENTITY_SERVER_URL: ${AUTH_SERVER_PUBLIC_URL}
  NOTESNOOK_APP_HOST: ${NOTESNOOK_APP_PUBLIC_URL}

x-env-files: &env-files
  - .env

services:
  validate:
    image: vandot/alpine-bash
    entrypoint: /bin/bash
    env_file: *env-files
    command:
      - -c
      - |
        required_vars=(
          "INSTANCE_NAME"
          "NOTESNOOK_API_SECRET"
          "DISABLE_SIGNUPS"
          "SMTP_USERNAME"
          "SMTP_PASSWORD"
          "SMTP_HOST"
          "SMTP_PORT"
          "AUTH_SERVER_PUBLIC_URL"
          "NOTESNOOK_APP_PUBLIC_URL"
          "MONOGRAPH_PUBLIC_URL"
          "ATTACHMENTS_SERVER_PUBLIC_URL"
        )
        for var in "$${required_vars[@]}"; do
          if [ -z "$${!var}" ]; then
            echo "Error: Required environment variable $$var is not set."
            exit 1
          fi
        done
        echo "All required environment variables are set."
    restart: "no"

  notesnook-db:
    image: mongo:7.0.12
    hostname: notesnook-db
    volumes:
      - /srv/Files/Notesnook/db:/data/db
      - /srv/Files/Notesnook/db:/data/configdb
    networks:
      - notesnook
    command: --replSet rs0 --bind_ip_all
    depends_on:
      validate:
        condition: service_completed_successfully
    healthcheck:
      test: echo 'db.runCommand("ping").ok' | mongosh mongodb://localhost:27017 --quiet
      interval: 40s
      timeout: 30s
      retries: 3
      start_period: 60s

  initiate-rs0:
    image: mongo:7.0.12
    networks:
      - notesnook
    depends_on:
      - notesnook-db
    entrypoint: /bin/sh
    command:
      - -c
      - |
        mongosh mongodb://notesnook-db:27017 <<EOF
          rs.initiate();
          rs.status();
        EOF

  notesnook-s3:
    image: minio/minio:RELEASE.2024-07-29T22-14-52Z
    ports:
      - 9009:9000
      - 9090:9090
    networks:
      - notesnook
    volumes:
      - /srv/Files/Notesnook/s3:/data/s3
    environment:
      MINIO_BROWSER: "on"
    depends_on:
      validate:
        condition: service_completed_successfully
    env_file: *env-files
    command: server /data/s3 --console-address :9090
    healthcheck:
      test: timeout 5s bash -c ':> /dev/tcp/127.0.0.1/9000' || exit 1
      interval: 40s
      timeout: 30s
      retries: 3
      start_period: 60s

  setup-s3:
    image: minio/mc:RELEASE.2024-07-26T13-08-44Z
    depends_on:
      - notesnook-s3
    networks:
      - notesnook
    entrypoint: /bin/bash
    env_file: *env-files
    command:
      - -c
      - |
        until mc alias set minio http://notesnook-s3:9000/ ${MINIO_ROOT_USER:-minioadmin} ${MINIO_ROOT_PASSWORD:-minioadmin}; do
          sleep 1;
        done;
        mc mb minio/attachments -p

  identity-server:
    image: streetwriters/identity:latest
    ports:
      - 8264:8264
    networks:
      - notesnook
    env_file: *env-files
    depends_on:
      - notesnook-db
    healthcheck:
      test: wget --tries=1 -nv -q  http://localhost:8264/health -O- || exit 1
      interval: 40s
      timeout: 30s
      retries: 3
      start_period: 60s
    environment:
      <<: *server-discovery
      MONGODB_CONNECTION_STRING: mongodb://notesnook-db:27017/identity?replSet=rs0
      MONGODB_DATABASE_NAME: identity

  notesnook-server:
    image: streetwriters/notesnook-sync:latest
    ports:
      - 5264:5264
    networks:
      - notesnook
    env_file: *env-files
    depends_on:
      - notesnook-s3
      - setup-s3
      - identity-server
    healthcheck:
      test: wget --tries=1 -nv -q  http://localhost:5264/health -O- || exit 1
      interval: 40s
      timeout: 30s
      retries: 3
      start_period: 60s
    environment:
      <<: *server-discovery
      MONGODB_CONNECTION_STRING: mongodb://notesnook-db:27017/?replSet=rs0
      MONGODB_DATABASE_NAME: notesnook
      S3_INTERNAL_SERVICE_URL: "http://notesnook-s3:9000/"
      S3_INTERNAL_BUCKET_NAME: "attachments"
      S3_ACCESS_KEY_ID: "${MINIO_ROOT_USER:-minioadmin}"
      S3_ACCESS_KEY: "${MINIO_ROOT_PASSWORD:-minioadmin}"
      S3_SERVICE_URL: "${ATTACHMENTS_SERVER_PUBLIC_URL}"
      S3_REGION: "us-east-1"
      S3_BUCKET_NAME: "attachments"

  sse-server:
    image: streetwriters/sse:latest
    ports:
      - 7264:7264
    env_file: *env-files
    depends_on:
      - identity-server
      - notesnook-server
    networks:
      - notesnook
    healthcheck:
      test: wget --tries=1 -nv -q  http://localhost:7264/health -O- || exit 1
      interval: 40s
      timeout: 30s
      retries: 3
      start_period: 60s
    environment:
      <<: *server-discovery

  monograph-server:
    image: streetwriters/monograph:latest
    ports:
      - 6264:3000
    env_file: *env-files
    depends_on:
      - notesnook-server
    networks:
      - notesnook
    healthcheck:
      test: wget --tries=1 -nv -q  http://localhost:3000/api/health -O- || exit 1
      interval: 40s
      timeout: 30s
      retries: 3
      start_period: 60s
    environment:
      <<: *server-discovery
      API_HOST: http://notesnook-server:5264/
      PUBLIC_URL: ${MONOGRAPH_PUBLIC_URL}

networks:
  notesnook:

3. Docker Images Preparation

Pull all required images to avoid timeout issues:

cd /srv/Files/Notesnook/setup
docker pull mongo:7.0.12
docker pull minio/minio:RELEASE.2024-07-29T22-14-52Z
docker pull streetwriters/identity:latest
docker pull streetwriters/notesnook-sync:latest
docker pull streetwriters/sse:latest
docker pull streetwriters/monograph:latest
docker pull vandot/alpine-bash

or just

cd /srv/Files/Notesnook/setup
docker compose pull

4. Deployment

Start the services:

cd /srv/Files/Notesnook/setup
docker compose up -d

5. Service Verification

5.1. Check Container Status

docker compose ps

Expected status:

  • Running containers:
    • notesnook-db
    • notesnook-s3
    • identity-server
    • notesnook-server
    • sse-server
    • monograph-server
  • Completed containers (should show Exit 0):
    • validate
    • initiate-rs0
    • setup-s3

5.2. Check Logs

docker compose logs

5.3. Test MinIO Access

Visit: http://your-server:9009/


6. Reverse Proxy Configuration with Nginx and SSL

Enable WebSockets Support for: notes.domain.com (port 5264) - For real-time synchronization
events.domain.com (port 7264) - For real-time notifications

Enable Cache Assets for: mono.domain.com (port 6264) - For optimizing public notes loading

Step 1: Install Certbot

sudo apt-get update
sudo apt-get install certbot python3-certbot-nginx

Step 2: Obtain SSL Certificates

sudo certbot --nginx -d auth.domain.com -d notes.domain.com -d events.domain.com -d mono.domain.com

Step 3: Modify Nginx Configuration

Use the following example configurations for each subdomain:

# Auth Server - Basic (no cache/websocket needed)
server {
    listen 80;
    server_name auth.domain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name auth.domain.com;

    ssl_certificate /etc/letsencrypt/live/auth.domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/auth.domain.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
        proxy_pass http://localhost:8264/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

# Notes Server - With WebSocket
server {
    listen 80;
    server_name notes.domain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name notes.domain.com;

    ssl_certificate /etc/letsencrypt/live/notes.domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/notes.domain.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
        proxy_pass http://localhost:5264/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_read_timeout 3600;
        proxy_send_timeout 3600;
    }
}

# Events Server - With WebSocket
server {
    listen 80;
    server_name events.domain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name events.domain.com;

    ssl_certificate /etc/letsencrypt/live/events.domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/events.domain.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
        proxy_pass http://localhost:7264/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_read_timeout 3600;
        proxy_send_timeout 3600;
    }
}

# Monograph Server - With Cache
server {
    listen 80;
    server_name mono.domain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name mono.domain.com;

    ssl_certificate /etc/letsencrypt/live/mono.domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mono.domain.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
        proxy_pass http://localhost:6264/;
        proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
        proxy_cache_valid 200 60m;
        add_header X-Cache-Status $upstream_cache_status;
        expires 1h;
        add_header Cache-Control "public, no-transform";
    }
}

7. Useful Commands

Service Management

# View real-time logs
docker compose logs -f

# View logs for specific service
docker compose logs [service-name]

# Restart specific service
docker compose restart [service-name]

# Stop all services
docker compose down

# Update services
docker compose pull
docker compose up -d

8. Maintenance

8.1. Backup

Regularly backup these directories:

  • /srv/Files/Notesnook/db/ (MongoDB data)
  • /srv/Files/Notesnook/s3/ (MinIO data)
  • /srv/Files/Notesnook/setup/.env (Configuration)

8.2. Updates

To update all services:

cd /srv/Files/Notesnook/setup
docker compose pull
docker compose down
docker compose up -d

9. Troubleshooting

Common Issues:

Service won't start

  • Check logs: docker compose logs [service-name]
  • Verify port availability.
  • Check directory permissions.
  • Verify environment variables.

Database Connection Issues

  • Ensure MongoDB replica set is initialized.
  • Check MongoDB logs: docker compose logs notesnook-db.

Storage Issues

  • Verify MinIO credentials.
  • Check MinIO logs: docker compose logs notesnook-s3.

Email Not Working

  • Verify SMTP settings in .env.
  • Check identity-server logs.

Security Notes

  • Change default passwords in .env.
  • Use strong passwords for MinIO and API secret.
  • Keep your .env file secure.
  • Regularly update all services.
  • Enable HTTPS on your reverse proxy.
  • Consider implementing fail2ban.
  • Regularly monitor logs for suspicious activity.

Support

If you encounter issues:

11
 
 

Hi, community :)

Long time no see. It's been some challenging weeks.

There are some new updates for Postiz, but just a small recap:

Postiz is a social media scheduling tool supporting 17 social media channels:

Instagram, Facebook, TikTok, Reddit, LinkedIn, X, Threads, BlueSky, Mastodon, YouTube, Pinterest, Dribbble, Slack, Discord, Warpcast, Lemmy and Telegram.

https://github.com/gitroomhq/postiz-app

Here are the latest updates :)

  • We added a stand-alone Instagram provider that doesn't require you to have Facebook business.
  • Added Lemmy :)
  • We have added short-linking. By default, it uses DUB, but we have added a nice infrastructure to easily create new providers (currently working on Bitly and short.io). When you add links, once you schedule the post, it asks if you want to shorten them.
  • I added a Telegram provider, which was really challenging because the way you add a Telegram bot is a bit different.
  • A big step into web3 - Postiz now supports scheduling to Warpcast using Neynar.
  • We also added a web3 login with Farcaster.

Of course, everything available in the open source :)

Future:

  • I started to get more into web3 and am thinking of adding Nostr also.
  • Default hashtags and signatures to platforms.
  • Post templates to write faster.
  • WordPress integration.
  • Digest - sometimes people schedule like 10 posts at once, and get 10 emails.

Funny enough, Postiz got a lot of cancellations because of the TikTok ban (bummer.)

Let me know what else I should add to the roadmap.

12
25
submitted 2 days ago* (last edited 2 days ago) by [email protected] to c/selfhosted
 
 

Hopefully someone can shed some light on this idea. Or explain something that kind of fits/fills the use case and need. I am looking for a basic operating system that can be updated across multiple devices like a living OS.

For instance I have a desktop PC high end specs with the same Operating System as a laptop or tablet but it's live sync. Meaning apps, files, changes made on one system are the same on all devices. I've looked at cloning drives and have done it. Far too slow and cumbersome.

This would be essentially changing devices based on hardware power requirements but having the same living operating system synced across all devices so all data and abilities remain the same anytime something is needed.

Maybe I'm being far fetched or what have you and this might possibly be in the wrong Sub. But I assumed it would fall under self hosted almost. Ive considered a NAS and I'm open to other ways to structure the concept ALL IDEAS WELCOME feel free to expand on it in any way. But dealing with different operating systems and architectures of various devices is wildly difficult sometimes for software, mobility, power requirements not watts but processing power, cross compatibility. I've seen apps that sync across devices but some desktop apps and mobile apps aren't cross compatible and with self hosting so many services that function well across networks and devices after years of uptime you sort of forget the configs of everything it's a nightmare when a single app update or container causes a domino affect. Thanks everyone hopefully this is helpful to others as well with similar needs.

13
 
 

Hello I am looking to self host my own pixelfed account just because I like self hosting and like sharing pics.

I saw there is a sign in with mastodon option on the pixelfed site and was curious if I host a mastodon instance instead, could I then use pixelfed with the same account?

I have a lemmy, mastodon, and pixelfed account right now and from doing a few experiments it seems mastodon has the best federation with both pixelfed and lemmy as far as commenting back and forth so it would be pretty neat to use a mastodon instance if that is possible

14
 
 

I've been researching different ways to expose Docker containers to the internet. I have three services I want to expose: Jellyfin, Omnivore (Read-it-later app), and Overseerr.

I've come across lots of suggestions, like using Nginx with Cloudflared, but some people mention that streaming media goes against Cloudflared tunnel TOS, and instead recommend Tailscale, or Traefik, or setting up a WireGuard VPN, or using Nginx with a WireGuard VPN.

The amount of conflicting advice has left me confused. So, what would be the best approach to securely expose these containers?

15
 
 

I installed Ollama but I don't have any ideas of what to do with it.

Do you have any fun/original use cases for it? I'm a programmer so it doesn't have to exist already.

16
 
 

Hi all!
I often struggle to remember where/if I've ordered a product (my email account is a mess, my own fault!), how much I've paid and if it was for me or for some member of my family. Is there a self hosted service that you've tried and find helpful that can do this kind of job?

17
16
submitted 3 days ago* (last edited 3 days ago) by [email protected] to c/selfhosted
 
 

I want to monitor changes of some bitcoin addresses and get email notification when a change happens. Do you know if exists any self hosted software with this functionality?

Edit: why the downvotes?

18
 
 

Wondering if I'm bad at using the search or if there is only a selfhosting community with a lot of subs?

19
 
 

For this new year, I’d like to learn the skills necessary to self host. Specifically, I would like to eventually be able to self host Nextcloud, Jellyfin and possibly my email server too.

I've have a basic level understanding of Python and Kotlin. Now I'm in the process of learning Linux through a virtual machine because I know Linux is better suited for self hosting.

Should I stick with Python? Or is JavaScript (or maybe Ruby) better suited for that purpose? I'm more than happy to learn a new language, but I'm unsure on which is better suited.

And if you could start again in your self hosting journey, what would you do differently? :)

EDIT: I wasn't expecting all these wonderful replies. You're all very kind people to share so much with me :)

The consensus seems to be that hosting your own email server might be a lot, so I might leave that as future project. But for Nextcloud and Jellyfin I saw a lot of great tips! I forgot to mention that ideally I would like to have Nextcloud available for multiple users (ie. family memebers) so indeed learning some basic networking/firewalling seems the bare minimum.

I also promise that I will carefully read the manuals!

20
 
 

I have to ask this. Is there a service where I could bring my own FQN like Notgoogle.com and then have them handle emails for me? But with a twist.. I want notgoogle.com to send and receive emails via that outside entity, but I want to send the emails from a self hosted server that maybe has mailcow or similar and I want that same server to receive the emails from the outside company. Ideally the outside company is basically just a relay from my IP to the outside world and vise versa. The outside company would basically hold the emails until my server checked and downloaded them. any advice on this. Hopefully with a useful step by step guide from somewhere in the webs?

21
22
21
submitted 4 days ago* (last edited 4 days ago) by [email protected] to c/selfhosted
 
 

I moved from next cloud to syncthing some months back. I had nextcloud as an app for Truenas scale. Several times after app dates, next cloud would stop running and would have to setup up everything again.

Syncthing is OK but 2 things annoy me:

A. I get huge amounts of conflict file generated that use up space

B. File sharing with family is complicated. I tried to setup a share account that everyone uses but as syncthing works with device ids, it refuses two accounts from the same machine. I share my Linux laptop with my wife. We each have our own linux account. I've got syncthing running but can't even get my wife's account to sync because I get errors that device I'd already exists.

I don't want to go back to next cloud just for file sharing. I don't generally like the idea of relying on one service for multiple objectives (calendar, file sharing, etc.).

Is there a way to get syncthing to do what I want?

23
 
 

For context, Hoarder is a bookmarking tool, and it was selected by selfh.st as one of the favourites of 2024

https://selfh.st/2024-favorite-new-apps/

Here is a link to the post, and it has also been copied below (with some extra lines added to fix formatting):


This post could have been about how hoarder reached 10k stars on Github, or about how we spent a day in the front page of hackernews. But unfortunately, it's about neither of those. Today, I received a cease and desist from someone holding the "Hordr" trademark claiming that "Hoarder" infringes their trademark. Quoting the content of the letter:

In these circumstances, our client is concerned, and justifiably so, that your use of a near identical name in connection with software having very similar (if not identical) functionality gives the impression that your software originates from, is somehow sponsored by, or is otherwise affiliated with our client.

They're asking to cease and desist from using the "Hoarder" name, remove all content of websites/app store/github/etc that uses the name "Hoarder" and the cherry on top, "Immediately transfer the hoarder.app domain to our client" or let it expire without renewing it (in Feb 2027). They're expecting a response by the 24th of Jan, or they're threatening to sue.

For context, I've started developing Hoarder in Feb 2024, and released it here on reddit on March 2024. I've never heard about "Hordr" before today, so I did some research (some screenshots along the way):

  1. They have a trademark for "Hordr" registered in Jan 2023.

  2. They registered the domain hordr dot app in 2021.

  3. Searching google for their domain shows nothing but their website, their parent company and an old apk (from Jun 2024). So they have basically zero external references.

  4. They've had their 2.0 release on the app store on the 3rd of Jan 2025 (2 weeks ago), with "AI powered bookmarking". The release before that is from Feb 2023, and says nothing about the content of the app back then.

    1. Their apps are so new that they are not even indexed on the play store. Google says they have "1+" downloads.
    2. I found an apk on one of the apk hosting sites from Jun 2024, which shows some screenshots of how the app looked back then.
  5. Wayback machine for the hordr dot info shows a references from 2023 to some app in the app/play store. The app itself (in app/play store) is unfortunately not indexed.

So TL;DR, they seem legitimate and not outright trademark trolls. Their earliest app screenshots from June 2024 suggest their current functionality came after Hoarder’s public release. Despite their claims, I find it hard to see how Hoarder could cause confusion among their customers, given they appear to have very almost none. If anything, it feels like they’ve borrowed from Hoarder to increase the similarity before sending the cease and desist.

Hoarder is a side project of mine that I've poured in so much time and energy over the last year. I don't have the mental capacity to deal with this. I'm posting here out of frustration, and I kinda know the most likely outcome. Has anyone dealt with anything similar before?

24
 
 

In my business, I am very often not allowed to use public clouds because of data privacy reasons. This means, I need to create my own cloud with all the services that are needed to actually work in a IT driven DevOps environment.

Is there a comprehensive list of software, which offer on-prem solutions? It does not have to be open-source or free.

A good example would be some Atlassian software, like Jira, which is available as on-prem version.

25
 
 

Hey, Threadiverse! I'm looking for informed opinions on database choices.

I can stand up an Internet-facing application and have it use either MySQL or PostgreSQL. Which is the better choice, and why do you think so?

Thanks!

view more: next ›