• 2 Posts
  • 38 Comments
Joined 6 months ago
cake
Cake day: October 5th, 2025

help-circle





  • 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;