* ci: skip frappe builds * refactor: build only one frappe/erpnext image * fix: lint nginx entrypoint script * docs: update and organize docs * docs: fix lint errors * fix(custom): pass base64 encoded apps json * ci: update dependabot * docs: update contributing * docs: remove info about multi image setup * fix: initiate empty common_site_config.json default config has host keys set to localhost causes connection errors * docs: add details for pwd volumes * fix: symlink assets instead of copy * fix: nginx private files * ci: skip docker compose v2 install for ubuntu-latest * fix: organize layers * feat: allow remove git remote for custom image * docs: allow remove git remote for custom image * fix: remove duplicate --apps_path
4.1 KiB
Migrate from multi-image setup
All the containers now use same image. Use frappe/erpnext
instead of frappe/frappe-worker
, frappe/frappe-nginx
, frappe/frappe-socketio
, frappe/erpnext-worker
and frappe/erpnext-nginx
.
Now you need to specify command and environment variables for following containers:
Frontend
For frontend
service to act as static assets frontend and reverse proxy, you need to pass nginx-entrypoint.sh
as container command
and BACKEND
and SOCKETIO
environment variables pointing {host}:{port}
for gunicorn and websocket services. Check environment variables
Now you only need to mount the sites
volume at location /home/frappe/frappe-bench/sites
. No need for assets
volume and asset population script or steps.
Example change:
# ... removed for brevity
frontend:
image: frappe/erpnext:${ERPNEXT_VERSION:?ERPNext version not set}
command:
- nginx-entrypoint.sh
environment:
BACKEND: backend:8000
SOCKETIO: websocket:9000
volumes:
- sites:/home/frappe/frappe-bench/sites
# ... removed for brevity
Websocket
For websocket
service to act as socketio backend, you need to pass ["node", "/home/frappe/frappe-bench/apps/frappe/socketio.js"]
as container command
Example change:
# ... removed for brevity
websocket:
image: frappe/erpnext:${ERPNEXT_VERSION:?ERPNext version not set}
command:
- node
- /home/frappe/frappe-bench/apps/frappe/socketio.js
# ... removed for brevity
Configurator
For configurator
service to act as run once configuration job, you need to pass ["bash", "-c"]
as container entrypoint
and bash script inline to yaml. There is no configure.py
in the container now.
Example change:
# ... removed for brevity
configurator:
image: frappe/erpnext:${ERPNEXT_VERSION:?ERPNext version not set}
restart: "no"
entrypoint:
- bash
- -c
command:
- >
bench set-config -g db_host $$DB_HOST;
bench set-config -gp db_port $$DB_PORT;
bench set-config -g redis_cache "redis://$$REDIS_CACHE";
bench set-config -g redis_queue "redis://$$REDIS_QUEUE";
bench set-config -g redis_socketio "redis://$$REDIS_SOCKETIO";
bench set-config -gp socketio_port $$SOCKETIO_PORT;
environment:
DB_HOST: db
DB_PORT: "3306"
REDIS_CACHE: redis-cache:6379
REDIS_QUEUE: redis-queue:6379
REDIS_SOCKETIO: redis-socketio:6379
SOCKETIO_PORT: "9000"
# ... removed for brevity
Site Creation
For create-site
service to act as run once site creation job, you need to pass ["bash", "-c"]
as container entrypoint
and bash script inline to yaml. Make sure to use --no-mariadb-socket
as upstream bench is installed in container.
The WORKDIR
has changed to /home/frappe/frappe-bench
like bench
setup we are used to. So the path to find common_site_config.json
has changed to sites/common_site_config.json
.
Example change:
# ... removed for brevity
create-site:
image: frappe/erpnext:${ERPNEXT_VERSION:?ERPNext version not set}
restart: "no"
entrypoint:
- bash
- -c
command:
- >
wait-for-it -t 120 db:3306;
wait-for-it -t 120 redis-cache:6379;
wait-for-it -t 120 redis-queue:6379;
wait-for-it -t 120 redis-socketio:6379;
export start=`date +%s`;
until [[ -n `grep -hs ^ sites/common_site_config.json | jq -r ".db_host // empty"` ]] && \
[[ -n `grep -hs ^ sites/common_site_config.json | jq -r ".redis_cache // empty"` ]] && \
[[ -n `grep -hs ^ sites/common_site_config.json | jq -r ".redis_queue // empty"` ]];
do
echo "Waiting for sites/common_site_config.json to be created";
sleep 5;
if (( `date +%s`-start > 120 )); then
echo "could not find sites/common_site_config.json with required keys";
exit 1
fi
done;
echo "sites/common_site_config.json found";
bench new-site frontend --no-mariadb-socket --admin-password=admin --db-root-password=admin --install-app payments --install-app erpnext --set-default;
# ... removed for brevity