[–] [S] 9 points 3 days ago* (2 children)

While I agree on principle, we're not always using big-name websites. The argument falls short for some-local-blog.com, there's no security improvement on clicking that link as opposed to shortener.tld/blog-link. I'd say we should trust the source of the link instead of the link itself. Link shortening can be useful if you want long links to look nice when sharing, or simply for personal use so that you don't need to remember long links to access an internal resource. Or just for personal websites. I can link my CV at https://domain.tld/cv instead of the full PDF file path, for example.

  • source
  • parent
  • context
  •  

    cross-posted from: https://programming.dev/post/58898830

    There has been some QoL improvements added recently. Notable ones are:

    1. Support for OIDC login
    2. Batched inserts
    3. Temporary link disabling
    4. Faster reply and redirection due to async handling of some less-important tasks

    There have also been small changes to the backend and UI that improve the user experience overall.

    If you're looking for a selfhosted URL shortener, please check it out.

    Extra links: Codeberg, Official website

     

    There has been some QoL improvements added recently. Notable ones are:

    1. Support for OIDC login
    2. Batched inserts
    3. Temporary link disabling
    4. Faster reply and redirection due to async handling of some less-important tasks

    There have also been small changes to the backend and UI that improve the user experience overall.

    If you're looking for a selfhosted URL shortener, please check it out.

    Extra links: Codeberg, Official website

    [–] 3 points 1 month ago*

    Self-Hoster 🏡

    • Fleet: 2–3 devices · 5–10 TB
    • Motivation: Independence from Big Tech & subscriptions, Fun / the hobby itself, Customization & full control
    • My MVPs: Jellyfin, Forgejo, Navidrome, Syncthing, Chhoto URL

    (Also, Immich is another MVP.)

  • source
  • [–] 5 points 1 month ago* (last edited 1 month ago)

    Even though I avoid everything Microslop and Adobe like the plague, I think it's a good thing overall. There are many who would like to use Linux, but can't due to their work needing Office 365 or Adobe Creative Suite. If someone manages to make the latter work in Linux somehow, a large number of people will be enticed to switch to Linux.

  • source
  •  

    It's a tiny selfhosted service that determines the client's IP address or accepts an IP address through a query parameter, then returns geolocation and ASN information using the MaxMind GeoLite2 databases.

    I often used services likr ipinfo.io for checking my IP, location etc. e.g. to make sure a VPN was working properly. These are also handy for figuring out which timezone to use etc. I wanted to selfhost it, but couldn't find one that satisfied my needs. So I decided to write one.

    Check out the README for details.

     

    It's a tiny selfhosted service that determines the client's IP address or accepts an IP address through a query parameter, then returns geolocation and ASN information using the MaxMind GeoLite2 databases.

    I often used services like ipinfo.io for checking my IP, location etc. e.g. to make sure a VPN was working properly. These are also handy for figuring out which timezone to use etc. I wanted to selfhost it, but couldn't find one that satisfied my needs. So I decided to write one.

    Check out the README for details.

    [–] [S] 1 point 2 months ago*

    Thanks. Filtering does not cover expiry, but it does cover shortlinks, longlinks, and notes. Making expiry work will make the filtering inefficient for little benefit, since the expiry times are stored as UNIX timestamps in the database.

  • source
  • parent
  • context
  • [–] 3 points 2 months ago* (last edited 3 days ago) (1 child)

    Obligatory just search it bro.

    But anyway, I guess everyone starts somewhere. So I'll try my best to give you a summary. I'll try to make it super simple. Sorry if it comes off as condescending, that's not my intention. Also, I'm not an expert by any means when it comes to networking. So please correct me if I make a mistake.

    You first need to know what VPNs are. If you're thinking about stuff like ProtonVPN, then yes they are VPN, but we mean it in a broader sense. VPNs are simply tunnels in a network that make it looks like the traffic is coming from somewhere where it's not actually coming from. Imagine you're a kid, and your parents had an argument. Now you're stuck repeating one parent's words to another. That's a VPN. Your government doesn't want you to be able to interact with some site, VPNs can basically send you that data through somewhere else, which your government isn't blocking. That's the use for the commercial VPNs.

    But the other use, which is more relevant to this discussion, is simply being able to connect to a remote machine. Let's say you want to access your home PC when traveling. You're definitely not on the same network, but VPNs can create a tunnel which will let you act like you're in the same network. It'll essentially repeat/proxy whatever data/command you want to the remote machine, and vice versa.

    The industry standard for VPNs is wireguard. It's meant to be ultra lightweight, super fast, and super secure. It's now part of the Linux kernel, so basically available on most machines by default. While it's not hard to setup, it's not easy either. You need to manage your credentials, make sure that there are ports open so that the machines can reach each other, etc. It can get pretty complicated pretty quickly if you're stuck behind a CGNAT.

    Tailscale attempts to simplify that process. It uses wireguard-go (a userspace implementation of wireguard written in Go) under the hood to make these connections, but it takes care of the problems mentioned above automatically. So you have an account with them (the free tier is probably fine, or you can self-host using headscale), and you can simply start connecting devices and each device can talk to the other one as if they're on the same network. Tailscale essentially creates wireguard tunnels between each pair of devices, and manages all the networking quirks.

    It's by no means unique. There are services like Nebula, Netmaker etc. that attempt to do the same. Tailscale is just a good implementation of this idea. It also has apps for nearly every device you may want to use. Hope that cleared things up for you.

  • source
  • [–] 2 points 2 months ago* (1 child)

    For most "normal" setups, no. Networks, environment variables, volumes, permissions etc. map pretty much one-to-one.

    If you're using compose, you can even keep your setup mostly unchanged and use podman compose. Although, I would recommend learning a bit about quadlets and using them instead. There's a tool called podlet that can help you translate your docker commands to quadlets, although it's not complete and does miss some features. The annoying thing can be some QoL tooling that exists for docker compose that doesn't for quadlets e.g. automatic restart for changed quadlet files. I wrote some scripts for most of these situations. I will probably release them at some point after I make sure that they don't rely on any specific properties of my setup. But you can easily write them for yourself if you know some shell scripting.

    For docker run commands, you can mostly get away with changing it to podman run.

  • source
  • parent
  • context
  •  

    This release brings three main changes.

    1. The ability to filter links.
    2. Support for an optional notes field.
    3. Ability to edit expiry time and notes.

    I try not to too many new features to avoid bloat, but it seemed like these were pretty useful for a link shortener, especially when managing thousands of short links. (To my surprise, some people even use it to manage millions of links.)

    Please take a look at the release notes for a complete list of changes.

    P.S. The next thing I'll be focusing on is improving throughput under sustained load. If anyone has experience with SQLite, feel free to drop any tips. All the db related code is here. I'm mostly interested in improving insert speeds when 1000s of inserts are done per second.

    Edit: There's a Codeberg mirror as well.

     

    Hi, I'm a beginner when it comes to Haskell, but I guess I'm somewhat comfortable with the language itself. I'd love to try building some stuff using it. However, I'm finding it very hard to properly use external libraries/packages.

    I'm familiar with Rust's cargo, and go's package management system, and feel very comfortable using them. Are there similar ones for Haskell? Basically, I want them defined per project, and not have to install everything system-wide. I'd like to be able to provide users with simple instructions for replicating the whole build setup.

    What's the idiomatic way? Are there any example packages that I can look at that are not too complicated?

     

    As the title says, it's a rather simple golang script for creating memories in Immich based on certain criteria, since there aren't any customization options in the official app.

    As you may gather from the README, I created this for very personal reasons. But I wanted to share it here in case someone else finds it useful as well.

    Currently it can do filtering based on people, and tags. But I'm more than happy to add more options, if requested.

     

    I had looked for selfhosted recipe management apps for a while, but none really fit my need. I liked WikiJS a lot, but it was a hassle to get recipes on to it since there's no tooling for scraping from sites.

    So I decided to create a python tool that does the scraping. It's finally in a state where I can share it with others. Of course, it's meant to be used only for archival purposes.

    You can see some recipes created with it on my wiki.

    Any feedback is welcome. I hope that this is the correct community for this. Given how pro-selfhosting lemmy is in general, I thought this might be welcome here.

     

    cross-posted from: https://programming.dev/post/39212874

    I recently migrated my services from rootful docker to rootless podman quadlets. It went smoothly, since nothing I use actually needs to be rootful. Well, except for caddy. It needs to be able to attach to privileged ports 80 and 443.

    My current way to bypass it is using HAProxy running as root and forwarding connections using proxy protocol. (Tried to use firewalld but that makes the client IP opaque to caddy.) But that adds an extra layer, which means extra latency. It's perfectly usable, but I'd like to get rid of it, if possible.

    I'm willing to run caddy in rootful podman if needed. But from what I understand, that means I can't have it in the same rootless network as my other containers. I really don't wanna open most of my containers' ports, so that's not an option.

    So, I'm asking whether any of these three things are possible.

    1. Use firewalld to forward ports to caddy without obscuring the client's IP.
    2. Make rootful caddy share a network with other rootless containers.
    3. Assign privileged ports to caddy somehow, in rootless mode. (I know there's a way to make all these ports unprivileged, but is it possible to only assign these 2 ports as unprivileged?)

    Or maybe there's a fourth way that I'm missing. I feel like this is a common enough setup, that there must be a way to do it. Any pointers are appreciated, thanks.

     

    I recently migrated my services from rootful docker to rootless podman quadlets. It went smoothly, since nothing I use actually needs to be rootful. Well, except for caddy. It needs to be able to attach to privileged ports 80 and 443.

    My current way to bypass it is using HAProxy running as root and forwarding connections using proxy protocol. (Tried to use firewalld but that makes the client IP opaque to caddy.) But that adds an extra layer, which means extra latency. It's perfectly usable, but I'd like to get rid of it, if possible.

    I'm willing to run caddy in rootful podman if needed. But from what I understand, that means I can't have it in the same rootless network as my other containers. I really don't wanna open most of my containers' ports, so that's not an option.

    So, I'm asking whether any of these three things are possible.

    1. Use firewalld to forward ports to caddy without obscuring the client's IP.
    2. Make rootful caddy share a network with other rootless containers.
    3. Assign privileged ports to caddy somehow, in rootless mode. (I know there's a way to make all these ports unprivileged, but is it possible to only assign these 2 ports as unprivileged?)

    Or maybe there's a fourth way that I'm missing. I feel like this is a common enough setup, that there must be a way to do it. Any pointers are appreciated, thanks.

    view more: next ›