My assumption is you are technical person and looking for a platform to choose to build your business applications now and in future.
There is a PR for improved easy-install which will do upgrades. Check feat: easy-install.py to build custom images by revant · Pull Request #1592 · frappe/bench · GitHub (Disclaimer: there is no easy way out!)
There are some serious users and contributors who actively use and contribute to frappe/frappe_docker and frappe/helm. Both repositories are community work. We all use the same base images, containers, helm charts that largest enterprises will be using. In fact we all benefit from the contributed open knowledge. Because of that, it is has become complex for beginners.
In my opinion, hosting business applications is complex in the first place. Problems begin when your business is growing and the application is not working as expected. Only your knowledge and skills can save you then. When you know what you are entering into, it will be pleasant experience. Knowledge empowers the users and developers.
Deployment:
- Build your container image (frappe_docker/docs/custom-apps.md at main · frappe/frappe_docker · GitHub) Create a build pipeline to automate. Container Builds - #2 by revant_one
- Start with 1-manager node docker swarm (custom_containers/docs/docker-swarm.md at main · castlecraft/custom_containers · GitHub). You can increase few nodes from there over the years to support your growth.
- If auto-scale is the need, switch to Kubernetes. (helm/erpnext/README.md at main · frappe/helm · GitHub)
- Try to keep the state separate/replicated/backed up (NAS/NFS volume for
sitesand MariaDB database). Setup NFS Server · frappe/frappe Wiki · GitHub, Setup MariaDB Server · frappe/frappe Wiki · GitHub,
Upgrade:
- HAVE A STAGING SETUP. It is required because many times you may not like what you get after upgrade. Some component changes that your company may be expecting to work differently. Not just about frappe apps, anything in open source world can change and you might not like it. Easier to reset the staging and raise issues instead of getting stuck on production setup.
- Re-build image with new app code (pipeline refer above)
- re-deploy built images on docker-swarm or kubernetes (gitops or pipeline or webhook)
- Run
bench --site all migrateas a separate task / job with the new image, that will migrate the schema and run patches achieving db upgrade.- The above docker-swarm how-to has a run-once migration container that will run on re-deploy by webhooks or gitops.
- On kubernetes, create a migration
Jobalong with helm upgrade and it takes care of everything.
- Create release pipeline to automate upgrades.
Backups:
- Start with db dump and copy of uploaded files.
- If data grows over 5 GB take incremental snapshots using restic and mariadb-backup.