Using Quadlets for better setup of frappe on podman

Greetings
I recently added documentation on installing erpnext using podman. Everything works fine, but for better management of the containers, I was thinking of changing the contents of docker-compose.yml into Quadlets.

Quadlets are simply podman-defined system daemon service files with different types of file extensions such as mynetwork.network for the definition of networks, mypod.pod for pods, mycontainer.container, and others too.

I had a pod already running and I am transforming everything to Quadlets using this method:

1. Following the details of each container in the generated `docker-compose.yml` file
2. Checking the paths to volumes using podman-desktop application or podman cli

The result:

  • Five of the overall services are running fine but the other 5 services are not running
    1. Backend
    2. Scheduler
    3. redis-cache
    4. redis-queue
    5. db and others are running fine
    The configurator service also executes fine, any other services (Containers) that depend on redis are not starting and complaining can’t connect to Redis although the Redis service is running fine.

@revant_one I want to find a solution for this and add the feature to the existing podman deployment guide, can you give me a support on this?

Here is some screenshots of the errors and the status of the services (containers)

Websocket

Redis

queue-long

All containers need to be part of same network. docker compose creates a <project-name>_default network and connects all containers to it.

What’s in your .network file?

1 Like

All containers are connected to a network I have created and I have specified the network in all containers using this option:

Network=mynetwork.network

I haven’t added much; I have only added labels. Do I need to add things like IP addresses, subnets, and other staff?

[Unit]
Description=Frappe App Network

[Network]
Label=app=frappe_erpnext

There are the following options that could be added which I didn’t though
e.g.

[Network] options
	
DisableDNS=true
DNS=192.168.55.1
Driver=bridge
Gateway=192.168.55.3
GlobalArgs=--log-level=debug
Internal=true
IPAMDriver=dhcp
IPRange=192.168.55.128/25
IPv6=true
Label=”XYZ”
NetworkName=foo
Options=isolate=true
PodmanArgs=--dns=192.168.55.1
Subnet=192.5.0.0/16

I didn’t find network parameters in docker-compose.yml file that’s why I didn’t add anything

networks:
  default:
    name: frappe_docker_default

Output from podman terminal
Podman network inspect systemd-mynetwork

[
     {
          "name": "systemd-mynetowrk",
          "id": "2bc2f7933c74c55f5a37f10864533e67916a9e7d5a96b5566ec70f71ff382915",
          "driver": "bridge",
          "network_interface": "podman3",
          "created": "2025-01-10T18:41:09.42113783+03:00",
          "subnets": [
               {
                    "subnet": "10.89.2.0/24",
                    "gateway": "10.89.2.1"
               }
          ],
          "ipv6_enabled": false,
          "internal": false,
          "dns_enabled": true,
          "labels": {
               "app": "frappe_erpnext"
          },
          "ipam_options": {
               "driver": "host-local"
          },
          "containers": {
               "791ab272335a4e10606946815b0e61d7703e672feb4bf93446a4c805828e6c5d": {
                    "name": "systemd-mynetwork_db",
                    "interfaces": {
                         "eth0": {
                              "subnets": [
                                   {
                                        "ipnet": "10.89.2.3/24",
                                        "gateway": "10.89.2.1"
                                   }
                              ],
                              "mac_address": "6e:1b:7c:be:60:92"
                         }
                    }
               },
               "7da2260bed489b32e69a2b8c14837ebab5c6f39a72424748796001f8fcb8a64f": {
                    "name": "systemd-mynetwork_redis-queue",
                    "interfaces": {
                         "eth0": {
                              "subnets": [
                                   {
                                        "ipnet": "10.89.2.4/24",
                                        "gateway": "10.89.2.1"
                                   }
                              ],
                              "mac_address": "b6:5e:b0:0c:d1:8b"
                         }
                    }
               },
               "921d3180a0c919579954d352e1603a3b53d45662928f5275dc17a1edf82f0ce1": {
                    "name": "systemd-mynetwork_redis-cache",
                    "interfaces": {
                         "eth0": {
                              "subnets": [
                                   {
                                        "ipnet": "10.89.2.6/24",
                                        "gateway": "10.89.2.1"
                                   }
                              ],
                              "mac_address": "c2:b0:f8:e3:df:b9"
                         }
                    }
               },
               "92ad8ee19e4d84b0e12e8dc5f2ad07b310cdce201deb4309de41380fe52afa12": {
                    "name": "systemd-mynetwork_scheduler",
                    "interfaces": {
                         "eth0": {
                              "subnets": [
                                   {
                                        "ipnet": "10.89.2.5/24",
                                        "gateway": "10.89.2.1"
                                   }
                              ],
                              "mac_address": "26:8f:0d:43:33:2b"
                         }
                    }
               },
               "bae52ab41fffc2c880bf01018963a924eacc3c97dc898ce75f044487a2d13de3": {
                    "name": "mynetwork-infra",
                    "interfaces": {
                         "eth0": {
                              "subnets": [
                                   {
                                        "ipnet": "10.89.2.2/24",
                                        "gateway": "10.89.2.1"
                                   }
                              ],
                              "mac_address": "be:a6:4b:8e:fe:c3"
                         }
                    }
               },
               "d1c607ab44a31d11b6d0c06cfc1b6500d822b47a0562cb2b5f0fad7edd85c19f": {
                    "name": "systemd-mynetwork_backend",
                    "interfaces": {
                         "eth0": {
                              "subnets": [
                                   {
                                        "ipnet": "10.89.2.11/24",
                                        "gateway": "10.89.2.1"
                                   }
                              ],
                              "mac_address": "f2:14:6a:b2:18:79"
                         }
                    }
               }
          }
     }
]


@revant_one any comments on this?

I’m using docker swarm for simple setups. I use Kubernetes for production setups.

I don’t care to setup unit files as it adds no value for me today. If it adds value for you, then you need to figure it out on your own. Read blog articles of how simple applications are setup with unit files, e.g. flask+mariadb.

Here’s another thing that really doesn’t add value for me and only adds overhead of supporting random repeating questions. feat: add erpnext template by NagariaHussain · Pull Request #1214 · Dokploy/dokploy · GitHub

I don’t care to setup unit files as it adds no value for me today, If it adds value for you, then you need to figure it out on your own

I am just trying to help anyone interested in deploying ERPNext with podman (a common container managing tool on Redhat-based Linux distributions). I am trying my best to contribute to the work you and other contributors have started.

Quadlet are not just a system service files, they are an easier way of managing containers, volumes, networks, and pods easily.

I just wanted support to transform docker-compose.yml generated file into Quadlets manage all containers easily and contribute to the project for anyone out there who wants to use Podman. I think that’s the goal of Open Source projects after all, and I am happy to contribute which I have already started here.

Thanks though :slightly_smiling_face:

Run your containers on OpenShift for production setup. Podman and buildah is for development and testing. If unit files based setup is the best thing for developer experience then go for it!

1 Like

Well, the unit files are required to easily manage pods on podman, since I have contributed to deploying the ERPNext custom apps section, I want to make sure I would add another useful topic.

But, I agree with you that Openshift is an ideal choice for Redhat-based Linux distros.

Thank you.