docs: custom apps with podman

This commit is contained in:
Revant Nandgaonkar
2025-01-06 17:47:10 +05:30
parent 869de6218b
commit acb08c5179
2 changed files with 72 additions and 60 deletions

View File

@@ -67,6 +67,7 @@ If you ran in a Dev Docker environment, to view container logs: `docker compose
### [Custom Images](#custom-images) ### [Custom Images](#custom-images)
- [Custom Apps](docs/custom-apps.md) - [Custom Apps](docs/custom-apps.md)
- [Custom Apps with podman](docs/custom-apps-podman.md)
- [Build Version 10 Images](docs/build-version-10-images.md) - [Build Version 10 Images](docs/build-version-10-images.md)
### [Development](#development) ### [Development](#development)

View File

@@ -1,91 +1,102 @@
## Prerequisites ## Prerequisites
- podman - podman
- podman-compose - podman-compose
- docker-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. 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 ## Step 1
- Clone this repository and change the current directory to the downloaded folder - Clone this repository and change the current directory to the downloaded folder
```cmd ```cmd
git clone https://github.com/frappe/frappe_docker git clone https://github.com/frappe/frappe_docker
cd frappe_docker cd frappe_docker
``` ```
## Step 2 ## Step 2
- Create `apps.json` file with custom apps listed in it - Create `apps.json` file with custom apps listed in it
```json ```json
[ [
{ {
"url": "https://github.com/frappe/erpnext", "url": "https://github.com/frappe/erpnext",
"branch": "version-15" "branch": "version-15"
}, },
{ {
"url": "https://github.com/frappe/hrms", "url": "https://github.com/frappe/hrms",
"branch": "version-15" "branch": "version-15"
}, },
{ {
"url": "https://github.com/frappe/helpdesk", "url": "https://github.com/frappe/helpdesk",
"branch": "main" "branch": "main"
} }
] ]
``` ```
Check the syntax of the file using `jq empty apps.json` Check the syntax of the file using `jq empty apps.json`
### Generate base64 string from JSON file: ### Generate base64 string from JSON file:
`cmd export APPS_JSON_BASE64=$(base64 -w 0 apps.json)` `cmd export APPS_JSON_BASE64=$(base64 -w 0 apps.json)`
## Step 3 ## 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 - Building the custom image using podman
- Using the image
- Export environment variables with image name, tag and pull_policy ```ruby
```ruby podman build \
export CUSTOM_IMAGE=custom --build-arg=FRAPPE_PATH=https://github.com/frappe/frappe \
export CUSTOM_TAG=15 --build-arg=FRAPPE_BRANCH=version-15 \
export PULL_POLICY=never --build-arg=APPS_JSON_BASE64=$APPS_JSON_BASE64 \
``` --tag=custom:15 \
- Configuration of parameters used when starting the containers --file=images/layered/Containerfile .
- 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 ### Note
- Creating a compose file
- ```ruby - Make sure to use the same tag when you export a variable on the next step
podman compose -f compose.yaml \
-f overrides/compose.mariadb.yaml \ ## Step 4
-f overrides/compose.redis.yaml \
-f overrides/compose.noproxy.yaml \ - Using the image
config > ./docker-compose.yml - Export environment variables with image name, tag and pull_policy
``` ```ruby
### NOTE export CUSTOM_IMAGE=custom
- 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. export CUSTOM_TAG=15
- Creating pod and starting the containers export PULL_POLICY=never
- `podman-compose --in-pod=1 --project-name erpnext -f ./docker-compose.yml up -d` ```
- Configuration of parameters used when starting the containers
- create `.env` file copying from example.env (Read more on setting up environment 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 ## Creating sites and installing apps
- You can create sites from the backend container
- `podman exec -ti erpnext_backend_1 /bin/bash` - You can create sites from the backend container
- `bench new-site myerp.net --mariadb-root-password 123456 --admin-password 123123` - `podman exec -ti erpnext_backend_1 /bin/bash`
- `bench --site myerp.net install-app erpnext` - `bench new-site myerp.net --mariadb-root-password 123456 --admin-password 123123`
- `bench --site myerp.net install-app erpnext`
## Troubleshoot ## Troubleshoot
- If there is a network issue while building the image, you need to remove caches and restart again - If there is a network issue while building the image, you need to remove caches and restart again
- `podman system reset` - `podman system reset`
- `sudo rm -rf ~/.local/share/containers/ /var/lib/container ~/.caches/containers` - `sudo rm -rf ~/.local/share/containers/ /var/lib/container ~/.caches/containers`
- Database issue when restarting the container - Database issue when restarting the container
- Execute the following commands from **backend** container - Execute the following commands from **backend** container
- `mysql -uroot -padmin -hdb` (Note: put your db password in place of *admin*). - `mysql -uroot -padmin -hdb` (Note: put your db password in place of _admin_).
- `SELECT User, Host FROM mysql.user;` - `SELECT User, Host FROM mysql.user;`
- Change the IP address to %, e.g. `RENAME USER '_5e5899d8398b5f7b'@'172.18.0.7' TO '_5e5899d8398b5f7b'@'%'` - Change the IP address to %, e.g. `RENAME USER '_5e5899d8398b5f7b'@'172.18.0.7' TO '_5e5899d8398b5f7b'@'%'`