I’m pretty new to the self hosting thing but I’m enjoying it a lot and want to go a bit further down the proverbial rabbit hole.

I’m looking at a bunch of services and they all require a DB, usually a MySQL DB. It seems counterintutitive to have 20 MySQL databases each in its own Docker container. So is there a way to have one DB across most of my services? (I realize that Nextcloud and other bigger items should have a dedicted DB.)

How would I set up a shared DB in a docker-compose file?

  • Thomas@lemmy.zell-mbc.com
    link
    fedilink
    English
    arrow-up
    22
    arrow-down
    1
    ·
    edit-2
    1 year ago

    You would expose the port to your host which makes the db acessible by anything running on the host, docker or native. Something like

    `port

    • 5432:5432 `

    But I would recommend running a dedicated db for each service. At least that’s what I do.

    • Simpler setup and therefore less error-prone
    • More secure because the db’s don’t need to be exposed
    • Easier to manage because I can independently upgrade, backup, move

    Isn’t the point about containers that you keep things which depend on each other together, eliminating dependencies? A single db would be a unecessary dependency in my view. What if one service requires a new version of MySQL, and another one does not yet support the new version?

    I also run all my databases via a bind mount

    `volume

    • ./data:/etc/postgres/data…`

    and each service in it’s own directory. E.g. /opt/docker/nextcloud

    That way I have everything which makes up a service contained in one folder. Easy to backup/restore, easy to move, and not the least, clean.

    • Ricaz@lemmy.world
      link
      fedilink
      English
      arrow-up
      6
      ·
      1 year ago

      I would just have Postgres running statically on some solid hardware. It’s easy to configure permissions and connections, too.

      Not too hard to set up streaming replication for a hot standby if you wanna be sure (or offload some reads).

      I use Postgres btw