# Introduction (/) ### Welcome to the Mementomori.social Mastodon community. [#welcome-to-the-mementomorisocial-mastodon-community] Glad you're here! Mementomori.social is a general [Mastodon](https://joinmastodon.org/) instance that promotes healthy interactions on social media. The instance is based in Finland, but the internet knows no boundaries. There are no restrictions based on location or language - you're welcome just as you are. The purpose of this documentation is not only to help but also to increase transparency and openness about the instance, so you can better understand the service you're using. Hopefully, this gives you, our beloved user, greater peace of mind. ### Getting started [#getting-started] To get started, you'll need an account. We assume you already have one since you're here, but if not, you can register on the [the sign up page](https://mementomori.social/auth/sign_up). Before doing that, you might want to learn more about the server, Mastodon itself, and the instance rules - so please keep reading! # About Mementomori.social (/mementomori.social/about-mementomori.social) Mementomori.social is an *experimental* Mastodon instance hosted by Finnish web developer Rolle Laukkarinen, who has over two decades of experience in servers and web development. The instance is run and funded by Mementomori ry, a registered non-profit association in Finland. So that’s the short introduction. Now that we’ve got that out of the way, let’s switch to first-person mode. ### Experimental nature [#experimental-nature] What do we mean by "experimental"? Well, Mementomori.social isn't a "vanilla Mastodon" instance - we like to experiment with the latest developments. That's why the version we run is bleeding-edge, but we always make sure it runs smoothly so people can use it. You can read more about the features on the [Instance features](instance-features.md) page. # Administration (/mementomori.social/administration) ### Administration [#administration] Mementomori.social was founded by Rolle Laukkarinen. The instance is run and funded by [**Mementomori ry**](https://members.mementomori.social/) ("*rekisteröity yhdistys*," abbreviated *ry*, is the Finnish term for a registered non-profit association), whose members keep the instance independent and community-supported rather than owned by a company. If you want to know more about the technical details, read about the servers page. Other admins include [ikkeT](https://mementomori.social/@ikkeT), [raikas](https://mementomori.social/@raikas), [lari](https://suomi.social/@lari), [mustikkasoppa](https://mementomori.social/@mustikkasoppa). #### Mementomori ry [#mementomori-ry] Mementomori ry is a registered non-profit association in Finland (business ID 3637371-4, home municipality Jyväskylä), founded in 2026 to run and fund mementomori.social. It keeps the instance independent and sustainable, funded by its members rather than owned by a company. The board is Rolle Laukkarinen (chair), Veera Laukkarinen (secretary) and Ilkka Tengvall (treasurer). Read more at [members.mementomori.social](https://members.mementomori.social/). #### About the owner, Rolle Laukkarinen [#about-the-owner-rolle-laukkarinen] Hello! 👋 Let me switch to first person here. I’m a web developer, entrepreneur, and sysop from Finland, a small country up north in Europe, between Russia and Sweden. Long story short, I built my first website in 1998 when I was about ten years old. I got into computers through my father, who had his first PC back in the 80s as a hardcore hobbyist. I instantly fell in love with HTML and CSS, and the rest of the web languages followed soon after. ![About a 10 year old boy on an old computer.](/images/12105235_943702072368501_1524969687_n-1.jpg) *Me in the 90s.* ![A teenager sitting in a dark room, only computer screen lighting it. Open PC case beside him.](/images/17076825_261244047663581_5556737810351783936_n-1.jpg) *Me as a teenager.* My first Linux distribution was Mandrake (a Red Hat variant, later known as Mandriva), released in 1998. In the 2000s, I got into servers, again through my father, who ran his own home server inside a wardrobe (my mom *really* didn’t like that, haha). I never stopped coding or writing, I’ve been doing both daily ever since. I grew up on the Internet. My first social media experience was MySpace in the early 2000s. After that, I tried nearly every platform I came across: Jaiku, Bebo, PicPlz (basically Instagram before Instagram), Friendster, StumbleUpon, Delicious, GetGlue, Google+... and countless others, I counted more than 160 social platforms. It was the "Wild West" of social media back then, with users creating custom CSS and designs for their profiles. Then Facebook came along and changed everything, not necessarily for the better. In 2013, I started my own web and hosting company, and I have worked in the Finnish web industry ever since, building fast, lightweight sites and running the servers behind them. That’s about it. I hope you feel confident that you’re in good hands. If you’d like to know more about me, check out my [now page](https://rolle.design/now). ![A digital agency desk, computer screens behind it, blurred. Bokeh.](/images/34358023_206947129931035_4619867093607645184_n.jpg) *An old office desk of mine.* ![A person smiling with coffee cup in his hand, long haired, office full of plants, people working.](/images/356614246_203790712635260_1332227728470674466_n.jpeg) ***At the office in 2022.*** ![A command line interface showing statistics in memory usage, uptime over 250 days.](/images/67962032_2561402520578130_1393517045221439033_n.jpg) ***The old wardrobe server I mentioned earlier.*** ![Office desk with all kinds of screens from small phones to iPads and computers.](/images/17596503_154340591757276_2741788301496156160_n.jpg) ***My old office desk.*** # Instance features (/mementomori.social/instance-features) On top of the regular [Mastodon features](https://joinmastodon.org/) like per-post visibility, content warnings and real time feed, Mementomori.social has the following features. ### Mastodon Bird UI [#mastodon-bird-ui] Mastodon Bird UI is something I've been designing since March, 2023. It's a new kind of modern Mastodon UI, inspired by Twitter UI in its good era. Yes, I know, the word bird and Twitter may be a turn-off for some, but I actually like what Twitter made to its UI in [2021](https://twitter.com/TwitterDesign/status/1425505308563099650). The changes after that are not that good, so I took the UI in 2021 as an inspiration and created this: ![Screenshot of Mastodon Bird UI with main feed active, Forbes posting Home Run Derby Odds: Here's How The Derby Works - And Who Has The Best Change of Winning](/images/mementomori.social_home-4.png) The UI can be found on [GitHub](https://github.com/rollecode/mastodon-bird-ui) and its updates can be followed under hashtags [#BirdUI](https://mementomori.social/tags/birdui) and [#MastodonBirdUI](https://mementomori.social/tags/MastodonBirdUI) on Mastodon. ### Ranked For You -feed [#ranked-for-you--feed] Algorithmic home feed as an opt-in experiment. Same idea as Twitter's open sourced ranking pipeline (candidates, score, mix) but stripped to what a single instance actually needs. Chronological stays the default, nothing changes if you do not turn this on. ![](/images/image-21.png) ### Multiple Site themes [#multiple-site-themes] On Mementomori.social you get to choose from two major themes with variations: * Original Mastodon UI (Dark, Light and High contrast versions) * [Mastodon Bird UI](https://github.com/rollecode/mastodon-bird-ui#make-mastodon-bird-ui-as-optional-by-integrating-it-as-site-theme-in-settings-for-all-users) (Dark, Light, High contrast, Ultra accessible versions) ![](/images/image-4.png) ### Ultra accessible theme [#ultra-accessible-theme] On our instance we have focused to accessibility with a special touch towards users with acromatopsia, vision impairment or age vision. **Mastodon Bird UI (Ultra accessible)** theme consists of features such as * Hashtags, links and mentions are in different colors * Contrast is even starker than in default High contrast themes, black background with white text * Font sizes are much larger throughout the site * The font size is even larger on mobile * All input boxes and modals have color to distinguish them from the background * All colors are tested with a contrast checker and with a real person so that they have sufficient contrast ratios ![Screenshot of an ultra accessible theme with larger font sizes, better contrast and so forth](/images/mementomori.social_home-12.png) ### Bigger link preview cards [#bigger-link-preview-cards] ~~Default Mastodon has small link previews for URLs. I wanted to make them big and was inspired by~~ [~~this ongoing feature request~~](https://github.com/mastodon/mastodon/issues/19984#issuecomment-1328066798). This is actually now in the Mastodon core, so our instance just follows the core card, but styles it to be more minimal. ![Bigger Twitter-like link previews in a screenshot](/images/image-17.png) ### Top and bottom bar scroll out of the way [#top-and-bottom-bar-scroll-out-of-the-way] A subtle change, suggested by [ikkeT](https://mementomori.social/@ikkeT/110685294209812168). See [the post](https://mementomori.social/@rolle/110685777440679654) presenting it. See [JavaScript changes here](https://github.com/mementomori-social/mastodon/blob/e633ae29cd1f5f179da8c7b6f9a3f8478bff5e03/app/javascript/mastodon/common.js#L14-L109) and [Style changes here](https://github.com/mementomori-social/mastodon/blob/e633ae29cd1f5f179da8c7b6f9a3f8478bff5e03/app/javascript/styles/mastodon/basics.scss#L9-L46). ![Video presenting the scrolling animation](/images/ezgif.com-video-to-gif-5.gif) ### Allow max. 15 hashtags in the advanced interface columns [#allow-max-15-hashtags-in-the-advanced-interface-columns] The default Mastodon Advanced interface allows 4 hashtags per column. We allow 15. There is [a closed issue](https://github.com/mastodon/mastodon/issues/15194) that is still an issue on 4.1.4. ![Show case of adding 6 example hashtags in the column](/images/image-11.png) ### Lots of custom emojis [#lots-of-custom-emojis] Mementomori.social has a lot of custom emojis. You can also request your own by sending a post to [@rolle](https://mementomori.social/@rolle). Good emoji source: [Slackmojis](https://slackmojis.com/). ![A GIF animation video scrolling all the wonderful emojis](/images/ezgif.com-video-to-gif-1.gif) ### Polls with 15 options and 150 character limit per option [#polls-with-15-options-and-150-character-limit-per-option] Default Mastodon allows max. 4 options and 50 character limit per option. We have increased them so that posting polls is not too strict. ![Posted poll presented with more than 4 choices, compose form example with 12 choices and long answer.](/images/image-13.png) ### Increased character limit to 10000 characters [#increased-character-limit-to-10000-characters] Mastodon's default is 500. We have 10000. Never have to think about the lenght of your posts any more. ![](/images/ezgif.com-video-to-gif-2.gif) ### Show full comment, boost and fav amounts in posts instead of just "1+" or nothing [#show-full-comment-boost-and-fav-amounts-in-posts-instead-of-just-1-or-nothing] The Vanilla Mastodon doesn't show these amounts and will likely never show them natively as per [this comment](https://github.com/mastodon/mastodon/issues/420#issuecomment-270891339). However as an OCD person the metrics matter so on Mementomori.social you'll see full amount of comments. (Related [issue on Mastodon](https://github.com/mastodon/mastodon/issues/6600)) Metrics show up on Explore, Bookmarks and Favourites from [31st of July, 2023](https://mementomori.social/@rolle/110807565483442187). Comment count is accurate everywhere. Please note, currently this is reversed to default due to unreliable method. ![Metrics shown on home feed](/images/mementomori.social_home-14.png) ### Extended full-text post and account search [#extended-full-text-post-and-account-search] ~~By default Mastodon searches only for your own posts and the ones you have answered to, if that. Search provided by~~ [~~Elasticsearch~~](https://docs.joinmastodon.org/admin/optional/elasticsearch/)~~. On Mementomori.social you can search all posts the Mastodon instance is aware of, from the users who want to be found ("Include public posts in search results" enabled on settings).~~ This is actually now in the Mastodon core, so our instance just follows the core feature. ![Mastodon search screenshot for "politics", last found post 6min ago.](/images/mementomori.social_search.png) ### DeepL translations [#deepl-translations] For posts other than your language (set in profile) a "Translate" link is shown, by pressing it you can see accurate translation provided by [DeepL](https://www.deepl.com/en/translator). ![DeepL translate feature screenshot](/images/image-9.png) ### 500 posts on the Explore tab [#500-posts-on-the-explore-tab] By default Mastodon shows 100 posts on the Explore tab. We show 500. ### Snow during winter holidays [#snow-during-winter-holidays] Let it snow! [❄️](https://emojipedia.org/snowflake) See [update](https://mementomori.social/@rolle/113708984297929316). ![](/images/IMG_5655-ezgif.com-video-to-gif-converter.gif) ### Fix link previews for youtu.be and m.youtube.com links [#fix-link-previews-for-youtube-and-myoutubecom-links] In the core version, only [www.youtube.com](http://www.youtube.com) previews work. On mementomori.social, all YouTube link variations generate a preview. ![](/images/image-20.png) ### Autoplay gifs and videos without sound if reduced motion is disabled [#autoplay-gifs-and-videos-without-sound-if-reduced-motion-is-disabled] Vanilla Mastodon doesn't have a feature for this, gifs and videos are not autoplaying - especially for guests. ### Follow buttons on avatars [#follow-buttons-on-avatars] In vanilla Mastodon you can only follow someone from their profile or from a follow suggestion. On mementomori.social you can turn on a small follow button that appears on the avatar of anyone you do not follow yet, everywhere posts are shown: home, local and federated timelines, hashtags, notifications, threads, bookmarks, favourites and Explore. Clicking it opens the same follow confirmation as elsewhere. Boosts are left alone, since they already show two avatars. ![Follow button on an avatar, with the follow confirmation it opens](/images/avatar-follow-badge.png) The setting is off by default. You can turn it on from Preferences, Appearance, "Show follow buttons on avatars". If you run an instance and want the same, these are the commits in order. The first adds the badge itself, the second the confirmation dialog, and the third makes it work in every view behind an opt-in setting. The badge only renders once the browser knows whether you follow the author, so the third commit also asks the API for those relationships as posts are loaded. That request is skipped entirely while the setting is off. # Mastodon upgrade workflow (/mementomori.social/mastodon-upgrade-workflow) This document is outdated and being replaced by automation. See repo: [mementomori-social/upgrade-workflow-automation](https://github.com/mementomori-social/upgrade-workflow-automation). ### Test on the development environment [#test-on-the-development-environment] **Start with logging in as the right user on your local Linux development environment.** ```bash sudo su - mastodon ``` ```bash cd /opt/mastodon ``` > This branch is 45 commits behind mastodon/mastodon:main. ### Steps [#steps] 1. Go to [GitHub](https://github.com/mementomori-social/mastodon/tree/main) 2. Take note: "This branch is X commits behind mastodon/mastodon:main", add note to part above. 3. Sync fork with main 4. Fetch all changes: ```bash git fetch --all ``` 5. Checkout main, build and test: ```bash yarn cache clean && git checkout main && git pull ``` ```bash # If needed, install whatever version is needed in this point rbenv install 3.3.4 ``` ```bash bundle install && yarn install && RAILS_ENV=production bundle exec rails assets:precompile ``` ```bash restart-mastodon ``` This is an alias for: ```bash sudo systemctl restart mastodon-web mastodon-sidekiq mastodon-streaming && sleep 5 && sudo systemctl restart postgresql ``` 6. Check migrations: ```bash RAILS_ENV=production bundle exec rails db:migrate:status ``` 7. Migrate: ```bash RAILS_ENV=production bundle exec rails db:migrate ``` 8. If needs manual migrations, add: ```bash RAILS_ENV=production bundle exec rails db:migrate:up VERSION=20230724160715 ``` 9. After migrations you might need to clear cache before restart: ```bash RAILS_ENV=production /opt/mastodon/bin/tootctl cache clear ``` 10. Test: * Does the audio notification work * Does the emoji picker work * Does everything seem normal * Does the different feeds work (bookmarks, favs...) * Does the toot edits work from the arrow [https://mementomori.test/@rolle/111668884903746596](https://mementomori.test/@rolle/111668884903746596) 11. Reset search index (on dev first: sudo service elasticsearch start): ```bash RAILS_ENV=production bin/tootctl search deploy --reset-chewy ``` 12. Rebuild search index: ```bash RAILS_ENV=production bin/tootctl search deploy --only accounts --concurrency 16 --batch_size 4096; RAILS_ENV=production bin/tootctl search deploy --only statuses --concurrency 16 --batch_size 4096; ``` 13. Restart all services: ```bash restart-mastodon ``` 14. Create new branch for new version based on fresh main/tag: ```bash git branch mementomods-2024-07-11 git checkout mementomods-2024-07-11 ``` 15. Attempt to merge previous branch: ```bash git merge mementomods-2024-07-04 ``` 16. If it doesn't work with merge: Check the mods from last working branch, apply them on top of the branch and push the new working branch. 17. Update version: ```bash nano +70 -w .env.production ``` 18. Recompile: ```bash bundle install && yarn install && RAILS_ENV=production bundle exec rails assets:precompile ``` ```bash restart-mastodon ``` 19. It's good to clear cache sometimes: ```bash RAILS_ENV=production /opt/mastodon/bin/tootctl cache clear ``` 20. Start Elasticsearch on dev: ```bash sudo service elasticsearch start ``` 21. Reset search index (on dev first: sudo service elasticsearch start): ```bash RAILS_ENV=production bin/tootctl search deploy --reset-chewy ``` 22. If needed, build index for search: ```bash RAILS_ENV=production bin/tootctl search deploy --only accounts --concurrency 16 --batch_size 4096; RAILS_ENV=production bin/tootctl search deploy --only statuses --concurrency 16 --batch_size 4096; ``` 23. Restart: ```bash restart-mastodon ``` 24. It's now time to test (If you see "Oops!An unexpected error occurred.", it is completely okay because we don't have access to the outside world.) 25. When everything works, push changes to git: ```bash git push ``` 26. Set upstream when asked. ### Install on production [#install-on-production] 1. When everything works properly, login to [mementomori.social](https://mementomori.social) on mastodon user. 2. Backup first: ```bash sudo bash /usr/bin/backup-db.sh ``` 3. Fetch changes: ```bash cd $HOME/live git fetch --all git checkout -b upstream/mementomods-2024-07-11 git pull upstream mementomods-2024-07-11 ``` 4. Check that all changes are there: ```bash git log --oneline ``` 5. Update version: ```bash nano -w +62 .env.production ``` 6. Rebuild: ```bash yarn cache clean ``` ```bash # If needed, install whatever version is needed in this point rbenv install 3.3.4 ``` ```bash bundle install && yarn install && RAILS_ENV=production bundle exec rails assets:precompile ``` 7. Migrate: ```bash RAILS_ENV=production bundle exec rails db:migrate:status ``` ```bash RAILS_ENV=production bundle exec rails db:migrate ``` 8. Clear cache: ```bash RAILS_ENV=production /home/mastodon/live/bin/tootctl cache clear ``` 9. Run immediately: ```bash sudo su - /usr/local/bin/restart-mastodon ``` 10. Open debug log: ```bash sudo journalctl -u mastodon-web.service -f ``` 11. Or monitor fatals: ```bash sudo journalctl -u mastodon-web.service -f |grep FATAL ``` 12. **Done!** # Server tech specs (/mementomori.social/server-tech-specs) ### Software [#software] We're running a fork based on latest Mastodon nightly from [source](https://github.com/mementomori-social/mastodon), main branch. On top of the [Mastodon features](https://joinmastodon.org/), we have bunch of our own. See [Instance features](instance-features.md). ### Current optimizations [#current-optimizations] * Puma is on its own server * PostgreSQL is on its own server * Database is on its own scalable SSD volume (storage for the next 100 years) * ElasticSearch is on its own server * Media uses fast Cloudflare R2 Zero Egress Distributed Object Storage (practically endless storage) * Assets delivered by brotli * Nginx optimized for resources * RAM optimized for services * Sidekiq splitted to services and optimized for plenty of enough RAM * More than enough resources for every server and service ## Server infrastructure [#server-infrastructure] This is where the magic happens. All Mementomori.social servers are running on [Hetzner](https://www.hetzner.com/) Virtual Private Server, located in Helsinki, Finland. ### Puma server [#puma-server] The server specifications: * 8 vcpus * 32 GB RAM * 40 GB local disk * 20 GB and 60 GB SSD volumes * 5 TB Storage Box for backups On top of the regular Mastodon dependencies, the server software has * Latest [nginx](https://www.nginx.com/) * [Brotli](https://github.com/google/brotli) * [Redis](https://redis.io/) and all the other cool Mastodon dependencies ### PostgreSQL server [#postgresql-server] The server specifications: * 8 vcpus * 32 GB RAM * 1 TB SSD volume for the PostgreSQL database, scalable further when needed ### ElasticSearch server [#elasticsearch-server] The server specifications: * 4 vcpus * 16 GB RAM * 80 GB local disk ### S3 Object storage for media [#s3-object-storage-for-media] Media storage is provided by [Cloudflare R2, Zero Egress Distributed Object Storage](https://www.cloudflare.com/products/r2/). ### Tweaks [#tweaks] There are some extensive improvements to the default installation. ### Sidekiq services and jobs [#sidekiq-services-and-jobs] Sidekiq background jobs have been separated to 12 systemd services. [We decided not to have them on a different server for now](https://mementomori.social/@rolle/110366892496594617), we have not found the benefit in it yet. ```bash mastodon@mementomori:~$ sudo ls /etc/systemd/system/ |grep mastodon-sidekiq mastodon-sidekiq-1-default@.service mastodon-sidekiq-1-ingress@.service mastodon-sidekiq-2-default@.service mastodon-sidekiq-2-ingress@.service mastodon-sidekiq-default@.service mastodon-sidekiq-ingress@.service mastodon-sidekiq-mailers@.service mastodon-sidekiq-pull@.service mastodon-sidekiq-push@.service mastodon-sidekiq-scheduler@.service mastodon-sidekiq.service mastodon-sidekiq-template.service ``` Files (you get the idea): ```ini title="mastodon-sidekiq-1-default@.service" [Unit] Description=mastodon-sidekiq-%j-queue After=network.target [Service] Type=simple User=mastodon WorkingDirectory=/home/mastodon/live Environment="RAILS_ENV=production" Environment="DB_POOL=%i" Environment="MALLOC_ARENA_MAX=2" Environment="LD_PRELOAD=libjemalloc.so" ExecStart=/home/mastodon/.rbenv/shims/bundle exec sidekiq -c %i -q %j TimeoutSec=15 Restart=always # Proc filesystem ProcSubset=pid ProtectProc=invisible # Capabilities CapabilityBoundingSet= # Security NoNewPrivileges=true # Sandboxing ProtectSystem=strict PrivateTmp=true PrivateDevices=true PrivateUsers=true ProtectHostname=true ProtectKernelLogs=true ProtectKernelModules=true ProtectKernelTunables=true ProtectControlGroups=true RestrictAddressFamilies=AF_INET RestrictAddressFamilies=AF_INET6 RestrictAddressFamilies=AF_NETLINK RestrictAddressFamilies=AF_UNIX RestrictNamespaces=true LockPersonality=true RestrictRealtime=true RestrictSUIDSGID=true RemoveIPC=true PrivateMounts=true ProtectClock=true # System Call Filtering SystemCallArchitectures=native SystemCallFilter=~@cpu-emulation @debug @keyring @ipc @mount @obsolete @privileged @setuid SystemCallFilter=@chown SystemCallFilter=pipe SystemCallFilter=pipe2 ReadWritePaths=/home/mastodon/live [Install] WantedBy=multi-user.target ``` ### Crontabs [#crontabs] There are some periodically running jobs. ```sh # This is required for vixie-cron (man cron) # Check http://superuser.com/questions/264528/problem-with-random-in-crontab/264541#264541 SHELL=/bin/bash # Auto renew Let’s Encrypt certs, two times a day at a random minute. # https://gist.github.com/ahmedelgabri/cba569863cfed73eeee2614d28a02004 0 */12 * * * /etc/bin/certbot-renew.sh >/dev/null 2>&1 # Disk space monitor */10 * * * * /etc/bin/diskspace.sh >/dev/null 2>&1 #*/30 * * * * /etc/bin/diskspace-media.sh >/dev/null 2>&1 # Check rclone mount health * * * * * /usr/bin/rclone-directory-check.sh >/dev/null 2>&1 # Backup to gdrive 0 3 * * * bash /usr/bin/backup.sh >/dev/null 2>&1 # Prune rclone logs every night 5 4 * * * rm /var/log/rclone/*.log* >/dev/null 2>&1 # Database heartbeat * * * * * bash /etc/bin/check-db.sh >/dev/null 2>&1 # Database size heartbeat */3 * * * * bash /etc/bin/diskspace-db.sh >/dev/null 2>&1 # Streaming API check * * * * * bash /etc/bin/check-streaming.sh >/dev/null 2>&1 ``` ```sh # Mastodon related 5 0 * * * RAILS_ENV=production /home/mastodon/.rbenv/shims/bundle exec rake mastodon:media:clear 10 0 * * * RAILS_ENV=production /home/mastodon/.rbenv/shims/bundle exec rake mastodon:push:refresh 15 0 * * * RAILS_ENV=production /home/mastodon/.rbenv/shims/bundle exec rake mastodon:feeds:clear # Fetch new users 0 */4 * * * cd /home/mastodon/suomalaiset-mastodon-kayttajat && php /home/mastodon/suomalaiset-mastodon-kayttajat/fetch.php > /dev/null 2>&1 # Prune mastodon stuff to save disk space 0 */12 * * * bash /etc/bin/mastodon-prune.sh >/dev/null 2>&1 # Index search results periodically 0 */4 * * * bash /etc/bin/mastodon-build-search-index.sh >/dev/null 2>&1 # Check sidekiq health * * * * * /bin/bash -l -c 'cd /home/mastodon/live && bash /etc/bin/check-sidekiq.sh' >/dev/null 2>&1 # Build ElasticSearch index 0 0 * * * /bin/bash -l -c 'cd /home/mastodon/live && bash /etc/bin/mastodon-build-search-index.sh' >/dev/null 2>&1 ``` ### Server status and monitoring [#server-status-and-monitoring] The admin gets a phone call from Better Uptime automation if anything mentioned on the status page goes down, by the minute. Services status can be followed at [status.mementomori.social](https://status.mementomori.social/). Status page, monitors and heart beats are provided by [Better Stack](https://betteruptime.com). ### Backups [#backups] * Snapshots from Hetzner every night (full server backed up) * Cron scripts which backup everything to Hetzner Storage box and Google Drive (Enterprise, unlimited) * Backups from database and files separately * Manual backups each time anything is performed # Why the name Memento mori? (/mementomori.social/why-the-name-memento-mori) **A content warning**: this section briefly touches on death — not morbidly, but as a philosophical concept tied to the meaning and origin of the name mementomori.social. ### The origins of the server name [#the-origins-of-the-server-name] *Memento mori* (Latin for *“Remember that you \[have to] die”*) is a [stoic](https://en.wikipedia.org/wiki/Stoicism), artistic, and symbolic reminder of the inevitability of death. When I (Rolle, the admin) got the idea to start my own Mastodon server in October 2022, many people asked, *“What happens when you die? Will the server disappear?”* I found that question fascinating. As someone who lives with anxiety disorder and thanatophobia (fear of death), I’ve learned in therapy to face the idea of mortality rather than hide from it. Eventually, I reached a conclusion: nothing is eternal — and we shouldn’t think of things as though they are. You probably know of a few websites that once existed but are now gone. Remember [Geocities](https://en.wikipedia.org/wiki/GeoCities) or [AltaVista](https://en.wikipedia.org/wiki/AltaVista)? Over the years, countless websites and online services have disappeared. I've personally used many social media platforms that no longer exist: Jaiku, Bebo, PicPlz ("Instagram" before Instagram), Friendster, StumbleUpon, Delicious, GetGlue, Google+... Not to mention MySpace and Finland's own IRC-Galleria - both of which still technically exist, though neither is truly alive. The point is: websites come and go through the decades. Nothing is permanent. So why should a Mastodon server be any different? > Why should I fear death? If I am, then death is not. If Death is, then I am not. Why should I fear that which can only exist when I do not?\ > — Epicurus While I embrace the mindset of focusing on the present, **I do everything I can to keep this server running for as long as I live and breathe.** But still — we should remember. Hence, *memento mori.*\ Remember. # Why Mastodon? (/mastodon/why-mastodon) ![Social networking that's not for sale. Your home feed should be filled with what matters to you most, not what a corporation thinks you should see. Radically different social media, back in the hands of the people.](/images/image-15.png) ### Reason 1: Finally you are not a product [#reason-1-finally-you-are-not-a-product] On traditional commercial and centralized social media you, my friend, are the product. Companies leech off of you and make money with your data. They track you, spy on you and learn everything about you, what kind of posts you like and sell that information to advertisers. On Mastodon you won't have to worry about any of that. ### Reason 2: Mastodon is a very friendly place [#reason-2-mastodon-is-a-very-friendly-place] I've (the writer, Rolle) been using social media since the early 2000s and never seen friendlier place. Of course it's on the Internet and on the Internet there are always folks that poison the environment. But generally Mastodon is 99% turd-free. ### Reason 3: Safe space, friendly towards minorities [#reason-3-safe-space-friendly-towards-minorities] As per reason 2, Mastodon is generally a very safe space towards LGBTQIA+, disabled, etc. No discrimination is allowed. There are many instances specifically for forming even more safer spaces, like [tech.lgbt](https://tech.lgbt/explore). ### Reason 4: More active users than you ever need [#reason-4-more-active-users-than-you-ever-need] Mastodon gets thousands of new users every hour. It has 13 million users as of writing this according to [@mastodonusercount](https://mastodon.social/@mastodonusercount). ### Reason 5: No hate speech [#reason-5-no-hate-speech] Mastodon is generally a healthy place. There are toxic Mastodon instances out there, but they are widely defederated (in Mastodon world the world means: whole server is blocked). Unlike on Twitter (in 2023) for example, hate speech and negativity is not only allowed, but boosted by algorithms. ### Reason 6: No disinformation [#reason-6-no-disinformation] Mastodon is highly intolerant towards disinformation. You won't see things from the conspiracy chart on Mastodon if you have your account on a good instance. ### Reason 7: It's free [#reason-7-its-free] This time for real, no information is sold, no data is tracked, see reason 1. ### Reason 8: No advertisement [#reason-8-no-advertisement] Because Mastodon is free and open source, it has no advertisement and never will. ### Reason 9: Open source and constantly updating [#reason-9-open-source-and-constantly-updating] Because Mastodon is open source, it can be developed by anyone, even us. Look at [all the changes we've made](https://github.com/mastodon/mastodon/compare/main...mementomori-social:mastodon:main). For this reason Mastodon is secure and speedy and always up to date. As of writing this [Mastodon's GitHub repository](https://github.com/mastodon/mastodon) has baffling 42 000 stars (bookmarks), 6300 forks and 845 contributors. ### Reason 10: Lots of apps [#reason-10-lots-of-apps] Mastodon's API is open and has lots of apps. Check them out at [joinmastodon.org/apps](https://joinmastodon.org/apps). ### Reason 11: Part of the social web: The Fediverse [#reason-11-part-of-the-social-web-the-fediverse] Mastodon is not the only social app that supports ActivityPub. There are many which Mastodon communicates with. This makes it even more awesome! ![Fediverse statistics: Software User Distribution Mastodon 79.1% Misskey 4.6% Lemmy 3.5% PeerTube 3.1% Pixelfed 1.6% Microdotblog 1.2% Pleroma 1.1% Writefreely 1.0% WordPress 0.7% Other 4.1%](/images/fedidb.org_.png) *[FediDB.org](https://fedidb.org/) statistics* ### Reason 12: Great features [#reason-12-great-features] Content warnings, editing posts, 500-∞ character limit, custom emojis... All those features you wanted Twitter to have and more. You can even select a single post visibility, for example you can have a public profile but still post only to your followers. More features coming as we speak, see [Public roadmap](https://joinmastodon.org/roadmap). ### These opinionated reasons not enough? [#these-opinionated-reasons-not-enough] Check out [joinmastodon.org](https://joinmastodon.org/) and [mastodon.help](https://mastodon.help/) for more! # Running mastodon with BirdUI in containers (/try-birdui-containers/podman) Just out of interest I thought it would be nice to try and play around with mastodon on my home server. Better yet, could I run it easily in containers. Answer is yes I can, and I write instructions how you can too! This doc describes you how you can experiment [BirdUI](https://github.com/rollecode/mastodon-bird-ui) or mastodon in general. We build simple mastodon setup with containers for different roles. Containers are running in one pod in [podman](https://podman.io/). There is [traefik](https://github.com/traefik/traefik) container doing load balancing as reverse proxy. There are plenty of docs how to run mastodon in docker, you can use those to test BirdUI just by exchanging the container image url to point to birdUI ones instead of the originals. # Quick experiment with `podman kube play` [#quick-experiment-with-podman-kube-play] Let's start by creating working directory for the tests: ```sh mkdir ~/mastodon-birdui cd !$ ``` Create a file defining the pods the kubernetes way. This is just one way, but let's start with it. The file contains mastodon configuration options. I just setup something that should not federate and keeps it minimal. Go ahead and enhance it by following [mastodon configuration guide](https://docs.joinmastodon.org/admin/config/). ```sh cat > mastodon-pod.yaml <