Introducing Frappe-Manager for Effortless Frappe Installation

Hey @Jignesh_01

I request you to create an issue on GitHub with all the required information.

We will take a look.

Thanks!

fm looks good and promising, but somehow I couldn’t get it to do it’s thing, here’s a log of what’s happening / not happening:

peer@bv-dev:~$ service docker status
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2024-01-02 03:05:56 UTC; 2 days ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 775 (dockerd)
      Tasks: 9
     Memory: 96.2M
        CPU: 38.932s
     CGroup: /system.slice/docker.service
             └─775 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Warning: some journal files were not opened due to insufficient permissions.
peer@bv-dev:~$ fm create example --apps erpnext:version-15 --apps hrms:version-15
❌ Docker daemon not running. Please start docker service.
peer@bv-dev:~$ fm --version
 0.9.0
peer@bv-dev:~$ uname -a
Linux bv-dev 5.15.0-91-generic #101-Ubuntu SMP Tue Nov 14 13:30:08 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
peer@bv-dev:~$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.3 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
peer@bv-dev:~$ docker --version
Docker version 24.0.5, build 24.0.5-0ubuntu1~22.04.1

To summarize, the command errors out saying “:x: Docker daemon not running. Please start docker service.” although clearly the service is running.

Any idea how to investigate the reason of this erroneous error?

I made a mistake when installing ERPNext. I only promted: “fm create frappe.localhost”.
How can I delete and install new

I figured out myself. Just prompt

fm delete frappe.localhost

Install and start docker.
The quickest way to test this, is either test it in you machine, or use Digital Ocean to create Docker Droplet. It saves you a lot of time. Just for testing.

Is it also possible to install custom apps with this manager?

That’s exactly what I did, as can be seen in the log I posted.

But the test of fm showed that somehow it doesn’t realize a running docker is there. So in that respect the test is negative. But the tool looks attractive enough to be a desirable tool to use, if some day it will see the docker which is available to use, so that’s why I posted this kind of bug report.

Starting with other external virtual machines from a new supplier only adds more complication (more administration, more stuff to manage).

Can you please raise an issue on GitHub? We will be more than happy to provide a fix.

Thank you.

Yes it is possible – here’s the link to Wiki article.

I’ve been around when the FUD spreading happened, which later gave rise to the famous Halloween documents, e.g.:

If you never heard about that, please read about these events and documents. (The take of ESR might give a better perspective than the WP article.)
These were no fun at all. A real danger to literally all of open source software!

Maybe that’s why I’m so disgusted each time I try to read the TOS of github (due diligence).
A nebulous legaleese like many such texts. What parts do you even need to read?
In comparison, the MIT license which Frappe uses is short and clear.

github’s TOS are also available as a github repo with over 15000 commits, who can ever follow that?
And their TOS state that they can change anything at any time even without saying it.
All this seems totally crazy to me, and also potentially like one gigantic trap.

And be reassured, I wouldn’t write anything different to begin with on github than I did here.

I also don’t understand why almost everybody flocks to github.
git was meant to be a distributed archive in order to combat the abuse operated by certain centralistic entities. Some people really tried to surreptitiously corrupt the source of Linux! So Linus reacted by writing the git tool. So there should be some resilience. But are we exercising it regularly, to be prepared for mishaps?

Is there a way to be sure we get the code which frappe engineers wrote?
Is there any code signing? Is there a frappe master repo?
Is there an organized vigilance, e.g. ways which check the uncorruptedness of what github delivers?

I’ve solved this problem. I don’t know about Linux or any other programming…

  1. Create the docker group.

sudo groupadd docker

  1. Add the user to the docker group.

sudo usermod -aG docker peer
→ this peer is user name

  1. Log out and log back in to ensure docker runs with correct permissions.
  2. Start docker.

sudo service docker start

→ I just do reboot.

devarshi_rtcamp
said simiar on issue

Same issue. I raised issue but while raising I was wondering if I need to install “docker-compose”
But I did not want just to try to install something without knowing what i am doing.

…-Series:~$ docker-compose versionordocker compose version
or: command not found
Command ‘docker-compose’ not found, but can be installed with:
sudo snap install docker # version 20.10.24, or
sudo apt install docker-compose # version 1.29.2-1
See ‘snap info docker’ for additional versions.

Hi,

This looks great, but is there any intension on getting this to work on windows OS?

kind regards
Hemant

Please be aware of the consequences of using commands like these (after the note).

[Note: The following is curtesy of: https://www.reddit.com/r/docker/comments/1716gir/comment/k3psp2g/]

sudo groupadd docker
sudo usermod -aG docker me
newgrp docker

A standard installation of docker engine executes the docker daemon as root.

Using the above commands grants a user the right to control the docker daemon.

Now, what if this user decides to run a container and bind mount / to a directory inside that container? Opening a root shell inside the container would give full write access to the host filesystem.

As easy as:

docker run -it --rm -v /:/host alpine chroot /host

Never give docker access to anyone you wouldn’t give root access to.

This can be mitigated by running the Docker daemon as a non-root user, but this is not the default installation and requires additional configuration steps.

getting issue while creating site

I got this error trying to create a site:

peer@bv-dev:~$ fm create he --frappe-branch version-15 --apps erpnext:version-15
✅ Halting other sites: Done
✅ Ports Check : Passed
⚠  Pulling Docker Images: Failed
❌ Starting Docker Containers: Failed

peer@bv-dev:~$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

peer@bv-dev:~/frappe/logs$ docker compose
docker: 'compose' is not a docker command.
See 'docker --help'

peer@bv-dev:~/frappe/logs$ apt search docker compose
Sortierung… Fertig
Volltextsuche… Fertig
docker-buildx/jammy-updates 0.12.1-0ubuntu1~22.04.1 amd64
  Docker CLI plugin for extended build capabilities with BuildKit

docker-compose/jammy,now 1.29.2-1 all  [installiert]
  define and run multi-container Docker applications with YAML

docker-compose-v2/jammy-updates 2.24.6+ds1-0ubuntu1~22.04.1 amd64
  tool for running multi-container applications on Docker

python3-ck/jammy 1.9.4-1.1 all
  Python3 light-weight knowledge manager

resource-agents-extra/jammy-updates 1:4.7.0-1ubuntu7.2 amd64
  Cluster Resource Agents

So it’s clear that docker compose is not installed. :crazy_face:

But it kind of silently fails (see above), since the real reason of the failure is not stated. It would help the user to say that docker compose is missing and how it can be installed – and which version.

This is somewhat similar to the “docker doesn’t run” message when the user lacks permissions. That error message technically was a lie because the docker demon ran. So it somewhat confuses the user. A solution to this is known (see above, adding user to docker group), which is a choice the admin can make.
Here, a clear error message simply is absent. But I guess clearer message directing the admin to or even stating a solution can be integrated, which would be my wish.

My immediate question now is: There are two versions of docker compose to install.

docker-compose/jammy,now 1.29.2-1 all  [installiert]
  define and run multi-container Docker applications with YAML

docker-compose-v2/jammy-updates 2.24.6+ds1-0ubuntu1~22.04.1 amd64
  tool for running multi-container applications on Docker

Which one to choose?

The install-script for debian frontendet OSs wants to install some “docker-compose-plugin” which doesn’t exist on ubuntu:

For your convenience, here are parts of the log messages which might help you see how the situation looks like from fm’s point of view:

[2024-06-27 06:36:31,327] INFO: ::::::::::::::::::::FM Invoked::::::::::::::::::::
[2024-06-27 06:36:31,327] INFO:
[2024-06-27 06:36:31,327] INFO: RUNNING COMMAND: logs he
[2024-06-27 06:36:31,327] INFO: --------------------
[2024-06-27 06:36:31,342] DEBUG: - -- -- -- -- -- -- -- -- -- -
[2024-06-27 06:36:31,342] DEBUG: DOCKER COMMAND: docker version --format json
[2024-06-27 06:36:31,361] DEBUG: {"Client":{"Version":"24.0.7","ApiVersion":"1.43","DefaultAPIVersion":"1.43","GitCommit":"24.0.7-0ubuntu2~22.04.1","GoVersion":"go1.21.1","Os":"linux","Arch":"amd64","BuildTime":"Wed Mar 13 20:23:54 2024","Context":"default"},"Server":{"Platform":{"Name":""},"Components":[{"Name":"Engine","Version":"24.0.7","Details":{"ApiVersion":"1.43","Arch":"amd64","BuildTime":"Wed Mar 13 20:23:54 2024","Experimental":"false","GitCommit":"24.0.7-0ubuntu2~22.04.1","GoVersion":"go1.21.1","KernelVersion":"5.15.0-113-generic","MinAPIVersion":"1.12","Os":"linux"}},{"Name":"containerd","Version":"1.7.12","Details":{"GitCommit":""}},{"Name":"runc","Version":"1.1.12-0ubuntu2~22.04.1","Details":{"GitCommit":""}},{"Name":"docker-init","Version":"0.19.0","Details":{"GitCommit":""}}],"Version":"24.0.7","ApiVersion":"1.43","MinAPIVersion":"1.12","GitCommit":"24.0.7-0ubuntu2~22.04.1","GoVersion":"go1.21.1","Os":"linux","Arch":"amd64","KernelVersion":"5.15.0-113-generic","BuildTime":"2024-03-13T20:23:54.000000000+00:00"}}
[2024-06-27 06:36:31,362] DEBUG: RETURN CODE: 0
[2024-06-27 06:36:31,362] DEBUG: - -- -- -- -- -- -- -- -- -- -
[2024-06-27 06:36:31,363] DEBUG: - -- -- -- -- -- -- -- -- -- -
[2024-06-27 06:36:31,363] DEBUG: DOCKER COMMAND: docker compose -f /home/peer/frappe/sites/he.localhost/docker-compose.yml ps --format json
[2024-06-27 06:36:31,377] DEBUG: unknown shorthand flag: 'f' in -f
[2024-06-27 06:36:31,377] DEBUG: See 'docker --help'.
[2024-06-27 06:36:31,377] DEBUG:
[2024-06-27 06:36:31,377] DEBUG: Usage:  docker [OPTIONS] COMMAND
[2024-06-27 06:36:31,377] DEBUG:
[2024-06-27 06:36:31,377] DEBUG: A self-sufficient runtime for containers
[2024-06-27 06:36:31,377] DEBUG:
[2024-06-27 06:36:31,377] DEBUG: Common Commands:
[2024-06-27 06:36:31,377] DEBUG:   run         Create and run a new container from an image
[2024-06-27 06:36:31,377] DEBUG:   exec        Execute a command in a running container
[2024-06-27 06:36:31,377] DEBUG:   ps          List containers
[2024-06-27 06:36:31,377] DEBUG:   build       Build an image from a Dockerfile
[2024-06-27 06:36:31,377] DEBUG:   pull        Download an image from a registry
[2024-06-27 06:36:31,377] DEBUG:   push        Upload an image to a registry
[2024-06-27 06:36:31,377] DEBUG:   images      List images
[2024-06-27 06:36:31,377] DEBUG:   login       Log in to a registry
[2024-06-27 06:36:31,377] DEBUG:   logout      Log out from a registry
[2024-06-27 06:36:31,377] DEBUG:   search      Search Docker Hub for images
[2024-06-27 06:36:31,377] DEBUG:   version     Show the Docker version information
[2024-06-27 06:36:31,377] DEBUG:   info        Display system-wide information
[2024-06-27 06:36:31,377] DEBUG:
[2024-06-27 06:36:31,378] DEBUG: Management Commands:
[2024-06-27 06:36:31,378] DEBUG:   builder     Manage builds
[2024-06-27 06:36:31,378] DEBUG:   container   Manage containers
[2024-06-27 06:36:31,378] DEBUG:   context     Manage contexts
[2024-06-27 06:36:31,378] DEBUG:   image       Manage images
[2024-06-27 06:36:31,378] DEBUG:   manifest    Manage Docker image manifests and manifest lists
[2024-06-27 06:36:31,378] DEBUG:   network     Manage networks
[2024-06-27 06:36:31,378] DEBUG:   plugin      Manage plugins
[2024-06-27 06:36:31,378] DEBUG:   system      Manage Docker
[2024-06-27 06:36:31,378] DEBUG:   trust       Manage trust on Docker images
[2024-06-27 06:36:31,378] DEBUG:   volume      Manage volumes
[2024-06-27 06:36:31,378] DEBUG:
[2024-06-27 06:36:31,378] DEBUG: Swarm Commands:
[2024-06-27 06:36:31,378] DEBUG:   swarm       Manage Swarm
[2024-06-27 06:36:31,378] DEBUG:
[2024-06-27 06:36:31,378] DEBUG: Commands:
[2024-06-27 06:36:31,378] DEBUG:   attach      Attach local standard input, output, and error streams to a running container
[2024-06-27 06:36:31,378] DEBUG:   commit      Create a new image from a container's changes
[2024-06-27 06:36:31,378] DEBUG:   cp          Copy files/folders between a container and the local filesystem
[2024-06-27 06:36:31,379] DEBUG:   create      Create a new container
[2024-06-27 06:36:31,379] DEBUG:   diff        Inspect changes to files or directories on a container's filesystem
[2024-06-27 06:36:31,379] DEBUG:   events      Get real time events from the server
[2024-06-27 06:36:31,379] DEBUG:   export      Export a container's filesystem as a tar archive
[2024-06-27 06:36:31,379] DEBUG:   history     Show the history of an image
[2024-06-27 06:36:31,379] DEBUG:   import      Import the contents from a tarball to create a filesystem image
[2024-06-27 06:36:31,379] DEBUG:   inspect     Return low-level information on Docker objects
[2024-06-27 06:36:31,379] DEBUG:   kill        Kill one or more running containers
[2024-06-27 06:36:31,379] DEBUG:   load        Load an image from a tar archive or STDIN
[2024-06-27 06:36:31,379] DEBUG:   logs        Fetch the logs of a container
[2024-06-27 06:36:31,379] DEBUG:   pause       Pause all processes within one or more containers
[2024-06-27 06:36:31,379] DEBUG:   port        List port mappings or a specific mapping for the container
[2024-06-27 06:36:31,379] DEBUG:   rename      Rename a container
[2024-06-27 06:36:31,379] DEBUG:   restart     Restart one or more containers
[2024-06-27 06:36:31,380] DEBUG:   rm          Remove one or more containers
[2024-06-27 06:36:31,380] DEBUG:   rmi         Remove one or more images
[2024-06-27 06:36:31,380] DEBUG:   save        Save one or more images to a tar archive (streamed to STDOUT by default)
[2024-06-27 06:36:31,380] DEBUG:   start       Start one or more stopped containers
[2024-06-27 06:36:31,380] DEBUG:   stats       Display a live stream of container(s) resource usage statistics
[2024-06-27 06:36:31,380] DEBUG:   stop        Stop one or more running containers
[2024-06-27 06:36:31,380] DEBUG:   tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
[2024-06-27 06:36:31,380] DEBUG:   top         Display the running processes of a container
[2024-06-27 06:36:31,380] DEBUG:   unpause     Unpause all processes within one or more containers
[2024-06-27 06:36:31,381] DEBUG:   update      Update configuration of one or more containers
[2024-06-27 06:36:31,381] DEBUG:   wait        Block until one or more containers stop, then print their exit codes
[2024-06-27 06:36:31,381] DEBUG:
[2024-06-27 06:36:31,381] DEBUG: Global Options:
[2024-06-27 06:36:31,381] DEBUG:       --config string      Location of client config files (default "/home/peer/.docker")
[2024-06-27 06:36:31,381] DEBUG:   -c, --context string     Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with "docker context use")
[2024-06-27 06:36:31,381] DEBUG:   -D, --debug              Enable debug mode
[2024-06-27 06:36:31,381] DEBUG:   -H, --host list          Daemon socket to connect to
[2024-06-27 06:36:31,381] DEBUG:   -l, --log-level string   Set the logging level ("debug", "info", "warn", "error", "fatal") (default "info")
[2024-06-27 06:36:31,381] DEBUG:       --tls                Use TLS; implied by --tlsverify
[2024-06-27 06:36:31,381] DEBUG:       --tlscacert string   Trust certs signed only by this CA (default "/home/peer/.docker/ca.pem")
[2024-06-27 06:36:31,382] DEBUG:       --tlscert string     Path to TLS certificate file (default "/home/peer/.docker/cert.pem")
[2024-06-27 06:36:31,382] DEBUG:       --tlskey string      Path to TLS key file (default "/home/peer/.docker/key.pem")
[2024-06-27 06:36:31,382] DEBUG:       --tlsverify          Use TLS and verify the remote
[2024-06-27 06:36:31,382] DEBUG:   -v, --version            Print version information and quit
[2024-06-27 06:36:31,382] DEBUG:
[2024-06-27 06:36:31,382] DEBUG: Run 'docker COMMAND --help' for more information on a command.
[2024-06-27 06:36:31,382] DEBUG:
[2024-06-27 06:36:31,382] DEBUG: For more help on how to use Docker, head to https://docs.docker.com/go/guides/
[2024-06-27 06:36:31,382] DEBUG:
[2024-06-27 06:36:31,383] DEBUG: RETURN CODE: 125
[2024-06-27 06:36:31,383] DEBUG: - -- -- -- -- -- -- -- -- -- -

Anyway, it’s a very nice tool made with love, and that’s great.

1 Like

Thank you so much for your detailed explanation. I completely understand your frustration with the lack of clear error messages. It’s crucial for users to receive accurate and actionable information when something goes wrong. We will work on providing clearer error messages.

Which fm version are you on ? Seems like you are using old version.

:warning: Caution

If you delete the ~/frappe directory, your data will be lost. Please ensure you take a backup before deleting it.

I will recommend deleting the ~/frappe directory and then updating to the latest version using pip install -U frappe-manager.

Regarding installation of docker engine and docker compose. Please follow the steps outlined here → Install Docker Engine on Ubuntu | Docker Docs

2 Likes

Can we you custom docker image with fm, say:

hsrai/erpnext_pack:v1.0.0

in place of

ghcr.io/rtcamp/frappe-manager-frappe:v0.15.0

Could not find anything realted this at: Home · rtCamp/Frappe-Manager Wiki · GitHub

but I am sure there must be a way.

If there must be any basic requirements for custom image, then that may also be conveyed.

You can do something like: Full custom docker compose setup · Issue #1699 · EasyEngine/easyengine · GitHub
And then docker-compose -f a.yml -f b.yml should work fine.

1 Like

Will it not be different from fm?