diff --git a/docs/custom-apps-podman.md b/docs/custom-apps-podman.md new file mode 100644 index 00000000..50ed67c3 --- /dev/null +++ b/docs/custom-apps-podman.md @@ -0,0 +1,91 @@ +## Prerequisites +- podman +- podman-compose +- docker-compose + +Podman (the POD MANager) is a tool for managing containers and images, volumes mounted into those containers, and pods made from groups of containers. It is available on the official repositories of many Linux distributions. + +## Step 1 +- Clone this repository and change the current directory to the downloaded folder + ```cmd + git clone https://github.com/frappe/frappe_docker + cd frappe_docker + ``` +## Step 2 +- Create `apps.json` file with custom apps listed in it + ```json + [ + { + "url": "https://github.com/frappe/erpnext", + "branch": "version-15" + }, + { + "url": "https://github.com/frappe/hrms", + "branch": "version-15" + }, + { + "url": "https://github.com/frappe/helpdesk", + "branch": "main" + } + ] + ``` + Check the syntax of the file using `jq empty apps.json` + ### Generate base64 string from JSON file: + `cmd export APPS_JSON_BASE64=$(base64 -w 0 apps.json)` + +## Step 3 + - Building the custom image using podman + ```ruby + podman build \ + --build-arg=FRAPPE_PATH=https://github.com/frappe/frappe \ + --build-arg=FRAPPE_BRANCH=version-15 \ + --build-arg=APPS_JSON_BASE64=$APPS_JSON_BASE64 \ + --tag=custom:15 \ + --file=images/layered/Containerfile . + ``` + ### Note + - Make sure to use the same tag when you export a variable on the next step + + ## Step 4 + - Using the image + - Export environment variables with image name, tag and pull_policy + ```ruby + export CUSTOM_IMAGE=custom + export CUSTOM_TAG=15 + export PULL_POLICY=never + ``` + - Configuration of parameters used when starting the containers + - create `.env` file copying from example.env (Read more on setting up environemnt variables [here](https://github.com/frappe/frappe_docker/blob/main/docs/environment-variables.md) + + ## Final step + - Creating a compose file + - ```ruby + podman compose -f compose.yaml \ + -f overrides/compose.mariadb.yaml \ + -f overrides/compose.redis.yaml \ + -f overrides/compose.noproxy.yaml \ + config > ./docker-compose.yml + ``` + ### NOTE + - podman compose is just a wrapper, it uses docker-compose if it is available or podman-compose if not. podman-compose have an issue reading .env files ([Issue](https://github.com/containers/podman-compose/issues/475)) and might create an issue when running the containers. + - Creating pod and starting the containers + - `podman-compose --in-pod=1 --project-name erpnext -f ./docker-compose.yml up -d` + +## Creating sites and installing apps + - You can create sites from the backend container + - `podman exec -ti erpnext_backend_1 /bin/bash` + - `bench new-site myerp.net --mariadb-root-password 123456 --admin-password 123123` + - `bench --site myerp.net install-app erpnext` + +## Troubleshoot +- If there is a network issue while building the image, you need to remove caches and restart again + - `podman system reset` + - `sudo rm -rf ~/.local/share/containers/ /var/lib/container ~/.caches/containers` + +- Database issue when restarting the container + - Execute the following commands from **backend** container + - `mysql -uroot -padmin -hdb` (Note: put your db password in place of *admin*). + - `SELECT User, Host FROM mysql.user;` + - Change the IP address to %, e.g. `RENAME USER '_5e5899d8398b5f7b'@'172.18.0.7' TO '_5e5899d8398b5f7b'@'%'` + +