• 2 posts
  • 46 comments
Joined 9 months ago
Cake day: October 5th, 2025

Hey so since being laid off (I don’t even want to say how long ago it was) I’ve been regularly inviting all my Linkedin contacts to break my home lab, going as far as giving them updated network diagrams each time. I’ve been in security a while so a good amount are pentesters. I think it’s a good way to keep the linkedin profile active while showing off. It shows our ability to host stuff ourselves and secure them.

What do you say we come up with a hashtag for it? #pwnme?

  • I just use my free portainer business for 3 nodes to show in the containers view which ones are outdated, and I check it regularly. Really whish there could be some kind of notification but oh well. I also follow the releases for all the projects I self host so I know when to check. Automating this makes me too nervous for comfort.

  • I’m a bit late to the party but the stack I run is what Beeper uses. If you don’t mind handing them your IMs it’s exactly what they host and it works great (used it for a year before I decided to host my own things). They make you use their client but AFAIK beeper.com is really just a very fancy matrix instance so you could use probably any Matrix client.

    As for managing an instance, see my recent comment about DB maintenance. There’s nothing more to it than that as far as maintenance is concerned for just a few users instance. Then installing the bridges isn’t hard because the docs are really good.

  • I don’t know, can’t speak for the devs. It is weird that if you don’t implement these API calls buried a bit deep in the wiki, you end up storing every meme and screenshot anybody posted on any instance for the rest of time. But I found these through issue reports with many people asking for these to be implemented by default with for instance a simple setting “purge after X days” and a list of rooms to include or exclude from the history clean-up.

  • I purge 2 weeks old media using these. Then I purge the largest rooms’ history events using these. Then I compress the DB using this.

    It looks like this:

    export PGPASSWORD=$DB_PASS
    export MYTOKEN="yourtokengoeshere"
    export TIMESTAMP=$(date --date='2 weeks ago' '+%s%N' | cut -b1-13)
    
    echo "DB size:"
    psql --host $DB_HOST -U $DB_USER -d $DB_NAME -c "SELECT pg_size_pretty(pg_database_size('$DB_NAME'));"
    
    echo "Purging remote media"
    curl \
    	-X POST \
    	--header "Authorization: Bearer $MYTOKEN" \
    	"http://localhost:8008/_synapse/admin/v1/purge_media_cache?before_ts=%24%7BTIMESTAMP%7D"
    
    echo ''
    echo 'Purging local media'
    curl \
    	-X POST \
    	--header "Authorization: Bearer $MYTOKEN" \
    	"http://localhost:8008/_synapse/admin/v1/media/delete?before_ts=%24%7BTIMESTAMP%7D"
    
    echo ''
    echo 'Purging room Arch Linux'
    export ROOM='!usBJpHiVDuopesfvJo:archlinux.org'
    curl \
    	-X POST \
    	--header "Authorization: Bearer $MYTOKEN" \
    	--data-raw '{"purge_up_to_ts":'${TIMESTAMP}'}' \
    	"http://localhost:8008/_synapse/admin/v1/purge_history/$%7BROOM%7D"
    
    echo ''
    echo 'Purging room Arch Offtopic'
    export ROOM='!zGNeatjQRNTWLiTpMb:archlinux.org'
    curl \
    	-X POST \
    	--header "Authorization: Bearer $MYTOKEN" \
    	--data-raw '{"purge_up_to_ts":'${TIMESTAMP}'}' \
    	"http://localhost:8008/_synapse/admin/v1/purge_history/$%7BROOM%7D"
    
    echo ''
    echo 'Compressing db'
    /home/northernlights/scripts/synapse_auto_compressor -p postgresql://$DB_USER:$DB_PASS@$DB_HOST/$DB_NAME -c 500 -n 100
    
    echo "DB size:"
    psql --host $DB_HOST -U $DB_USER -d $DB_NAME -c "SELECT pg_size_pretty(pg_database_size('$DB_NAME'));"
    
    unset PGPASSWORD
    

    And periodically I run vacuum;

  • And, importantly, run the db on postgre, not sqlite, and implement the regular db maintenance steps explained in the wiki. I’ve been running mine like that in a small VM for about 6 months, i join large communities, run whatsapp, gmessages and discord bridges, and my DB is 400MB.

    Before when I was still testing and didn’t implement the regular db maintenance it balloned up to 10GB in 4 months.

    screenshot of cloudbeaver