Workflow and setup for web development

Hey guys,

First of all thanks for creating and maintaining this community, it’s a really exciting project.

After a very frustrating experience upgrading to Ubuntu 24, I’ve been looking around to switch my OS. I came across bluefin on a HN post a while ago, and was immediately sold on the advantages Silverblue offers and the value added by universal blue and the contributors.

I’ve since read a lot of on atomic distros, Silverblue workflows and universal blue docs. Some things are still a bit unclear/new to me and I’d love some feedback.

Current dev setup under Ubuntu:

  • a projects directory on my machine that contains all of the repositories I work on
  • Some of them use docker compose files, others are node/python apps without a container, but with NVM or pipenv, virtualenv.
  • my terminal picks up the .nvmrc file to switch versions
  • I manually start docker compose etc

This works fine, but I do spend a lot of time setting everything up when switching machines or stuff just breaks. I’ve just learned about devcontainer.json files and haven’t set them up yet.

New setup via bluefin:

  • A Ubuntu box via distrobox, since my prod servers are running Ubuntu
  • a mise.toml file per project to manage packages via mise
  • I’d enter the box and start vscode from a projects directory

Questions:

  • can I manage all of the docker containers that are started from projects inside of a distrobox container from the host? Like running lazydocker docker on the host to kill, exec shells, etc
  • how do devcontainers fit into this? Should I use them on a project basis and require mise inside the devcontainers?
  • what’s the best way to vscode? Start on the host? Start inside a box?
  • in this setup what’s the role of devpod? Is it necessary at all?

Any feedback is much appreciated or an example of your own setup for web development or some links on this topic.

On a plane so don’t have time to go in depth but one devcontainer.json per project, checked into git repo of that project. In there you’ll define which ubuntu image to use, etc. Then the dev environment is defined in that git repo and should work ootb when you clone it onto a new machine. There’s no reason to use distrobox for this.

Then use the provided vscode to interact with devcontainers via the extension. devpod is great if you wanna github codespaces-like workflow or you want to push to a bunch of different clouds (it spins up remote environments, etc). You probably will know if you need it later on once you become more familiar with it.

I’m unfamiliar with mise but a quick scan of the docs seems like it would be fine? I’d just install it with brew if that’s the preferred way to do it.

1 Like