Epicurean Revolutionary Libertarian Socialist

I make FOSS things:

wiki-user: db0

  • 16 posts
  • 0 comments
Joined 3 years ago
Cake day: June 9th, 2023

Cross-posted from “FYI: StarTrek.website is no longer federating with Lemmy.dbzer0.com” by @[email protected] in [email protected]

Crossposting here since y’all won’t be able to see it now that they’ve defederated us.


If you’re not familiar with how Lemmy/the Fediverse works, basically everything you read at StarTrek.website is hosted by us, even if the content originated elsewhere. That means we are responsible for everything here and we have to decide if we are comfortable boosting content from other instances.

If you’re curious, the final straw here was learning that db0 explicitly allows hosting discussions about hurting people, which needless to say goes against our instance values and we simply don’t have the manpower to moderate that volume of content incoming from their server to a degree that we feel meets our quality standards, which left defederating as the only viable option.

In keeping in line with past trends we’re announcing this because is is a larger instance and don’t want to leave any of the crew confused as to why something may be missing.


I don’t consider this a massive loss tbh. We already have [email protected] and [email protected] was already more active than their whole instance. And I’m sure @[email protected] can provide the noxious lore of their instance if you’re interested. The only loss would be not having members such as @[email protected] running around running interference for DDoSers like @[email protected]. Also Admiral Patrick of the Tesseract fame, was also an admin on their instance iirc so this is a clear retaliation as far as I’m concerned, even though we didn’t actually do anything to AP.

But also

db0 explicitly allows hosting discussions about hurting people

What the fuck does this even mean? Can someone ask for an example? Is this about Luigi? IDFK…

PS: Will this drama season never end? I want my free time back >_<

I discovered this after upgrading our instance yesterday, which also upgraded all frontends to their latest versions as well. After I did, our Tesseract frontend stopped working and I noticed immediately as it’s been my primary for a while. Initially I thought it was an API version mismatch, but no, it was much worse.

Someone pointed out that the developer of the frontend added an explicit hidden and unmodifiably blacklist which includes any and all instances to the left of Kissinger. There’s a commit which also explains their specious reasoning about our instance specifically, as it seems we’ve been on their shit list for a bit longer than that.

This instance and its admin staff encourages identity politics, groupthink, mob mentality, and extremist solutions to societal problems. Users who advocate violence are not moderated so long as the admins agree with the target. Caution and critical thinking are advised when interacting with this instance or its users.

When you use tesseract to connect to one blacklisted such instance , you just get a message informing you that Tesseract is “incompatible with that instance” which leads one to think of a technical issue, like an API mismatch, rather than the dev being an opinionated coward.

Isn’t it funny how all the software developed by turbolibs, like Piefed and Tesseract, end up with hidden control mechanisms from developers who think they know better than everyone else? That they don’t just think they deserve to tell you what you should think, but they should manipulate you to think it? Isn’t it funny how libs go on about how bad it is to support lemmy due to the ideology of the devs behind it, and yet lemmy has 0 opinions as a software? It does make one think…

Anyway, I forked - it as one does - and disabled the blacklist, but since this is a massively ideologically compromised software, I’ll doubt I’ll keep this frontend up after Lemmy 1.0. I think we’ll bring up mlmym again now that someone’s maintaining it again.

Ever since I created this instance, I wanted this corner of the fediverse to explore new radical ways to run online social media which attempts to tear down the built-in hierarchies of website hosting. The first step of this was the introduction of admin recalls a while ago, and when some of my co-admins approached me about also adding a piefed.dbzer0.com domain I saw an opportunity to attempt something I’ve been mulling on for a while: An Anarchist Confederation!

You see, the issue with running a social media, is that there’s always a hierarchy with one person or organization having “the keys to the kingdom”, whether this is the person with sudo access, or the one who bought the domain etc. This is an inescapable reality of website hosting we cannot get around (Yes, I’m aware of things like nostr etc, but those have ending issues that are beyond the scope of this post). So at the end, you always end up with some form of BDFL, or at best, a non-profit somewhere with an oligarchy of people controlling it.

The Fediverse system is a good-ish solution to that. We get to have social media without any one entity controlling the whole network, but we still have a ton of (beefing) kings and kingdoms instead. Places go down, places come up, people are not sure where to set up accounts and so on. And each of those fediverse instances still have that inherent hierarchy, so the members of say, lemmy.world, are still beholden to the actions of its admins, and their only option is to uproot their whole presence there and go elsewhere, without any safety that the next admin won’t cause them issues as well.

So I had the idea, what if we create one single entity, which is nevertheless still not controlled by any one person? When you join that entity, you still get to know what it stands for, and can choose any of the services it operates, but most of those services will be run by different people, so it’s not possible for one of them to go rogue or have a burnout and ruin the whole thing.

Ultimately, this approach is meant to protects you, from people like me, pre-emptively.

So when the idea was floated of running an anarchist piefed along with /0, I suggested this concept to the other admins, who happily agreed to give it a try. This had the added benefit of not adding yet more website hosting overhead to myself and to also give a more stable stake to the admins who did the hosting job. Now not only do the admins of anarchist.nexus have the piefed instance they wanted, but they have the extra safety of me not being able to ruin the whole thing by having a burnout/meltdown/stroke or being arrested/disappeared etc.

But the point is not merely to have yet another fediverse instance. The idea here is that we’re much more tightly woven together, which further increases the social costs of someone going rogue, as well as strengthens the bonds of all the people involved, making us stronger as a team. What does this mean in practice? All the Flotilla members agree to the following:

Same Rules

This means that all instances in the flotilla follow the same rules, including those voted by our combined community. This means that whether you’re part of lemmy.dbzer0.com or anarchist.nexus, we’re still following the same code of conduct, we have the same rules like admin recalls, disengage and so on. You can choose your flavor or software, without having to worry about re-learning new rules or admin idiosyncrasies.

Same staff

The Flotilla is built around the idea of sharing workloads. So the members of the instances agree to have admins and sysadmins which can float between them. This is not only meant to strengthen the common control, but also the trust and finally to only require one announcement for new admins, instead of having to have different admin onboarding/recalls per service.

This doesn’t necessarily mean that each admin/sysadmin will be active in all instances. For example I don’t have the time to be actively involved in anarchist.nexus atm, but I could easily do so if I found it. This creates a much easier way to spread our abilities according to our needs. People who have more capacity, can smoothly go to help in more instances, while those overwhelmed can dedicate themselves to fewer. We hope this both reduces the chance of burnout and gives flotilla members greater flexibility, by being able to use their preferred fediverse software, while staying within a community they helped build-up.

Common Governance

As a natural extension of those two concepts above. The instances will have a shared governance system. This means we will have a common governance community and voting structure. All validated members of the flotilla will be able to vote in governance threads with the same restrictions as we have now.

Likewise, all instances will have a normalized defederation list, which will be handled by following each other’s censures on the fediseer, and all bans will be also common from the instances as well. So the flotilla decides person A is not welcome, they’re not welcome in all our fleet!

The anarchist.nexus is hopefully just the first instance in our fleet (all kudos go to @[email protected] and @[email protected]) and a proof-of-concept for the whole attempt. If this goes well, we may be able to extend to other software in the future.

As with everything novel, there’s bound to be teething issues we’re going to encounter, but we’re commited to figuring it out with all of you.

And of course, go and join https://anarchist.nexus/ if that’s more your speed!

My work on threativore and flairs was the stepping stone for something I wanted to achieve ever since reddit. A way for a community (instance in our case) to be able to vote on decisions, without having to rely on comment-votes and manual counting, but also without allowing every rando on the service to vote on your internal matters.

To this end, I have now deployed the governance community on our instance and it’s live, let’s say in testing mode. Please check the manual I just linked for more in-depth explanation of how it works.

As discussed in the previous thread, the initial plan is that only stakeholders can vote and open threads. Everyone who is supporting us with donation is a de-facto stakeholder, however An icon of a doubloon with a black hole in the center in orange-red, black and white colors threadiverse enjoyers cannot open new threads. Also after the discussion I decided to allow a minimalist compass icon. Orangered color vouching for others, which any supporter at the higher tiers can do twice. Vouching gives voting access, so this means you can specify other people who you personally know are valid members of the instance, and that will allow them to take part in the decision making, even if they’re otherwise only lurking. Effectively vouching puts someone at the same level as a threadiverse enjoyer.

EDIT: I had a change of heart about this. I plan to initially allow both An icon of a doubloon with a black hole in the center in orange-red, black and white colors threadiverse enjoyers and a minimalist compass icon. Orangered color vouched to also open threads. If this causes problems, we can re-evaluate.

On a voting thread, the bot will maintain a control thread and refresh the tallies every 15 mins, (so don’t expect instant updates.)

Currently most of y’all won’t have voting rights, because ko-fi tiers will only be applied at the next donation or the monthly charging time. Liberapay is handled more often, but it requires a manual step on your end which you can do on your own already.

If you have any suggestions for MVPs for our instance, please do suggest them.

Unfortunately no feedback from any UI developers until now so as to add threativore flairs to the UI itself. I guess I have to learn javascript as well one of these days…

Anyway, this is only the beggining. I want to add more voting options, more automatic ways to nominate others for MVP. And I still need to distribute the affiliation tags (they will be visible when you comment in a governance thread). Eventually I want to even allow threativore to be usable my comm mods than just instance admins.

There’s already a test thread in governance, so go ahead and downvote/upvote it. I plan to open a proper one soon, with a small decision I want to make. I wouldn’t suggest trying to open a thread yourselves yet until voting-enabling tags are distributed, as the bot will just lock it)

EDIT: I decided to extend the voting a bit further. Now votes of local instance members who otherwise have no voting rights will also be accounted at a rate of 1/100 from a random sample of up to 1000 of their votes. This means that a vote can go up to max +/- 10 from local community votes and it’s a fractional count (i.e. +1.1, or -0.7) which should make the local community sentiment an excellent tiebreaker, without overwhelming the people who are directly supporting the instance. Furthermore, I decided to display the “outsider sentiment” which is votes from non-valid-voting users from other instances. The outsider sentiment is only flavour (“Positive”, “Negative” etc) and is disregarded from the total. This is just shown for reference of the outsider sentiment which I think might be useful.

Hey peeps, I got a few things to talk about.

First of all I am happy to announce that the Divisions by zero will be joining the newly minted Haidra non-profit org. The plan is to use Haidra as the fiscal host for your donations to the instance and have things a bit more organized in the backend. Haidra is our own non-profit, so it should carry our values and avoid conflict with people who don’t understand our ethos.

With the non-profit in place, I wanted to put into action a plan I had for a long time. To implement some sort of radical instance democracy. I don’t believe in Benevolent Dictators for Life and thus I always look for ways to receive a mandate for my actions all stakeholders, rather then deciding top-down. Unfortunately the nature of hosting a service like this does not allow anarchist democracy to be practised, as at the end of the day, there’s a sysadmin with the passwords holding all the power, but given that for this specific instance, that sysadmin is myself, I want to try and experiment with this.

As part of Haidra, the project itself (i.e. the divisions by zero) maintains full autonomy, so its own decision-making remains in its own community. However as a member project, it also effectively gets a vote in the internal running of Haidra. For me use your mandate, I need to figure out a way to receive it. To this end, I want to try and implement some sort of system to allow such democratic decision making.

Unfortunately we cannot reasonably allow every registered member to vote on instance policies, as it’s trivial for any bigot to join and make sockpuppets and throwaway accounts to affect our policies.

So I want the voting process to be somehow run by the instance stakeholders, so I came up with the concept that the only people who should be able to take decisions on the instance, are those who have monetary contributed to the hosting and personnel costs, or who are putting significant effort into nurturing communities here and potentially in the larger fediverse. The idea is that if you’ve put into action your support of this instance, you should deserve some say on how it’s run. That said, while I’m still doing most of the work behind the scenes, I still need to feel good running this instance, so I will need to come up with ways to reject people from the voting process if they don’t match our ethos. I won’t in good faith allow bigots to vote, just because they have money.

Now the trick is how to do this in a way that is manageable. While I have access to the accounts subscribed on Ko-Fi and Liberapay, connecting them to accounts in here is a massive PITA. Likewise it’s not easy to easily remember who is contributing in direct action to this instance.

So once more the mad science lab that is my brain, has come up with some new ideas. First I have updated the threativore bot so that it now also provides a REST API on top of its bot functionalities. The REST API can now be used to retrieve extra user info that is maintained by the instance admins about users on our instance, that is not always relevant to the software (and as such is unlikely to be added to the API by the devs).

One big aspect of this update is that I can maintain user tags inside threativore. These tags are free-form and will allow us to mark users as contributors through ko-fi or other means. In fact, I even setup a complete backend DB connection to threativore and a webhook for ko-fi, so that as soon as you donate to the instance, you will be marked on threativore as a contributor, so long as you used the same email address on both (if you didn’t, and you want to be recognized, please send me the email you used on ko-fi in a PM and we can override)

However, because I can’t just do things only a little bit, I decided to extend the tags functionality to also have a key for “flair”. Each tag assigned to a user has an optional flair key, which can be an emoji, or a link to an image. Currently those flairs don’t serve any purpose, but I have already pinged some of the popular third party UIs (which we’re currently hosting and I wholeheartedly suggest you use), to assist us in making those flairs visible.

In fact, those flairs are not even restricted only to our own instance, we can potentially flair any user from any instance and I have a lot of plans to make expand this functionality. The only limitation is finding UI developers to handle that end.

In fact, I have already created and onboarded some starting flairs for our instance. Some of them will be automatically assigned by the ko-fi webhook, and some others will be automatically assigned by the way you answered your registration application. Here they are:

Ko-Fi

These 4 are coming from Ko-Fi subscribers. The idea is to use them to flair people so I can quickly see whose votes would count in the democratic process. Initial plan is that every subscriber should be allowed to vote, but only subscribers who fund a lot can open new votes for mandates.

  • An icon of tankart of grog in orange-red, black and white colors: Drinking Mate is the tag for people who have donated in Ko-Fi, once off. The tag will expire after 2 months.
  • An icon of a doubloon with a black hole in the center in orange-red, black and white colors: Threadiverse Enjoyer: The people at the lowest end of the ko-fi support.
  • An icon of anchor crossed with two staves in orange-red, black and white colors: Deck Hand: The people who support significantly through the year (as it stands, each of them effectively covers half a month of hosting per year)
  • An icon of two crossed cutlasses with a skull in the center in orange-red, black and white colors: Salty Dog: The people who massively support each month (each of them effectively covers ~1/5th the monthly cost)

Liberapay

  • An icon of a doubloon with a black hole in the center in orange-red, black and white colors: Threadiverse Enjoyer: Same as Ko-FI
  • An icon of powder barrel in orange-red, black and white colors Powder Monkey: The people who support significantly through the year
  • An icon of  two crossed belaying pins and a hourglass in the center, in orange-red, black and white colors: Buccaneer: The people who massively support each month

Affiliations

The below flairs are going to be assigned depending on how you answered the registration application. If you mentioned more than affiliation, you will be assigned all of them matching.

  • A book with a loaf of bread in the cover  in orange-red, black and white colors: The bread book: Will be assigned if you mentioned an anarchist.
  • an icon of pirate jolly roger skull wearing a hat, in orange-red, black and white colors: Jolly Roger: Will be assigned if you mentioned a pirate
  • an icon of a wildebeest, in orange-red, black and white colors: Wildebeest: Will be assigned if you mentioned a FOSS advocate/software.
  • Early Bird: a parrot, orangered colors: Early Bird. Will be assigned if you registered before our instance had an registration application process, so only around 5K users ever got this one.
  • ADHD: A lightning butterfly in orangered color: ADHD Assigned if you specified you have ADHD
  • ASD: The ininity symbol in an orangered/white color: ASD Assigned if you specified you have ASD
  • Snowflake: a snowflake in orangered color: Snowflake is assigned if you mentioned someone who is neither an Anarchist, Pirate, nor FOSS (advocate)
  • First: a victory cup, orangered color: First is assigned if you were the first to mention that particular Anarchist, Pirate, nor FOSS (advocate)

Other

  • a minimalist compass icon. Orangered color Vouched: This signifies a user for whom a trusted user of this instance has vouched for. This is another way to be able to take part in the decision-making of this instance. Vouching will be restricted to tiers higher than An icon of a doubloon with a black hole in the center in orange-red, black and white colors threadiverse enjoyer and a star icon, in orange-red, black and white colors MVPs.
  • a star icon, in orange-red, black and white colors MVP: Is a flair which I plan to assign to signicant contributors to the instance in some way. Perhaps lifetime funding and/or fediverse presence? Perhaps we should vote on it :D

All of this is only the beginning of what I want to do here, but this beginning will be short-lived if we can’t get UI developers on board. So if you’re maintaining one of the 3rd party UIs in the sidebar, please contact me. Likewise, if you’re excited by any of this and you can help hack the exising lemmy UIs (including the default one) for our instance purposes, please speak up and that would be a good ground for an MVP a star icon, in orange-red, black and white colors flair! :)

In the meantime I will use threativore to start doing some scripting to allow only-staholder voting, and we’ll try it out soon.

If you have ideas and improvements about all this please post. If you have ideas for more flairs and way reasons to get them, let me know. If you have thoughts about how this democratic experiment should be structured, now is a good time to write them!

The complete guide to building your personal self hosted server for streaming and ad-blocking.

Captain’s note: This OC was originally posted in reddit but its quality makes me wants to ensure a copy survices in lemmy as well.


We will setup the following applications in this guide:

  • Docker
  • AdguardHome - Adblocker for all your devices
  • Jellyfin/Plex - For watching the content you download
  • Qbittorrent - Torrent downloader
  • Jackett - Torrent indexers provider
  • Flaresolverr - For auto solving captcha in some of the indexers
  • Sonarr - *arr service for automatically downloading TV shows
  • Radarr - *arr service for movies
  • Readarr - *arr service for (audio)books
  • lidarr - *arr service for music
  • Bazarr - Automatically downloads subtitles for Sonarr and Radarr
  • Ombi/Overseer - For requesting movies and tv shows through Sonarr and Radarr
  • Heimdall - Dashboard for all the services so you don’t need to remember all the ports

Once you are done, your dashboard will look something like this.

​

Heimdall Dashboard

I started building my setup after reading this guide https://www.reddit.com/r/Piracy/comments/ma1hlm/the/_complete/_guide/_to/_building/_your/_own/_personal/.

Hardware

You don’t need powerful hardware to set this up. I use a decade old computer, with the following hardware. Raspberry pi works fine.

​

Hardware

Operating system

I will be using Ubuntu server in this guide. You can select whatever linux distro you prefer.

Download ubuntu server from https://ubuntu.com/download/server. Create a bootable USB drive using rufus or any other software(I prefer ventoy). Plug the usb on your computer, and select the usb drive from the boot menu and install ubuntu server. Follow the steps to install and configure ubuntu, and make sure to check “Install OpenSSH server”. Don’t install docker during the setup as the snap version is installed.

Once installation finishes you can now reboot and connect to your machine remotely using ssh.

ssh username@server-ip 
# username you selected during installation
# Type ip a to find out the ip address of your server. Will be present against device like **enp4s0** prefixed with 192.168.

Create the directories for audiobooks, books, movies, music and tv.

I keep all my media at ~/server/media. If you will be using multiple drives you can look up how to mount drives.

We will be using hardlinks so once the torrents are downloaded they are linked to media directory as well as torrents directory without using double storage space. Read up the trash-guides to have a better understanding.

mkdir ~/server
mkdir ~/server/media # Media directory
mkdir ~/server/torrents # Torrents

# Creating the directories for torrents
cd ~/server/torrents
mkdir audiobooks  books  incomplete  movies  music  tv 

cd ~/server/media
mkdir audiobooks  books  movies  music  tv

Installing docker and docker-compose

Docker https://docs.docker.com/engine/install/ubuntu/

# install packages to allow apt to use a repository over HTTPS
sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
# Add Docker’s official GPG key:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# Setup the repository
echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Install Docker Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# Add user to the docker group to run docker commands without requiring root
sudo usermod -aG docker $(whoami) 

Sign out by typing exit in the console and then ssh back in

Docker compose https://docs.docker.com/compose/install/

# Download the current stable release of Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# Apply executable permissions to the binary
sudo chmod +x /usr/local/bin/docker-compose

Creating the compose file for Adguard home

First setup Adguard home in a new compose file.

Docker compose uses a yml file. All of the files contain version and services object.

Create a directory for keeping the compose files.

mkdir ~/server/compose
mkdir ~/server/compose/adguard-home
vi ~/server/compose/adguard-home/docker-compose.yml

Save the following content to the docker-compose.yml file. You can see here what each port does.

version: '3.3'
services:
    run:
        container_name: adguardhome
        restart: unless-stopped
        volumes:
            - '/home/${USER}/server/configs/adguardhome/workdir:/opt/adguardhome/work'
            - '/home/${USER}/server/configs/adguardhome/confdir:/opt/adguardhome/conf'
        ports:
            - '53:53/tcp'
            - '53:53/udp'
            - '67:67/udp'
            - '68:68/udp'
            - '68:68/tcp'
            - '80:80/tcp'
            - '443:443/tcp'
            - '443:443/udp'
            - '3000:3000/tcp'
        image: adguard/adguardhome

Save the file and start the container using the following command.

docker-compose up -d

Open up the Adguard home setup on YOUR_SERVER_IP:3000.

Enable the default filter list from filters→DNS blocklist. You can then add custom filters.

Filters

Creating the compose file for media-server

Jackett

Jackett is where you define all your torrent indexers. All the *arr apps use the tornzab feed provided by jackett to search torrents.

There is now an *arr app called prowlarr that is meant to be the replacement for jackett. But the flaresolverr(used for auto solving captchas) support was added very recently and doesn’t work that well as compared to jackett, so I am still sticking with jackett for meantime. You can instead use prowlarr if none of your indexers use captcha.

jackett:
    container_name: jackett
    image: linuxserver/jackett
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Kolkata
    volumes:
      - '/home/${USER}/server/configs/jackett:/config'
      - '/home/${USER}/server/torrents:/downloads'
    ports:
      - '9117:9117'
    restart: unless-stopped
prowlarr:
		container_name: prowlarr
    image: 'hotio/prowlarr:testing'
    ports:
      - '9696:9696'
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Kolkata
    volumes:
      - '/home/${USER}/server/configs/prowlarr:/config'
    restart: unless-stopped

Sonarr - TV

Sonarr is a TV show scheduling and searching download program. It will take a list of shows you enjoy, search via Jackett, and add them to the qbittorrent downloads queue.

sonarr:
    container_name: sonarr
    image: linuxserver/sonarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Kolkata
    ports:
      - '8989:8989'
    volumes:
      - '/home/${USER}/server/configs/sonarr:/config'
      - '/home/${USER}/server:/data'
    restart: unless-stopped

Radarr - Movies

Sonarr but for movies.

radarr:
    container_name: radarr
    image: linuxserver/radarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Kolkata
    ports:
      - '7878:7878'
    volumes:
      - '/home/${USER}/server/configs/radarr:/config'
      - '/home/${USER}/server:/data'
    restart: unless-stopped

Lidarr - Music

lidarr:
    container_name: lidarr
    image: ghcr.io/linuxserver/lidarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Kolkata
    volumes:
      - '/home/${USER}/server/configs/liadarr:/config'
      - '/home/${USER}/server:/data'
    ports:
      - '8686:8686'
    restart: unless-stopped

Readarr - Books and AudioBooks

# Notice the different port for the audiobook container
readarr:
    container_name: readarr
    image: 'hotio/readarr:nightly'
    ports:
      - '8787:8787'
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Kolkata
    volumes:
      - '/home/${USER}/server/configs/readarr:/config'
      - '/home/${USER}/server:/data'
    restart: unless-stopped

readarr-audio-books:
    container_name: readarr-audio-books
    image: 'hotio/readarr:nightly'
    ports:
      - '8786:8787'
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Kolkata
    volumes:
      - '/home/${USER}/server/configs/readarr-audio-books:/config'
      - '/home/${USER}/server:/data'
    restart: unless-stopped

Bazarr - Subtitles

bazarr:
    container_name: bazarr
    image: ghcr.io/linuxserver/bazarr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Kolkata
    volumes:
      - '/home/${USER}/server/configs/bazarr:/config'
      - '/home/${USER}/server:/data'
    ports:
      - '6767:6767'
    restart: unless-stopped

Jellyfin

I personally only use jellyfin because it’s completely free. I still have plex installed because overseerr which is used to request movies and tv shows require plex. But that’s the only role plex has in my setup.

I will talk about the devices section later on.

For the media volume you only need to provide access to the /data/media directory instead of /data as jellyfin doesn’t need to know about the torrents.

jellyfin:
    container_name: jellyfin
    image: ghcr.io/linuxserver/jellyfin
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Kolkata
    ports:
      - '8096:8096'
    devices:
      - '/dev/dri/renderD128:/dev/dri/renderD128'
      - '/dev/dri/card0:/dev/dri/card0'
    volumes:
      - '/home/${USER}/server/configs/jellyfin:/config'
      - '/home/${USER}/server/media:/data/media'
    restart: unless-stopped

plex:
    container_name: plex
    image: ghcr.io/linuxserver/plex
    ports:
      - '32400:32400'
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Kolkata
      - VERSION=docker
    volumes:
      - '/home/${USER}/server/configs/plex:/config'
      - '/home/${USER}/server/media:/data/media'
    devices:
      - '/dev/dri/renderD128:/dev/dri/renderD128'
      - '/dev/dri/card0:/dev/dri/card0'
    restart: unless-stopped

Overseer/Ombi - Requesting Movies and TV shows

I use both. You can use ombi only if you don’t plan to install plex.

ombi:
    container_name: ombi
    image: ghcr.io/linuxserver/ombi
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Kolkata
    volumes:
      - '/home/${USER}/server/configs/ombi:/config'
    ports:
      - '3579:3579'
    restart: unless-stopped

overseerr:
    container_name: overseerr
    image: ghcr.io/linuxserver/overseerr
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Kolkata
    volumes:
      - '/home/${USER}/server/configs/overseerr:/config'
    ports:
      - '5055:5055'
    restart: unless-stopped

Qbittorrent - Torrent downloader

I use qflood container. Flood provides a nice UI and this image automatically manages the connection between qbittorrent and flood.

Qbittorrent only needs access to torrent directory, and not the complete data directory.

qflood:
    container_name: qflood
    image: hotio/qflood
    ports:
      - "8080:8080"
      - "3005:3000"
    environment:
      - PUID=1000
      - PGID=1000
      - UMASK=002
      - TZ=Asia/Kolkata
      - FLOOD_AUTH=false
    volumes:
      - '/home/${USER}/server/configs/qflood:/config'
      - '/home/${USER}/server/torrents:/data/torrents'
    restart: unless-stopped

Heimdall - Dashboard

There are multiple dashboard applications but I use Heimdall.

heimdall:
    container_name: heimdall
    image: ghcr.io/linuxserver/heimdall
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Kolkata
    volumes:
      - '/home/${USER}/server/configs/heimdall:/config'
    ports:
      - 8090:80
    restart: unless-stopped

Flaresolverr - Solves cloudflare captcha

If your indexers use captcha, you will need flaresolverr for them.

flaresolverr:
    container_name: flaresolverr
    image: 'ghcr.io/flaresolverr/flaresolverr:latest'
    ports:
      - '8191:8191'
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Kolkata
    restart: unless-stopped

Transcoding

As I mentioned in the jellyfin section there is a section in the conmpose file as “devices”. It is used for transcoding. If you don’t include that section, whenever transcoding happens it will only use CPU. In order to utilise your gpu the devices must be passed on to the container.

https://jellyfin.org/docs/general/administration/hardware-acceleration.html Read up this guide to setup hardware acceleration for your gpu.

Generally, the devices are same for intel gpu transcoding.

devices:
      - '/dev/dri/renderD128:/dev/dri/renderD128'
      - '/dev/dri/card0:/dev/dri/card0'

To monitor the gpu usage install intel-gpu-tools

sudo apt install intel-gpu-tools

Now, create a compose file for media server.

mkdir ~/server/compose/media-server
vi ~/server/compose/media-server/docker-compose.yml

And copy all the containers you want to use under services. Remember to add the version string just like adguard home compose file.

Configuring the docker stack

Start the containers using the same command we used to start the adguard home container.

docker-compose up -d

Jackett

Navigate to YOUR_SERVER_IP:9117

Add a few indexers to jackett using the “add indexer” button. You can see the indexers I use in the image below.

​

Indexers

Qbittorrent

Navigate to YOUR_SERVER_IP:8080

The default username is admin and password adminadmin. You can change the user and password by going to Tools → Options → WebUI

Change “Default Save Path” in WebUI section to /data/torrents/ and “Keep incomplete torrents in” to /data/torrents/incomplete/

Create categories by right clicking on sidebar under category. Type category as TV and path as tv. Path needs to be same as the folder you created to store your media. Similarly for movies type Movies as category and path as movies. This will enable to automatically move the media to its correct folder.

Sonarr

Navigate to YOUR_SERVER_IP:8989

  • Under “Download Clients” add qbittorrent. Enter the host as YOUR_SERVER_IP port as **8080,** and the username and password you used for qbittorrent. In category type TV (or whatever you selected as category name(not path) on qbittorent). Test the connection and then save.
  • Under indexers, for each indexer you added in Jackett
    • Click on add button
    • Select Torzab
    • Copy the tornzab feed for the indexer from jackett
    • Copy the api key from jackett
    • Select the categories you want
    • Test and save
  • Under general, define the root folder as /data/media/tv

Repeat this process for Radarr, Lidarr and readarr.

Use /data/media/movies as root for Radarr and so on.

The setup for ombi/overseerr is super simple. Just hit the url and follow the on screen instructions.

Bazarr

Navigate to YOUR_SERVER_IP:6767

Go to settings and then sonarr. Enter the host as YOUR_SERVER_IP port as 8989. Copy the api key from sonarr settings→general.

Similarly for radarr, enter the host as YOUR_SERVER_IP port as 7878. Copy the api key from radarr settings→general.

Jellyfin

Go to YOUR_SERVER_IP:8096

  • Add all the libraries by selecting content type and then giving a name for that library. Select the particular library location from /data/media. Repeat this for movies, tv, music, books and audiobooks.
  • Go to dashboard→playback, and enable transcoding by selecting as VAAPI and enter the device as /dev/dri/renderD128

Monitor GPU usage while playing content using

sudo intel_gpu_top

Heimdall

Navigate to YOUR_SERVER_IP:8090

Setup all the services you use so you don’t need to remember the ports like I showed in the first screenshot.

Updating docker images

With docker compose updates are very easy.

  • Navigate to the compose file directory ~/server/compose/media-server.
  • Then docker-compose pull to download the latest images.
  • And finally docker-compose up -d to use the latest images.
  • Remove old images by docker system prune -a

What’s next

  • You can setup VPN if torrents are blocked by your ISP/Country. I wanted to keep this guide simple and I don’t use VPN for my server, so I have left out the VPN part.
  • You can read about port forwarding to access your server over the internet.

You know that little information thing below posts telling you which other communities a specific post has been posted to?

That one, won’t appear if you crosspost a pure-text post. Sure you’ll get a link in the body, but lemmy won’t “intuitively” know the two posts are connected.

By using an image in the URL of the post, not only do you give your text post a thumbnail, but you allow lemmy to easier link them together when cross-posting.

If you’re wondering “But where the hell do I find an image for each post”, well, Generative AI to the rescue! I always just fire up Lucid Creations and use it to generate something fitting to the subject, or just something pretty at 768x512.

cross-posted from: https://lemmy.world/post/276633

Been using this one for over a decade. Works with Firefox’s bookmark keywords feature.

Make a new bookmark, set the link as follows:

https://lemmy.world/c/%s (or your own Lemmy instance)

And in the “Keyword” field, use “c” or “lemmy” or whatever.

Now, when you want to visit a specific Lemmy community on your home instance, you can simply type:

“c community_name” in the address bar, or “lemmy community_name” in Firefox and it will automatically open the community.

Hey y’all I wanted to make something clear. While the lemmy.dbzer0.com allows anyone to create community because I feel there’s a lot of creativity to be found by giving people this freedom, I also don’t want a sea of flotsam in our communities list.

So while I’m not going to shut down community creation, I am planning to start curating the available communities a bit more from now on.

What it means for you is that if you plan to create a community, I expect you to actually have a plan to grow it. Not just register the name so that you squat on it and hope other join so that you end up the top mod other users built-up.

Practically this means that we expect to see some activity on those communities, a sidebar that explains what it’s about, reasonable names and titles etc. Please also do the effort of adding a banner and an Icon. I’ve developed a free Generative AI art tool you can use even!

Communities which we perceive to be abandoned or squatting will be summarily purged. My plan for now is to purge empty communities within 1 week after giving a warning. I haven’t decided how to deal with communities which have posts and subscribers yet, but if it’s inactive long enough and the amount of posts is trivially small, I’ll probably start purging those within a month. I do not think I’ll purge communities with significant amount of posts and subscribers however.

I also plan to post a report about purged communities when we do so, so that people are aware.

Thanks for reading. Let’s try to keep the quality of the divisions by zero sufficiently high.

EDIT/UPDATE: Recent versions of lemmy make this even easier by allowing turning the !instance format into a relative link to your instance. For example [email protected]. However when you do this, don’t use the auto-fill option which turns it into a markdown link, as that will break this functionality.

When you link to another community on lemmy with a absolute link like so Div/0 this links to that community directly from that instance’s domain. This means users who follow that link from other instances, will not be able to comment or subscribe. They will have to go back and edit their URL manually to workaround this.

If you instead link to a community using a relative link like so Div/0 it will lead them to the community using their own instance as a mediator, allowing them to interact with it naturally.

The source for the above relative link is like this [Div/0](/c/div0@lemmy.dbzer0.com). So basically just add only the /c/... part and ensure your instance’s domain is at the end

Quick post to answer some basic usage questions that can throw off new users.

Where should I register?

The age old question of fediverse. The answer is pick an instance that is not right-wing and you should be fine.

https://join-lemmy.org/instances makes this very easy. Once you find an instance, just go to its /signup endpoint. For the instance you’re reading right now, it would be: https://lemmy.dbzer0.com/signup. Another great option is to use the lemmyverse which provides a lot more info about potential instances and communities, including a trust score.

Do I need to create a profile for each instance?

No! Each instance can access each other instance, unless it’s been defederated because its admins are toxic (this is why I told you not to join right-wing instances earlier).

I joined an instance, but the community I am interested in is in a different instance

No problem. Simply add the instance domain at the end of the url endpoint.

For example, say you’re in lemmy.ml and you realized that stable_diffusion is in lemmy.dbzer0.com. To access it, simply add @lemmy.dbzer0.com at the end of the url after the community name. So:

https://lemmy.ml/c/[email protected]

Or to put it differently, you can access any community, in any instance by adding /c/ (The requivalet of reddit /r/) and then community_name@instance.domain

If this doesn’t work, then it’s likely this instance is not yet federated with yours. To solve this, you need to search for it. See the next section.

But how do I even find the community I want to if it exists in any of hundreds of instances?

One option is to use the lemmyverse, as it’s very user friendly, if you specify which instance if your home, it will automatically convert all links to your own instance.

Alternatively use the use the built-in search.

Note that if you search for an community in an lemmy instance your own instance doesn’t yet know about, it won’t find it. You need to give it more precice instructions to find it, which require the whole “address”. To follow our example above, you would put !stable_diffusion@lemmy.dbzer0.com in your search field.

When searching for a community in a new instance, it might take a few minutes to take effect. The first search will not return anything, but if you search again after a couple of minutes, it should appear.

How do I find my community from reddit?

https://sub.rehab/ allows you to search for any subreddit and see if its official community exists in the threadiverse. You can then search for it specifically to subscribe. If you’ve already registered an account somewhere, make sure you visit the settings in sub.rehab and set your home instance there, so that all links go through it.

Community? Instance?

An instance is a lemmy server hosted by someone. it has its own set of users and communities. lemmy.dbzer0.com is an instance. You can access (almost) every instance from any other instance.

a community is like a subreddit in reddit, or a channel in discord. It’s a topic in inside an instance. stable_diffusion is a community inside the instance lemmy.dbzer0.com.

In more plain terms, consider a lemmy instance like a street, and a community like a number on that street. When you write !stable_diffusion@lemmy.dbzer0.com you are giving the exact address and number to search for.

I keep seeing the same posts

In you’re in a smaller instance and you’ve subscribed to communities in other places, you might have set up your default visibility to not show them.

Switch your view to Subscribed/Hot to get a similar view like the reddit frontpage.

Switch to All/Hot to get a similar view to reddit /r/all

You can store this setting permanently as default in your user settings

Tips and PSA

Also see

There’s too much controversy around the official lemmy instance lemmy.ml due to their politics. However I really like the distributed nature of lemmy as opposed to the monolithic and hierarchical nature of raddle.

So I guess, I have to do this myself. This is now the official fallback forum for /r/piracy, away from toxic politics but still vehemently anti-copyrights.

For now I’m allowing the posting of magnet links, but don’t link files directly as I don’t want the eye of Sauron on me.

You can use this instance to browse the previous piracy community too and post with your account from here! They’re unrestricted, so feel free to post links there ;)