634 Commits

Author SHA1 Message Date
seangjr
ab95e01e2c chore: refine email and site entries in example.env
Some checks failed
Lint / lint (push) Has been cancelled
Mark stale issues and pull requests / stale (push) Has been cancelled
Develop build / build (push) Has been cancelled
Bench / build (push) Has been cancelled
Autoupdate pre-commit hooks / pre-commit-autoupdate (push) Has been cancelled
2025-10-16 00:25:35 +08:00
seangjr
884eac6294 chore: update email and site list in example.env
Some checks failed
Lint / lint (push) Has been cancelled
Stable build / v14 (push) Has been cancelled
Stable build / v15 (push) Has been cancelled
Stable build / Update example.env and pwd.yml (push) Has been cancelled
Stable build / Release Helm (push) Has been cancelled
2025-10-16 00:05:50 +08:00
github-actions
828a7db833 chore: Update example.env 2025-10-14 14:36:46 +00:00
DanielRadlAMR
ffd2aa47a6 docs: reorganize container setup information into new subfolder docs/container-setup (#1720) 2025-10-14 17:31:25 +05:30
jobafr
5b8cbd3aee add correct redis URLs to environment of other containers (#1718) 2025-10-14 17:28:18 +05:30
github-actions
c6511f1453 chore: Update example.env 2025-10-08 15:05:10 +00:00
github-actions
2aed90d861 chore: Update example.env 2025-10-07 13:51:24 +00:00
github-actions
f44a226c17 chore: Update example.env 2025-10-06 15:18:47 +00:00
github-actions
9fec5ae4a5 chore: Update example.env 2025-10-06 04:28:53 +00:00
github-actions
e6a1b77853 chore: Update example.env 2025-10-01 15:28:21 +00:00
github-actions
839fba5043 chore: Update example.env 2025-09-30 13:42:01 +00:00
DanielRadlAMR
72b8d262c9 chore(deps): update MariaDB to v11.8 (LTS) (#1715)
* chore(deps): update MariaDB to v11.8 (LTS)

* fix(mariadb): replaced deprecated mysqladmin

* feat(mariadb): make use of healthcheck.sh
2025-09-29 11:37:17 +05:30
github-actions
1688a55d93 chore: Update example.env 2025-09-25 15:19:46 +00:00
github-actions
3b55b49cf8 chore: Update example.env 2025-09-23 14:07:48 +00:00
Niklas Liechti
8b523ca125 Improve devcontainer behaviour on ARM Macs (#1707)
* Remove hardcoded amd64 images. This slows down development on ARM Macs significantly.

* Do not use prebuilt bench image as it may be outdated or not available as an ARM build.
The source image is in this repo anyway.

* Use the prebuilt image by default.
2025-09-23 13:30:48 +05:30
github-actions
0c59c8475c chore: Update example.env 2025-09-23 07:48:35 +00:00
github-actions
c2679e20c3 chore: Update example.env 2025-09-21 19:07:12 +00:00
Samar Singh
32f4fd315f Fix: Update PostgreSQL 11.8 → 14 for Frappe Site Creation (#1709)
* update version of postgress in compose.yml file

* fix(postgres): upgrade to v14 for COMMIT AND CHAIN support

---------

Co-authored-by: abhirock74 <abhishek.suvaidyam@gmail.com>
2025-09-18 04:43:41 +05:30
github-actions
67500fa79a chore: Update example.env 2025-09-16 15:14:11 +00:00
Marc Ramser
f8f806b3a7 Upgrade node version (#1706) 2025-09-16 12:39:26 +05:30
MeIchthys
b6e89163ec Revert "Use docker compose instead of docker-compose (#1702)" (#1708)
This reverts commit 2f5a42d864.
2025-09-16 08:19:27 +05:30
MeIchthys
2f5a42d864 Use docker compose instead of docker-compose (#1702)
* Use `docker compose` instead of `docker-compose`

Update to use new docker syntax.

* use `docker` instead of `docker-compose`
2025-09-13 12:24:41 +05:30
dependabot[bot]
6e78467603 chore(deps): bump pytest from 8.4.1 to 8.4.2 (#1694)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.4.1 to 8.4.2.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.4.1...8.4.2)

---
updated-dependencies:
- dependency-name: pytest
  dependency-version: 8.4.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-08 07:30:37 +05:30
dependabot[bot]
2f65520e14 chore(deps): bump actions/stale from 9 to 10 (#1693)
Bumps [actions/stale](https://github.com/actions/stale) from 9 to 10.
- [Release notes](https://github.com/actions/stale/releases)
- [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/stale/compare/v9...v10)

---
updated-dependencies:
- dependency-name: actions/stale
  dependency-version: '10'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-08 07:30:06 +05:30
dependabot[bot]
c2fb2055f0 chore(deps): bump actions/setup-python from 5 to 6 (#1692)
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-08 07:29:33 +05:30
dependabot[bot]
520b00ac1b chore(deps): bump actions/setup-go from 5 to 6 (#1691)
Bumps [actions/setup-go](https://github.com/actions/setup-go) from 5 to 6.
- [Release notes](https://github.com/actions/setup-go/releases)
- [Commits](https://github.com/actions/setup-go/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/setup-go
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-08 07:29:03 +05:30
github-actions
06fbff626e chore: Update example.env 2025-09-04 15:11:02 +00:00
github-actions
e66f6b5042 chore: Update example.env 2025-09-02 14:22:03 +00:00
dependabot[bot]
e642a804ca chore(deps): bump docker/bake-action from 6.8.0 to 6.9.0 (#1681)
Bumps [docker/bake-action](https://github.com/docker/bake-action) from 6.8.0 to 6.9.0.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](https://github.com/docker/bake-action/compare/v6.8.0...v6.9.0)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-version: 6.9.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-29 05:37:31 +05:30
Jared Nay
8782363a88 Add extra detail to line 33 of README.md to improve user accessibility. (#1675) 2025-08-29 05:36:45 +05:30
dependabot[bot]
fb8a5e133b chore(deps): bump actions/checkout from 4 to 5 (#1677)
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-29 05:36:27 +05:30
github-actions
821143d2e4 chore: Update example.env 2025-08-26 12:08:02 +00:00
github-actions
86371d37fe chore: Update example.env 2025-08-19 12:26:04 +00:00
github-actions
443fc5f04d chore: Update example.env 2025-08-14 06:36:11 +00:00
github-actions
0801e2f424 chore: Update example.env 2025-08-12 12:34:55 +00:00
github-actions
4e863726e4 chore: Update example.env 2025-08-08 09:53:49 +00:00
github-actions
73eba8cb50 chore: Update example.env 2025-08-07 11:36:36 +00:00
github-actions
1f46f9798c chore: Update example.env 2025-08-06 12:56:34 +00:00
github-actions
a8f674b7b1 chore: Update example.env 2025-08-06 03:09:02 +00:00
github-actions
a45d1ba288 chore: Update example.env 2025-08-03 11:15:00 +00:00
github-actions
d7d2cab9fc chore: Update example.env 2025-08-01 10:58:33 +00:00
github-actions
a7295c6c96 chore: Update example.env 2025-07-31 11:37:48 +00:00
github-actions
7a3d99a034 chore: Update example.env 2025-07-29 15:44:58 +00:00
github-actions
a00159406f chore: Update example.env 2025-07-24 02:13:06 +00:00
DanielRadlAMR
8841d78c13 Add Docker Secrets Support for Database Password & fixed missing boto3 dependency in tests (#1657)
* Added overrider to use docker secrets for mariadb password

* typo in overrider file name

* typo in overrider mariadb-secrets

* typo in overriider mariadb-secrets

* Secrets enviroment variable override

* secrets need different enviroment variable name

* no - for env variables

* Updated deprecated MinIO Env Variables

* refactored to be more robust and better error handling

* temprary debugging changes

* Revert "temprary debugging changes"

This reverts commit d01931064d.

* Revert "refactored to be more robust and better error handling"

This reverts commit fe508668a8.

* Revert "Updated deprecated MinIO Env Variables"

This reverts commit 76e66b5262.

* manually added boto3 before running _create_bucket

* lint formatting
2025-07-19 08:27:10 +05:30
YapWC
d505c91eab Update Install Traefik Section (#1664)
Since the password would be parsed in single quote (') the text transformation is no longer needed. This update is based on issue #1002 (Unable to login to Traefik Dashboard even after providing Correct password in Basic Auth.)
2025-07-19 08:24:05 +05:30
github-actions
6a04aa9131 chore: Update example.env 2025-07-17 11:50:51 +00:00
github-actions
efe789bad1 chore: Update example.env 2025-07-16 15:42:26 +00:00
github-actions
8e404464c3 chore: Update example.env 2025-07-15 13:23:39 +00:00
github-actions
84d3730699 chore: Update example.env 2025-07-11 10:28:22 +00:00
github-actions
02dca77af7 chore: Update example.env 2025-07-09 15:50:14 +00:00
github-actions
c9feb00532 chore: Update example.env 2025-07-08 13:27:14 +00:00
bgodlin
f2bf8cf10f chore: Add configuration for Bench Default Worker in launch.json (#1652)
* chore: Add configuration for Bench Default Worker in launch.json

* chore: fix pre-commit lint

---------

Co-authored-by: Revant Nandgaonkar <revant.one@gmail.com>
2025-07-04 11:22:35 +05:30
github-actions
80aa2bbd4f chore: Update example.env 2025-07-01 12:32:34 +00:00
dependabot[bot]
fcff548b87 chore(deps): bump pytest from 8.4.0 to 8.4.1 (#1649)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.4.0 to 8.4.1.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.4.0...8.4.1)

---
updated-dependencies:
- dependency-name: pytest
  dependency-version: 8.4.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-01 08:44:32 +05:30
github-actions
6e8f953607 chore: Update example.env 2025-06-27 13:02:37 +00:00
github-actions
f4f6e75145 chore: Update example.env 2025-06-25 05:20:34 +00:00
github-actions
4b6dbb64df chore: Update example.env 2025-06-19 17:06:12 +00:00
github-actions
514480d156 chore: Update example.env 2025-06-19 06:02:20 +00:00
github-actions
ce36b51e81 chore: Update example.env 2025-06-17 15:09:57 +00:00
github-actions
a92deb6cc5 chore: Update example.env 2025-06-11 13:23:07 +00:00
github-actions
920639956d chore: Update example.env 2025-06-10 15:04:17 +00:00
dependabot[bot]
729edc67c1 chore(deps): bump pytest from 8.3.5 to 8.4.0 (#1644)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.3.5 to 8.4.0.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.3.5...8.4.0)

---
updated-dependencies:
- dependency-name: pytest
  dependency-version: 8.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-09 07:53:27 +05:30
github-actions
b1f25de9c3 chore: Update example.env 2025-06-06 07:40:00 +00:00
github-actions
c187ec55a4 chore: Update example.env 2025-06-03 12:26:45 +00:00
dependabot[bot]
ebd8021730 chore(deps): bump docker/bake-action from 6.7.0 to 6.8.0 (#1641)
Bumps [docker/bake-action](https://github.com/docker/bake-action) from 6.7.0 to 6.8.0.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](https://github.com/docker/bake-action/compare/v6.7.0...v6.8.0)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-version: 6.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-29 17:33:43 +05:30
gp
31ed5daa68 chore: Update EOL NodeJS to 20.19.2 (#1638) 2025-05-29 17:33:28 +05:30
github-actions
b2c02427c9 chore: Update example.env 2025-05-27 15:46:50 +00:00
dependabot[bot]
1aeff70c96 chore(deps): bump docker/bake-action from 6.6.0 to 6.7.0 (#1633)
Bumps [docker/bake-action](https://github.com/docker/bake-action) from 6.6.0 to 6.7.0.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](https://github.com/docker/bake-action/compare/v6.6.0...v6.7.0)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-version: 6.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-23 12:50:11 +05:30
github-actions
7158cba6eb chore: Update example.env 2025-05-20 14:42:57 +00:00
github-actions
6f90142716 chore: Update example.env 2025-05-15 06:54:55 +00:00
Harmeet Singh
65a0ac2e7f Update site-operations.md (#1627)
Added note for -p <project_name> in docker-compose exec command.

https://github.com/frappe/frappe_docker/issues/927
2025-05-13 22:07:44 +05:30
github-actions
340e09d248 chore: Update example.env 2025-05-13 14:52:00 +00:00
github-actions
e104c0b4ea chore: Update example.env 2025-05-06 15:02:16 +00:00
dependabot[bot]
aa4ae4d183 chore(deps): bump docker/bake-action from 6.5.0 to 6.6.0 (#1619)
Bumps [docker/bake-action](https://github.com/docker/bake-action) from 6.5.0 to 6.6.0.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](https://github.com/docker/bake-action/compare/v6.5.0...v6.6.0)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-version: 6.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-05 13:24:06 +05:30
github-actions
7d4d0b18f4 chore: Update example.env 2025-05-02 14:34:01 +00:00
github-actions
2e7322f23d chore: Update example.env 2025-04-29 13:58:40 +00:00
github-actions
901a30b124 chore: Update example.env 2025-04-22 14:36:09 +00:00
Md Hussain Nagaria
0f57e9815e chore: change short link 2025-04-21 18:27:22 +02:00
github-actions
3d7fc5378e chore: Update example.env 2025-04-17 11:44:27 +00:00
github-actions
eb249f13a0 chore: Update example.env 2025-04-16 06:05:05 +00:00
github-actions
b29e703427 chore: Update example.env 2025-04-16 04:51:55 +00:00
github-actions
2743ed1f67 chore: Update example.env 2025-04-14 09:13:54 +00:00
github-actions
28d6a2de15 chore: Update example.env 2025-04-13 15:03:20 +00:00
Reuel Ramos Ribeiro
b5cfe3f735 chore: Update vscode-example scripts (#1613)
* chore: Add tasks.json file

* refactor: Remove deprecated pythonPath; redundant with settings.json anyway.

* fix: Use expected type for python debug

* feat: Run post clean task in seamless way

* feat: Add compunds config for easier setup

* style: Trigger pre-commit lint

* fix: honcho python environment in vscode launch.json

* fix: pre-commit prettier check

---------

Co-authored-by: Revant Nandgaonkar <revant.one@gmail.com>
2025-04-12 11:06:57 +05:30
github-actions
bd8912c90d chore: Update example.env 2025-04-12 02:54:12 +00:00
github-actions
ccd095535b chore: Update example.env 2025-04-11 16:06:24 +00:00
github-actions
ab3d378b7d chore: Update example.env 2025-04-11 13:13:09 +00:00
github-actions
c5b065e9f1 chore: Update example.env 2025-04-10 08:22:22 +00:00
github-actions
e4a97a9e11 chore: Update example.env 2025-04-08 13:56:14 +00:00
github-actions
07de17ea89 chore: Update example.env 2025-04-07 06:03:33 +00:00
Reuel Ramos Ribeiro
e6f7deec5c Update development.md (#1600)
Clarify documentation about error. Solution was found at: https://discuss.frappe.io/t/youre-attempting-to-install-erpnext-version-15-with-frappe-version-16-this-is-not-supported-and-wi/127422
2025-04-01 16:32:19 +05:30
github-actions
0742a29105 chore: Update example.env 2025-03-29 20:57:46 +00:00
github-actions
1ac237df49 chore: Update example.env 2025-03-29 07:53:58 +00:00
github-actions
3b8fc30eb6 chore: Update example.env 2025-03-27 06:56:13 +00:00
github-actions
e4ecbb396a chore: Update example.env 2025-03-27 04:35:37 +00:00
github-actions
c6f687f253 chore: Update example.env 2025-03-25 14:41:56 +00:00
github-actions
973eafff69 chore: Update example.env 2025-03-19 11:54:45 +00:00
dependabot[bot]
509de1f49f chore(deps): bump webfactory/ssh-agent from 0.8.0 to 0.9.1 (#1592)
Bumps [webfactory/ssh-agent](https://github.com/webfactory/ssh-agent) from 0.8.0 to 0.9.1.
- [Release notes](https://github.com/webfactory/ssh-agent/releases)
- [Changelog](https://github.com/webfactory/ssh-agent/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webfactory/ssh-agent/compare/v0.8.0...v0.9.1)

---
updated-dependencies:
- dependency-name: webfactory/ssh-agent
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-19 07:24:13 +05:30
Revant Nandgaonkar
02e24c9d2d build: add pkg-config deb package in build layer (#1590)
* build: add pkg-config deb package in build layer

* ci: only use tonistiigi/binfmt for image push

* revert: arm64 builds

* ci: copy build_bench to docker-build-push

* ci: set driver-opts network=host for buildx action
2025-03-15 19:07:33 +05:30
Revant Nandgaonkar
1e0fba9959 ci: for arm64 build frappe/erpnext like frappe/bench (#1587) 2025-03-13 14:03:55 +05:30
github-actions
9601c1615e chore: Update example.env 2025-03-12 14:47:09 +00:00
github-actions
ffb4369af8 chore: Update example.env 2025-03-09 11:13:50 +00:00
github-actions
636e325006 chore: Update example.env 2025-03-08 07:51:45 +00:00
github-actions
a9095fc46a chore: Update example.env 2025-03-06 11:14:58 +00:00
github-actions
2ee921f2b3 chore: Update example.env 2025-03-05 13:37:46 +00:00
dependabot[bot]
f4c3b8024b chore(deps): bump pytest from 8.3.4 to 8.3.5 (#1581)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.3.4 to 8.3.5.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.3.4...8.3.5)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-03 15:52:54 +05:30
github-actions
5bc7e46009 chore: Update example.env 2025-03-03 05:21:09 +00:00
github-actions
4288aad11c chore: Update example.env 2025-03-03 04:11:37 +00:00
Hoa "Rin" Nguyen
d43a93adbb docs: fix typo yaml -> yml in README.md (#1579) 2025-03-02 17:48:12 +05:30
dependabot[bot]
8cfbbbb1e9 chore(deps): bump docker/bake-action from 6.4.0 to 6.5.0 (#1577)
Bumps [docker/bake-action](https://github.com/docker/bake-action) from 6.4.0 to 6.5.0.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](https://github.com/docker/bake-action/compare/v6.4.0...v6.5.0)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-28 12:57:10 +05:30
github-actions[bot]
0c78566fe9 chore(deps): Update pre-commit hooks (#1576)
Co-authored-by: vrslev <75225148+vrslev@users.noreply.github.com>
2025-02-28 12:56:36 +05:30
github-actions
6382fa3d81 chore: Update example.env 2025-02-26 13:07:58 +00:00
bgodlin
bff029dca3 Fix installer.py (#1571)
* Update installer.py

Revising the `installer.py` script. The script is facing an issue during execution as it required interactive input for the root username unless the username was provided as a flag 42f9e537d0/frappe/installer.py (L157-L158). Resolving this by passing the username as a flag allows the script to proceed successfully.

* ci: pin pre-commit/prettier to 3.5.2

---------

Co-authored-by: Revant Nandgaonkar <revant.one@gmail.com>
2025-02-23 11:52:37 +05:30
dependabot[bot]
f069cffa5d chore(deps): bump docker/bake-action from 6.3.0 to 6.4.0 (#1570)
Bumps [docker/bake-action](https://github.com/docker/bake-action) from 6.3.0 to 6.4.0.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](https://github.com/docker/bake-action/compare/v6.3.0...v6.4.0)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-21 17:01:56 +05:30
github-actions
a71dc70ed7 chore: Update example.env 2025-02-21 10:11:32 +00:00
github-actions
c413fa8fa0 chore: Update example.env 2025-02-19 11:58:41 +00:00
DanielRadlAMR
b904b2b8f7 Compose with restart (#1567)
* added restart policy for critical sirvices

* Update configurator restart policy

* Added restart policy

* Added restart policy

* Added restart policy
2025-02-15 12:03:57 +05:30
github-actions
f6a5d22334 chore: Update example.env 2025-02-12 12:17:34 +00:00
github-actions
0b3846bbb1 chore: Update example.env 2025-02-10 16:37:53 +00:00
github-actions
fcd69663cd chore: Update example.env 2025-02-07 14:31:56 +00:00
github-actions
fc955779f0 chore: Update example.env 2025-02-05 12:17:15 +00:00
Amanuel Elhanan
56e1da3f37 Autostart pod on system boot (#1561)
* Autostart pod on system boot

* ci: fix pre-commit

---------

Co-authored-by: Revant Nandgaonkar <revant.one@gmail.com>
2025-02-04 18:48:44 +05:30
github-actions
8cf986b855 chore: Update example.env 2025-02-04 10:33:02 +00:00
github-actions[bot]
324aa43f0a chore(deps): Update pre-commit hooks (#1558)
Co-authored-by: vrslev <75225148+vrslev@users.noreply.github.com>
2025-01-29 18:35:05 +05:30
github-actions
e941d775fd chore: Update example.env 2025-01-29 11:38:56 +00:00
kelvine
fcfe63e0df Update custom-apps.md (#1554)
* Update custom-apps.md

grammar fixes

* Remove redis-cache volume (#1555)

* Remove redis-cache volume

* remove from docs

* ci: fix pre-commit

---------

Co-authored-by: Revant Nandgaonkar <revant.one@gmail.com>

---------

Co-authored-by: Salah Aldin Fateh <83924106+sdfateh@users.noreply.github.com>
Co-authored-by: Revant Nandgaonkar <revant.one@gmail.com>
2025-01-27 11:13:47 +05:30
Salah Aldin Fateh
bcb203551a Remove redis-cache volume (#1555)
* Remove redis-cache volume

* remove from docs

* ci: fix pre-commit

---------

Co-authored-by: Revant Nandgaonkar <revant.one@gmail.com>
2025-01-27 11:10:14 +05:30
dependabot[bot]
23adfd300f chore(deps): bump docker/bake-action from 6.2.0 to 6.3.0 (#1553)
Bumps [docker/bake-action](https://github.com/docker/bake-action) from 6.2.0 to 6.3.0.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](https://github.com/docker/bake-action/compare/v6.2.0...v6.3.0)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-25 17:20:37 +05:30
github-actions[bot]
85acfce1b4 chore(deps): Update pre-commit hooks (#1551)
Co-authored-by: vrslev <75225148+vrslev@users.noreply.github.com>
2025-01-25 17:19:56 +05:30
Md Hussain Nagaria
40f07e2172 fix: pwd SocketIO Origin in nginx conf (#1552) 2025-01-24 12:36:30 +05:30
github-actions
24e5f192d5 chore: Update example.env 2025-01-24 05:24:00 +00:00
github-actions
ee265de548 chore: Update example.env 2025-01-23 08:53:35 +00:00
github-actions
1b28aba233 chore: Update example.env 2025-01-22 09:27:43 +00:00
github-actions
e4a9d34fff chore: Update example.env 2025-01-22 03:43:16 +00:00
dependabot[bot]
32ed7a8ff6 chore(deps): bump docker/bake-action from 6.1.1 to 6.2.0 (#1550)
Bumps [docker/bake-action](https://github.com/docker/bake-action) from 6.1.1 to 6.2.0.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](https://github.com/docker/bake-action/compare/v6.1.1...v6.2.0)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-17 09:34:26 +05:30
dependabot[bot]
3d564658ac chore(deps): bump docker/bake-action from 6.0.0 to 6.1.1 (#1548)
Bumps [docker/bake-action](https://github.com/docker/bake-action) from 6.0.0 to 6.1.1.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](https://github.com/docker/bake-action/compare/v6.0.0...v6.1.1)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-16 04:49:12 +05:30
github-actions
ee3b772836 chore: Update example.env 2025-01-15 12:39:07 +00:00
github-actions
266e35bf5d chore: Update example.env 2025-01-13 08:30:35 +00:00
Revant Nandgaonkar
c189099a27 Merge pull request #1545 from revant/fix-ci-bake-action
ci: use source for bake-action path context
2025-01-11 13:21:29 +05:30
Revant Nandgaonkar
0eaf7c8593 ci: use source for bake-action path context 2025-01-11 13:14:04 +05:30
Revant Nandgaonkar
183287786d Merge pull request #1544 from frappe/dependabot/github_actions/docker/bake-action-6.0.0
chore(deps): bump docker/bake-action from 5.11.0 to 6.0.0
2025-01-11 13:10:25 +05:30
dependabot[bot]
3d84e9bce2 chore(deps): bump docker/bake-action from 5.11.0 to 6.0.0
Bumps [docker/bake-action](https://github.com/docker/bake-action) from 5.11.0 to 6.0.0.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](https://github.com/docker/bake-action/compare/v5.11.0...v6.0.0)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-10 08:30:09 +00:00
github-actions
92ce36dbb8 chore: Update example.env 2025-01-10 06:41:18 +00:00
github-actions
e8e70bfbda chore: Update example.env 2025-01-09 09:41:12 +00:00
github-actions
a173749da5 chore: Update example.env 2025-01-08 10:37:57 +00:00
Revant Nandgaonkar
fa8fd9453b Merge pull request #1542 from FulanoD3Tal/main
Update troubleshoot.md for edge cases
2025-01-08 04:04:03 +05:30
Roberto Alonso De la Garza Mendoza
dfcbe3fc22 Update troubleshoot.md for edge cases
Add create command template on troubleshoot.md
2025-01-07 12:34:55 -06:00
Revant Nandgaonkar
cb3cf80e1a Merge pull request #1539 from elhananjair/patch-2
Building an image with custom apps using podman
2025-01-06 17:48:44 +05:30
Revant Nandgaonkar
acb08c5179 docs: custom apps with podman 2025-01-06 17:47:10 +05:30
Revant Nandgaonkar
358409a2b8 Merge pull request #1538 from elhananjair/patch-1
Configuration of ERPNext access through https on localhost deployment
2025-01-06 17:42:21 +05:30
Revant Nandgaonkar
b8354030c5 docs: tls for local deployment 2025-01-06 17:41:32 +05:30
github-actions
fc57afe7f4 chore: Update example.env 2025-01-06 04:52:19 +00:00
Amanuel Elhanan
869de6218b Create custom-apps-podman
This is a full guide on building an image with custom apps using Podman.
2025-01-05 15:45:40 +03:00
Amanuel Elhanan
b75ac559e9 Create https for local ERPNext deployment.md 2025-01-05 14:16:55 +03:00
github-actions
9777d1b31a chore: Update example.env 2025-01-03 01:31:05 +00:00
github-actions
6c38b5e4ca chore: Update example.env 2025-01-01 10:10:29 +00:00
github-actions
905cb6260f chore: Update example.env 2025-01-01 08:46:22 +00:00
github-actions
d048f2b0e3 chore: Update example.env 2024-12-26 06:12:13 +00:00
Revant Nandgaonkar
83ec7d14f3 Merge pull request #1534 from revant/fix-cron-user
fix: backup cron user
2024-12-25 11:41:34 +05:30
Revant Nandgaonkar
d7ac519e28 fix: backup cron user 2024-12-25 11:28:22 +05:30
github-actions
576370f507 chore: Update example.env 2024-12-25 03:44:01 +00:00
github-actions
4dbee898cb chore: Update example.env 2024-12-23 06:28:19 +00:00
Revant Nandgaonkar
a9c765956c Merge pull request #1532 from revant/cron
feat: backup cron
2024-12-22 15:18:33 +05:30
Revant Nandgaonkar
32569fbef2 feat: backup cron 2024-12-22 14:29:14 +05:30
github-actions
f2ea9a9d74 chore: Update example.env 2024-12-18 09:17:40 +00:00
github-actions
bf1cff8777 chore: Update example.env 2024-12-18 05:42:04 +00:00
Revant Nandgaonkar
d2dbe004ce Merge pull request #1530 from frappe/pre-commit-autoupdate
chore(deps): Update pre-commit hooks
2024-12-17 14:46:54 +05:30
vrslev
a94c419aba chore(deps): Update pre-commit hooks 2024-12-17 07:02:09 +00:00
github-actions
d8b6b6bcd5 chore: Update example.env 2024-12-12 10:46:58 +00:00
Revant Nandgaonkar
70d35f152a Merge pull request #1526 from 0xD0M1M0/main
* fix: --no-mariadb-socket & --mariadb-root-password is DEPRECATED

* fix: quote percent as mentioned in bench help

* revert: quote percent as mentioned in bench help

* fix: tests

---------

Co-authored-by: Revant Nandgaonkar <revant.one@gmail.com>
2024-12-11 09:13:12 +05:30
Revant Nandgaonkar
65c4f28ffd fix: tests 2024-12-10 16:26:59 +05:30
Vlad Sorokin
46c213b1c8 fix: add quotes into command (#1527) 2024-12-10 16:13:28 +05:30
Revant Nandgaonkar
85e164f34c revert: quote percent as mentioned in bench help 2024-12-10 15:48:00 +05:30
Revant Nandgaonkar
1505d125f1 fix: quote percent as mentioned in bench help 2024-12-10 15:36:18 +05:30
github-actions
13db302a08 chore: Update example.env 2024-12-08 11:10:57 +00:00
github-actions
c9aa1f179a chore: Update example.env 2024-12-08 09:33:09 +00:00
0xD0M1M0
598c7dab43 fix: --no-mariadb-socket & --mariadb-root-password is DEPRECATED 2024-12-07 15:30:46 +01:00
0xD0M1M0
beecd99686 fix: --no-mariadb-socket is DEPRECATED (#1525)
--no-mariadb-socket is DEPRECATED; use --mariadb-user-host-login-scope='%' (wildcard) or --mariadb-user-host-login-scope=<myhostscope>, instead.
2024-12-07 17:29:14 +05:30
github-actions
e2ffe3b3fd chore: Update example.env 2024-12-07 08:28:00 +00:00
github-actions
c35d5e1d6c chore: Update example.env 2024-12-07 07:45:47 +00:00
mz-h
4745ea30cc Fix Connection Error (#1524) 2024-12-05 11:47:03 +05:30
dependabot[bot]
ce06dac357 chore(deps): bump docker/bake-action from 5.10.0 to 5.11.0 (#1523)
Bumps [docker/bake-action](https://github.com/docker/bake-action) from 5.10.0 to 5.11.0.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](https://github.com/docker/bake-action/compare/v5.10.0...v5.11.0)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-05 11:44:55 +05:30
github-actions
853ca71ac2 chore: Update example.env 2024-12-04 04:46:08 +00:00
dependabot[bot]
00411f17df chore(deps): bump pytest from 8.3.3 to 8.3.4 (#1522)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.3.3 to 8.3.4.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.3.3...8.3.4)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-04 10:07:33 +05:30
github-actions
4ade236eb0 chore: Update example.env 2024-11-27 16:11:05 +00:00
Sharon P Raju
17753dd8e0 Updated README.md (arm64 architecture) (#1520)
* Update README.md

Added documentation to run on arm64 architecture.

* fix: lint

---------

Co-authored-by: Revant Nandgaonkar <revant.one@gmail.com>
2024-11-27 14:01:18 +05:30
V3
99a3600d36 Changed pwd.yml (#1519)
* Update pwd.yml

changed some parameters, since syntax has changed:
- bench parameter for mariadb password is different
- mariadb parameter for password has changed

* fix: create site command in pwd.yml

* fix: create site command in pwd.yml

remove deprecated option and use new

---------

Co-authored-by: Revant Nandgaonkar <revant.one@gmail.com>
2024-11-26 16:07:20 +05:30
github-actions
657dfbb939 chore: Update example.env 2024-11-22 09:28:41 +00:00
github-actions
544892ff3e chore: Update example.env 2024-11-22 06:09:58 +00:00
github-actions
8ac8e75289 chore: Update example.env 2024-11-21 09:54:09 +00:00
github-actions
1997d0d4f1 chore: Update example.env 2024-11-20 08:46:46 +00:00
Revant Nandgaonkar
1c6f58c986 docs: fix broken link (#1516)
fixes #1510
2024-11-18 16:23:09 +05:30
rexeo-asia
324d9db461 Update docker-build-push.yml (#1512)
Fixes https://github.com/frappe/frappe_docker/issues/1511, add  docker/setup-qemu-action@v3 step
2024-11-15 16:54:53 +05:30
github-actions
a19e8b4aaa chore: Update example.env 2024-11-13 15:10:05 +00:00
Revant Nandgaonkar
6b50a57526 docs: fix logs command (#1509) 2024-11-12 14:39:09 +05:30
Revant Nandgaonkar
641550dce9 ci: push frappe or erpnext branch as tag (#1508)
* ci: push frappe or erpnext branch as tag

* ci: build arm64 images

* revert: build arm64 images
2024-11-11 11:52:27 +05:30
rexeo-asia
88ac02198a Update docker-build-push.yml to support arm64 (#1492) 2024-11-11 11:41:56 +05:30
github-actions
285abd0b07 chore: Update example.env 2024-11-08 09:21:06 +00:00
github-actions
0d35785d41 chore: Update example.env 2024-11-07 12:53:18 +00:00
Dr.Blank
faa2065026 docs: fix grammar in administrator password instructions (#1504)
Correct redundant wording and improve clarity in site creation documentation.
2024-11-07 09:10:13 +05:30
github-actions
41f67d9b6a chore: Update example.env 2024-11-06 05:31:07 +00:00
Revant Nandgaonkar
b24a4109c8 chore: fix pre-commit lint for md file (#1503) 2024-11-04 16:59:47 +05:30
Marc-Antoine Lalonde
5d0d14dde8 docs: clarify docker-compose and add steps to troubleshooting instructions (#1502)
Add steps to the database debugging guide to include more possibilities and fix mysql instructions.

Add explanation on the use of certain variables affected by network configuration.
2024-11-04 11:42:57 +05:30
github-actions
481fcc9410 chore: Update example.env 2024-10-30 10:01:36 +00:00
github-actions
560ad86b5b chore: Update example.env 2024-10-29 17:48:24 +00:00
github-actions
234c036dc5 chore: Update example.env 2024-10-29 15:58:08 +00:00
Revant Nandgaonkar
a919f44505 docs: quick build command (#1500)
* docs: quick build command

* chore: fix pre-commit lint for md file
2024-10-27 14:45:41 +05:30
Revant Nandgaonkar
3d6fb8c4b1 ci: push base and build images tags (#1499) 2024-10-25 15:54:37 +05:30
Revant Nandgaonkar
ebeac0ee43 ci: push base and build images (#1498) 2024-10-25 14:33:26 +05:30
Rakshit Menpara
44a357f758 fix: invalid nested interpolation (#1496)
Nested interpolation is not supported by docker (https://github.com/docker/cli/issues/4265). Changed the file so that it uses `CUSTOM_TAG` or `ERPNEXT_VERSION` if that's not available.
2024-10-25 14:08:37 +05:30
Revant Nandgaonkar
8ac69bb501 feat: allow layered custom image build (#1497)
speed up build time
pull builder image
pack built assets into base image
2024-10-25 14:08:24 +05:30
github-actions
fe880183f9 chore: Update example.env 2024-10-24 08:31:19 +00:00
github-actions
36704ece70 chore: Update example.env 2024-10-23 12:21:29 +00:00
github-actions[bot]
de28675f8f chore(deps): Update pre-commit hooks (#1495)
Co-authored-by: vrslev <75225148+vrslev@users.noreply.github.com>
2024-10-23 17:11:50 +05:30
github-actions
f2924998e8 chore: Update example.env 2024-10-23 09:17:02 +00:00
github-actions
6bed906751 chore: Update example.env 2024-10-23 04:54:37 +00:00
github-actions
19b3012242 chore: Update example.env 2024-10-17 16:25:38 +00:00
github-actions
e7fff1db9a chore: Update example.env 2024-10-16 05:11:03 +00:00
Revant Nandgaonkar
727ce423ec chore: add link to FAQ in production container (#1493)
* chore: add link to FAQ in production container prompt

* chore: add message link to FAQ in production container

* docs: add link to FAQ in README
2024-10-15 11:38:00 +05:30
github-actions[bot]
f0796785d1 chore(deps): Update pre-commit hooks (#1490)
Co-authored-by: vrslev <75225148+vrslev@users.noreply.github.com>
2024-10-15 10:37:16 +05:30
github-actions
17f8e49301 chore: Update example.env 2024-10-13 05:32:28 +00:00
github-actions[bot]
08e714e329 chore(deps): Update pre-commit hooks (#1488)
Co-authored-by: vrslev <75225148+vrslev@users.noreply.github.com>
2024-10-10 07:10:17 +05:30
github-actions
ca573084d6 chore: Update example.env 2024-10-09 12:12:03 +00:00
Edward Almanzar
10c755fe0c Enhance Docs for Custom Apps: Base64 Decoding for Testing and Fix 'nginx-entrypoint.sh: No Such File' Issue on Windows only" (#1479)
* Decode the Base64-encoded Environment Variable

* add docs to fix nginx-entrypoint.sh: no such file on windows

* Revert "add docs to fix nginx-entrypoint.sh: no such file on windows"

This reverts commit 395d7cfa3f.

* add docs to fix nginx-entrypoint.sh: no such file on windows

* Fix files according to pre-commit hooks
2024-10-06 17:49:47 +05:30
Martin Heini
eb3ce8a146 increase mariadb health-check timeout (#1485) 2024-10-06 13:47:47 +05:30
github-actions[bot]
457f55e492 chore(deps): Update pre-commit hooks (#1486)
Co-authored-by: vrslev <75225148+vrslev@users.noreply.github.com>
2024-10-06 13:20:18 +05:30
dependabot[bot]
6abc293ed9 chore(deps): bump docker/bake-action from 5.9.0 to 5.10.0 (#1480)
Bumps [docker/bake-action](https://github.com/docker/bake-action) from 5.9.0 to 5.10.0.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](https://github.com/docker/bake-action/compare/v5.9.0...v5.10.0)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-05 18:47:24 +05:30
github-actions
c5b6c7de6f chore: Update example.env 2024-10-04 03:13:06 +00:00
dependabot[bot]
41dd3fb110 chore(deps): bump docker/bake-action from 5.8.0 to 5.9.0 (#1478)
Bumps [docker/bake-action](https://github.com/docker/bake-action) from 5.8.0 to 5.9.0.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](https://github.com/docker/bake-action/compare/v5.8.0...v5.9.0)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-01 14:37:34 +05:30
dependabot[bot]
f4fd057d0f chore(deps): bump docker/bake-action from 5.7.0 to 5.8.0 (#1477)
Bumps [docker/bake-action](https://github.com/docker/bake-action) from 5.7.0 to 5.8.0.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](https://github.com/docker/bake-action/compare/v5.7.0...v5.8.0)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-01 06:49:58 +05:30
github-actions
111c8deb4a chore: Update example.env 2024-09-30 17:29:56 +00:00
github-actions
d062ef035b chore: Update example.env 2024-09-29 16:46:58 +00:00
github-actions
45259b4ebb chore: Update example.env 2024-09-27 18:40:16 +00:00
gp
5f815d88a9 Update Traefik container from deprecated v2.6 to v2.11 (#1475) 2024-09-26 12:50:18 +05:30
github-actions
dd18f558a4 chore: Update example.env 2024-09-25 04:47:36 +00:00
github-actions
083a62374e chore: Update example.env 2024-09-19 01:51:55 +00:00
github-actions
b16bad3975 chore: Update example.env 2024-09-18 07:41:09 +00:00
github-actions
509f88846f chore: Update example.env 2024-09-17 05:08:50 +00:00
dependabot[bot]
5ec965e71b chore(deps): bump pytest from 8.3.2 to 8.3.3 (#1466)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.3.2 to 8.3.3.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.3.2...8.3.3)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-15 03:10:02 +05:30
github-actions
893f0ebd1d chore: Update example.env 2024-09-12 06:19:49 +00:00
github-actions
fbb13c2b0a chore: Update example.env 2024-09-11 05:20:16 +00:00
github-actions
5064ece68c chore: Update example.env 2024-09-07 12:48:51 +00:00
github-actions
7fb2ff94a6 chore: Update example.env 2024-09-05 11:58:42 +00:00
dependabot[bot]
38a2ebf574 chore(deps): bump peter-evans/create-pull-request from 6 to 7 (#1461)
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 6 to 7.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v6...v7)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-05 09:51:39 +05:30
github-actions
8c34e94dbb chore: Update example.env 2024-09-04 15:08:07 +00:00
github-actions
7c4543d7ea chore: Update example.env 2024-08-23 00:46:19 +00:00
github-actions
b9ece35287 chore: Update example.env 2024-08-21 11:17:05 +00:00
github-actions
8a27a249c3 chore: Update example.env 2024-08-21 05:29:42 +00:00
Sagar
2deb97b7b5 Update example.env (#1445)
Added HTTP_PUBLISH_PORT variable for updating the published port. Default value will be 8080. if we want to update the port we can specify here.
2024-08-19 12:50:46 +05:30
dependabot[bot]
30cc91bfd4 chore(deps): bump docker/bake-action from 5.6.1 to 5.7.0 (#1457)
Bumps [docker/bake-action](https://github.com/docker/bake-action) from 5.6.1 to 5.7.0.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](https://github.com/docker/bake-action/compare/v5.6.1...v5.7.0)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-19 11:59:36 +05:30
github-actions
1bffb14853 chore: Update example.env 2024-08-16 11:18:14 +00:00
github-actions
9c9e1c4f1e chore: Update example.env 2024-08-16 06:27:25 +00:00
github-actions
a7dd0f9d08 chore: Update example.env 2024-08-14 08:09:40 +00:00
dependabot[bot]
79004d15bc chore(deps): bump docker/bake-action from 5.5.0 to 5.6.1 (#1453)
Bumps [docker/bake-action](https://github.com/docker/bake-action) from 5.5.0 to 5.6.1.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](https://github.com/docker/bake-action/compare/v5.5.0...v5.6.1)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-14 11:45:45 +05:30
github-actions[bot]
61ff94de86 chore(deps): Update pre-commit hooks (#1448)
Co-authored-by: vrslev <75225148+vrslev@users.noreply.github.com>
2024-08-14 11:45:22 +05:30
dependabot[bot]
4f91e89503 chore(deps): bump pytest from 8.3.1 to 8.3.2 (#1447)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.3.1 to 8.3.2.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.3.1...8.3.2)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-08-14 11:44:48 +05:30
github-actions
624fc2ea83 chore: Update example.env 2024-08-08 07:22:51 +00:00
github-actions
b09fc2ee95 chore: Update example.env 2024-08-07 09:36:22 +00:00
github-actions
aeaaee09b6 chore: Update example.env 2024-08-03 04:07:19 +00:00
github-actions
6ae6591048 chore: Update example.env 2024-07-31 06:09:52 +00:00
github-actions
36e6650045 chore: Update example.env 2024-07-27 05:46:54 +00:00
github-actions
e70b9954c6 chore: Update example.env 2024-07-24 14:09:33 +00:00
github-actions
f46582fc46 chore: Update example.env 2024-07-24 07:35:38 +00:00
Sai Vineeth
c5b3f50b02 Updated example.env to include correct reference to doc (#1443) 2024-07-24 09:13:06 +05:30
dependabot[bot]
431d31df00 chore(deps): bump docker/bake-action from 5.4.0 to 5.5.0 (#1444)
Bumps [docker/bake-action](https://github.com/docker/bake-action) from 5.4.0 to 5.5.0.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](https://github.com/docker/bake-action/compare/v5.4.0...v5.5.0)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-24 04:53:39 +05:30
dependabot[bot]
3aa10ee435 chore(deps): bump pytest from 8.2.2 to 8.3.1 (#1442)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.2.2 to 8.3.1.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.2.2...8.3.1)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-24 04:53:23 +05:30
dependabot[bot]
c08851ecdc chore(deps): bump docker/bake-action from 5.3.0 to 5.4.0 (#1436)
Bumps [docker/bake-action](https://github.com/docker/bake-action) from 5.3.0 to 5.4.0.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](https://github.com/docker/bake-action/compare/v5.3.0...v5.4.0)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-22 13:46:16 +05:30
gp
9af0cfdf81 Fix: LegacyKeyValueFormat: "ENV key=value" should be used instead of legacy "ENV key value" format (#1435) 2024-07-22 13:45:50 +05:30
github-actions
6ea76cd7a1 chore: Update example.env 2024-07-17 05:20:13 +00:00
github-actions
87782bbdf3 chore: Update example.env 2024-07-13 05:27:22 +00:00
github-actions
a9dbb0ef87 chore: Update example.env 2024-07-10 10:52:14 +00:00
github-actions
d91ea066fb chore: Update example.env 2024-07-05 02:55:39 +00:00
dependabot[bot]
0631489d25 chore(deps): bump docker/bake-action from 5.2.0 to 5.3.0 (#1427)
Bumps [docker/bake-action](https://github.com/docker/bake-action) from 5.2.0 to 5.3.0.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](https://github.com/docker/bake-action/compare/v5.2.0...v5.3.0)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-04 09:50:07 +05:30
gp
74b2bca9bf Fix: WARN: FromAsCasing: 'as' and 'FROM' keywords' casing do not match (#1426) 2024-07-04 02:49:10 +05:30
github-actions
83599aec23 chore: Update example.env 2024-07-03 15:04:42 +00:00
github-actions
22ca64c207 chore: Update example.env 2024-07-03 05:11:40 +00:00
vama
c1ee06b6ef Update README.md (#1423)
updated docker compose command
2024-06-30 04:12:24 +05:30
dependabot[bot]
484ff82e71 chore(deps): bump docker/bake-action from 5.1.0 to 5.2.0 (#1422)
Bumps [docker/bake-action](https://github.com/docker/bake-action) from 5.1.0 to 5.2.0.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](https://github.com/docker/bake-action/compare/v5.1.0...v5.2.0)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-30 04:11:52 +05:30
github-actions
0e2d4eb50d chore: Update example.env 2024-06-29 16:27:27 +00:00
github-actions
6c7fe3de7f chore: Update example.env 2024-06-28 09:28:59 +00:00
Chev91
6c798cfb2b Update docker-compose.yml (#1415)
A challenge I encountered while setting up the Development instance. The command 'bench init --skip-redis-config-generation frappe-bench' kept generating errors, which I discovered were due to an architecture mismatch between Docker and macOS. By updating the platform to linux/amd64 in my code, I was able to resolve this issue.
2024-06-25 10:36:25 +05:30
dependabot[bot]
507bbe2274 chore(deps): bump docker/bake-action from 4.6.0 to 5.1.0 (#1420)
Bumps [docker/bake-action](https://github.com/docker/bake-action) from 4.6.0 to 5.1.0.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](https://github.com/docker/bake-action/compare/v4.6.0...v5.1.0)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-25 10:35:22 +05:30
github-actions
e1c924820f chore: Update example.env 2024-06-22 05:57:54 +00:00
github-actions
bec5cc97e1 chore: Update example.env 2024-06-19 06:34:37 +00:00
github-actions
a495cc8c0a chore: Update example.env 2024-06-12 12:03:06 +00:00
github-actions
d92503dec4 chore: Update example.env 2024-06-12 11:41:56 +00:00
github-actions
7fe7114ac8 chore: Update example.env 2024-06-11 13:23:14 +00:00
dependabot[bot]
ab3f6eab39 chore(deps): bump docker/bake-action from 4.5.0 to 4.6.0 (#1411)
Bumps [docker/bake-action](https://github.com/docker/bake-action) from 4.5.0 to 4.6.0.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](https://github.com/docker/bake-action/compare/v4.5.0...v4.6.0)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-11 15:38:42 +05:30
github-actions
38a0b1fae2 chore: Update example.env 2024-06-11 09:59:42 +00:00
Himanshu Shivhare
10e28f4d9d hyperlink updated (#1407) 2024-06-10 12:22:49 +05:30
dependabot[bot]
f3890a8ddc chore(deps): bump pytest from 8.2.1 to 8.2.2 (#1406)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.2.1 to 8.2.2.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.2.1...8.2.2)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-10 12:22:17 +05:30
Chev91
281c072e77 fix: make docs more explicit for beginners (#1409) 2024-06-10 12:21:58 +05:30
github-actions
855c4f62cc chore: Update example.env 2024-06-10 05:04:01 +00:00
github-actions[bot]
63b3251312 chore(deps): Update pre-commit hooks (#1408)
Co-authored-by: vrslev <75225148+vrslev@users.noreply.github.com>
2024-06-10 04:19:45 +05:30
Yeifer Alexander Muñoz Torres
fa543662ed #1402 Environment variables for custom image (#1403)
* chore: enhance compose.yaml with variables for customize

* chore: use default blank values for db and redis variables in compose.yaml

* chore: Use env var for HTTP(S) publish ports in overrides

* docs: explain use of environment variables for image customization

* chore: use ERPNEXT_VERSION as default

* docs: fixed spelling errors
2024-06-08 00:21:17 +05:30
github-actions
9da4d22dd7 chore: Update example.env 2024-06-06 12:29:57 +00:00
github-actions
943fe9605e chore: Update example.env 2024-06-05 01:26:41 +00:00
github-actions
408d853b20 chore: Update example.env 2024-05-30 14:06:07 +00:00
github-actions
ce16c6365c chore: Update example.env 2024-05-29 08:01:20 +00:00
Anthony
855ce6cb0b Update single-server-example.md (#1401)
Fix nonworking step - hashed password fails - per https://discuss.frappe.io/t/frappe-docker-unable-to-log-in-into-traefik/123077
2024-05-28 19:06:49 +05:30
github-actions[bot]
40c1f97823 chore(deps): Update pre-commit hooks (#1398)
Co-authored-by: vrslev <75225148+vrslev@users.noreply.github.com>
2024-05-27 14:06:15 +05:30
github-actions
48d9e1a6ca chore: Update example.env 2024-05-22 08:55:20 +00:00
dependabot[bot]
0c41f01441 chore(deps): bump pytest from 8.2.0 to 8.2.1 (#1397)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.2.0 to 8.2.1.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.2.0...8.2.1)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-21 14:21:21 +05:30
github-actions
694f258b1f chore: Update example.env 2024-05-20 10:31:57 +00:00
github-actions
e2b3fa301e chore: Update example.env 2024-05-17 05:36:30 +00:00
github-actions
bef73253c7 chore: Update example.env 2024-05-15 13:35:41 +00:00
github-actions
5d950887fe chore: Update example.env 2024-05-15 05:21:04 +00:00
github-actions
9c3251a722 chore: Update example.env 2024-05-13 11:33:31 +00:00
github-actions
be41f8fe4f chore: Update example.env 2024-05-09 05:38:37 +00:00
Bowrna
8404d8946d Update development.md (#1392)
* Update development.md

The extension name is renamed

* Update development.md
2024-05-07 10:31:44 +05:30
github-actions
1544788406 chore: Update example.env 2024-05-06 08:50:11 +00:00
github-actions
13904d0a72 chore: Update example.env 2024-05-03 17:40:54 +00:00
github-actions
4be1624641 chore: Update example.env 2024-05-02 04:32:28 +00:00
Revant Nandgaonkar
0942b8873a fix: gitignore (#1391) 2024-05-01 12:25:49 +05:30
dependabot[bot]
6fd6c7f0ae chore(deps): bump docker/bake-action from 4.3.0 to 4.5.0 (#1390)
Bumps [docker/bake-action](https://github.com/docker/bake-action) from 4.3.0 to 4.5.0.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](https://github.com/docker/bake-action/compare/v4.3.0...v4.5.0)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-01 12:25:34 +05:30
dependabot[bot]
b7a652b9c6 chore(deps): bump pytest from 8.1.1 to 8.2.0 (#1389)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.1.1 to 8.2.0.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.1.1...8.2.0)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-01 12:25:05 +05:30
github-actions[bot]
c5404245b3 chore(deps): Update pre-commit hooks (#1384)
Co-authored-by: vrslev <75225148+vrslev@users.noreply.github.com>
2024-05-01 12:24:38 +05:30
github-actions
1c78d3eb6a chore: Update example.env 2024-04-26 02:19:20 +00:00
Sudhegan Shyam
3b0ffc3bb9 add build library for arm64 binaries (#1379)
* add build library for arm64 binaries

* update git ignore

* move arm64 lib to base layer
2024-04-26 04:46:07 +05:30
github-actions[bot]
9e091abc8d chore(deps): Update pre-commit hooks (#1382)
Co-authored-by: vrslev <75225148+vrslev@users.noreply.github.com>
2024-04-25 13:20:41 +05:30
github-actions
274ef8a975 chore: Update example.env 2024-04-25 03:47:23 +00:00
github-actions
c4fa0766d2 chore: Update example.env 2024-04-24 10:57:17 +00:00
github-actions
19f6fa52d4 chore: Update example.env 2024-04-19 08:48:43 +00:00
github-actions
9478eca866 chore: Update example.env 2024-04-17 09:34:14 +00:00
github-actions
9f04d4c0ba chore: Update example.env 2024-04-17 06:21:06 +00:00
github-actions[bot]
6af91304f1 chore(deps): Update pre-commit hooks (#1375)
Co-authored-by: vrslev <75225148+vrslev@users.noreply.github.com>
2024-04-13 17:17:32 +05:30
github-actions
23c0c50993 chore: Update example.env 2024-04-13 10:37:29 +00:00
gp
3ec36e2e57 Improve custom apps documentation (#1374) 2024-04-13 07:54:32 +05:30
github-actions
1bc075401f chore: Update example.env 2024-04-12 10:10:30 +00:00
github-actions
e2a1b4fd0f chore: Update example.env 2024-04-11 13:32:35 +00:00
Richard Pablo
ade69369fb #1370 Adding platform parameter (#1371)
Adding the platform parameter to be able to run this compose in non amd64 platforms
2024-04-11 18:14:32 +05:30
github-actions
e94081df87 chore: Update example.env 2024-04-11 07:47:26 +00:00
github-actions[bot]
1479201fd4 chore(deps): Update pre-commit hooks (#1368)
Co-authored-by: vrslev <75225148+vrslev@users.noreply.github.com>
2024-04-09 03:14:53 +05:30
github-actions
92f60cc16d chore: Update example.env 2024-04-07 10:49:06 +00:00
github-actions
901b9404b0 chore: Update example.env 2024-04-04 09:06:50 +00:00
github-actions
afd991bcba chore: Update example.env 2024-04-03 10:41:22 +00:00
github-actions
09c69baaec chore: Update example.env 2024-03-29 19:18:38 +00:00
github-actions
b48c1bcd1a chore: Update example.env 2024-03-29 05:50:30 +00:00
Arken June Malvecino
177f5ab96f Install Latest Version to Mac/Linux Doc Update (#1360)
* refactor: update from pwd.yml

* refactor: update erpnext image to v15
2024-03-29 10:25:34 +05:30
github-actions
b0373fd6a3 chore: Update example.env 2024-03-27 08:46:04 +00:00
github-actions
ff7e608d09 chore: Update example.env 2024-03-27 03:36:07 +00:00
github-actions[bot]
ef3e81253b chore(deps): Update pre-commit hooks (#1363)
Co-authored-by: vrslev <75225148+vrslev@users.noreply.github.com>
2024-03-25 13:18:37 +05:30
github-actions
37c7625568 chore: Update example.env 2024-03-25 03:03:44 +00:00
Bernhard Sirlinger
6f33a8aeba feat: add defaultInterpreterPath as a vscode setting as a starting point according to docs (#1358)
See: https://github.com/microsoft/vscode-python/wiki/Setting-descriptions#pythondefaultinterpreterpath
2024-03-23 14:29:20 +05:30
github-actions
04092e153c chore: Update example.env 2024-03-22 10:39:23 +00:00
Dhafer Soudani
76a3d5df80 fix: add missing file package for bench restore (#1359)
Co-authored-by: dhafer <dhafer.souadni@ensi-uma.tn>
2024-03-22 11:27:00 +05:30
github-actions
530615fee3 chore: Update example.env 2024-03-21 17:39:04 +00:00
github-actions
a110ce9fb3 chore: Update example.env 2024-03-20 15:09:56 +00:00
github-actions
1015154385 chore: Update example.env 2024-03-20 05:32:07 +00:00
github-actions[bot]
feb1679099 chore(deps): Update pre-commit hooks (#1356)
Co-authored-by: vrslev <75225148+vrslev@users.noreply.github.com>
2024-03-19 10:54:17 +05:30
github-actions[bot]
a7d3ec1816 chore(deps): Update pre-commit hooks (#1355)
Co-authored-by: vrslev <75225148+vrslev@users.noreply.github.com>
2024-03-17 11:09:34 +05:30
dependabot[bot]
cf35c277ab chore(deps): bump docker/bake-action from 4.1.0 to 4.3.0 (#1354)
Bumps [docker/bake-action](https://github.com/docker/bake-action) from 4.1.0 to 4.3.0.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](https://github.com/docker/bake-action/compare/v4.1.0...v4.3.0)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-17 11:09:12 +05:30
dependabot[bot]
a8d7a70b26 chore(deps): bump pytest from 8.1.0 to 8.1.1 (#1350)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.1.0 to 8.1.1.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.1.0...8.1.1)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-17 11:08:57 +05:30
github-actions
f7c497e240 chore: Update example.env 2024-03-14 09:25:53 +00:00
github-actions
a33ec8460f chore: Update example.env 2024-03-13 04:37:40 +00:00
Revant Nandgaonkar
636c442fdb fix(dev): remove ssh from post start command (#1349)
no ssh service installed in frappe/bench:latest
for custom usage add to gitignored .devcontainer
2024-03-10 05:38:16 +05:30
github-actions
76976c30e1 chore: Update example.env 2024-03-07 09:33:50 +00:00
github-actions
82c65ec147 chore: Update example.env 2024-03-06 14:57:10 +00:00
github-actions
1eafdcdc85 chore: Update example.env 2024-03-06 03:40:05 +00:00
dependabot[bot]
997473863e chore(deps): bump pytest from 8.0.2 to 8.1.0 (#1347)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.0.2 to 8.1.0.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.0.2...8.1.0)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-04 14:11:59 +05:30
Malay Gondalia
ede911af0a Update custom-apps.md (#1344)
* Update custom-apps.md

made document clear to insert custom app to build and  resolved error -
"url": "https://user:password@git.example.com/project/repository.git",
to "url": "https://{{ PAT }}@git.example.com/project/repository.git",

* docs: remove comments from shell commands

---------

Co-authored-by: Revant Nandgaonkar <revant.one@gmail.com>
2024-02-29 20:59:32 +05:30
John Haugabook
955a3b0b65 fix: grammar and links (#1342)
Made grammar corrections, and added links to the prerequisite installations.
2024-02-29 17:46:18 +05:30
HENRY Florian
e582a2448d fix: add file cmd because restore bench need it since frappe commit: 50d21677b872ff89d2912c7b57467757a35f549a (#1343) 2024-02-29 17:45:56 +05:30
github-actions
33cbdb2693 chore: Update example.env 2024-02-28 05:22:17 +00:00
dependabot[bot]
ab0d6ad9e5 chore(deps): bump pytest from 8.0.1 to 8.0.2 (#1341)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.0.1 to 8.0.2.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.0.1...8.0.2)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-27 02:41:20 +05:30
github-actions
4c0aba6b0c chore: Update example.env 2024-02-26 07:42:07 +00:00
github-actions
3bc28d38b2 chore: Update example.env 2024-02-22 11:27:44 +00:00
github-actions
d028de4898 chore: Update example.env 2024-02-22 05:47:42 +00:00
github-actions
3360d23e55 chore: Update example.env 2024-02-21 05:38:43 +00:00
dependabot[bot]
2c317cb62d chore(deps): bump pytest from 8.0.0 to 8.0.1 (#1339)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.0.0 to 8.0.1.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/8.0.0...8.0.1)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-19 18:31:25 +05:30
github-actions[bot]
edb9948fc9 chore(deps): Update pre-commit hooks (#1338)
Co-authored-by: vrslev <75225148+vrslev@users.noreply.github.com>
2024-02-19 18:31:06 +05:30
github-actions
f60dc88637 chore: Update example.env 2024-02-19 05:42:49 +00:00
github-actions
d027f04494 chore: Update example.env 2024-02-16 16:29:20 +00:00
github-actions
8961598d1e chore: Update example.env 2024-02-16 10:38:23 +00:00
Kevin Wakhisi Maraka
53c6a0e0c6 chore! 👽 Enhance dev container YAML (#1332)
* chore!i 👽 Enhance dev container YAML

Enhance dev container YAML to meet standards and integrate personal
GitHub environment token
Refactored the existing dev container YAML configuration to adhere to
best practices and coding standards. This includes optimizing container
setup and dependencies for smoother development workflows. Additionally,
integrated a personal GitHub environment token for secure authentication
and access to GitHub resources within the container environment. This
improvement enhances both security and usability, streamlining the
development process.

* chore 💄 Fixed earlier commit

Earlier commit fixed using pre-commit
2024-02-16 12:23:01 +05:30
github-actions[bot]
7fee2dc8f3 chore(deps): Update pre-commit hooks (#1334)
Co-authored-by: vrslev <75225148+vrslev@users.noreply.github.com>
2024-02-15 10:50:49 +05:30
github-actions
ff532e14d2 chore: Update example.env 2024-02-14 12:21:56 +00:00
github-actions
52a79ad820 chore: Update example.env 2024-02-11 12:28:54 +00:00
github-actions
298b1bb7c9 chore: Update example.env 2024-02-07 14:31:51 +00:00
github-actions
2446713aea chore: Update example.env 2024-02-07 06:16:38 +00:00
github-actions
68f638ea5d chore: Update example.env 2024-02-06 18:53:17 +00:00
github-actions
6f9ecc221f chore: Update example.env 2024-02-02 15:33:00 +00:00
dependabot[bot]
ca6094dc79 chore(deps): bump peter-evans/create-pull-request from 5 to 6 (#1326)
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 5 to 6.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v5...v6)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-01 17:36:48 +05:30
github-actions
8c3be45763 chore: Update example.env 2024-01-30 14:22:48 +00:00
dependabot[bot]
100ab30aef chore(deps): bump pytest from 7.4.4 to 8.0.0 (#1323)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.4.4 to 8.0.0.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/7.4.4...8.0.0)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-30 17:07:03 +05:30
github-actions
ef7a2dd310 chore: Update example.env 2024-01-29 04:48:36 +00:00
github-actions[bot]
479faf78d2 chore(deps): Update pre-commit hooks (#1322)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2024-01-29 03:03:54 +05:30
0xD0M1M0
961453812c fix: Fix gpg and less (#1321)
* fix: Add gpg and less

Add gpg so backup "bench --site yoursite.com backup --with-files --compress" does not fail if encryption is enabled

Add "less": fixes #1301

* fix: Add gpg and less

Add gpg so backup "bench --site yoursite.com backup --with-files --compress" does not fail if encryption is enabled

Add "less": fixes frappe#1301

* fix: Update documentation

update documentation to resemble current status

* fix: trailing whitespace

---------

Co-authored-by: Revant Nandgaonkar <revant.one@gmail.com>
2024-01-28 11:53:14 +05:30
Revant Nandgaonkar
220db20347 fix: typo in compose.yaml (#1320)
typo in PROXY_READ_TIMEOUT

fixes https://github.com/frappe/frappe_docker/issues/1315
2024-01-27 10:41:24 +05:30
github-actions[bot]
c10d2e8799 chore(deps): Update pre-commit hooks (#1318)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2024-01-27 10:23:30 +05:30
github-actions
f70b05e374 chore: Update example.env 2024-01-27 04:52:46 +00:00
Tengku Izdihar
337a024a21 frontend depends_on websocket to avoid error on startup (#1313)
* frontend depends_on websocket to avoid error on startup

* ci: fix lint

---------

Co-authored-by: Revant Nandgaonkar <revant.one@gmail.com>
2024-01-26 11:18:26 +05:30
github-actions
c8c6f82645 chore: Update example.env 2024-01-25 06:57:41 +00:00
github-actions
ed5b6f485a chore: Update example.env 2024-01-24 08:08:56 +00:00
github-actions
8b6a61c366 chore: Update example.env 2024-01-23 12:03:30 +00:00
github-actions
9a54fb709d chore: Update example.env 2024-01-19 00:53:52 +00:00
github-actions
43a156ef6c chore: Update example.env 2024-01-17 17:14:42 +00:00
github-actions
88dfbe4ce3 chore: Update example.env 2024-01-15 06:57:02 +00:00
github-actions
f06e792bef chore: Update example.env 2024-01-10 10:48:51 +00:00
github-actions
4dc375d8b2 chore: Update example.env 2024-01-03 15:46:36 +00:00
github-actions
a582a57125 chore: Update example.env 2024-01-03 06:10:05 +00:00
dependabot[bot]
8584e3be64 chore(deps): bump pytest from 7.4.3 to 7.4.4 (#1302)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.4.3 to 7.4.4.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/7.4.3...7.4.4)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-02 10:42:28 +05:30
github-actions
87775c009d chore: Update example.env 2023-12-28 13:39:53 +00:00
github-actions
0ec913bbc7 chore: Update example.env 2023-12-28 12:25:36 +00:00
github-actions
95e263d012 chore: Update example.env 2023-12-28 06:04:23 +00:00
github-actions
bc23a404e3 chore: Update example.env 2023-12-27 08:49:28 +00:00
github-actions[bot]
dc04cd26ec chore(deps): Update pre-commit hooks (#1299)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-12-24 21:38:27 +05:30
github-actions
28297541bf chore: Update example.env 2023-12-20 04:54:23 +00:00
Revant Nandgaonkar
680c275ef5 revert: pre-commit prettier to 3.1.0 (#1295) 2023-12-18 12:30:12 +05:30
github-actions[bot]
87cdca377f chore(deps): Update pre-commit hooks (#1293)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-12-18 12:00:37 +05:30
github-actions[bot]
4ee6e61ae1 chore(deps): Update pre-commit hooks (#1281)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-12-16 09:20:34 +05:30
Trusted Computer
b2e71bb12d Update custom-apps.md for version-15 (#1291)
Updating documentation examples to version-15
2023-12-16 09:19:26 +05:30
dependabot[bot]
01f92e63f1 chore(deps): bump actions/stale from 8 to 9 (#1290)
Bumps [actions/stale](https://github.com/actions/stale) from 8 to 9.
- [Release notes](https://github.com/actions/stale/releases)
- [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/stale/compare/v8...v9)

---
updated-dependencies:
- dependency-name: actions/stale
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-16 09:14:48 +05:30
github-actions
dba13b4fda chore: Update example.env 2023-12-13 18:58:25 +00:00
github-actions
e70572e77a chore: Update example.env 2023-12-12 16:20:41 +00:00
MohsinAli
89860467d4 fix: space (#1285) 2023-12-07 14:19:32 +05:30
dependabot[bot]
4717c3ee73 chore(deps): bump actions/setup-python from 4 to 5 (#1287)
Bumps [actions/setup-python](https://github.com/actions/setup-python) from 4 to 5.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-07 14:15:08 +05:30
dependabot[bot]
04128c60eb chore(deps): bump actions/setup-go from 4 to 5 (#1286)
Bumps [actions/setup-go](https://github.com/actions/setup-go) from 4 to 5.
- [Release notes](https://github.com/actions/setup-go/releases)
- [Commits](https://github.com/actions/setup-go/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/setup-go
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-12-07 14:14:43 +05:30
Piyush
4aa07b3672 Update troubleshoot.md (#1283)
Added instructions for removal if want to start afresh
2023-12-07 10:20:39 +05:30
github-actions
2aa5b30969 chore: Update example.env 2023-12-05 14:00:19 +00:00
github-actions
6ccb110203 chore: Update example.env 2023-11-28 16:33:29 +00:00
Bhavansathru
64cd39265b Update development.md (#1274) 2023-11-23 14:14:04 +05:30
github-actions
22a4787dbc chore: Update example.env 2023-11-21 19:05:58 +00:00
dependabot[bot]
947fbae8bb chore(deps): bump docker/bake-action from 4.0.0 to 4.1.0 (#1272)
Bumps [docker/bake-action](https://github.com/docker/bake-action) from 4.0.0 to 4.1.0.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](https://github.com/docker/bake-action/compare/v4.0.0...v4.1.0)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-11-20 14:16:04 +05:30
github-actions
28113baebf chore: Update example.env 2023-11-17 07:52:22 +00:00
github-actions
d92ba9f441 chore: Update example.env 2023-11-16 06:59:51 +00:00
github-actions[bot]
9da52f5009 chore(deps): Update pre-commit hooks (#1270)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-11-14 12:50:08 +05:30
Bernhard Sirlinger
45200bd57f feat: add optional mailpit configuration (#1269) 2023-11-14 03:10:15 +05:30
github-actions[bot]
9321153b79 chore(deps): Update pre-commit hooks (#1268)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-11-08 17:04:00 +05:30
vama
aaae152392 Updated grammer in single-server-example.md (#1265) 2023-11-02 04:25:08 +05:30
keerthana
f2dc0e8f6a PYENV_VERSION=3.10.12 Deprecated (#1262)
The PYENV_VERSION 3.10.12 is deprecated the new version 3.10.13 was launched. here the reference link

https://hub.docker.com/_/python
2023-10-30 20:27:31 +05:30
Revant Nandgaonkar
27361b7500 docs: set-config for redis_socketio during development (#1261) 2023-10-30 11:56:22 +05:30
Revant Nandgaonkar
2e99af1a3f fix: new-site command (#1260)
fix command usage and docs

fixes issue#1256
2023-10-30 11:45:55 +05:30
varun-krishnamurthy
ead5438ebb Cypress UI Test service and updates to installer.py (#1250)
* #1247 #1248 Feat: Cypress UI testing + Postgres Arg for installer

* #1247 #1248 Feat: Cypress UI testing + Postgres Arg for installer

* #1247 #1248 Feat: Cypress UI testing + Postgres Arg for installer

* #1247 #1248 Feat: Cypress UI testing + Postgres Arg for installer

* #1247 #1248 Feat: Cypress UI testing + Postgres Arg for installer

* #1247 #1248 Feat: Cypress UI testing + Postgres Arg for installer

* #1247 #1248 Feat: Cypress UI testing + Postgres Arg for installer
2023-10-26 08:35:31 +05:30
dependabot[bot]
122927662c chore(deps): bump pytest from 7.4.2 to 7.4.3 (#1251)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.4.2 to 7.4.3.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/7.4.2...7.4.3)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-25 15:26:01 +05:30
Revant Nandgaonkar
839d44d167 fix: consume default queue (#1249) 2023-10-25 10:51:30 +05:30
github-actions[bot]
ebf3df296f chore(deps): Update pre-commit hooks (#1246)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-10-25 01:42:43 +05:30
Revant Nandgaonkar
cc326b625a fix: installer.py compatible with v14 (#1244) 2023-10-22 14:24:52 +05:30
github-actions
1d17e8f752 chore: Update example.env 2023-10-20 13:47:22 +00:00
Revant Nandgaonkar
f605addb71 refactor: prepare for v15 (#1243)
* chore: resolve merge conflict

* ci: changes for version 15

* chore: upgrade python and nodejs

* ci: fix v15 build

* fix: add redis_socketio for backward compatibility

* ci: fix v15 build

* ci: fix test endpoint

changed to erpnext.templates.pages.search_help.get_help_results_sections
2023-10-20 18:40:10 +05:30
github-actions[bot]
ab5f985536 chore(deps): Update pre-commit hooks (#1240)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-10-20 17:33:14 +05:30
Revant Nandgaonkar
dddb791c81 fix: sync nginx template from bench changes (#1242) 2023-10-20 16:30:55 +05:30
Revant Nandgaonkar
7f8d794835 fix: sync nginx template from bench changes (#1241) 2023-10-20 15:52:14 +05:30
github-actions
be174a164a chore: Update example.env 2023-10-19 11:58:37 +00:00
github-actions
0333e62884 chore: Update example.env 2023-10-12 02:27:59 +00:00
github-actions
4c9b779fac chore: Update example.env 2023-10-11 11:27:55 +00:00
github-actions[bot]
26f921d7dc chore(deps): Update pre-commit hooks (#1238)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-10-10 04:02:09 +05:30
github-actions
d03ada5091 chore: Update example.env 2023-10-04 14:49:43 +00:00
github-actions[bot]
dffe7486ed chore(deps): Update pre-commit hooks (#1236)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-10-04 11:06:51 +05:30
github-actions
edb37d1686 chore: Update example.env 2023-10-04 02:30:39 +00:00
github-actions[bot]
040ceea2a1 chore(deps): Update pre-commit hooks (#1235)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-09-30 12:31:08 +05:30
github-actions
f8e1a25fe0 chore: Update example.env 2023-09-29 07:02:26 +00:00
github-actions
8b6392d655 chore: Update example.env 2023-09-27 07:54:13 +00:00
github-actions
aa1fc53b40 chore: Update example.env 2023-09-27 05:51:54 +00:00
github-actions[bot]
051b959526 chore(deps): Update pre-commit hooks (#1234)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-09-24 22:29:53 +05:30
github-actions[bot]
bfdb0497fe chore(deps): Update pre-commit hooks (#1233)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-09-22 17:43:33 +05:30
github-actions[bot]
afcc9f1aeb chore(deps): Update pre-commit hooks (#1231)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-09-22 03:10:35 +05:30
github-actions
b4d8209c90 chore: Update example.env 2023-09-20 06:37:00 +00:00
github-actions[bot]
fb2fc88cb9 chore(deps): Update pre-commit hooks (#1228)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-09-17 18:06:11 +05:30
dependabot[bot]
1aadcf9676 chore(deps): bump docker/setup-qemu-action from 2 to 3 (#1227)
Bumps [docker/setup-qemu-action](https://github.com/docker/setup-qemu-action) from 2 to 3.
- [Release notes](https://github.com/docker/setup-qemu-action/releases)
- [Commits](https://github.com/docker/setup-qemu-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: docker/setup-qemu-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-14 08:59:31 +05:30
dependabot[bot]
5a963bd59b chore(deps): bump docker/bake-action from 3.1.0 to 4.0.0 (#1226)
Bumps [docker/bake-action](https://github.com/docker/bake-action) from 3.1.0 to 4.0.0.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](https://github.com/docker/bake-action/compare/v3.1.0...v4.0.0)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-12 22:10:39 +05:30
dependabot[bot]
413cea31aa chore(deps): bump docker/setup-buildx-action from 2 to 3 (#1225)
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 2 to 3.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](https://github.com/docker/setup-buildx-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-12 22:10:06 +05:30
dependabot[bot]
1da736b4b6 chore(deps): bump docker/login-action from 2 to 3 (#1224)
Bumps [docker/login-action](https://github.com/docker/login-action) from 2 to 3.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v2...v3)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-12 22:09:27 +05:30
github-actions
df19210889 chore: Update example.env 2023-09-12 12:33:05 +00:00
github-actions[bot]
9e17b0ed97 chore(deps): Update pre-commit hooks (#1223)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-09-11 21:37:33 +05:30
github-actions[bot]
405628835f chore(deps): Update pre-commit hooks (#1222)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-09-09 15:24:06 +05:30
dependabot[bot]
262e57237b chore(deps): bump pytest from 7.4.1 to 7.4.2 (#1221)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.4.1 to 7.4.2.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/7.4.1...7.4.2)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-09 15:23:12 +05:30
github-actions
252b2e12d3 chore: Update example.env 2023-09-06 06:12:26 +00:00
dependabot[bot]
7c6f953bd7 chore(deps): bump actions/checkout from 3 to 4 (#1220)
Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-06 03:24:07 +05:30
dependabot[bot]
16a93c94a0 chore(deps): bump pytest from 7.4.0 to 7.4.1 (#1219)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.4.0 to 7.4.1.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/7.4.0...7.4.1)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-09-06 03:22:54 +05:30
github-actions
514f535955 chore: Update example.env 2023-08-31 14:23:18 +00:00
github-actions[bot]
d29f68ff73 chore(deps): Update pre-commit hooks (#1218)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-08-31 19:03:23 +05:30
github-actions
43ea0d5f13 chore: Update example.env 2023-08-30 14:08:10 +00:00
Antony-M1
258fec25d2 3.9.9 deprecated (#1216)
* Update development.md

* 3.9.9 deprecated
2023-08-25 21:32:37 +05:30
Mahmoud (Moudy) Taleb
8fa392ffff Add cd command for clarity (#1214) 2023-08-24 14:06:05 +05:30
github-actions
05a383fd3a chore: Update example.env 2023-08-23 03:11:18 +00:00
github-actions
aaa64a2149 chore: Update example.env 2023-08-18 15:42:31 +00:00
github-actions[bot]
efeeb03fc6 chore(deps): Update pre-commit hooks (#1210)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-08-17 18:54:13 +05:30
github-actions
e56d3b7c22 chore: Update example.env 2023-08-17 12:45:59 +00:00
github-actions
2e28bce3b2 chore: Update example.env 2023-08-16 06:53:38 +00:00
github-actions
b3d807fc54 chore: Update example.env 2023-08-11 13:41:51 +00:00
github-actions
5f045098fe chore: Update example.env 2023-08-10 12:40:38 +00:00
github-actions
84c524e405 chore: Update example.env 2023-08-10 08:17:46 +00:00
github-actions
b2b15e9d56 chore: Update example.env 2023-08-09 03:18:04 +00:00
Chris Darby
cf499acc36 Broken link to environment variables definition fixed (#1205) 2023-08-08 09:38:36 +05:30
github-actions[bot]
eb88625f93 chore(deps): Update pre-commit hooks (#1203)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-08-04 12:45:00 +05:30
github-actions
1db2bc6b6d chore: Update example.env 2023-08-03 08:02:43 +00:00
github-actions
8757ad9755 chore: Update example.env 2023-08-02 07:44:54 +00:00
github-actions
4207982e65 chore: Update example.env 2023-08-01 18:18:32 +00:00
Rishab Manocha
29e9ccf20a Fixed the instructions to refer to the correct filename (#1197) 2023-07-31 20:02:24 +05:30
github-actions[bot]
480c642325 chore(deps): Update pre-commit hooks (#1198)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-07-31 20:00:16 +05:30
Revant Nandgaonkar
8c670e6db7 docs: change sitename as per installer.py (#1196) 2023-07-31 05:10:23 +05:30
github-actions
13c0183a79 chore: Update example.env 2023-07-26 06:39:40 +00:00
github-actions
55938bd5fc chore: Update example.env 2023-07-26 04:21:53 +00:00
Revant Nandgaonkar
cf6bb37648 ci: tag frappe/bench:latest (#1191) 2023-07-24 16:57:39 +05:30
Revant Nandgaonkar
7d1d9b17fd fix: use ping api instead of version api (#1190) 2023-07-24 12:49:49 +05:30
github-actions
17385266ee chore: Update example.env 2023-07-20 14:54:07 +00:00
Revant Nandgaonkar
9429501407 docs: remove obsolete docs (#1186) 2023-07-20 13:03:03 +05:30
github-actions
70c40e2be0 chore: Update example.env 2023-07-19 08:21:45 +00:00
github-actions
0936a1a9e3 chore: Update example.env 2023-07-19 05:54:00 +00:00
github-actions
a5ab1d3717 chore: Update example.env 2023-07-18 14:10:58 +00:00
github-actions
96fc3ff31c chore: Update example.env 2023-07-18 09:58:44 +00:00
Amal Paul
c3df323a9f Tag bench images with the latest bench release version (#1183)
Remove latest tag and make it default
2023-07-18 09:32:27 +05:30
github-actions
f485a13a25 chore: Update example.env 2023-07-14 14:48:14 +00:00
github-actions
7abbd83587 chore: Update example.env 2023-07-14 13:04:30 +00:00
github-actions
e7c2c386b7 chore: Update example.env 2023-07-14 11:11:47 +00:00
github-actions
0b3f245079 chore: Update example.env 2023-07-14 06:08:22 +00:00
github-actions
df3daac8ad chore: Update example.env 2023-07-13 11:14:57 +00:00
github-actions
011365c89b chore: Update example.env 2023-07-11 14:24:04 +00:00
github-actions
4a7ebf48c4 chore: Update example.env 2023-07-11 13:16:03 +00:00
Revant Nandgaonkar
d5aae2097d fix: use python for installer script (#1178) 2023-07-11 17:18:11 +05:30
github-actions[bot]
d60e32bce7 chore(deps): Update pre-commit hooks (#1177)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-07-11 12:34:28 +05:30
github-actions
52296380f1 chore: Update example.env 2023-07-10 14:22:25 +00:00
github-actions[bot]
a90d435e61 chore(deps): Update pre-commit hooks (#1173)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-07-09 14:56:46 +05:30
Antony-M1
69fbc2ed91 Update development.md (#1168) 2023-07-06 05:30:14 +05:30
github-actions
34b1188175 chore: Update example.env 2023-07-05 16:35:32 +00:00
github-actions
c90913d563 chore: Update example.env 2023-07-05 10:01:45 +00:00
Faris Ansari
2b4b39a65b fix: set node version to 18 for frappe develop (#1166) 2023-07-02 17:20:33 +05:30
github-actions[bot]
605eb99853 chore(deps): Update pre-commit hooks (#1165)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-07-02 13:25:36 +05:30
github-actions
012d2d3d6d chore: Update example.env 2023-07-02 06:00:57 +00:00
github-actions
ce272a9290 chore: Update example.env 2023-06-28 16:16:24 +00:00
github-actions
0279f8fae2 chore: Update example.env 2023-06-28 15:38:22 +00:00
Revant Nandgaonkar
779f8be4fe fix: add python 3.11 and nodejs 18 (#1163)
used for frappe develop branch
2023-06-28 15:53:35 +05:30
github-actions
445bc3402e chore: Update example.env 2023-06-28 05:09:48 +00:00
Revant Nandgaonkar
ed6301c48f ci: fix develop build (#1161) 2023-06-27 11:42:27 +05:30
dependabot[bot]
412230c63a chore(deps): bump pytest from 7.3.2 to 7.4.0 (#1160)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.3.2 to 7.4.0.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/7.3.2...7.4.0)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-26 16:22:02 +05:30
Revant Nandgaonkar
e401be4cb0 docs: update python and nodejs version (#1159)
python image 3.10.12 onwards gets built on bookworm
2023-06-26 14:05:25 +05:30
Revant Nandgaonkar
e6c0e7263b ci: refactor (#1158)
* ci: refactor

use debian bookworm
use updated wkhtmltopdf
override python and nodejs versions

* ci: fix bench and test

* ci: remove comments from example.env

* docs: add maintenance section
2023-06-26 11:54:37 +05:30
github-actions
2c3a57ae90 chore: Update example.env 2023-06-23 03:10:17 +00:00
github-actions
32b5140c75 chore: Update example.env 2023-06-22 09:46:34 +00:00
github-actions
a2cfbf988f chore: Update example.env 2023-06-22 06:38:16 +00:00
github-actions
5145e4fff5 chore: Update example.env 2023-06-20 16:17:32 +00:00
github-actions[bot]
59b3f3b180 chore(deps): Update pre-commit hooks (#1156)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-06-20 09:31:59 +05:30
github-actions
82dbfd9c0b chore: Update example.env 2023-06-19 11:51:42 +00:00
github-actions
a27f751472 chore: Update example.env 2023-06-17 08:46:06 +00:00
github-actions
a14bdf3784 chore: Update example.env 2023-06-17 07:18:47 +00:00
dependabot[bot]
90edb8492e chore(deps): bump docker/bake-action from 3.0.1 to 3.1.0 (#1151)
Bumps [docker/bake-action](https://github.com/docker/bake-action) from 3.0.1 to 3.1.0.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](https://github.com/docker/bake-action/compare/v3.0.1...v3.1.0)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-16 08:41:48 +05:30
github-actions[bot]
335cbe4777 chore(deps): Update pre-commit hooks (#1153)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-06-16 08:41:26 +05:30
github-actions
4a6c7956e4 chore: Update example.env 2023-06-15 08:21:31 +00:00
github-actions
507eeb334a chore: Update example.env 2023-06-15 06:52:30 +00:00
github-actions
f75623f372 chore: Update example.env 2023-06-14 15:32:30 +00:00
github-actions
ebed6f8f67 chore: Update example.env 2023-06-14 05:19:32 +00:00
dependabot[bot]
6ecc6202bc chore(deps): bump pytest from 7.3.1 to 7.3.2 (#1150)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.3.1 to 7.3.2.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/7.3.1...7.3.2)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-06-13 04:06:34 +05:30
Karan Janthe
a6e1baa9b7 added guide for linux/mac to setup frappe docker (#1149)
* added guide for linux/mac to setup frappe docker

* guide added in readme

* linting done according to guidelines
2023-06-13 04:06:15 +05:30
github-actions[bot]
3ee6acab4f chore(deps): Update pre-commit hooks (#1147)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-06-12 11:51:50 +05:30
github-actions
0adebb1e23 chore: Update example.env 2023-06-09 17:09:09 +00:00
github-actions
4a87ecdf9e chore: Update example.env 2023-06-07 06:28:56 +00:00
Hardik Zinzuvadiya
84569ea158 Fix typo in PROXY_READ_TIMEOUT in .env and pwd.yaml (#1146)
* Fix typo in PROXY_READ_TIMEOUT in pwd.yaml

* Fix typo in PROXY_READ_TIMEOUT in example.env
2023-06-03 10:44:33 +05:30
github-actions[bot]
ea48cf5300 chore(deps): Update pre-commit hooks (#1145)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-06-03 10:09:27 +05:30
github-actions
191fb66a0d chore: Update example.env 2023-05-31 06:29:50 +00:00
github-actions
ebe09e4e60 chore: Update example.env 2023-05-25 07:08:22 +00:00
github-actions
68514dd80e chore: Update example.env 2023-05-24 03:14:45 +00:00
github-actions
a8ee005622 chore: Update example.env 2023-05-18 09:45:16 +00:00
github-actions
5e93b3cdcd chore: Update example.env 2023-05-16 17:13:07 +00:00
github-actions
7abad8876e chore: Update example.env 2023-05-12 10:17:31 +00:00
akash-m-envsage
01a96f2c8d fix(data persistency): docker volume persistency issue (#1139)
because of the missing /data path, there was an issue wherein the data
would be lost after docker compose down
2023-05-12 08:43:12 +05:30
Revant Nandgaonkar
e9fa75d144 fix: use stable bench branch (#1138)
#1137
2023-05-10 15:47:37 +05:30
github-actions
e129437c2b chore: Update example.env 2023-05-10 05:52:21 +00:00
github-actions[bot]
e3e97dc47d chore(deps): Update pre-commit hooks (#1134)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-05-07 17:45:24 +05:30
github-actions
3ff0528865 chore: Update example.env 2023-05-06 11:26:37 +00:00
github-actions
5d3b01f9ce chore: Update example.env 2023-05-04 18:14:29 +00:00
github-actions
2e67ef231a chore: Update example.env 2023-05-04 05:06:09 +00:00
github-actions
25a7633e0c chore: Update example.env 2023-05-03 04:34:42 +00:00
github-actions[bot]
03d1d95b6a chore(deps): Update pre-commit hooks (#1128)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-04-26 04:51:05 +05:30
github-actions
1bfb5dbf2c chore: Update example.env 2023-04-25 17:08:59 +00:00
github-actions
1b05e5f43e chore: Update example.env 2023-04-24 12:53:29 +00:00
dependabot[bot]
266ae176b5 chore(deps): bump docker/bake-action from 3.0.0 to 3.0.1 (#1123)
* chore(deps): bump docker/bake-action from 3.0.0 to 3.0.1

Bumps [docker/bake-action](https://github.com/docker/bake-action) from 3.0.0 to 3.0.1.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](https://github.com/docker/bake-action/compare/v3.0.0...v3.0.1)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* ci: upgrade pip for pre-commit lint

* ci: use python from ubuntu repos

* ci: install build essential

* ci: remove cache action

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Revant Nandgaonkar <revant.one@gmail.com>
2023-04-21 11:42:25 +05:30
github-actions
0b10891002 chore: Update example.env 2023-04-20 07:46:10 +00:00
github-actions
37ae8018e7 chore: Update example.env 2023-04-20 05:24:54 +00:00
dependabot[bot]
e56454a147 chore(deps): bump docker/bake-action from 2.3.0 to 3.0.0 (#1120)
Bumps [docker/bake-action](https://github.com/docker/bake-action) from 2.3.0 to 3.0.0.
- [Release notes](https://github.com/docker/bake-action/releases)
- [Commits](https://github.com/docker/bake-action/compare/v2.3.0...v3.0.0)

---
updated-dependencies:
- dependency-name: docker/bake-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-19 09:01:03 +05:30
github-actions
65fc0ab67a chore: Update example.env 2023-04-19 01:48:10 +00:00
dependabot[bot]
572b6483d4 chore(deps): bump pytest from 7.3.0 to 7.3.1 (#1118)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.3.0 to 7.3.1.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/7.3.0...7.3.1)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-17 19:04:21 +05:30
github-actions
2bd0b12d51 chore: Update example.env 2023-04-11 11:52:46 +00:00
dependabot[bot]
1183250a30 chore(deps): bump pytest from 7.2.2 to 7.3.0 (#1115)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.2.2 to 7.3.0.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/7.2.2...7.3.0)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-11 02:54:24 +05:30
github-actions
6d4185e318 chore: Update example.env 2023-04-06 08:05:59 +00:00
github-actions
130e6a7ff2 chore: Update example.env 2023-04-05 19:10:21 +00:00
dependabot[bot]
d851972b36 chore(deps): bump peter-evans/create-pull-request from 4 to 5 (#1114)
Bumps [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) from 4 to 5.
- [Release notes](https://github.com/peter-evans/create-pull-request/releases)
- [Commits](https://github.com/peter-evans/create-pull-request/compare/v4...v5)

---
updated-dependencies:
- dependency-name: peter-evans/create-pull-request
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-04-05 17:16:54 +05:30
github-actions
f7768a4abc chore: Update example.env 2023-04-03 18:02:27 +00:00
github-actions[bot]
aee530e3e7 chore(deps): Update pre-commit hooks (#1111)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-03-29 21:42:52 +05:30
Bernhard Sirlinger
549423422a fix: yaml import formatting in compose file (#1112) 2023-03-29 21:42:28 +05:30
github-actions
e9f7c5f48a chore: Update example.env 2023-03-28 18:30:01 +00:00
dependabot[bot]
f8e5990992 chore(deps): bump webfactory/ssh-agent from 0.7.0 to 0.8.0 (#1110)
Bumps [webfactory/ssh-agent](https://github.com/webfactory/ssh-agent) from 0.7.0 to 0.8.0.
- [Release notes](https://github.com/webfactory/ssh-agent/releases)
- [Changelog](https://github.com/webfactory/ssh-agent/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webfactory/ssh-agent/compare/v0.7.0...v0.8.0)

---
updated-dependencies:
- dependency-name: webfactory/ssh-agent
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-03-27 18:55:50 +05:30
dependabot[bot]
807af25e6b chore(deps): bump actions/stale from 7 to 8 (#1108)
Bumps [actions/stale](https://github.com/actions/stale) from 7 to 8.
- [Release notes](https://github.com/actions/stale/releases)
- [Changelog](https://github.com/actions/stale/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/stale/compare/v7...v8)

---
updated-dependencies:
- dependency-name: actions/stale
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-03-23 16:29:23 +05:30
Azwal Zaman Mohammed
8b38448d8a docs: change command for updating sites in single server example (#1107)
The previous command added an extra variable to the env file while keeping the default so I changed the command to update it with sed instead
2023-03-23 10:46:34 +05:30
github-actions
786c5d19d2 chore: Update example.env 2023-03-21 13:04:05 +00:00
dependabot[bot]
3c204b14dd chore(deps): bump actions/setup-go from 3 to 4 (#1102)
Bumps [actions/setup-go](https://github.com/actions/setup-go) from 3 to 4.
- [Release notes](https://github.com/actions/setup-go/releases)
- [Commits](https://github.com/actions/setup-go/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/setup-go
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-03-16 17:18:03 +05:30
github-actions
e2bfa36acd chore: Update example.env 2023-03-14 17:50:57 +00:00
Revant Nandgaonkar
fb05f01fd4 Revert "Build arm64 images in addition to amd64 images (#1098)" (#1099)
This reverts commit 84fcbd9bf6.
2023-03-13 11:03:01 +05:30
Chillar Anand
84fcbd9bf6 Build arm64 images in addition to amd64 images (#1098) 2023-03-13 10:02:50 +05:30
github-actions
f959d8a91c chore: Update example.env 2023-03-09 10:39:49 +00:00
github-actions[bot]
de204db676 chore(deps): Update pre-commit hooks (#1095)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-03-09 14:51:57 +05:30
github-actions
26d7f37f23 chore: Update example.env 2023-03-07 17:35:06 +00:00
github-actions
3d338748b3 chore: Update example.env 2023-03-07 14:37:54 +00:00
dependabot[bot]
b0571c51f5 chore(deps): bump pytest from 7.2.1 to 7.2.2 (#1089)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.2.1 to 7.2.2.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/7.2.1...7.2.2)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-03-06 17:01:42 +05:30
Revant Nandgaonkar
98ea4212a4 fix: default config for production (#1088)
reported here https://discuss.frappe.io/t/frappe-docker-2023-production-setup-password-reset-email-link-added-with-port-8000/101844
2023-03-05 18:48:37 +05:30
github-actions[bot]
984daf2c5e chore(deps): Update pre-commit hooks (#1086)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-03-04 19:35:41 +05:30
github-actions[bot]
cba5b9a1dc chore(deps): Update pre-commit hooks (#1085)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-03-03 13:56:49 +05:30
github-actions
28b18defa4 chore: Update example.env 2023-03-02 08:20:26 +00:00
github-actions
5a4a19c7a6 chore: Update example.env 2023-03-01 10:37:15 +00:00
github-actions
c34156b60b chore: Update example.env 2023-02-28 13:43:25 +00:00
github-actions
58397f74cb chore: Update example.env 2023-02-24 10:24:25 +00:00
github-actions
06adf10e16 chore: Update example.env 2023-02-21 17:29:36 +00:00
Revant Nandgaonkar
bcf41ff9f1 docs: update backup docs (#1082) 2023-02-17 13:15:49 +05:30
Revant Nandgaonkar
0228f06e81 fix: create apps.txt during configuration (#1081) 2023-02-15 17:16:11 +05:30
github-actions
be66a1f468 chore: Update example.env 2023-02-15 10:47:13 +00:00
github-actions
5bc1fefa0b chore: Update example.env 2023-02-14 10:50:53 +00:00
Leonard Goertz
4a18d57e8d fix typo frape -> frappe (#1073) 2023-02-02 17:29:35 +05:30
Alfredo Altamirano
0d37d6505f feat: add traefik restart policy (#1071)
Co-authored-by: Alfredo Altamirano <Ahuahuachi@users.noreply.github.com>
2023-02-02 14:52:42 +05:30
Revant Nandgaonkar
a580385295 fix: traefik router for acme certs (#1068)
* fix: traefik router for acme certs

* fix: set default for sites

* test: use .localhost site names
2023-02-02 13:45:06 +05:30
github-actions
8f843c1522 chore: Update example.env 2023-02-01 17:58:30 +00:00
Mauricio Vidal
87870be936 Clarification on how to use custom image (#1062)
* Clarification on how to use custom image

* chore: fix lint

* refactor: websocket uses also customizable_image

---------

Co-authored-by: Mauricio Vidal <maovidal@users.noreply.github.com>
2023-02-01 22:12:08 +05:30
github-actions[bot]
31aed68670 chore(deps): Update pre-commit hooks (#1070)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-02-01 13:32:13 +05:30
github-actions
dd82961e4c chore: Update example.env 2023-01-31 06:31:42 +00:00
Revant Nandgaonkar
c013942d1f fix: use docker volumes (#1067)
* fix: use docker volumes

remove bind mount
use docker volumes

* ci: remove payments app from tests
2023-01-31 09:48:52 +05:30
github-actions[bot]
8342bd93c8 chore(deps): Update pre-commit hooks (#1066)
Co-authored-by: vrslev <vrslev@users.noreply.github.com>
2023-01-29 22:43:17 +05:30
Revant Nandgaonkar
8dce4e5f2c docs: fix migration steps (#1065) 2023-01-28 12:40:46 +05:30
Revant Nandgaonkar
499c1fbed4 fix: remove payments (#1063)
payments is optional dep for erpnext
2023-01-28 12:20:45 +05:30
Revant Nandgaonkar
6a3b97302c docs: fix kaniko build-arg (#1058) 2023-01-25 17:27:43 +05:30
Salah Aldin Fateh
1962ac2eec Remove unnecessary WORKDIR (#1057) 2023-01-25 17:27:30 +05:30
github-actions
ccb3117a38 chore: Update example.env 2023-01-25 04:11:59 +00:00
Salah Aldin Fateh
f0d94819a3 add read perms to nginx-entrypoint (#1053)
* add read perms to nginx-entrypoint

* chore: set file permission for custom image

accepted as per suggestion from users
not required for linux runners

Co-authored-by: Revant Nandgaonkar <revant.one@gmail.com>
2023-01-21 16:48:53 +05:30
Revant Nandgaonkar
e9f28c9932 fix: set exec for nginx entrypoint (#1051)
for OS that mess up permission
2023-01-20 13:25:21 +05:30
Revant Nandgaonkar
6a1e3f3a20 docs: backup command for cron (#1048) 2023-01-18 13:16:50 +05:30
Revant Nandgaonkar
bb1e4bb341 feat: add restic (#1044)
* feat: add restic

allows incremental snapshot backups
remove custom push-backup script

* ci: remove .git dir to skip fetch_details_from_tag

fixes https://github.com/frappe/frappe_docker/actions/runs/3938883301/jobs/6738091655
2023-01-18 11:31:18 +05:30
github-actions
44df16fd04 chore: Update example.env 2023-01-17 16:14:52 +00:00
Revant Nandgaonkar
455a523205 fix: add weasyprint dependencies (#1047)
* fix: add weasyprint dependencies

fixes #1045

* ci: fix trigger to test pr

* fix: add weasyprint deps to bench
2023-01-17 17:12:27 +05:30
Revant Nandgaonkar
a270514eb1 fix: redis service context error (#1042)
https://discuss.frappe.io/t/service-redis-has-neither-an-image-nor-a-build-context-specified-invalid-compose-project/99936
2023-01-16 16:56:28 +05:30
Revant Nandgaonkar
7b193e3392 fix: remove git remotes for erpnext (#1041)
fix github rate limit error on bench install-app
2023-01-16 12:29:30 +05:30
Revant Nandgaonkar
44d6f237d5 fix: pass single string as arg (#1040)
fixes #1037
2023-01-16 10:07:00 +05:30
Revant Nandgaonkar
6e2e4d2143 fix: remove frappe version from .env (#1038) 2023-01-16 05:21:14 +05:30
dependabot[bot]
268cdcdec1 chore(deps): bump pytest from 7.2.0 to 7.2.1 (#1036)
Bumps [pytest](https://github.com/pytest-dev/pytest) from 7.2.0 to 7.2.1.
- [Release notes](https://github.com/pytest-dev/pytest/releases)
- [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst)
- [Commits](https://github.com/pytest-dev/pytest/compare/7.2.0...7.2.1)

---
updated-dependencies:
- dependency-name: pytest
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-01-16 04:48:20 +05:30
github-actions
c913f27540 chore: Update example.env 2023-01-15 23:16:47 +00:00
Revant Nandgaonkar
e6088af885 refactor: build only one frappe/erpnext image (#1032)
* 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
2023-01-16 04:20:09 +05:30
98 changed files with 2713 additions and 1682 deletions

View File

@@ -11,22 +11,12 @@ updates:
interval: daily interval: daily
- package-ecosystem: docker - package-ecosystem: docker
directory: images/nginx directory: images/production
schedule: schedule:
interval: daily interval: daily
- package-ecosystem: docker - package-ecosystem: docker
directory: images/worker directory: images/custom
schedule:
interval: daily
- package-ecosystem: docker
directory: images/socketio
schedule:
interval: daily
- package-ecosystem: npm
directory: images/socketio
schedule: schedule:
interval: daily interval: daily

View File

@@ -9,7 +9,7 @@ import sys
from typing import Literal from typing import Literal
Repo = Literal["frappe", "erpnext"] Repo = Literal["frappe", "erpnext"]
MajorVersion = Literal["12", "13", "14", "develop"] MajorVersion = Literal["12", "13", "14", "15", "develop"]
def get_latest_tag(repo: Repo, version: MajorVersion) -> str: def get_latest_tag(repo: Repo, version: MajorVersion) -> str:
@@ -57,7 +57,7 @@ def main(_args: list[str]) -> int:
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument("--repo", choices=["frappe", "erpnext"], required=True) parser.add_argument("--repo", choices=["frappe", "erpnext"], required=True)
parser.add_argument( parser.add_argument(
"--version", choices=["12", "13", "14", "develop"], required=True "--version", choices=["12", "13", "14", "15", "develop"], required=True
) )
args = parser.parse_args(_args) args = parser.parse_args(_args)

View File

@@ -2,29 +2,25 @@ import os
import re import re
def get_versions(): def get_erpnext_version():
frappe_version = os.getenv("FRAPPE_VERSION")
erpnext_version = os.getenv("ERPNEXT_VERSION") erpnext_version = os.getenv("ERPNEXT_VERSION")
assert frappe_version, "No Frappe version set"
assert erpnext_version, "No ERPNext version set" assert erpnext_version, "No ERPNext version set"
return frappe_version, erpnext_version return erpnext_version
def update_env(frappe_version: str, erpnext_version: str): def update_env(erpnext_version: str):
with open("example.env", "r+") as f: with open("example.env", "r+") as f:
content = f.read() content = f.read()
for env, var in ( content = re.sub(
("FRAPPE_VERSION", frappe_version), rf"ERPNEXT_VERSION=.*", f"ERPNEXT_VERSION={erpnext_version}", content
("ERPNEXT_VERSION", erpnext_version), )
):
content = re.sub(rf"{env}=.*", f"{env}={var}", content)
f.seek(0) f.seek(0)
f.truncate() f.truncate()
f.write(content) f.write(content)
def main() -> int: def main() -> int:
update_env(*get_versions()) update_env(get_erpnext_version())
return 0 return 0

View File

@@ -13,12 +13,9 @@ def get_versions():
def update_pwd(frappe_version: str, erpnext_version: str): def update_pwd(frappe_version: str, erpnext_version: str):
with open("pwd.yml", "r+") as f: with open("pwd.yml", "r+") as f:
content = f.read() content = f.read()
for image, version in ( content = re.sub(
("frappe/frappe-socketio", frappe_version), rf"frappe/erpnext:.*", f"frappe/erpnext:{erpnext_version}", content
("frappe/erpnext-worker", erpnext_version), )
("frappe/erpnext-nginx", erpnext_version),
):
content = re.sub(rf"{image}:.*", f"{image}:{version}", content)
f.seek(0) f.seek(0)
f.truncate() f.truncate()
f.write(content) f.write(content)

View File

@@ -20,32 +20,39 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v5
- name: Setup QEMU - name: Setup QEMU
uses: docker/setup-qemu-action@v2 uses: docker/setup-qemu-action@v3
with: with:
image: tonistiigi/binfmt:latest image: tonistiigi/binfmt:latest
platforms: all platforms: all
- name: Setup Buildx - name: Setup Buildx
uses: docker/setup-buildx-action@v2 uses: docker/setup-buildx-action@v3
- name: Set Environment Variables
run: cat example.env | grep -o '^[^#]*' >> "$GITHUB_ENV"
- name: Get Bench Latest Version
run: echo "LATEST_BENCH_RELEASE=$(curl -s 'https://api.github.com/repos/frappe/bench/releases/latest' | jq -r '.tag_name')" >> "$GITHUB_ENV"
- name: Build and test - name: Build and test
uses: docker/bake-action@v2.3.0 uses: docker/bake-action@v6.9.0
with: with:
source: .
targets: bench-test targets: bench-test
- name: Login - name: Login
if: ${{ github.repository == 'frappe/frappe_docker' && github.event_name != 'pull_request' }} if: ${{ github.repository == 'frappe/frappe_docker' && github.event_name != 'pull_request' }}
uses: docker/login-action@v2 uses: docker/login-action@v3
with: with:
username: ${{ secrets.DOCKERHUB_USERNAME }} username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }} password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Push - name: Push
if: ${{ github.repository == 'frappe/frappe_docker' && github.event_name != 'pull_request' }} if: ${{ github.repository == 'frappe/frappe_docker' && github.event_name != 'pull_request' }}
uses: docker/bake-action@v2.3.0 uses: docker/bake-action@v6.9.0
with: with:
targets: bench targets: bench
push: true push: true

View File

@@ -5,9 +5,7 @@ on:
branches: branches:
- main - main
paths: paths:
- images/nginx/** - images/production/**
- images/socketio/**
- images/worker/**
- overrides/** - overrides/**
- tests/** - tests/**
- compose.yaml - compose.yaml
@@ -28,6 +26,8 @@ jobs:
repo: erpnext repo: erpnext
version: develop version: develop
push: ${{ github.repository == 'frappe/frappe_docker' && github.event_name != 'pull_request' }} push: ${{ github.repository == 'frappe/frappe_docker' && github.event_name != 'pull_request' }}
python_version: 3.11.6
node_version: 20.19.2
secrets: secrets:
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}

View File

@@ -5,9 +5,7 @@ on:
branches: branches:
- main - main
paths: paths:
- images/nginx/** - images/production/**
- images/socketio/**
- images/worker/**
- overrides/** - overrides/**
- tests/** - tests/**
- compose.yaml - compose.yaml
@@ -19,9 +17,7 @@ on:
branches: branches:
- main - main
paths: paths:
- images/nginx/** - images/production/**
- images/socketio/**
- images/worker/**
- overrides/** - overrides/**
- tests/** - tests/**
- compose.yaml - compose.yaml
@@ -34,22 +30,26 @@ on:
workflow_dispatch: workflow_dispatch:
jobs: jobs:
v13:
uses: ./.github/workflows/docker-build-push.yml
with:
repo: erpnext
version: "13"
push: ${{ github.repository == 'frappe/frappe_docker' && github.event_name != 'pull_request' }}
secrets:
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
v14: v14:
uses: ./.github/workflows/docker-build-push.yml uses: ./.github/workflows/docker-build-push.yml
with: with:
repo: erpnext repo: erpnext
version: "14" version: "14"
push: ${{ github.repository == 'frappe/frappe_docker' && github.event_name != 'pull_request' }} push: ${{ github.repository == 'frappe/frappe_docker' && github.event_name != 'pull_request' }}
python_version: 3.10.13
node_version: 16.20.2
secrets:
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
v15:
uses: ./.github/workflows/docker-build-push.yml
with:
repo: erpnext
version: "15"
push: ${{ github.repository == 'frappe/frappe_docker' && github.event_name != 'pull_request' }}
python_version: 3.11.6
node_version: 20.19.2
secrets: secrets:
DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }} DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
@@ -58,19 +58,19 @@ jobs:
name: Update example.env and pwd.yml name: Update example.env and pwd.yml
runs-on: ubuntu-latest runs-on: ubuntu-latest
if: ${{ github.repository == 'frappe/frappe_docker' && github.event_name != 'pull_request' }} if: ${{ github.repository == 'frappe/frappe_docker' && github.event_name != 'pull_request' }}
needs: v14 needs: v15
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v5
- name: Setup Python - name: Setup Python
uses: actions/setup-python@v4 uses: actions/setup-python@v6
with: with:
python-version: "3.10" python-version: "3.10"
- name: Get latest versions - name: Get latest versions
run: python3 ./.github/scripts/get_latest_tags.py --repo erpnext --version 14 run: python3 ./.github/scripts/get_latest_tags.py --repo erpnext --version 15
- name: Update - name: Update
run: | run: |
@@ -96,11 +96,11 @@ jobs:
name: Release Helm name: Release Helm
runs-on: ubuntu-latest runs-on: ubuntu-latest
if: ${{ github.repository == 'frappe/frappe_docker' && github.event_name != 'pull_request' }} if: ${{ github.repository == 'frappe/frappe_docker' && github.event_name != 'pull_request' }}
needs: v14 needs: v15
steps: steps:
- name: Setup deploy key - name: Setup deploy key
uses: webfactory/ssh-agent@v0.7.0 uses: webfactory/ssh-agent@v0.9.1
with: with:
ssh-private-key: ${{ secrets.HELM_DEPLOY_KEY }} ssh-private-key: ${{ secrets.HELM_DEPLOY_KEY }}
@@ -113,4 +113,4 @@ jobs:
run: | run: |
git clone git@github.com:frappe/helm.git && cd helm git clone git@github.com:frappe/helm.git && cd helm
pip install -r release_wizard/requirements.txt pip install -r release_wizard/requirements.txt
./release_wizard/wizard 14 patch --remote origin --ci ./release_wizard/wizard 15 patch --remote origin --ci

View File

@@ -14,6 +14,14 @@ on:
push: push:
required: true required: true
type: boolean type: boolean
python_version:
required: true
type: string
description: Python Version
node_version:
required: true
type: string
description: NodeJS Version
secrets: secrets:
DOCKERHUB_USERNAME: DOCKERHUB_USERNAME:
required: true required: true
@@ -26,37 +34,50 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
services: services:
registry: registry:
image: registry:2 image: docker.io/registry:2
ports: ports:
- 5000:5000 - 5000:5000
strategy:
matrix:
arch: [amd64, arm64]
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v5
- name: Setup QEMU
uses: docker/setup-qemu-action@v3
with:
image: tonistiigi/binfmt:latest
platforms: all
- name: Setup Buildx - name: Setup Buildx
uses: docker/setup-buildx-action@v2 uses: docker/setup-buildx-action@v3
with: with:
driver-opts: network=host driver-opts: network=host
platforms: linux/${{ matrix.arch }}
- name: Get latest versions - name: Get latest versions
run: python3 ./.github/scripts/get_latest_tags.py --repo ${{ inputs.repo }} --version ${{ inputs.version }} run: python3 ./.github/scripts/get_latest_tags.py --repo ${{ inputs.repo }} --version ${{ inputs.version }}
- name: Set build args
run: |
echo "PYTHON_VERSION=${{ inputs.python_version }}" >> "$GITHUB_ENV"
echo "NODE_VERSION=${{ inputs.node_version }}" >> "$GITHUB_ENV"
- name: Build - name: Build
uses: docker/bake-action@v2.3.0 uses: docker/bake-action@v6.9.0
with: with:
source: .
push: true push: true
env: env:
REGISTRY_USER: localhost:5000/frappe REGISTRY_USER: localhost:5000/frappe
- name: Setup Python - name: Setup Python
uses: actions/setup-python@v4 uses: actions/setup-python@v6
with: with:
python-version: "3.10" python-version: "3.10"
- name: Install Docker Compose v2
uses: ndeloof/install-compose-action@4a33bc31f327b8231c4f343f6fba704fedc0fa23
- name: Install dependencies - name: Install dependencies
run: | run: |
python -m venv venv python -m venv venv
@@ -67,13 +88,14 @@ jobs:
- name: Login - name: Login
if: ${{ inputs.push }} if: ${{ inputs.push }}
uses: docker/login-action@v2 uses: docker/login-action@v3
with: with:
username: ${{ secrets.DOCKERHUB_USERNAME }} username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }} password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Push - name: Push
if: ${{ inputs.push }} if: ${{ inputs.push }}
uses: docker/bake-action@v2.3.0 uses: docker/bake-action@v6.9.0
with: with:
push: true push: true
set: "*.platform=linux/amd64,linux/arm64"

View File

@@ -13,27 +13,19 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v5
- name: Setup Python - name: Setup Python
uses: actions/setup-python@v4 uses: actions/setup-python@v6
with: with:
python-version: "3.10" python-version: "3.10.6"
# For shfmt pre-commit hook # For shfmt pre-commit hook
- name: Setup Go - name: Setup Go
uses: actions/setup-go@v3 uses: actions/setup-go@v6
with: with:
go-version: "^1.14" go-version: "^1.14"
- name: Cache
uses: actions/cache@v3
with:
path: |
~/.cache/pre-commit
~/.cache/pip
key: lint-${{ hashFiles('.pre-commit-config.yaml') }}
- name: Install pre-commit - name: Install pre-commit
run: pip install -U pre-commit run: pip install -U pre-commit

View File

@@ -10,13 +10,13 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v3 uses: actions/checkout@v5
- name: Update pre-commit hooks - name: Update pre-commit hooks
uses: vrslev/pre-commit-autoupdate@v1.0.0 uses: vrslev/pre-commit-autoupdate@v1.0.0
- name: Create Pull Request - name: Create Pull Request
uses: peter-evans/create-pull-request@v4 uses: peter-evans/create-pull-request@v7
with: with:
branch: pre-commit-autoupdate branch: pre-commit-autoupdate
title: "chore(deps): Update pre-commit hooks" title: "chore(deps): Update pre-commit hooks"

View File

@@ -9,7 +9,7 @@ jobs:
stale: stale:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/stale@v7 - uses: actions/stale@v10
with: with:
repo-token: ${{ secrets.GITHUB_TOKEN }} repo-token: ${{ secrets.GITHUB_TOKEN }}
stale-issue-message: This issue has been automatically marked as stale. You have a week to explain why you believe this is an error. stale-issue-message: This issue has been automatically marked as stale. You have a week to explain why you believe this is an error.

5
.gitignore vendored
View File

@@ -6,7 +6,7 @@ sites
development/* development/*
!development/README.md !development/README.md
!development/installer.sh !development/installer.py
!development/apps-example.json !development/apps-example.json
!development/vscode-example/ !development/vscode-example/
@@ -25,3 +25,6 @@ development/*
*.pyc *.pyc
__pycache__ __pycache__
venv venv
# NodeJS
node_modules

View File

@@ -1,6 +1,6 @@
repos: repos:
- repo: https://github.com/pre-commit/pre-commit-hooks - repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0 rev: v5.0.0
hooks: hooks:
- id: check-executables-have-shebangs - id: check-executables-have-shebangs
- id: check-shebang-scripts-are-executable - id: check-shebang-scripts-are-executable
@@ -8,28 +8,30 @@ repos:
- id: end-of-file-fixer - id: end-of-file-fixer
- repo: https://github.com/asottile/pyupgrade - repo: https://github.com/asottile/pyupgrade
rev: v3.3.1 rev: v3.19.1
hooks: hooks:
- id: pyupgrade - id: pyupgrade
args: [--py37-plus] args: [--py37-plus]
- repo: https://github.com/psf/black - repo: https://github.com/psf/black
rev: 22.12.0 rev: 25.1.0
hooks: hooks:
- id: black - id: black
- repo: https://github.com/pycqa/isort - repo: https://github.com/pycqa/isort
rev: 5.11.4 rev: 6.0.1
hooks: hooks:
- id: isort - id: isort
- repo: https://github.com/pre-commit/mirrors-prettier - repo: https://github.com/pre-commit/mirrors-prettier
rev: v3.0.0-alpha.4 rev: v4.0.0-alpha.8
hooks: hooks:
- id: prettier - id: prettier
additional_dependencies:
- prettier@3.5.2
- repo: https://github.com/codespell-project/codespell - repo: https://github.com/codespell-project/codespell
rev: v2.2.2 rev: v2.4.1
hooks: hooks:
- id: codespell - id: codespell
args: args:
@@ -47,7 +49,7 @@ repos:
types: [shell] types: [shell]
- repo: https://github.com/shellcheck-py/shellcheck-py - repo: https://github.com/shellcheck-py/shellcheck-py
rev: v0.9.0.2 rev: v0.10.0.1
hooks: hooks:
- id: shellcheck - id: shellcheck
args: [-x] args: [-x]

View File

@@ -6,7 +6,7 @@ In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression, size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal level of experience, education, socioeconomic status, nationality, personal
appearance, race, religion, or sexual identity and orientation. appearance, race, religion, or sexual identity and orientation.
## Our Standards ## Our Standards

View File

@@ -61,16 +61,21 @@ Run pytest:
pytest pytest
``` ```
> We also have `requirements-dev.txt` file that contains development requirements for backend image (you can find it in `images/worker/` directory).
# Documentation # Documentation
Place relevant markdown files in the `docs` directory and index them in README.md located at the root of repo. Place relevant markdown files in the `docs` directory and index them in README.md located at the root of repo.
# Wiki
Add alternatives that can be used optionally along with frappe_docker. Add articles to list on home page as well.
# Frappe and ERPNext updates # Frappe and ERPNext updates
Each Frappe/ERPNext release triggers new stable images builds as well as bump to helm chart. Each Frappe/ERPNext release triggers new stable images builds as well as bump to helm chart.
# Maintenance
In case of new release of Debian. e.g. bullseye to bookworm. Change following files:
- `images/erpnext/Containerfile` and `images/custom/Containerfile`: Change the files to use new debian release, make sure new python version tag that is available on new debian release image. e.g. 3.9.9 (bullseye) to 3.9.17 (bookworm) or 3.10.5 (bullseye) to 3.10.12 (bookworm). Make sure apt-get packages and wkhtmltopdf version are also upgraded accordingly.
- `images/bench/Dockerfile`: Change the files to use new debian release. Make sure apt-get packages and wkhtmltopdf version are also upgraded accordingly.
Change following files on release of ERPNext
- `.github/workflows/build_stable.yml`: Add the new release step under `jobs` and remove the unmaintained one. e.g. In case v12, v13 available, v14 will be added and v12 will be removed on release of v14. Also change the `needs:` for later steps to `v14` from `v13`.

View File

@@ -5,56 +5,85 @@ Everything about [Frappe](https://github.com/frappe/frappe) and [ERPNext](https:
# Getting Started # Getting Started
To get started, you need Docker, docker-compose and git setup on your machine. For Docker basics and best practices. Refer Docker [documentation](http://docs.docker.com). To get started you need [Docker](https://docs.docker.com/get-docker/), [docker-compose](https://docs.docker.com/compose/), and [git](https://docs.github.com/en/get-started/getting-started-with-git/set-up-git) setup on your machine. For Docker basics and best practices refer to Docker's [documentation](http://docs.docker.com).
After that, clone this repo:
Once completed, chose one of the following two sections for next steps.
### Try in Play With Docker
To play in an already set up sandbox, in your browser, click the button below:
<a href="https://labs.play-with-docker.com/?stack=https://raw.githubusercontent.com/frappe/frappe_docker/main/pwd.yml">
<img src="https://raw.githubusercontent.com/play-with-docker/stacks/master/assets/images/button.png" alt="Try in PWD"/>
</a>
### Try on your Dev environment
First clone the repo:
```sh ```sh
git clone https://github.com/frappe/frappe_docker git clone https://github.com/frappe/frappe_docker
cd frappe_docker cd frappe_docker
``` ```
### Try in Play With Docker Then run: `docker compose -f pwd.yml up -d`
<a href="https://labs.play-with-docker.com/?stack=https://raw.githubusercontent.com/frappe/frappe_docker/main/pwd.yml"> ### To run on ARM64 architecture follow this instructions
<img src="https://raw.githubusercontent.com/play-with-docker/stacks/master/assets/images/button.png" alt="Try in PWD"/>
</a> After you clone the repo and `cd frappe_docker`, run this command to build multi-architecture images specifically for ARM64.
`docker buildx bake --no-cache --set "*.platform=linux/arm64"`
and then
- add `platform: linux/arm64` to all services in the `pwd.yml`
- replace the current specified versions of erpnext image on `pwd.yml` with `:latest`
Then run: `docker compose -f pwd.yml up -d`
## Final steps
Wait for 5 minutes for ERPNext site to be created or check `create-site` container logs before opening browser on port 8080. (username: `Administrator`, password: `admin`) Wait for 5 minutes for ERPNext site to be created or check `create-site` container logs before opening browser on port 8080. (username: `Administrator`, password: `admin`)
# Development If you ran in a Dev Docker environment, to view container logs: `docker compose -f pwd.yml logs -f create-site`. Don't worry about some of the initial error messages, some services take a while to become ready, and then they go away.
We have baseline for developing in VSCode devcontainer with [frappe/bench](https://github.com/frappe/bench). [Start development](development). # Documentation
# Production ### [Frequently Asked Questions](https://github.com/frappe/frappe_docker/wiki/Frequently-Asked-Questions)
We provide simple and intuitive production setup with prebuilt Frappe and ERPNext images and compose files. To learn more about those, [read the docs](docs/images-and-compose-files.md). ### [Production](#production)
Also, there's docs to help with deployment: - [List of containers](docs/container-setup/01-overview.md)
- [Single Compose Setup](docs/single-compose-setup.md)
- [Environment Variables](docs/container-setup/env-variables.md)
- [Single Server Example](docs/single-server-example.md)
- [Setup Options](docs/setup-options.md)
- [Site Operations](docs/site-operations.md)
- [Backup and Push Cron Job](docs/backup-and-push-cronjob.md)
- [Port Based Multi Tenancy](docs/port-based-multi-tenancy.md)
- [Migrate from multi-image setup](docs/migrate-from-multi-image-setup.md)
- [running on linux/mac](docs/setup_for_linux_mac.md)
- [TLS for local deployment](docs/tls-for-local-deployment.md)
- Examples: ### [Custom Images](#custom-images)
- [Single Server](docs/single-server-example.md)
- [Setup options](docs/setup-options.md)
- [Kubernetes (frappe/helm)](https://helm.erpnext.com)
- [Site operations](docs/site-operations.md).
- Other
- [backup and push cron jobs](docs/backup-and-push-cronjob.md)
- [bench console and vscode debugger](docs/bench-console-and-vscode-debugger.md)
- [build version 10](docs/build-version-10-images.md)
- [connect to localhost services from containers for local app development](docs/connect-to-localhost-services-from-containers-for-local-app-development.md)
- [patch code from images](docs/patch-code-from-images.md)
- [port based multi tenancy](docs/port-based-multi-tenancy.md)
- [Troubleshoot](docs/troubleshoot.md)
# Custom app - [Custom Apps](docs/container-setup/02-build-setup.md)
- [Build Version 10 Images](docs/build-version-10-images.md)
Learn how to containerize your custom Frappe app(s) in [this guide](custom_app/README.md). ### [Development](#development)
- [Development using containers](docs/development.md)
- [Bench Console and VSCode Debugger](docs/bench-console-and-vscode-debugger.md)
- [Connect to localhost services](docs/connect-to-localhost-services-from-containers-for-local-app-development.md)
### [Troubleshoot](docs/troubleshoot.md)
# Contributing # Contributing
If you want to contribute to this repo refer to [CONTRIBUTING.md](CONTRIBUTING.md) If you want to contribute to this repo refer to [CONTRIBUTING.md](CONTRIBUTING.md)
This repository is only for Docker related stuff. You also might want to contribute to: This repository is only for container related stuff. You also might want to contribute to:
- [Frappe framework](https://github.com/frappe/frappe#contributing), - [Frappe framework](https://github.com/frappe/frappe#contributing),
- [ERPNext](https://github.com/frappe/erpnext#contributing), - [ERPNext](https://github.com/frappe/erpnext#contributing),
- or [Frappe Bench](https://github.com/frappe/bench). - [Frappe Bench](https://github.com/frappe/bench).

18
apps.json Normal file
View File

@@ -0,0 +1,18 @@
[
{
"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"
},
{
"url": "https://github.com/frappe/payments",
"branch": "version-15"
}
]

237
compose.khaeli.yaml Normal file
View File

@@ -0,0 +1,237 @@
name: frappe_docker
services:
backend:
depends_on:
configurator:
condition: service_completed_successfully
required: true
image: frappe/erpnext:v15.83.0
networks:
default: null
platform: linux/amd64
pull_policy: always
restart: unless-stopped
volumes:
- type: volume
source: sites
target: /home/frappe/frappe-bench/sites
volume: {}
configurator:
command:
- |
ls -1 apps > sites/apps.txt; 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_QUEUE"; bench set-config -gp socketio_port $$SOCKETIO_PORT;
depends_on:
db:
condition: service_healthy
required: true
redis-cache:
condition: service_started
required: true
redis-queue:
condition: service_started
required: true
entrypoint:
- bash
- -c
environment:
DB_HOST: db
DB_PORT: "3306"
REDIS_CACHE: redis-cache:6379
REDIS_QUEUE: redis-queue:6379
SOCKETIO_PORT: "9000"
image: frappe/erpnext:v15.83.0
networks:
default: null
platform: linux/amd64
pull_policy: always
restart: on-failure
volumes:
- type: volume
source: sites
target: /home/frappe/frappe-bench/sites
volume: {}
db:
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --skip-character-set-client-handshake
- --skip-innodb-read-only-compressed
environment:
MARIADB_AUTO_UPGRADE: "1"
MYSQL_ROOT_PASSWORD: khaelicloud
healthcheck:
test:
- CMD
- healthcheck.sh
- --connect
- --innodb_initialized
timeout: 5s
interval: 5s
retries: 5
start_period: 5s
image: mariadb:11.8
networks:
default: null
restart: unless-stopped
volumes:
- type: volume
source: db-data
target: /var/lib/mysql
volume: {}
frontend:
command:
- nginx-entrypoint.sh
depends_on:
backend:
condition: service_started
required: true
websocket:
condition: service_started
required: true
environment:
BACKEND: backend:8000
CLIENT_MAX_BODY_SIZE: 50m
FRAPPE_SITE_NAME_HEADER: $$host
PROXY_READ_TIMEOUT: "120"
SOCKETIO: websocket:9000
UPSTREAM_REAL_IP_ADDRESS: 127.0.0.1
UPSTREAM_REAL_IP_HEADER: X-Forwarded-For
UPSTREAM_REAL_IP_RECURSIVE: "off"
image: frappe/erpnext:v15.83.0
networks:
default: null
platform: linux/amd64
ports:
- mode: ingress
target: 8080
published: "8080"
protocol: tcp
pull_policy: always
restart: unless-stopped
volumes:
- type: volume
source: sites
target: /home/frappe/frappe-bench/sites
volume: {}
queue-long:
command:
- bench
- worker
- --queue
- long,default,short
depends_on:
configurator:
condition: service_completed_successfully
required: true
image: frappe/erpnext:v15.83.0
networks:
default: null
platform: linux/amd64
pull_policy: always
restart: unless-stopped
volumes:
- type: volume
source: sites
target: /home/frappe/frappe-bench/sites
volume: {}
queue-short:
command:
- bench
- worker
- --queue
- short,default
depends_on:
configurator:
condition: service_completed_successfully
required: true
image: frappe/erpnext:v15.83.0
networks:
default: null
platform: linux/amd64
pull_policy: always
restart: unless-stopped
volumes:
- type: volume
source: sites
target: /home/frappe/frappe-bench/sites
volume: {}
redis-cache:
image: redis:6.2-alpine
networks:
default: null
restart: unless-stopped
redis-queue:
image: redis:6.2-alpine
networks:
default: null
restart: unless-stopped
volumes:
- type: volume
source: redis-queue-data
target: /data
volume: {}
scheduler:
command:
- bench
- schedule
depends_on:
configurator:
condition: service_completed_successfully
required: true
image: frappe/erpnext:v15.83.0
networks:
default: null
platform: linux/amd64
pull_policy: always
restart: unless-stopped
volumes:
- type: volume
source: sites
target: /home/frappe/frappe-bench/sites
volume: {}
websocket:
command:
- node
- /home/frappe/frappe-bench/apps/frappe/socketio.js
depends_on:
configurator:
condition: service_completed_successfully
required: true
image: frappe/erpnext:v15.83.0
networks:
default: null
platform: linux/amd64
pull_policy: always
restart: unless-stopped
volumes:
- type: volume
source: sites
target: /home/frappe/frappe-bench/sites
volume: {}
networks:
default:
name: frappe_docker_default
volumes:
db-data:
name: frappe_docker_db-data
redis-queue-data:
name: frappe_docker_redis-queue-data
sites:
name: frappe_docker_sites
x-backend-defaults:
depends_on:
configurator:
condition: service_completed_successfully
image: frappe/erpnext:v15.83.0
pull_policy: always
restart: unless-stopped
volumes:
- sites:/home/frappe/frappe-bench/sites
x-customizable-image:
image: frappe/erpnext:v15.83.0
pull_policy: always
restart: unless-stopped
x-depends-on-configurator:
depends_on:
configurator:
condition: service_completed_successfully

View File

@@ -1,33 +1,56 @@
x-customizable-image: &customizable_image
# By default the image used only contains the `frappe` and `erpnext` apps.
# See https://github.com/frappe/frappe_docker/blob/main/docs/custom-apps.md
# about using custom images.
image: ${CUSTOM_IMAGE:-frappe/erpnext}:${CUSTOM_TAG:-$ERPNEXT_VERSION}
pull_policy: ${PULL_POLICY:-always}
restart: ${RESTART_POLICY:-unless-stopped}
x-depends-on-configurator: &depends_on_configurator x-depends-on-configurator: &depends_on_configurator
depends_on: depends_on:
configurator: configurator:
condition: service_completed_successfully condition: service_completed_successfully
x-backend-defaults: &backend_defaults x-backend-defaults: &backend_defaults
<<: *depends_on_configurator <<: [*depends_on_configurator, *customizable_image]
image: frappe/frappe-worker:${FRAPPE_VERSION:?No Frappe version set}
volumes: volumes:
- sites:/home/frappe/frappe-bench/sites - sites:/home/frappe/frappe-bench/sites
- assets:/home/frappe/frappe-bench/sites/assets:ro
services: services:
configurator: configurator:
<<: *backend_defaults <<: *backend_defaults
command: configure.py platform: linux/amd64
entrypoint:
- bash
- -c
# add redis_socketio for backward compatibility
command:
- >
ls -1 apps > sites/apps.txt;
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_QUEUE";
bench set-config -gp socketio_port $$SOCKETIO_PORT;
environment: environment:
DB_HOST: ${DB_HOST} DB_HOST: ${DB_HOST:-}
DB_PORT: ${DB_PORT} DB_PORT: ${DB_PORT:-}
REDIS_CACHE: ${REDIS_CACHE} REDIS_CACHE: ${REDIS_CACHE:-}
REDIS_QUEUE: ${REDIS_QUEUE} REDIS_QUEUE: ${REDIS_QUEUE:-}
REDIS_SOCKETIO: ${REDIS_SOCKETIO}
SOCKETIO_PORT: 9000 SOCKETIO_PORT: 9000
depends_on: {} depends_on: {}
restart: on-failure
backend: backend:
<<: *backend_defaults <<: *backend_defaults
platform: linux/amd64
frontend: frontend:
image: frappe/frappe-nginx:${FRAPPE_VERSION} <<: *customizable_image
platform: linux/amd64
command:
- nginx-entrypoint.sh
environment: environment:
BACKEND: backend:8000 BACKEND: backend:8000
SOCKETIO: websocket:9000 SOCKETIO: websocket:9000
@@ -35,38 +58,38 @@ services:
UPSTREAM_REAL_IP_ADDRESS: ${UPSTREAM_REAL_IP_ADDRESS:-127.0.0.1} UPSTREAM_REAL_IP_ADDRESS: ${UPSTREAM_REAL_IP_ADDRESS:-127.0.0.1}
UPSTREAM_REAL_IP_HEADER: ${UPSTREAM_REAL_IP_HEADER:-X-Forwarded-For} UPSTREAM_REAL_IP_HEADER: ${UPSTREAM_REAL_IP_HEADER:-X-Forwarded-For}
UPSTREAM_REAL_IP_RECURSIVE: ${UPSTREAM_REAL_IP_RECURSIVE:-off} UPSTREAM_REAL_IP_RECURSIVE: ${UPSTREAM_REAL_IP_RECURSIVE:-off}
PROXY_READ_TIMOUT: ${PROXY_READ_TIMOUT:-120} PROXY_READ_TIMEOUT: ${PROXY_READ_TIMEOUT:-120}
CLIENT_MAX_BODY_SIZE: ${CLIENT_MAX_BODY_SIZE:-50m} CLIENT_MAX_BODY_SIZE: ${CLIENT_MAX_BODY_SIZE:-50m}
volumes: volumes:
- sites:/usr/share/nginx/html/sites - sites:/home/frappe/frappe-bench/sites
- assets:/usr/share/nginx/html/assets
depends_on: depends_on:
- backend - backend
- websocket - websocket
websocket: websocket:
<<: *depends_on_configurator <<: [*depends_on_configurator, *customizable_image]
image: frappe/frappe-socketio:${FRAPPE_VERSION} platform: linux/amd64
command:
- node
- /home/frappe/frappe-bench/apps/frappe/socketio.js
volumes: volumes:
- sites:/home/frappe/frappe-bench/sites - sites:/home/frappe/frappe-bench/sites
queue-short: queue-short:
<<: *backend_defaults <<: *backend_defaults
command: bench worker --queue short platform: linux/amd64
command: bench worker --queue short,default
queue-default:
<<: *backend_defaults
command: bench worker --queue default
queue-long: queue-long:
<<: *backend_defaults <<: *backend_defaults
command: bench worker --queue long platform: linux/amd64
command: bench worker --queue long,default,short
scheduler: scheduler:
<<: *backend_defaults <<: *backend_defaults
platform: linux/amd64
command: bench schedule command: bench schedule
# ERPNext requires local assets access (Frappe does not) # ERPNext requires local assets access (Frappe does not)
volumes: volumes:
sites: sites:
assets:

View File

@@ -1,46 +0,0 @@
This is basic configuration for building images and testing custom apps that use Frappe.
You can see that there's four files in this folder:
- `backend.Dockerfile`,
- `frontend.Dockerfile`,
- `docker-bake.hcl`,
- `compose.override.yaml`.
Python code will be built in `backend.Dockerfile`. JS and CSS (and other fancy frontend stuff) files will be built in `frontend.Dockerfile`.
`docker-bake.hcl` is reference file for [Buildx Bake](https://github.com/docker/buildx/blob/master/docs/reference/buildx_bake.md). It helps to build images without having to remember all build arguments.
`compose.override.yaml` is [Compose](https://docs.docker.com/compose/compose-file/) override that replaces images from [main compose file](https://github.com/frappe/frappe_docker/blob/main/compose.yaml) so it would use your own images.
To get started, install Docker and [Buildx](https://github.com/docker/buildx#installing). Then copy all content of this folder (except this README) to your app's root directory. Also copy `compose.yaml` in the root of this repository.
Before the next step—to build images—replace "custom_app" with your app's name in `docker-bake.hcl`. After that, let's try to build:
```bash
FRAPPE_VERSION=... ERPNEXT_VERSION=... docker buildx bake
```
> 💡 We assume that majority of our users use ERPNext, that's why images in this tutorial are based on ERPNext images. If don't want ERPNext, change base image in Dockerfile and remove ERPNEXT_VERSION from bake file. To know more about steps used to build frontend image read comments in `frontend.Dockerfile`.
If something goes wrong feel free to leave an issue.
To test if site works, setup `.env` file (check [example](<(https://github.com/frappe/frappe_docker/blob/main/example.env)>)) and run:
```bash
docker-compose -f compose.yaml -f overrides/compose.noproxy.yaml -f overrides/compose.mariadb.yaml -f overrides/compose.redis.yaml -f custom_app/compose.override.yaml up -d
docker-compose exec backend \
bench new-site 127.0.0.1 \
--mariadb-root-password 123 \
--admin-password admin \
--install-app <Name of your app>
docker-compose restart backend
```
Cool! You just containerized your app!
## Installing multiple apps
Backend builds contain `install-app` script that places app where it should be. Each call to script installs given app. Usage: `install-app [APP_NAME]`.
If you want to install an app from git, clone it locally, COPY in Dockerfile.

View File

@@ -1,14 +0,0 @@
# syntax=docker/dockerfile:1.3
ARG ERPNEXT_VERSION
FROM frappe/erpnext-worker:${ERPNEXT_VERSION}
USER root
ARG APP_NAME
COPY . ../apps/${APP_NAME}
RUN --mount=type=cache,target=/root/.cache/pip \
install-app ${APP_NAME}
USER frappe

View File

@@ -1,21 +0,0 @@
services:
configurator:
image: custom_app/worker:${VERSION}
backend:
image: custom_app/worker:${VERSION}
frontend:
image: custom_app/nginx:${VERSION}
queue-short:
image: custom_app/worker:${VERSION}
queue-default:
image: custom_app/worker:${VERSION}
queue-long:
image: custom_app/worker:${VERSION}
scheduler:
image: custom_app/worker:${VERSION}

View File

@@ -1,27 +0,0 @@
APP_NAME="custom_app"
variable "FRAPPE_VERSION" {}
variable "ERPNEXT_VERSION" {}
group "default" {
targets = ["backend", "frontend"]
}
target "backend" {
dockerfile = "backend.Dockerfile"
tags = ["custom_app/worker:latest"]
args = {
"ERPNEXT_VERSION" = ERPNEXT_VERSION
"APP_NAME" = APP_NAME
}
}
target "frontend" {
dockerfile = "frontend.Dockerfile"
tags = ["custom_app/nginx:latest"]
args = {
"FRAPPE_VERSION" = FRAPPE_VERSION
"ERPNEXT_VERSION" = ERPNEXT_VERSION
"APP_NAME" = APP_NAME
}
}

View File

@@ -1,37 +0,0 @@
ARG FRAPPE_VERSION=version-14
# Prepare builder image
FROM frappe/bench:latest as assets
ARG FRAPPE_VERSION=version-14
ARG ERPNEXT_VERSION=version-14
ARG APP_NAME
# Setup frappe-bench using FRAPPE_VERSION
RUN bench init --version=${FRAPPE_VERSION} --skip-redis-config-generation --verbose --skip-assets /home/frappe/frappe-bench
WORKDIR /home/frappe/frappe-bench
# Comment following if ERPNext is not required
RUN bench get-app --branch=${ERPNEXT_VERSION} --skip-assets --resolve-deps erpnext
# Copy custom app(s)
COPY --chown=frappe:frappe . apps/${APP_NAME}
# Setup dependencies
RUN bench setup requirements
# Build static assets, copy files instead of symlink
RUN bench build --production --verbose --hard-link
# Use frappe-nginx image with nginx template and env vars
FROM frappe/frappe-nginx:${FRAPPE_VERSION}
# Remove existing assets
USER root
RUN rm -fr /usr/share/nginx/html/assets
# Copy built assets
COPY --from=assets /home/frappe/frappe-bench/sites/assets /usr/share/nginx/html/assets
# Use non-root user
USER 1000

View File

@@ -2,24 +2,31 @@
"name": "Frappe Bench", "name": "Frappe Bench",
"forwardPorts": [8000, 9000, 6787], "forwardPorts": [8000, 9000, 6787],
"remoteUser": "frappe", "remoteUser": "frappe",
"settings": { "customizations": {
"terminal.integrated.profiles.linux": { "vscode": {
"frappe bash": { "extensions": [
"path": "/bin/bash" "ms-python.python",
"ms-vscode.live-server",
"grapecity.gc-excelviewer",
"mtxr.sqltools",
"visualstudioexptteam.vscodeintellicode"
],
"settings": {
"terminal.integrated.profiles.linux": {
"frappe bash": {
"path": "/bin/bash"
}
},
"terminal.integrated.defaultProfile.linux": "frappe bash",
"debug.node.autoAttach": "disabled"
} }
}, }
"terminal.integrated.defaultProfile.linux": "frappe bash",
"debug.node.autoAttach": "disabled"
}, },
"dockerComposeFile": "./docker-compose.yml", "dockerComposeFile": "./docker-compose.yml",
"service": "frappe", "service": "frappe",
"workspaceFolder": "/workspace/development", "workspaceFolder": "/workspace/development",
"shutdownAction": "stopCompose", "shutdownAction": "stopCompose",
"extensions": [ "mounts": [
"ms-python.python", "source=${localEnv:HOME}${localEnv:USERPROFILE}/.ssh,target=/home/frappe/.ssh,type=bind,consistency=cached"
"ms-vscode.live-server",
"grapecity.gc-excelviewer",
"mtxr.sqltools",
"visualstudioexptteam.vscodeintellicode"
] ]
} }

View File

@@ -1,7 +1,7 @@
version: "3.7" version: "3.7"
services: services:
mariadb: mariadb:
image: mariadb:10.6 image: docker.io/mariadb:11.8
command: command:
- --character-set-server=utf8mb4 - --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci - --collation-server=utf8mb4_unicode_ci
@@ -9,28 +9,43 @@ services:
- --skip-innodb-read-only-compressed # Temporary fix for MariaDB 10.6 - --skip-innodb-read-only-compressed # Temporary fix for MariaDB 10.6
environment: environment:
MYSQL_ROOT_PASSWORD: 123 MYSQL_ROOT_PASSWORD: 123
MARIADB_AUTO_UPGRADE: 1
volumes: volumes:
- mariadb-data:/var/lib/mysql - mariadb-data:/var/lib/mysql
# Enable PostgreSQL only if you use it, see development/README.md for more information. # Enable PostgreSQL only if you use it, see development/README.md for more information.
# postgresql: # postgresql:
# image: postgres:11.8 # image: postgres:14
# environment: # environment:
# POSTGRES_PASSWORD: 123 # POSTGRES_PASSWORD: 123
# volumes: # volumes:
# - postgresql-data:/var/lib/postgresql/data # - postgresql-data:/var/lib/postgresql/data
# Enable Mailpit if you need to test outgoing mail services
# See https://mailpit.axllent.org/
# mailpit:
# image: axllent/mailpit
# volumes:
# - mailpit-data:/data
# ports:
# - 8025:8025
# - 1025:1025
# environment:
# MP_MAX_MESSAGES: 5000
# MP_DATA_FILE: /data/mailpit.db
# MP_SMTP_AUTH_ACCEPT_ANY: 1
# MP_SMTP_AUTH_ALLOW_INSECURE: 1
redis-cache: redis-cache:
image: redis:alpine image: docker.io/redis:alpine
redis-queue: redis-queue:
image: redis:alpine image: docker.io/redis:alpine
redis-socketio:
image: redis:alpine
frappe: frappe:
image: frappe/bench:latest image: docker.io/frappe/bench:latest
# If you want to build the current bench image the Containerfile is in this Repo.
# build: ../images/bench
command: sleep infinity command: sleep infinity
environment: environment:
- SHELL=/bin/bash - SHELL=/bin/bash
@@ -42,7 +57,34 @@ services:
ports: ports:
- 8000-8005:8000-8005 - 8000-8005:8000-8005
- 9000-9005:9000-9005 - 9000-9005:9000-9005
# enable the below service if you need Cypress UI Tests to be executed
# Before enabling ensure install_x11_deps.sh has been executed and display variable is exported.
# Run install_x11_deps.sh again if DISPLAY is not set
# ui-tester:
# # pass custom command to start Cypress otherwise it will use the entrypoint
# # specified in the Cypress Docker image.
# # also pass "--project <folder>" so that when Cypress opens
# # it can find file "cypress.json" and show integration specs
# # https://on.cypress.io/command-line#cypress-open
# entrypoint: 'sleep infinity'
# image: "docker.io/cypress/included:latest"
# environment:
# - SHELL=/bin/bash
# # get the IP address of the host machine and allow X11 to accept
# # incoming connections from that IP address
# # IP=$(ipconfig getifaddr en0) or mac or \
# # IP=$($(hostname -I | awk '{print $1}') ) for Ubuntu
# # /usr/X11/bin/xhost + $IP
# # then pass the environment variable DISPLAY to show Cypress GUI on the host system
# # DISPLAY=$IP:0
# - DISPLAY
# volumes:
# # for Cypress to communicate with the X11 server pass this socket file
# # in addition to any other mapped volumes
# - /tmp/.X11-unix:/tmp/.X11-unix
# - ..:/workspace:z,cached
# network_mode: "host"
volumes: volumes:
mariadb-data: mariadb-data:
postgresql-data: #postgresql-data:
#mailpit-data:

View File

@@ -1,15 +1,6 @@
{ [
"client_name": [ {
{ "url": "https://github.com/frappe/erpnext.git",
"name": "frappe", "branch": "version-15"
"branch": "develop", }
"upstream": "git@github.com:frappe/frappe.git", ]
"fork": "[your fork]"
},
{
"name": "erpnext",
"branch": "develop",
"upstream": "git@github.com:frappe/erpnext.git"
}
]
}

245
development/installer.py Executable file
View File

@@ -0,0 +1,245 @@
#!/usr/bin/env python3
import argparse
import os
import subprocess
def cprint(*args, level: int = 1):
"""
logs colorful messages
level = 1 : RED
level = 2 : GREEN
level = 3 : YELLOW
default level = 1
"""
CRED = "\033[31m"
CGRN = "\33[92m"
CYLW = "\33[93m"
reset = "\033[0m"
message = " ".join(map(str, args))
if level == 1:
print(CRED, message, reset) # noqa: T001, T201
if level == 2:
print(CGRN, message, reset) # noqa: T001, T201
if level == 3:
print(CYLW, message, reset) # noqa: T001, T201
def main():
parser = get_args_parser()
args = parser.parse_args()
init_bench_if_not_exist(args)
create_site_in_bench(args)
def get_args_parser():
parser = argparse.ArgumentParser()
parser.add_argument(
"-j",
"--apps-json",
action="store",
type=str,
help="Path to apps.json, default: apps-example.json",
default="apps-example.json",
) # noqa: E501
parser.add_argument(
"-b",
"--bench-name",
action="store",
type=str,
help="Bench directory name, default: frappe-bench",
default="frappe-bench",
) # noqa: E501
parser.add_argument(
"-s",
"--site-name",
action="store",
type=str,
help="Site name, should end with .localhost, default: development.localhost", # noqa: E501
default="development.localhost",
)
parser.add_argument(
"-r",
"--frappe-repo",
action="store",
type=str,
help="frappe repo to use, default: https://github.com/frappe/frappe", # noqa: E501
default="https://github.com/frappe/frappe",
)
parser.add_argument(
"-t",
"--frappe-branch",
action="store",
type=str,
help="frappe repo to use, default: version-15", # noqa: E501
default="version-15",
)
parser.add_argument(
"-p",
"--py-version",
action="store",
type=str,
help="python version, default: Not Set", # noqa: E501
default=None,
)
parser.add_argument(
"-n",
"--node-version",
action="store",
type=str,
help="node version, default: Not Set", # noqa: E501
default=None,
)
parser.add_argument(
"-v",
"--verbose",
action="store_true",
help="verbose output", # noqa: E501
)
parser.add_argument(
"-a",
"--admin-password",
action="store",
type=str,
help="admin password for site, default: admin", # noqa: E501
default="admin",
)
parser.add_argument(
"-d",
"--db-type",
action="store",
type=str,
help="Database type to use (e.g., mariadb or postgres)",
default="mariadb", # Set your default database type here
)
return parser
def init_bench_if_not_exist(args):
if os.path.exists(args.bench_name):
cprint("Bench already exists. Only site will be created", level=3)
return
try:
env = os.environ.copy()
if args.py_version:
env["PYENV_VERSION"] = args.py_version
init_command = ""
if args.node_version:
init_command = f"nvm use {args.node_version};"
if args.py_version:
init_command += f"PYENV_VERSION={args.py_version} "
init_command += "bench init "
init_command += "--skip-redis-config-generation "
init_command += "--verbose " if args.verbose else " "
init_command += f"--frappe-path={args.frappe_repo} "
init_command += f"--frappe-branch={args.frappe_branch} "
init_command += f"--apps_path={args.apps_json} "
init_command += args.bench_name
command = [
"/bin/bash",
"-i",
"-c",
init_command,
]
subprocess.call(command, env=env, cwd=os.getcwd())
cprint("Configuring Bench ...", level=2)
cprint("Set db_host", level=3)
if args.db_type:
cprint(f"Setting db_type to {args.db_type}", level=3)
subprocess.call(
["bench", "set-config", "-g", "db_type", args.db_type],
cwd=os.path.join(os.getcwd(), args.bench_name),
)
cprint("Set redis_cache to redis://redis-cache:6379", level=3)
subprocess.call(
[
"bench",
"set-config",
"-g",
"redis_cache",
"redis://redis-cache:6379",
],
cwd=os.getcwd() + "/" + args.bench_name,
)
cprint("Set redis_queue to redis://redis-queue:6379", level=3)
subprocess.call(
[
"bench",
"set-config",
"-g",
"redis_queue",
"redis://redis-queue:6379",
],
cwd=os.getcwd() + "/" + args.bench_name,
)
cprint(
"Set redis_socketio to redis://redis-queue:6379 for backward compatibility", # noqa: E501
level=3,
)
subprocess.call(
[
"bench",
"set-config",
"-g",
"redis_socketio",
"redis://redis-queue:6379",
],
cwd=os.getcwd() + "/" + args.bench_name,
)
cprint("Set developer_mode", level=3)
subprocess.call(
["bench", "set-config", "-gp", "developer_mode", "1"],
cwd=os.getcwd() + "/" + args.bench_name,
)
except subprocess.CalledProcessError as e:
cprint(e.output, level=1)
def create_site_in_bench(args):
if "mariadb" == args.db_type:
cprint("Set db_host", level=3)
subprocess.call(
["bench", "set-config", "-g", "db_host", "mariadb"],
cwd=os.getcwd() + "/" + args.bench_name,
)
new_site_cmd = [
"bench",
"new-site",
f"--db-root-username=root",
f"--db-host=mariadb", # Should match the compose service name
f"--db-type={args.db_type}", # Add the selected database type
f"--mariadb-user-host-login-scope=%",
f"--db-root-password=123", # Replace with your MariaDB password
f"--admin-password={args.admin_password}",
]
else:
cprint("Set db_host", level=3)
subprocess.call(
["bench", "set-config", "-g", "db_host", "postgresql"],
cwd=os.getcwd() + "/" + args.bench_name,
)
new_site_cmd = [
"bench",
"new-site",
f"--db-root-username=root",
f"--db-host=postgresql", # Should match the compose service name
f"--db-type={args.db_type}", # Add the selected database type
f"--db-root-password=123", # Replace with your PostgreSQL password
f"--admin-password={args.admin_password}",
]
apps = os.listdir(f"{os.getcwd()}/{args.bench_name}/apps")
apps.remove("frappe")
for app in apps:
new_site_cmd.append(f"--install-app={app}")
new_site_cmd.append(args.site_name)
cprint(f"Creating Site {args.site_name} ...", level=2)
subprocess.call(
new_site_cmd,
cwd=os.getcwd() + "/" + args.bench_name,
)
if __name__ == "__main__":
main()

View File

@@ -1,160 +0,0 @@
#!/bin/bash
# Developer Note: Run this script in the /workspace/development directory
export NVM_DIR=~/.nvm
# shellcheck disable=SC1091
source $NVM_DIR/nvm.sh
sudo apt -qq update && sudo apt -qq install jq -y
get_client_apps() {
apps=$(jq ".\"$client\"" apps.json)
if [ "$apps" == "null" ]; then
echo "No apps found for $client"
exit 1
fi
}
validate_bench_exists() {
dir="$(pwd)/$bench_name"
if [ -d "$dir" ]; then
echo "Bench already exists. Only site will be created"
is_existing_bench=true
else
is_existing_bench=false
fi
}
validate_branch() {
if [ "$app" == "frappe" ] || [ "$app" == "erpnext" ]; then
if [ "$branch" != "develop" ] && [ "$branch" != "version-14" ] && [ "$branch" != "version-13" ]; then
echo "Branch should be one of develop or version-14 or version-13"
exit 1
fi
fi
}
validate_site() {
if [[ ! "$site_name" =~ ^.*\.localhost$ ]]; then
echo "Site name should end with .localhost"
exit 1
fi
if [ "$is_existing_bench" = true ]; then
validate_site_exists
fi
}
validate_site_exists() {
dir="$(pwd)/$bench_name/sites/$site_name"
if [ -d "$dir" ]; then
echo "Site already exists. Exiting"
exit 1
fi
}
validate_app_exists() {
dir="$(pwd)/apps/$app"
if [ -d "$dir" ]; then
echo "App $app already exists."
is_app_installed=true
else
is_app_installed=false
fi
}
add_fork() {
dir="$(pwd)/apps/$app"
if [ "$fork" != "null" ]; then
git -C "$dir" remote add fork "$fork"
fi
}
install_apps() {
initialize_bench=$1
for row in $(echo "$apps" | jq -r '.[] | @base64'); do
# helper function to retrieve values from dict
_jq() {
echo "${row}" | base64 --decode | jq -r "${1}"
}
app=$(_jq '.name')
branch=$(_jq '.branch')
upstream=$(_jq '.upstream')
fork=$(_jq '.fork')
if [ "$initialize_bench" = true ] && [ "$app" == "frappe" ]; then
init_bench
fi
if [ "$initialize_bench" = false ]; then
get_apps_from_upstream
fi
done
}
init_bench() {
echo "Creating bench $bench_name"
if [ "$branch" == "develop" ] || [ "$branch" == "version-14" ]; then
python_version=python3.10
PYENV_VERSION=3.10.5
NODE_VERSION=v16
elif [ "$branch" == "version-13" ]; then
python_version=python3.9
PYENV_VERSION=3.9.9
NODE_VERSION=v14
fi
nvm use "$NODE_VERSION"
PYENV_VERSION="$PYENV_VERSION" bench init --skip-redis-config-generation --frappe-branch "$branch" --python "$python_version" "$bench_name"
cd "$bench_name" || exit
echo "Setting up config"
bench set-config -g db_host mariadb
bench set-config -g redis_cache redis://redis-cache:6379
bench set-config -g redis_queue redis://redis-queue:6379
bench set-config -g redis_socketio redis://redis-socketio:6379
./env/bin/pip install honcho
}
get_apps_from_upstream() {
validate_app_exists
if [ "$is_app_installed" = false ]; then
bench get-app --branch "$branch" --resolve-deps "$app" "$upstream" && add_fork
fi
if [ "$app" != "frappe" ]; then
all_apps+=("$app")
fi
}
echo "Client Name (from apps.json file)?"
read -r client && client=${client:-develop_client} && get_client_apps
echo "Bench Directory Name? (give name of existing bench to just create a new site) (default: frape-bench)"
read -r bench_name && bench_name=${bench_name:-frappe-bench} && validate_bench_exists
echo "Site Name? (should end with .localhost) (default: site1.localhost)"
read -r site_name && site_name=${site_name:-site1.localhost} && validate_site
if [ "$is_existing_bench" = true ]; then
cd "$bench_name" || exit
else
install_apps true
fi
echo "Getting apps from upstream for $client"
all_apps=() && install_apps false
echo "Creating site $site_name"
bench new-site "$site_name" --mariadb-root-password 123 --admin-password admin --no-mariadb-socket
echo "Installing apps to $site_name"
bench --site "$site_name" install-app "${all_apps[@]}"
bench --site "$site_name" set-config developer_mode 1
bench --site "$site_name" clear-cache

View File

@@ -6,7 +6,7 @@
"configurations": [ "configurations": [
{ {
"name": "Bench Web", "name": "Bench Web",
"type": "python", "type": "debugpy",
"request": "launch", "request": "launch",
"program": "${workspaceFolder}/frappe-bench/apps/frappe/frappe/utils/bench_helper.py", "program": "${workspaceFolder}/frappe-bench/apps/frappe/frappe/utils/bench_helper.py",
"args": [ "args": [
@@ -17,19 +17,6 @@
"--noreload", "--noreload",
"--nothreading" "--nothreading"
], ],
"pythonPath": "${workspaceFolder}/frappe-bench/env/bin/python",
"cwd": "${workspaceFolder}/frappe-bench/sites",
"env": {
"DEV_SERVER": "1"
}
},
{
"name": "Bench Default Worker",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}/frappe-bench/apps/frappe/frappe/utils/bench_helper.py",
"args": ["frappe", "worker", "--queue", "default"],
"pythonPath": "${workspaceFolder}/frappe-bench/env/bin/python",
"cwd": "${workspaceFolder}/frappe-bench/sites", "cwd": "${workspaceFolder}/frappe-bench/sites",
"env": { "env": {
"DEV_SERVER": "1" "DEV_SERVER": "1"
@@ -37,11 +24,21 @@
}, },
{ {
"name": "Bench Short Worker", "name": "Bench Short Worker",
"type": "python", "type": "debugpy",
"request": "launch", "request": "launch",
"program": "${workspaceFolder}/frappe-bench/apps/frappe/frappe/utils/bench_helper.py", "program": "${workspaceFolder}/frappe-bench/apps/frappe/frappe/utils/bench_helper.py",
"args": ["frappe", "worker", "--queue", "short"], "args": ["frappe", "worker", "--queue", "short"],
"pythonPath": "${workspaceFolder}/frappe-bench/env/bin/python", "cwd": "${workspaceFolder}/frappe-bench/sites",
"env": {
"DEV_SERVER": "1"
}
},
{
"name": "Bench Default Worker",
"type": "debugpy",
"request": "launch",
"program": "${workspaceFolder}/frappe-bench/apps/frappe/frappe/utils/bench_helper.py",
"args": ["frappe", "worker", "--queue", "default"],
"cwd": "${workspaceFolder}/frappe-bench/sites", "cwd": "${workspaceFolder}/frappe-bench/sites",
"env": { "env": {
"DEV_SERVER": "1" "DEV_SERVER": "1"
@@ -49,11 +46,10 @@
}, },
{ {
"name": "Bench Long Worker", "name": "Bench Long Worker",
"type": "python", "type": "debugpy",
"request": "launch", "request": "launch",
"program": "${workspaceFolder}/frappe-bench/apps/frappe/frappe/utils/bench_helper.py", "program": "${workspaceFolder}/frappe-bench/apps/frappe/frappe/utils/bench_helper.py",
"args": ["frappe", "worker", "--queue", "long"], "args": ["frappe", "worker", "--queue", "long"],
"pythonPath": "${workspaceFolder}/frappe-bench/env/bin/python",
"cwd": "${workspaceFolder}/frappe-bench/sites", "cwd": "${workspaceFolder}/frappe-bench/sites",
"env": { "env": {
"DEV_SERVER": "1" "DEV_SERVER": "1"
@@ -61,21 +57,21 @@
}, },
{ {
"name": "Honcho SocketIO Watch Schedule Worker", "name": "Honcho SocketIO Watch Schedule Worker",
"type": "python", "type": "debugpy",
"request": "launch", "request": "launch",
"python": "/home/frappe/.pyenv/shims/python",
"program": "/home/frappe/.local/bin/honcho", "program": "/home/frappe/.local/bin/honcho",
"pythonPath": "${workspaceFolder}/frappe-bench/env/bin/python",
"cwd": "${workspaceFolder}/frappe-bench", "cwd": "${workspaceFolder}/frappe-bench",
"console": "internalConsole", "console": "internalConsole",
"args": [ "args": ["start", "socketio", "watch", "schedule", "worker"],
"start", "postDebugTask": "Clean Honcho SocketIO Watch Schedule Worker"
"socketio", }
"watch", ],
"schedule", "compounds": [
"worker_short", {
"worker_long", "name": "Honcho + Web debug",
"worker_default" "configurations": ["Bench Web", "Honcho SocketIO Watch Schedule Worker"],
] "stopAll": true
} }
] ]
} }

View File

@@ -0,0 +1,3 @@
{
"python.defaultInterpreterPath": "${workspaceFolder}/frappe-bench/env/bin/python"
}

View File

@@ -0,0 +1,22 @@
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "Clean Honcho SocketIO Watch Schedule Worker",
"detail": "When stopping the debug process from vscode window, the honcho won't receive the SIGINT signal. This task will send the SIGINT signal to the honcho processes.",
"type": "shell",
"command": "pkill -SIGINT -f bench; pkill -SIGINT -f socketio",
"isBackground": false,
"presentation": {
"echo": true,
"reveal": "silent",
"focus": false,
"panel": "shared",
"showReuseMessage": false,
"close": true
}
}
]
}

View File

@@ -5,6 +5,13 @@ variable "REGISTRY_USER" {
default = "frappe" default = "frappe"
} }
variable PYTHON_VERSION {
default = "3.11.6"
}
variable NODE_VERSION {
default = "20.19.2"
}
variable "FRAPPE_VERSION" { variable "FRAPPE_VERSION" {
default = "develop" default = "develop"
} }
@@ -25,6 +32,10 @@ variable "BENCH_REPO" {
default = "https://github.com/frappe/bench" default = "https://github.com/frappe/bench"
} }
variable "LATEST_BENCH_RELEASE" {
default = "latest"
}
# Bench image # Bench image
target "bench" { target "bench" {
@@ -33,7 +44,10 @@ target "bench" {
} }
context = "images/bench" context = "images/bench"
target = "bench" target = "bench"
tags = ["frappe/bench:latest"] tags = [
"frappe/bench:${LATEST_BENCH_RELEASE}",
"frappe/bench:latest",
]
} }
target "bench-test" { target "bench-test" {
@@ -44,70 +58,56 @@ target "bench-test" {
# Main images # Main images
# Base for all other targets # Base for all other targets
group "frappe" {
targets = ["frappe-worker", "frappe-nginx", "frappe-socketio"]
}
group "erpnext" {
targets = ["erpnext-worker", "erpnext-nginx"]
}
group "default" { group "default" {
targets = ["frappe", "erpnext"] targets = ["erpnext", "base", "build"]
} }
function "tag" { function "tag" {
params = [repo, version] params = [repo, version]
result = [ result = [
# Push frappe or erpnext branch as tag
"${REGISTRY_USER}/${repo}:${version}",
# If `version` param is develop (development build) then use tag `latest` # If `version` param is develop (development build) then use tag `latest`
"${version}" == "develop" ? "${REGISTRY_USER}/${repo}:latest" : "${REGISTRY_USER}/${repo}:${version}", "${version}" == "develop" ? "${REGISTRY_USER}/${repo}:latest" : "${REGISTRY_USER}/${repo}:${version}",
# Make short tag for major version if possible. For example, from v13.16.0 make v13. # Make short tag for major version if possible. For example, from v13.16.0 make v13.
can(regex("(v[0-9]+)[.]", "${version}")) ? "${REGISTRY_USER}/${repo}:${regex("(v[0-9]+)[.]", "${version}")[0]}" : "", can(regex("(v[0-9]+)[.]", "${version}")) ? "${REGISTRY_USER}/${repo}:${regex("(v[0-9]+)[.]", "${version}")[0]}" : "",
# Make short tag for major version if possible. For example, from v13.16.0 make version-13.
can(regex("(v[0-9]+)[.]", "${version}")) ? "${REGISTRY_USER}/${repo}:version-${regex("([0-9]+)[.]", "${version}")[0]}" : "",
] ]
} }
target "default-args" { target "default-args" {
args = { args = {
FRAPPE_REPO = "${FRAPPE_REPO}" FRAPPE_PATH = "${FRAPPE_REPO}"
ERPNEXT_REPO = "${ERPNEXT_REPO}" ERPNEXT_PATH = "${ERPNEXT_REPO}"
BENCH_REPO = "${BENCH_REPO}" BENCH_REPO = "${BENCH_REPO}"
FRAPPE_VERSION = "${FRAPPE_VERSION}" FRAPPE_BRANCH = "${FRAPPE_VERSION}"
ERPNEXT_VERSION = "${ERPNEXT_VERSION}" ERPNEXT_BRANCH = "${ERPNEXT_VERSION}"
PYTHON_VERSION = can(regex("v13", "${ERPNEXT_VERSION}")) ? "3.9.9" : "3.10.5" PYTHON_VERSION = "${PYTHON_VERSION}"
NODE_VERSION = can(regex("v13", "${FRAPPE_VERSION}")) ? "14.19.3" : "16.18.0" NODE_VERSION = "${NODE_VERSION}"
} }
} }
target "frappe-worker" { target "erpnext" {
inherits = ["default-args"] inherits = ["default-args"]
context = "images/worker" context = "."
target = "frappe" dockerfile = "images/production/Containerfile"
tags = tag("frappe-worker", "${FRAPPE_VERSION}")
}
target "erpnext-worker" {
inherits = ["default-args"]
context = "images/worker"
target = "erpnext" target = "erpnext"
tags = tag("erpnext-worker", "${ERPNEXT_VERSION}") tags = tag("erpnext", "${ERPNEXT_VERSION}")
} }
target "frappe-nginx" { target "base" {
inherits = ["default-args"] inherits = ["default-args"]
context = "images/nginx" context = "."
target = "frappe" dockerfile = "images/production/Containerfile"
tags = tag("frappe-nginx", "${FRAPPE_VERSION}") target = "base"
tags = tag("base", "${FRAPPE_VERSION}")
} }
target "erpnext-nginx" { target "build" {
inherits = ["default-args"] inherits = ["default-args"]
context = "images/nginx" context = "."
target = "erpnext" dockerfile = "images/production/Containerfile"
tags = tag("erpnext-nginx", "${ERPNEXT_VERSION}") target = "build"
} tags = tag("build", "${ERPNEXT_VERSION}")
target "frappe-socketio" {
inherits = ["default-args"]
context = "images/socketio"
tags = tag("frappe-socketio", "${FRAPPE_VERSION}")
} }

View File

@@ -5,40 +5,36 @@ Create backup service or stack.
version: "3.7" version: "3.7"
services: services:
backup: backup:
image: frappe/erpnext-worker:v14 image: frappe/erpnext:${VERSION}
entrypoint: ["bash", "-c"] entrypoint: ["bash", "-c"]
command: | command:
for SITE in $(/home/frappe/frappe-bench/env/bin/python -c "import frappe;print(' '.join(frappe.utils.get_sites()))") - |
do bench --site all backup
bench --site $SITE backup --with-files ## Uncomment for restic snapshots.
push-backup \ # restic snapshots || restic init
--site $SITE \ # restic backup sites
--bucket $BUCKET_NAME \ ## Uncomment to keep only last n=30 snapshots.
--region-name $REGION \ # restic forget --group-by=paths --keep-last=30 --prune
--endpoint-url $ENDPOINT_URL \
--aws-access-key-id $ACCESS_KEY_ID \
--aws-secret-access-key $SECRET_ACCESS_KEY
done
environment: environment:
- BUCKET_NAME=erpnext # Set correct environment variables for restic
- REGION=us-east-1 - RESTIC_REPOSITORY=s3:https://s3.endpoint.com/restic
- ACCESS_KEY_ID=RANDOMACCESSKEY - AWS_ACCESS_KEY_ID=access_key
- SECRET_ACCESS_KEY=RANDOMSECRETKEY - AWS_SECRET_ACCESS_KEY=secret_access_key
- ENDPOINT_URL=https://endpoint.url - RESTIC_PASSWORD=restic_password
volumes: volumes:
- "sites-vol:/home/frappe/frappe-bench/sites" - "sites:/home/frappe/frappe-bench/sites"
networks: networks:
- erpnext-network - erpnext-network
networks: networks:
erpnext-network: erpnext-network:
external: true external: true
name: <your_frappe_docker_project_name>_default name: ${PROJECT_NAME:-erpnext}_default
volumes: volumes:
sites-vol: sites:
external: true external: true
name: <your_frappe_docker_project_name>_sites-vol name: ${PROJECT_NAME:-erpnext}_sites
``` ```
In case of single docker host setup, add crontab entry for backup every 6 hours. In case of single docker host setup, add crontab entry for backup every 6 hours.
@@ -47,6 +43,16 @@ In case of single docker host setup, add crontab entry for backup every 6 hours.
0 */6 * * * /usr/local/bin/docker-compose -f /path/to/backup-job.yml up -d > /dev/null 0 */6 * * * /usr/local/bin/docker-compose -f /path/to/backup-job.yml up -d > /dev/null
``` ```
Or
```
0 */6 * * * docker compose -p erpnext exec backend bench --site all backup --with-files > /dev/null
```
Notes: Notes:
- Make sure `docker-compose` or `docker compose` is available in path during execution.
- Change the cron string as per need. - Change the cron string as per need.
- Set the correct project name in place of `erpnext`.
- For Docker Swarm add it as a [swarm-cronjob](https://github.com/crazy-max/swarm-cronjob)
- Add it as a `CronJob` in case of Kubernetes cluster.

View File

@@ -1,4 +1,4 @@
Add the following configuration to `launch.json` `configurations` array to start bench console and use debugger. Replace `mysite.localhost` with appropriate site. Also replace `frappe-bench` with name of the bench directory. Add the following configuration to `launch.json` `configurations` array to start bench console and use debugger. Replace `development.localhost` with appropriate site. Also replace `frappe-bench` with name of the bench directory.
```json ```json
{ {
@@ -6,7 +6,7 @@ Add the following configuration to `launch.json` `configurations` array to start
"type": "python", "type": "python",
"request": "launch", "request": "launch",
"program": "${workspaceFolder}/frappe-bench/apps/frappe/frappe/utils/bench_helper.py", "program": "${workspaceFolder}/frappe-bench/apps/frappe/frappe/utils/bench_helper.py",
"args": ["frappe", "--site", "mysite.localhost", "console"], "args": ["frappe", "--site", "development.localhost", "console"],
"pythonPath": "${workspaceFolder}/frappe-bench/env/bin/python", "pythonPath": "${workspaceFolder}/frappe-bench/env/bin/python",
"cwd": "${workspaceFolder}/frappe-bench/sites", "cwd": "${workspaceFolder}/frappe-bench/sites",
"env": { "env": {

View File

@@ -0,0 +1,47 @@
The purpose of this document is to give you an overview of how the Frappe Docker containers are structured.
# 🐳 Images
There are **four predefined Dockerfiles** available in the `/images` directory.
| Dockerfile | Ingredients | Purpose & Use Case |
| -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **bench** | Sets up only the Bench CLI. | Used for **development** or debugging. Provides the command-line tooling but does not include runtime services. |
| **custom** | Multi-purpose Python backend built from a plain Python image. Includes everything needed to run a Frappe instance via a Compose setup. Installs apps defined in `apps.json`. | Suitable for **production** and **testing**. Ideal when you need control over dependencies (e.g. trying new Python or Node versions). |
| **layered** | Final contents are the same as `custom`, but it is based on **prebuilt images from [Docker Hub](https://hub.docker.com/u/frappe)**. | Great for **production builds** when youre fine with the dependency versions managed by Frappe. Builds much faster since the base layers are already prepared. |
| **production** | Similar to `custom` (built from a Python base image), but installs **only Frappe and ERPNext**. Not customizable with `apps.json`. | Best for **quick starts** or exploration. For real deployments or CI/CD pipelines, `custom` or `layered` are preferred because they offer more flexibility. |
---
These images include everything needed to run all processes required by the Frappe framework
(see [Bench Procfile reference](https://frappeframework.com/docs/v14/user/en/bench/resources/bench-procfile)).
- The `bench` image only sets up the CLI tool.
- The other images (`custom`, `layered`, and `production`) go further — enabling a nearly **plug-and-play** setup for ERPNext and custom apps.
> We use [multi-stage builds](https://docs.docker.com/develop/develop-images/multistage-build/) and [Docker Buildx](https://docs.docker.com/engine/reference/commandline/buildx/) to maximize layer reuse and make our builds more efficient.
# 🏗️ Compose
Once images are built, containers are orchestrated using a [compose file](https://docs.docker.com/compose/compose-file/). The main compose.yaml provides core services, networking, and volumes for any Frappe setup.
## 🛠️ Services
| Service | Role | Purpose |
| ---------------- | --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **configurator** | Setup | Updates `common_site_config.json` so Frappe knows how to access db and redis. It is executed on every `docker-compose up` (and exited immediately). Other services start after this container exits successfully |
| **backend** | Runtime | [Werkzeug server](https://werkzeug.palletsprojects.com/en/2.0.x/) |
| **frontend** | Proxy | [nginx](https://www.nginx.com) server that serves JS/CSS assets and routes incoming requests |
| **websocket** | Real-time | Node server that runs [Socket.IO](https://socket.io) |
| **queue-\_** | Background Jobs | Python servers that run job queues using [rq](https://python-rq.org) |
| **scheduler** | Task Automation | Python server that runs tasks on schedule using [schedule](https://schedule.readthedocs.io/en/stable/) |
## 🧩 Overrides
Additional functionality can be added using [overrides](https://docs.docker.com/compose/extends/). These files modify existing services or add new ones without changing the main `compose.yaml`.
Example: The main compose file has no database service, but `compose.mariadb.yaml` adds MariaDB. See [overrider.md](overrider.md) for the complete list of available overrides and how to use them.
---
**Next:** [Build Setup →](02-build-setup.md)

View File

@@ -0,0 +1,121 @@
This guide walks you through building Frappe images from the repository resources.
# Prerequisites
- git
- docker or podman
- docker compose v2 or podman compose
> Install containerization software according to the official maintainer documentation. Avoid package managers when not recommended, as they frequently cause compatibility issues.
# Clone this repo
```bash
git clone https://github.com/frappe/frappe_docker
cd frappe_docker
```
# Define custom apps
If you dont want to install specific apps to the image skip this section.
To include custom apps in your image, create an `apps.json` file in the repository root:
```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"
}
]
```
Then generate a base64-encoded string from this file:
```bash
export APPS_JSON_BASE64=$(base64 -w 0 apps.json)
```
# Build the image
Choose the appropriate build command based on your container runtime and desired image type. This example builds the `layered` image with the custom `apps.json` you created.
`Docker`:
```bash
docker 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 .
```
`Podman`:
```bash
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 .
```
## Build args
| Arg | Purpose |
| -------------------- | --------------------------------------------------------------------------------------------- |
| **Frappe Framework** | |
| FRAPPE_PATH | Repository URL for Frappe framework source code. Defaults to https://github.com/frappe/frappe |
| FRAPPE_BRANCH | Branch to use for Frappe framework. Defaults to version-15 |
| **Custom Apps** | |
| APPS_JSON_BASE64 | Base64-encoded JSON string from apps.json defining apps to install |
| **Dependencies** | |
| PYTHON_VERSION | Python version for the base image |
| NODE_VERSION | Node.js version |
| WKHTMLTOPDF_VERSION | wkhtmltopdf version |
| **bench only** | |
| DEBIAN_BASE | Debian base version for the bench image, defaults to `bookworm` |
| WKHTMLTOPDF_DISTRO | use the specified distro for debian package. Default is `bookworm` |
# env file
The compose file requires several environment variables. You can either export them on your system or create a `.env` file.
```bash
cp example.env custom.env
```
Edit `custom.env` to customize variables for your setup. The template includes common variables, but you can add, modify, or remove any as needed. See [env-variables.md](env-variables.md) for detailed descriptions of all available variables.
# Creating the final compose file
Combine the base compose file with appropriate overrides for your use case. This example adds MariaDB, Redis, and exposes ports on `:8080`:
```bash
docker compose --env.file example.env \
-f compose.yaml \
-f overrides/compose.mariadb.yaml \
-f overrides/compose.redis.yaml \
-f overrides/compose.noproxy.yaml \
config > compose.custom.yaml
```
This generates `compose.custom.yaml`, which you'll use to start all containers. Customize the overrides and environment variables according to your requirements.
> **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.
---
**Next:** [Start Setup →](03-start-setup.md)
**Back:** [Container Overview ←](01-overview.md)

View File

@@ -0,0 +1,42 @@
# start Container
Once your compose file is ready, start all containers with a single command:
```bash
docker compose -p frappe -f compose.custom.yaml up -d
```
```bash
podman-compose --in-pod=1 --project-name frappe -f compose.custom.yaml up -d
```
The `-p` (or `--project-name`) flag names the project `frappe`, allowing you to easily reference and manage all containers together.
# Create a site and install apps
Frappe is now running, but it's not yet configured. You need to create a site and install your apps.
```bash
docker compose -p frappe exec backend bench new-site <sitename> --mariadb-user-host-login-scope='172.%.%.%'
docker compose -p frappe exec backend bench --site <sitename> install-app erpnext
```
```bash
podman exec -ti erpnext_backend_1 /bin/bash
bench new-site <sitename> --mariadb-user-host-login-scope='172.%.%.%'
bench --site <sitename> install-app erpnext
```
Replace `<sitename>` with your desired site name.
> ## Understanding the MariaDB User Scope
>
> The flag --mariadb-user-host-login-scope='172.%.%.%' allows database connections from any IP address within the 172.0.0.0/8 range. This includes all containers and virtual machines running on your machine.
>
> **Why is this necessary?** Docker and Podman assign dynamic IP addresses to containers. If you set a fixed IP address instead, database connections will fail when the container restarts and receives a new IP. The wildcard pattern ensures connections always work, regardless of IP changes.
>
> **Security note:** This scope is sufficient because only the backend container accesses the database. If you need external database access, adjust the scope accordingly, but be cautious with overly permissive settings.
---
**Back:** [Build Setup →](02-build-setup.md)

View File

@@ -0,0 +1,112 @@
# Environment Variables Reference
Environment variables configure your Frappe Docker setup. They can be set directly in the container or defined in a `.env` file referenced by Docker Compose.
**Getting Started:**
```bash
cp example.env .env
```
Then edit `.env` and set variables according to your needs.
---
## Required Variables
| Variable | Purpose | Example | Notes |
| ----------------- | ------------------------------------------------ | -------------------------------- | ---------------------------------------------------------------- |
| `FRAPPE_PATH` | Frappe framework path | https://github.com/frappe/frappe | |
| `FRAPPE_BRANCH` | Frappe Branch | `version-15` | See [Frappe releases](https://github.com/frappe/frappe/releases) |
| `ERPNEXT_VERSION` | ERPNext release version | `v15.67.0` | Required although its never used |
| `DB_PASSWORD` | Password for database root (MariaDB or Postgres) | `secure_password_123` | Not needed if using `DB_PASSWORD_SECRETS_FILE` |
---
## Database Configuration
| Variable | Purpose | Default | When to Set |
| -------------------------- | ----------------------------------------- | ------------------------------------ | ---------------------------------- |
| `DB_PASSWORD` | Database root user password | 123 | Always (unless using secrets file) |
| `DB_PASSWORD_SECRETS_FILE` | Path to file containing database password | — | Setup mariadb-secrets overrider |
| `DB_HOST` | Database hostname or IP | `db` (service name) | Only if using external database |
| `DB_PORT` | Database port | `3306` (MariaDB) / `5432` (Postgres) | Only if using external database |
---
## Redis Configuration
| Variable | Purpose | Default | When to Set |
| ------------- | --------------------------------------------------- | ---------------------------- | ------------------------------------- |
| `REDIS_CACHE` | Redis hostname for caching | `redis-cache` (service name) | Only if using external Redis instance |
| `REDIS_QUEUE` | Redis hostname for job queues and real-time updates | `redis-queue` (service name) | Only if using external Redis instance |
---
## HTTPS & SSL Configuration
| Variable | Purpose | Default | When to Set |
| ------------------- | ------------------------------------------------ | ------- | ---------------------------------------- |
| `LETSENCRYPT_EMAIL` | Email for Let's Encrypt certificate registration | — | Required if using HTTPS override |
| `SITES` | List of domains for SSL certificates | — | Required if using reverse proxy override |
**Format for `SITES`:**
```bash
# Single site
SITES=`mysite.example.com`
# Wildcard (any subdomain)
SITES=`{any:.+}`
```
---
## Site Configuration
| Variable | Purpose | Default | When to Set |
| ------------------------- | -------------------------------- | ---------------------------------------- | ----------------------------------------------- |
| `FRAPPE_SITE_NAME_HEADER` | Site name for multi-tenant setup | `$host` (resolved from request hostname) | When accessing by IP or need explicit site name |
**Examples:**
If your site is named `mysite` but you want to access it via `127.0.0.1`:
```bash
FRAPPE_SITE_NAME_HEADER=mysite
```
If your site is named `example.com` and you access it via that domain, no need to set this (defaults to hostname).
---
## Image Configuration
| Variable | Purpose | Default | Notes |
| ---------------- | ------------------------------ | --------------------- | ------------------------------------------------------- |
| `CUSTOM_IMAGE` | Custom Docker image repository | Frappe official image | Leave empty to use default |
| `CUSTOM_TAG` | Custom Docker image tag | Latest stable | Corresponds to `FRAPPE_VERSION` |
| `PULL_POLICY` | Image pull behavior | `always` | Options: `always`, `never`, `if-not-present` |
| `RESTART_POLICY` | Container restart behavior | `unless-stopped` | Options: `no`, `always`, `unless-stopped`, `on-failure` |
---
## Nginx Proxy Configuration
| Variable | Purpose | Default | Allowed Values |
| ---------------------- | ---------------------------------- | -------------- | -------------------------------------------- |
| `BACKEND` | Backend service address and port | `0.0.0.0:8000` | `{host}:{port}` |
| `SOCKETIO` | Socket.IO service address and port | `0.0.0.0:9000` | `{host}:{port}` |
| `HTTP_PUBLISH_PORT` | Published HTTP port | `8080` | Any available port |
| `PROXY_READ_TIMEOUT` | Upstream request timeout | `120s` | Any nginx timeout value (e.g., `300s`, `5m`) |
| `CLIENT_MAX_BODY_SIZE` | Maximum upload file size | `50m` | Any nginx size value (e.g., `100m`, `1g`) |
### Real IP Configuration (Behind Proxy)
Use these variables when running behind a reverse proxy or load balancer:
| Variable | Purpose | Default |
| ---------------------------- | ------------------------------------------------- | ----------------- |
| `UPSTREAM_REAL_IP_ADDRESS` | Trusted upstream IP address for real IP detection | `127.0.0.1` |
| `UPSTREAM_REAL_IP_HEADER` | Request header containing client IP | `X-Forwarded-For` |
| `UPSTREAM_REAL_IP_RECURSIVE` | Enable recursive IP search | `off` |

View File

@@ -0,0 +1,27 @@
Overrides extend the base compose.yaml with additional services or modify existing behavior. Include them in your compose command using multiple -f flags.
```bash
docker compose -f compose.yaml -f overrides/compose.mariadb.yaml -f overrides/compose.redis.yaml config > compose.custom.yaml
```
| Overrider | Purpose | Additional Info |
| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- |
| **Database** | | |
| compose.mariadb.yaml | Adds MariaDB database service | set `DB_PASSWORD` or default Password will be used |
| compose.mariadb-secrets.yaml | Adds MariaDB with password from a secret file instead of environment variable | Set `DB_PASSWORD_SECRETS_FILE` to the path of your secret file |
| compose.mariadb-shared.yaml | Makes MariaDB available on a shared network (mariadb-network) for other services | set `DB_PASSWORD` |
| compose.postgres.yaml | Uses PostgreSQL instead of MariaDB as the database | set `DB_PASSWORD` |
| **Proxy** | | |
| compose.noproxy.yaml | Exposes the application directly on port `:8080` without a reverse proxy | |
| compose.proxy.yaml | Uses Traefik as HTTP reverse proxy on port `:80` | You can change the published port by setting `HTTP_PUBLISH_PORT` |
| compose.https.yaml | Uses Traefik as HTTPS reverse proxy on Port `:443` with automatic HTTP-to-HTTPS redirect | `SITES` and `LETSENCRYPT_EMAIL` must be set. `HTTP_PUBLISH_PORT` and `HTTPS_PUBLISH_PORT` can be set. |
| **Redis** | | |
| compose.redis.yaml | Adds Redis service for caching and background job queuing |
| **TBD** | **The following overrides are available but lack documentation. If you use them and understand their purpose, please consider contributing to this documentation.** |
| compose.backup-cron.yaml | | |
| compose.custom-domain-ssl.yaml | | |
| compose.custom-domain.yaml | | |
| compose.multi-bench-ssl.yaml | | |
| compose.multi-bench.yaml | | |
| compose.traefik-ssl.yaml | | |
| compose.traefik.yaml | | |

View File

@@ -14,9 +14,9 @@ It is recommended you allocate at least 4GB of RAM to docker:
- [Instructions for macOS](https://docs.docker.com/desktop/settings/mac/#advanced) - [Instructions for macOS](https://docs.docker.com/desktop/settings/mac/#advanced)
Here is a screenshot showing the relevant setting in the Help Manual Here is a screenshot showing the relevant setting in the Help Manual
![image](/docs/images/Docker%20Manual%20Screenshot%20-%20Resources%20section.png) ![image](images/Docker%20Manual%20Screenshot%20-%20Resources%20section.png)
Here is a screenshot showing the settings in Docker Desktop on Mac Here is a screenshot showing the settings in Docker Desktop on Mac
![images](/docs/images/Docker%20Desktop%20Screenshot%20-%20Resources%20section.png) ![images](images/Docker%20Desktop%20Screenshot%20-%20Resources%20section.png)
## Bootstrap Containers for development ## Bootstrap Containers for development
@@ -41,23 +41,23 @@ cp -R development/vscode-example development/.vscode
## Use VSCode Remote Containers extension ## Use VSCode Remote Containers extension
For most people getting started with Frappe development, the best solution is to use [VSCode Remote - Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers). For most people getting started with Frappe development, the best solution is to use [VSCode Dev Containers extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers).
Before opening the folder in container, determine the database that you want to use. The default is MariaDB. Before opening the folder in container, determine the database that you want to use. The default is MariaDB.
If you want to use PostgreSQL instead, edit `.devcontainer/docker-compose.yml` and uncomment the section for `postgresql` service, and you may also want to comment `mariadb` as well. If you want to use PostgreSQL instead, edit `.devcontainer/docker-compose.yml` and uncomment the section for `postgresql` service, and you may also want to comment `mariadb` as well.
VSCode should automatically inquire you to install the required extensions, that can also be installed manually as follows: VSCode should automatically inquire you to install the required extensions, that can also be installed manually as follows:
- Install Remote - Containers for VSCode - Install Dev Containers for VSCode
- through command line `code --install-extension ms-vscode-remote.remote-containers` - through command line `code --install-extension ms-vscode-remote.remote-containers`
- clicking on the Install button in the Vistual Studio Marketplace: [Remote - Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) - clicking on the Install button in the Vistual Studio Marketplace: [Dev Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)
- View: Extensions command in VSCode (Windows: Ctrl+Shift+X; macOS: Cmd+Shift+X) then search for extension `ms-vscode-remote.remote-containers` - View: Extensions command in VSCode (Windows: Ctrl+Shift+X; macOS: Cmd+Shift+X) then search for extension `ms-vscode-remote.remote-containers`
After the extensions are installed, you can: After the extensions are installed, you can:
- Open frappe_docker folder in VS Code. - Open frappe_docker folder in VS Code.
- `code .` - `code .`
- Launch the command, from Command Palette (Ctrl + Shift + P) `Remote-Containers: Reopen in Container`. You can also click in the bottom left corner to access the remote container menu. - Launch the command, from Command Palette (Ctrl + Shift + P) `Dev Containers: Reopen in Container`. You can also click in the bottom left corner to access the remote container menu.
Notes: Notes:
@@ -70,6 +70,8 @@ Notes:
Run the following commands in the terminal inside the container. You might need to create a new terminal in VSCode. Run the following commands in the terminal inside the container. You might need to create a new terminal in VSCode.
NOTE: Prior to doing the following, make sure the user is **frappe**.
```shell ```shell
bench init --skip-redis-config-generation frappe-bench bench init --skip-redis-config-generation frappe-bench
cd frappe-bench cd frappe-bench
@@ -82,16 +84,16 @@ To setup frappe framework version 14 bench set `PYENV_VERSION` environment varia
bench init --skip-redis-config-generation --frappe-branch version-14 frappe-bench bench init --skip-redis-config-generation --frappe-branch version-14 frappe-bench
# Or set environment versions explicitly # Or set environment versions explicitly
nvm use v16 nvm use v16
PYENV_VERSION=3.10.5 bench init --skip-redis-config-generation --frappe-branch version-14 frappe-bench PYENV_VERSION=3.10.13 bench init --skip-redis-config-generation --frappe-branch version-14 frappe-bench
# Switch directory # Switch directory
cd frappe-bench cd frappe-bench
``` ```
To setup frappe framework version 13 bench set `PYENV_VERSION` environment variable to `3.9.9` and use NodeJS version 14, To setup frappe framework version 13 bench set `PYENV_VERSION` environment variable to `3.9.17` and use NodeJS version 14,
```shell ```shell
nvm use v14 nvm use v14
PYENV_VERSION=3.9.9 bench init --skip-redis-config-generation --frappe-branch version-13 frappe-bench PYENV_VERSION=3.9.17 bench init --skip-redis-config-generation --frappe-branch version-13 frappe-bench
cd frappe-bench cd frappe-bench
``` ```
@@ -103,7 +105,7 @@ We need to tell bench to use the right containers instead of localhost. Run the
bench set-config -g db_host mariadb bench set-config -g db_host mariadb
bench set-config -g redis_cache redis://redis-cache:6379 bench set-config -g redis_cache redis://redis-cache:6379
bench set-config -g redis_queue redis://redis-queue:6379 bench set-config -g redis_queue redis://redis-queue:6379
bench set-config -g redis_socketio redis://redis-socketio:6379 bench set-config -g redis_socketio redis://redis-queue:6379
``` ```
For any reason the above commands fail, set the values in `common_site_config.json` manually. For any reason the above commands fail, set the values in `common_site_config.json` manually.
@@ -113,7 +115,7 @@ For any reason the above commands fail, set the values in `common_site_config.js
"db_host": "mariadb", "db_host": "mariadb",
"redis_cache": "redis://redis-cache:6379", "redis_cache": "redis://redis-cache:6379",
"redis_queue": "redis://redis-queue:6379", "redis_queue": "redis://redis-queue:6379",
"redis_socketio": "redis://redis-socketio:6379" "redis_socketio": "redis://redis-queue:6379"
} }
``` ```
@@ -142,7 +144,7 @@ sed -i '/redis/d' ./Procfile
You can create a new site with the following command: You can create a new site with the following command:
```shell ```shell
bench new-site sitename --no-mariadb-socket bench new-site --mariadb-user-host-login-scope=% sitename
``` ```
sitename MUST end with .localhost for trying deployments locally. sitename MUST end with .localhost for trying deployments locally.
@@ -150,18 +152,18 @@ sitename MUST end with .localhost for trying deployments locally.
for example: for example:
```shell ```shell
bench new-site mysite.localhost --no-mariadb-socket bench new-site --mariadb-user-host-login-scope=% development.localhost
``` ```
The same command can be run non-interactively as well: The same command can be run non-interactively as well:
```shell ```shell
bench new-site mysite.localhost --mariadb-root-password 123 --admin-password admin --no-mariadb-socket bench new-site --db-root-password 123 --admin-password admin --mariadb-user-host-login-scope=% development.localhost
``` ```
The command will ask the MariaDB root password. The default root password is `123`. The command will ask the MariaDB root password. The default root password is `123`.
This will create a new site and a `mysite.localhost` directory under `frappe-bench/sites`. This will create a new site and a `development.localhost` directory under `frappe-bench/sites`.
The option `--no-mariadb-socket` will configure site's database credentials to work with docker. The option `--mariadb-user-host-login-scope=%` will configure site's database credentials to work with docker.
You may need to configure your system /etc/hosts if you're on Linux, Mac, or its Windows equivalent. You may need to configure your system /etc/hosts if you're on Linux, Mac, or its Windows equivalent.
To setup site with PostgreSQL as database use option `--db-type postgres` and `--db-host postgresql`. (Available only v12 onwards, currently NOT available for ERPNext). To setup site with PostgreSQL as database use option `--db-type postgres` and `--db-host postgresql`. (Available only v12 onwards, currently NOT available for ERPNext).
@@ -169,7 +171,7 @@ To setup site with PostgreSQL as database use option `--db-type postgres` and `-
Example: Example:
```shell ```shell
bench new-site mypgsql.localhost --db-type postgres --db-host postgresql bench new-site --db-type postgres --db-host postgresql mypgsql.localhost
``` ```
To avoid entering postgresql username and root password, set it in `common_site_config.json`, To avoid entering postgresql username and root password, set it in `common_site_config.json`,
@@ -186,8 +188,8 @@ Note: If PostgreSQL is not required, the postgresql service / container can be s
To develop a new app, the last step will be setting the site into developer mode. Documentation is available at [this link](https://frappe.io/docs/user/en/guides/app-development/how-enable-developer-mode-in-frappe). To develop a new app, the last step will be setting the site into developer mode. Documentation is available at [this link](https://frappe.io/docs/user/en/guides/app-development/how-enable-developer-mode-in-frappe).
```shell ```shell
bench --site mysite.localhost set-config developer_mode 1 bench --site development.localhost set-config developer_mode 1
bench --site mysite.localhost clear-cache bench --site development.localhost clear-cache
``` ```
### Install an app ### Install an app
@@ -201,24 +203,29 @@ To install custom app
```shell ```shell
# --branch is optional, use it to point to branch on custom app repository # --branch is optional, use it to point to branch on custom app repository
bench get-app --branch version-12 https://github.com/myusername/myapp bench get-app --branch version-12 https://github.com/myusername/myapp
bench --site mysite.localhost install-app myapp bench --site development.localhost install-app myapp
``` ```
At the time of this writing, the Payments app has been factored out of the Version 14 ERPNext app and is now a separate app. ERPNext will not install without it, however, so we need to specify `--resolve-deps` command line switch to install it. At the time of this writing, the Payments app has been factored out of the Version 14 ERPNext app and is now a separate app. ERPNext will not install it.
```shell ```shell
bench get-app --branch version-14 --resolve-deps erpnext bench get-app --branch version-14 --resolve-deps erpnext
bench --site mysite.localhost install-app erpnext bench --site development.localhost install-app erpnext
``` ```
To install ERPNext (from the version-13 branch): To install ERPNext (from the version-13 branch):
```shell ```shell
bench get-app --branch version-13 erpnext bench get-app --branch version-13 erpnext
bench --site mysite.localhost install-app erpnext bench --site development.localhost install-app erpnext
``` ```
Note: Both frappe and erpnext must be on branch with same name. e.g. version-14 Note: Both frappe and erpnext must be on branch with same name. e.g. version-14
You can use the `switch-to-branch` command to align versions if you get an error about mismatching versions.
```shell
bench switch-to-branch version-xx
```
### Start Frappe without debugging ### Start Frappe without debugging
@@ -229,42 +236,59 @@ bench start
``` ```
You can now login with user `Administrator` and the password you choose when creating the site. You can now login with user `Administrator` and the password you choose when creating the site.
Your website will now be accessible at location [mysite.localhost:8000](http://mysite.localhost:8000) Your website will now be accessible at location [development.localhost:8000](http://development.localhost:8000)
Note: To start bench with debugger refer section for debugging. Note: To start bench with debugger refer section for debugging.
### Setup bench / new site using script ### Setup bench / new site using script
Most developers work with numerous clients and versions. Moreover, apps may be required to be installed by everyone on the team working for a client. Most developers work with numerous clients and versions. Moreover, apps may be required to be installed by everyone on the team working for a client.
This is simplified using a script to automate the process of creating a new bench / site and installing the required apps. This is simplified using a script to automate the process of creating a new bench / site and installing the required apps. The `Administrator` password for created sites is `admin`.
Create a copy of apps-example.json and name it apps.json Sample `apps-example.json` is used by default, it installs erpnext on current stable release. To install custom apps, copy the `apps-example.json` to custom json file and make changes to list of apps. Pass this file to the `installer.py` script.
```shell
cp apps-example.json apps.json
```
Maintain a directory of all client apps in apps.json. Note that Maintaining a fork is optional in apps.json. Also `name` should be app name in apps.json (could be different from repo name).
> You may have apps in private repos which may require ssh access. You may use SSH from your home directory on linux (configurable in docker-compose.yml). > You may have apps in private repos which may require ssh access. You may use SSH from your home directory on linux (configurable in docker-compose.yml).
After you have created apps.json, run the following command:
```shell ```shell
bash installer.sh python installer.py #pass --db-type postgres for postgresdb
``` ```
The script will ask for the following information: For command help
- Client name (from apps.json). ```shell
- Bench directory name. If you enter existing bench directory name, it will create a new site in that bench. Else it will create a new bench and site. python installer.py --help
- Site name (should end with `.localhost`). usage: installer.py [-h] [-j APPS_JSON] [-b BENCH_NAME] [-s SITE_NAME] [-r FRAPPE_REPO] [-t FRAPPE_BRANCH] [-p PY_VERSION] [-n NODE_VERSION] [-v] [-a ADMIN_PASSWORD] [-d DB_TYPE]
options:
-h, --help show this help message and exit
-j APPS_JSON, --apps-json APPS_JSON
Path to apps.json, default: apps-example.json
-b BENCH_NAME, --bench-name BENCH_NAME
Bench directory name, default: frappe-bench
-s SITE_NAME, --site-name SITE_NAME
Site name, should end with .localhost, default: development.localhost
-r FRAPPE_REPO, --frappe-repo FRAPPE_REPO
frappe repo to use, default: https://github.com/frappe/frappe
-t FRAPPE_BRANCH, --frappe-branch FRAPPE_BRANCH
frappe repo to use, default: version-15
-p PY_VERSION, --py-version PY_VERSION
python version, default: Not Set
-n NODE_VERSION, --node-version NODE_VERSION
node version, default: Not Set
-v, --verbose verbose output
-a ADMIN_PASSWORD, --admin-password ADMIN_PASSWORD
admin password for site, default: admin
-d DB_TYPE, --db-type DB_TYPE
Database type to use (e.g., mariadb or postgres)
```
A new bench and / or site is created for the client with following defaults. A new bench and / or site is created for the client with following defaults.
- MariaDB root password: `123` - MariaDB root password: `123`
- Admin password: `admin` - Admin password: `admin`
> To use Postegres DB, comment the mariabdb service and uncomment postegres service.
### Start Frappe with Visual Studio Code Python Debugging ### Start Frappe with Visual Studio Code Python Debugging
To enable Python debugging inside Visual Studio Code, you must first install the `ms-python.python` extension inside the container. This should have already happened automatically, but depending on your VSCode config, you can force it by: To enable Python debugging inside Visual Studio Code, you must first install the `ms-python.python` extension inside the container. This should have already happened automatically, but depending on your VSCode config, you can force it by:
@@ -282,8 +306,7 @@ honcho start \
watch \ watch \
schedule \ schedule \
worker_short \ worker_short \
worker_long \ worker_long
worker_default
``` ```
Alternatively you can use the VSCode launch configuration "Honcho SocketIO Watch Schedule Worker" which launches the same command as above. Alternatively you can use the VSCode launch configuration "Honcho SocketIO Watch Schedule Worker" which launches the same command as above.
@@ -301,7 +324,7 @@ For advance vscode configuration in the devcontainer, change the config files in
You can launch a simple interactive shell console in the terminal with: You can launch a simple interactive shell console in the terminal with:
```shell ```shell
bench --site mysite.localhost console bench --site development.localhost console
``` ```
More likely, you may want to launch VSCode interactive console based on Jupyter kernel. More likely, you may want to launch VSCode interactive console based on Jupyter kernel.
@@ -316,12 +339,12 @@ The first step is installing and updating the required software. Usually the fra
Then, run the command `Python: Show Python interactive window` from the VSCode command palette. Then, run the command `Python: Show Python interactive window` from the VSCode command palette.
Replace `mysite.localhost` with your site and run the following code in a Jupyter cell: Replace `development.localhost` with your site and run the following code in a Jupyter cell:
```python ```python
import frappe import frappe
frappe.init(site='mysite.localhost', sites_path='/workspace/development/frappe-bench/sites') frappe.init(site='development.localhost', sites_path='/workspace/development/frappe-bench/sites')
frappe.connect() frappe.connect()
frappe.local.lang = frappe.db.get_default('lang') frappe.local.lang = frappe.db.get_default('lang')
frappe.db.connect() frappe.db.connect()
@@ -370,3 +393,30 @@ volumes:
``` ```
Access the service by service name from the `frappe` development container. The above service will be accessible via hostname `postgresql`. If ports are published on to host, access it via `localhost:5432`. Access the service by service name from the `frappe` development container. The above service will be accessible via hostname `postgresql`. If ports are published on to host, access it via `localhost:5432`.
## Using Cypress UI tests
To run cypress based UI tests in a docker environment, follow the below steps:
1. Install and setup X11 tooling on VM using the script `install_x11_deps.sh`
```shell
sudo bash ./install_x11_deps.sh
```
This script will install required deps, enable X11Forwarding and restart SSH daemon and export `DISPLAY` variable.
2. Run X11 service `startx` or `xquartz`
3. Start docker compose services.
4. SSH into ui-tester service using `docker exec..` command
5. Export CYPRESS_baseUrl and other required env variables
6. Start Cypress UI console by issuing `cypress run command`
> More references : [Cypress Official Documentation](https://www.cypress.io/blog/2019/05/02/run-cypress-with-a-single-docker-command)
> Ensure DISPLAY environment is always exported.
## Using Mailpit to test mail services
To use Mailpit just uncomment the service in the docker-compose.yml file.
The Interface is then available under port 8025 and the smtp service can be used as mailpit:1025.

View File

@@ -0,0 +1,12 @@
# Resolving Docker `nginx-entrypoint.sh` Script Not Found Error on Windows
If you're encountering the error `exec /usr/local/bin/nginx-entrypoint.sh: no such file or directory` in a Docker container on Windows, follow these steps to resolve the issue.
## 1. Check Line Endings
On Windows, files often have `CRLF` line endings, while Linux systems expect `LF`. This can cause issues when executing shell scripts in Linux containers.
- **Convert Line Endings using `dos2unix`:**
```bash
dos2unix resources/nginx-entrypoint.sh
```

View File

@@ -1,101 +0,0 @@
# Images
There's 4 images that you can find in `/images` directory:
- `bench`. It is used for development. [Learn more how to start development](../development/README.md).
- `nginx`. This image contains JS and CSS assets. Container using this image also routes incoming requests using [nginx](https://www.nginx.com).
- `socketio`. Container using this image processes realtime websocket requests using [Socket.IO](https://socket.io).
- `worker`. Multi-purpose Python backend. Runs [Werkzeug server](https://werkzeug.palletsprojects.com/en/2.0.x/) with [gunicorn](https://gunicorn.org), queues (via `bench worker`), or schedule (via `bench schedule`).
> `nginx`, `socketio` and `worker` images — everything we need to be able to run all processes that Frappe framework requires (take a look at [Bench Procfile reference](https://frappeframework.com/docs/v13/user/en/bench/resources/bench-procfile)). We follow [Docker best practices](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#decouple-applications) and split these processes to different containers.
> ERPNext images don't have their own Dockerfiles. We use [multi-stage builds](https://docs.docker.com/develop/develop-images/multistage-build/) and [Docker Buildx](https://docs.docker.com/engine/reference/commandline/buildx/) to reuse as much things as possible and make our builds more efficient.
# Compose files
After building the images we have to run the containers. The best and simplest way to do this is to use [compose files](https://docs.docker.com/compose/compose-file/).
We have one main compose file, `compose.yaml`. Services described, networking, volumes are also handled there.
## Services
All services are described in `compose.yaml`
- `configurator`. Updates `common_site_config.json` so Frappe knows how to access db and redis. It is executed on every `docker-compose up` (and exited immediately). Other services start after this container exits successfully.
- `backend`. [Werkzeug server](https://werkzeug.palletsprojects.com/en/2.0.x/).
- `db`. Optional service that runs [MariaDB](https://mariadb.com) if you also use `overrides/compose.mariadb.yaml` or [Postgres](https://www.postgresql.org) if you also use `overrides/compose.postgres.yaml`.
- `redis`. Optional service that runs [Redis](https://redis.io) server with cache, [Socket.IO](https://socket.io) and queues data.
- `frontend`. [nginx](https://www.nginx.com) server that serves JS/CSS assets and routes incoming requests.
- `proxy`. [Traefik](https://traefik.io/traefik/) proxy. It is here for complicated setups or HTTPS override (with `overrides/compose.https.yaml`).
- `websocket`. Node server that runs [Socket.IO](https://socket.io).
- `queue-short`, `queue-default`, `queue-long`. Python servers that run job queues using [rq](https://python-rq.org).
- `scheduler`. Python server that runs tasks on schedule using [schedule](https://schedule.readthedocs.io/en/stable/).
## Overrides
We have several [overrides](https://docs.docker.com/compose/extends/):
- `overrides/compose.proxy.yaml`. Adds traefik proxy to setup.
- `overrides/compose.noproxy.yaml`. Publishes `frontend` ports directly without any proxy.
- `overrides/compose.erpnext.yaml`. Replaces all Frappe images with ERPNext ones. ERPNext images are built on top of Frappe ones, so it is safe to replace them.
- `overrides/compose.https.yaml`. Automatically sets up Let's Encrypt certificate and redirects all requests to directed to http, to https.
- `overrides/compose.mariadb.yaml`. Adds `db` service and sets its image to MariaDB.
- `overrides/compose.postgres.yaml`. Adds `db` service and sets its image to Postgres. Note that ERPNext currently doesn't support Postgres.
- `overrides/compose.redis.yaml`. Adds `redis` service and sets its image to `redis`.
It is quite simple to run overrides. All we need to do is to specify compose files that should be used by docker-compose. For example, we want ERPNext:
```bash
# Point to main compose file (compose.yaml) and add one more.
docker-compose -f compose.yaml -f overrides/compose.erpnext.yaml config
```
⚠ Make sure to use docker-compose v2 (run `docker-compose -v` to check). If you want to use v1 make sure the correct `$`-signs as they get duplicated by the `config` command!
That's it! Of course, we also have to setup `.env` before all of that, but that's not the point.
## Configuration
We use environment variables to configure our setup. docker-compose uses variables from `.env` file. To get started, copy `example.env` to `.env`.
### `FRAPPE_VERSION`
Frappe framework release. You can find all releases [here](https://github.com/frappe/frappe/releases).
### `DB_PASSWORD`
Password for MariaDB (or Postgres) database.
### `DB_HOST`
Hostname for MariaDB (or Postgres) database. Set only if external service for database is used.
### `DB_PORT`
Port for MariaDB (3306) or Postgres (5432) database. Set only if external service for database is used.
### `REDIS_CACHE`
Hostname for redis server to store cache. Set only if external service for redis is used.
### `REDIS_QUEUE`
Hostname for redis server to store queue data. Set only if external service for redis is used.
### `REDIS_SOCKETIO`
Hostname for redis server to store socketio data. Set only if external service for redis is used.
### `ERPNEXT_VERSION`
ERPNext [release](https://github.com/frappe/frappe/releases). This variable is required if you use ERPNext override.
### `LETSENCRYPT_EMAIL`
Email that used to register https certificate. This one is required only if you use HTTPS override.
### `FRAPPE_SITE_NAME_HEADER`
This environment variable is not required. Default value is `$$host` which resolves site by host. For example, if your host is `example.com`, site's name should be `example.com`, or if host is `127.0.0.1` (local debugging), it should be `127.0.0.1` This variable allows to override described behavior. Let's say you create site named `mysite` and do want to access it by `127.0.0.1` host. Than you would set this variable to `mysite`.
There is other variables not mentioned here. They're somewhat internal and you don't have to worry about them except you want to change main compose file.

View File

@@ -0,0 +1,112 @@
## 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](environment-variables.md)
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:
```yaml
# ... 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:
```yaml
# ... 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:
```yaml
# ... 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 -gp socketio_port $$SOCKETIO_PORT;
environment:
DB_HOST: db
DB_PORT: "3306"
REDIS_CACHE: redis-cache:6379
REDIS_QUEUE: redis-queue: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 `--mariadb-user-host-login-scope=%` 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:
```yaml
# ... 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;
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 --mariadb-user-host-login-scope=% --admin-password=admin --db-root-password=admin --install-app erpnext --set-default frontend;
# ... removed for brevity
```

View File

@@ -1,34 +0,0 @@
Example: https://discuss.erpnext.com/t/sms-two-factor-authentication-otp-msg-change/47835
Above example needs following Dockerfile based patch
```Dockerfile
FROM frappe/erpnext-worker:v12.17.0
...
USER root
RUN sed -i -e "s/Your verification code is/আপনার লগইন কোড/g" /home/frappe/frappe-bench/apps/frappe/frappe/twofactor.py
USER frappe
...
```
Example for `nginx` image,
```Dockerfile
FROM frappe/erpnext-nginx:v13.27.0
# Hack to use Frappe/ERPNext offline.
RUN sed -i 's/navigator.onLine/navigator.onLine||true/' \
/usr/share/nginx/html/assets/js/desk.min.js \
/usr/share/nginx/html/assets/js/dialog.min.js \
/usr/share/nginx/html/assets/js/frappe-web.min.js
```
Alternatively copy the modified source code file directly over `/home/frappe/frappe-bench/apps/frappe/frappe/twofactor.py`
```Dockerfile
...
COPY twofactor.py /home/frappe/frappe-bench/apps/frappe/frappe/twofactor.py
...
```

View File

@@ -6,43 +6,64 @@ Remove the traefik service from docker-compose.yml
### Step 2 ### Step 2
Create nginx config file `/opt/nginx/conf/serve-8001.conf`: Add service for each port that needs to be exposed.
``` e.g. `port-site-1`, `port-site-2`, `port-site-3`.
server {
listen 8001;
server_name $http_host;
location / { ```yaml
# ... removed for brevity
rewrite ^(.+)/$ $1 permanent; services:
rewrite ^(.+)/index\.html$ $1 permanent; # ... removed for brevity
rewrite ^(.+)\.html$ $1 permanent; port-site-1:
image: frappe/erpnext:v14.11.1
proxy_set_header X-Frappe-Site-Name mysite.localhost; deploy:
proxy_set_header Host mysite.localhost; restart_policy:
proxy_pass http://frontend; condition: on-failure
} command:
} - nginx-entrypoint.sh
environment:
BACKEND: backend:8000
FRAPPE_SITE_NAME_HEADER: site1.local
SOCKETIO: websocket:9000
volumes:
- sites:/home/frappe/frappe-bench/sites
ports:
- "8080:8080"
port-site-2:
image: frappe/erpnext:v14.11.1
deploy:
restart_policy:
condition: on-failure
command:
- nginx-entrypoint.sh
environment:
BACKEND: backend:8000
FRAPPE_SITE_NAME_HEADER: site2.local
SOCKETIO: websocket:9000
volumes:
- sites:/home/frappe/frappe-bench/sites
ports:
- "8081:8080"
port-site-3:
image: frappe/erpnext:v14.11.1
deploy:
restart_policy:
condition: on-failure
command:
- nginx-entrypoint.sh
environment:
BACKEND: backend:8000
FRAPPE_SITE_NAME_HEADER: site3.local
SOCKETIO: websocket:9000
volumes:
- sites:/home/frappe/frappe-bench/sites
ports:
- "8082:8080"
``` ```
Notes: Notes:
- Replace the port with any port of choice e.g. `listen 4200;` - Above setup will expose `site1.local`, `site2.local`, `site3.local` on port `8080`, `8081`, `8082` respectively.
- Change `mysite.localhost` to site name - Change `site1.local` to site name to serve from bench.
- Repeat the server blocks for multiple ports and site names to get the effect of port based multi tenancy - Change the `BACKEND` and `SOCKETIO` environment variables as per your service names.
- For old images use `proxy_pass http://erpnext-nginx` instead of `proxy_pass http://frontend` - Make sure `sites:` volume is available as part of yaml.
### Step 3
Run the docker container
```shell
docker run --network=<project-name>_default \
-p 8001:8001 \
--volume=/opt/nginx/conf/serve-8001.conf:/etc/nginx/conf.d/default.conf -d nginx
```
Note: Change the volumes, network and ports as needed
With the above example configured site will be accessible on `http://localhost:8001`

View File

@@ -17,7 +17,7 @@ Copy the example docker environment file to `.env`:
cp example.env .env cp example.env .env
``` ```
Note: To know more about environment variable [read here](./images-and-compose-files.md#configuration). Set the necessary variables in the `.env` file. Note: To know more about environment variable [read here](./environment-variables.md). Set the necessary variables in the `.env` file.
## Generate docker-compose.yml for variety of setups ## Generate docker-compose.yml for variety of setups
@@ -40,8 +40,7 @@ Instead of `docker compose config`, you can directly use `docker compose up` to
### Setup Frappe without proxy and external MariaDB and Redis ### Setup Frappe without proxy and external MariaDB and Redis
In this case make sure you've set `DB_HOST`, `DB_PORT`, `REDIS_CACHE`, `REDIS_QUEUE` and `REDIS_SOCKETIO` In this case make sure you've set `DB_HOST`, `DB_PORT`, `REDIS_CACHE` and `REDIS_QUEUE` environment variables or the `configurator` will fail.
environment variables or the `configurator` will fail.
```sh ```sh
# Generate YAML # Generate YAML
@@ -53,14 +52,12 @@ docker compose --project-name <project-name> -f ~/gitops/docker-compose.yml up -
### Setup ERPNext with proxy and external MariaDB and Redis ### Setup ERPNext with proxy and external MariaDB and Redis
In this case make sure you've set `DB_HOST`, `DB_PORT`, `REDIS_CACHE`, `REDIS_QUEUE` and `REDIS_SOCKETIO` In this case make sure you've set `DB_HOST`, `DB_PORT`, `REDIS_CACHE` and `REDIS_QUEUE` environment variables or the `configurator` will fail.
environment variables or the `configurator` will fail.
```sh ```sh
# Generate YAML # Generate YAML
docker compose -f compose.yaml \ docker compose -f compose.yaml \
-f overrides/compose.proxy.yaml \ -f overrides/compose.proxy.yaml \
-f overrides/compose.erpnext.yaml \
config > ~/gitops/docker-compose.yml config > ~/gitops/docker-compose.yml
# Start containers # Start containers
@@ -69,6 +66,8 @@ docker compose --project-name <project-name> -f ~/gitops/docker-compose.yml up -
### Setup Frappe using containerized MariaDB and Redis with Letsencrypt certificates. ### Setup Frappe using containerized MariaDB and Redis with Letsencrypt certificates.
In this case make sure you've set `LETSENCRYPT_EMAIL` and `SITES` environment variables are set or certificates won't work.
```sh ```sh
# Generate YAML # Generate YAML
docker compose -f compose.yaml \ docker compose -f compose.yaml \
@@ -83,10 +82,11 @@ docker compose --project-name <project-name> -f ~/gitops/docker-compose.yml up -
### Setup ERPNext using containerized MariaDB and Redis with Letsencrypt certificates. ### Setup ERPNext using containerized MariaDB and Redis with Letsencrypt certificates.
In this case make sure you've set `LETSENCRYPT_EMAIL` and `SITES` environment variables are set or certificates won't work.
```sh ```sh
# Generate YAML # Generate YAML
docker compose -f compose.yaml \ docker compose -f compose.yaml \
-f overrides/compose.erpnext.yaml \
-f overrides/compose.mariadb.yaml \ -f overrides/compose.mariadb.yaml \
-f overrides/compose.redis.yaml \ -f overrides/compose.redis.yaml \
-f overrides/compose.https.yaml \ -f overrides/compose.https.yaml \
@@ -110,20 +110,22 @@ nano .env
# Pull new images # Pull new images
docker compose -f compose.yaml \ docker compose -f compose.yaml \
-f overrides/compose.erpnext.yaml \
# ... your other overrides # ... your other overrides
config > ~/gitops/docker-compose.yml config > ~/gitops/docker-compose.yml
# Pull images
docker compose --project-name <project-name> -f ~/gitops/docker-compose.yml pull docker compose --project-name <project-name> -f ~/gitops/docker-compose.yml pull
# Stop containers # Stop containers
docker compose --project-name <project-name> -f ~/gitops/docker-compose.yml down docker compose --project-name <project-name> -f ~/gitops/docker-compose.yml down
# Remove assets volume for repopulation
docker volume rm <name of assets volume>
# Restart containers # Restart containers
docker compose --project-name <project-name> -f ~/gitops/docker-compose.yml up -d docker compose --project-name <project-name> -f ~/gitops/docker-compose.yml up -d
``` ```
Note:
- pull and stop container commands can be skipped if immutable image tags are used
- `docker compose up -d` will pull new immutable tags if not found.
To migrate sites refer [site operations](./site-operations.md#migrate-site) To migrate sites refer [site operations](./site-operations.md#migrate-site)

226
docs/setup_for_linux_mac.md Normal file
View File

@@ -0,0 +1,226 @@
# How to install ERPNext on linux/mac using Frappe_docker ?
step1: clone the repo
```
git clone https://github.com/frappe/frappe_docker
```
step2: add platform: linux/amd64 to all services in the /pwd.yaml
here is the update pwd.yml file
```yml
version: "3"
services:
backend:
image: frappe/erpnext:v15
platform: linux/amd64
deploy:
restart_policy:
condition: on-failure
volumes:
- sites:/home/frappe/frappe-bench/sites
- logs:/home/frappe/frappe-bench/logs
configurator:
image: frappe/erpnext:v15
platform: linux/amd64
deploy:
restart_policy:
condition: none
entrypoint:
- bash
- -c
# add redis_socketio for backward compatibility
command:
- >
ls -1 apps > sites/apps.txt;
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_QUEUE";
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
SOCKETIO_PORT: "9000"
volumes:
- sites:/home/frappe/frappe-bench/sites
- logs:/home/frappe/frappe-bench/logs
create-site:
image: frappe/erpnext:v15
platform: linux/amd64
deploy:
restart_policy:
condition: none
volumes:
- sites:/home/frappe/frappe-bench/sites
- logs:/home/frappe/frappe-bench/logs
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;
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 --mariadb-user-host-login-scope=% --admin-password=admin --db-root-password=admin --install-app erpnext --set-default frontend;
db:
image: mariadb:10.6
platform: linux/amd64
healthcheck:
test: mysqladmin ping -h localhost --password=admin
interval: 1s
retries: 20
deploy:
restart_policy:
condition: on-failure
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
- --skip-character-set-client-handshake
- --skip-innodb-read-only-compressed # Temporary fix for MariaDB 10.6
environment:
MYSQL_ROOT_PASSWORD: admin
volumes:
- db-data:/var/lib/mysql
frontend:
image: frappe/erpnext:v15
platform: linux/amd64
depends_on:
- websocket
deploy:
restart_policy:
condition: on-failure
command:
- nginx-entrypoint.sh
environment:
BACKEND: backend:8000
FRAPPE_SITE_NAME_HEADER: frontend
SOCKETIO: websocket:9000
UPSTREAM_REAL_IP_ADDRESS: 127.0.0.1
UPSTREAM_REAL_IP_HEADER: X-Forwarded-For
UPSTREAM_REAL_IP_RECURSIVE: "off"
PROXY_READ_TIMEOUT: 120
CLIENT_MAX_BODY_SIZE: 50m
volumes:
- sites:/home/frappe/frappe-bench/sites
- logs:/home/frappe/frappe-bench/logs
ports:
- "8080:8080"
queue-long:
image: frappe/erpnext:v15
platform: linux/amd64
deploy:
restart_policy:
condition: on-failure
command:
- bench
- worker
- --queue
- long,default,short
volumes:
- sites:/home/frappe/frappe-bench/sites
- logs:/home/frappe/frappe-bench/logs
queue-short:
image: frappe/erpnext:v15
platform: linux/amd64
deploy:
restart_policy:
condition: on-failure
command:
- bench
- worker
- --queue
- short,default
volumes:
- sites:/home/frappe/frappe-bench/sites
- logs:/home/frappe/frappe-bench/logs
redis-queue:
image: redis:6.2-alpine
platform: linux/amd64
deploy:
restart_policy:
condition: on-failure
volumes:
- redis-queue-data:/data
redis-cache:
image: redis:6.2-alpine
platform: linux/amd64
deploy:
restart_policy:
condition: on-failure
scheduler:
image: frappe/erpnext:v15
platform: linux/amd64
deploy:
restart_policy:
condition: on-failure
command:
- bench
- schedule
volumes:
- sites:/home/frappe/frappe-bench/sites
- logs:/home/frappe/frappe-bench/logs
websocket:
image: frappe/erpnext:v15
platform: linux/amd64
deploy:
restart_policy:
condition: on-failure
command:
- node
- /home/frappe/frappe-bench/apps/frappe/socketio.js
volumes:
- sites:/home/frappe/frappe-bench/sites
- logs:/home/frappe/frappe-bench/logs
volumes:
db-data:
redis-queue-data:
sites:
logs:
```
step3: run the docker
```
cd frappe_docker
```
```
docker-compose -f ./pwd.yml up
```
---
Wait for couple of minutes.
Open localhost:8080

View File

@@ -0,0 +1,38 @@
# Single Compose Setup
This setup is a very simple single compose file that does everything to start required services and a frappe-bench. It is used to start play with docker instance with a site. The file is located in the root of repo and named `pwd.yml`.
## Services
### frappe-bench components
- backend, serves gunicorn backend
- frontend, serves static assets through nginx frontend reverse proxies websocket and gunicorn.
- queue-long, long default and short rq worker.
- queue-short, default and short rq worker.
- schedule, event scheduler.
- websocket, socketio websocket for realtime communication.
### Run once configuration
- configurator, configures `common_site_config.json` to set db and redis hosts.
- create-site, creates one site to serve as default site for the frappe-bench.
### Service dependencies
- db, mariadb, container with frappe specific configuration.
- redis-cache, redis for cache data.
- redis-queue, redis for rq data and pub/sub.
## Volumes
- sites: Volume for bench data. Common config, all sites, all site configs and site files will be stored here.
- logs: Volume for bench logs. all process logs are dumped here. No need to mount it. Each container will create a temporary volume for logs if not specified.
## Adaptation
If you understand containers use the `pwd.yml` as a reference to build more complex setup like, single server example, Docker Swarm stack, Kubernetes Helm chart, etc.
This serves only site called `frontend` through the nginx. `FRAPPE_SITE_NAME_HEADER` is set to `frontend` and a default site called `frontend` is created.
Change the `$$host` will allow container to accept any host header and serve that site. To escape `$` in compose yaml use it like `$$`. To unset default site remove `currentsite.txt` file from `sites` directory.

View File

@@ -41,7 +41,7 @@ chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
### Prepare ### Prepare
Clone `frappe_docker` repo for the needed YAMLs and change the current working director of you shell to the cloned repo. Clone `frappe_docker` repo for the needed YAMLs and change the current working directory of your shell to the cloned repo.
```shell ```shell
git clone https://github.com/frappe/frappe_docker git clone https://github.com/frappe/frappe_docker
@@ -65,7 +65,7 @@ Create a file called `traefik.env` in `~/gitops`
```shell ```shell
echo 'TRAEFIK_DOMAIN=traefik.example.com' > ~/gitops/traefik.env echo 'TRAEFIK_DOMAIN=traefik.example.com' > ~/gitops/traefik.env
echo 'EMAIL=admin@example.com' >> ~/gitops/traefik.env echo 'EMAIL=admin@example.com' >> ~/gitops/traefik.env
echo 'HASHED_PASSWORD='$(openssl passwd -apr1 changeit | sed 's/\$/\\\$/g') >> ~/gitops/traefik.env echo "HASHED_PASSWORD='$(openssl passwd -apr1 changeit)'" >> ~/gitops/traefik.env
``` ```
Note: Note:
@@ -82,18 +82,20 @@ EMAIL=admin@example.com
HASHED_PASSWORD=$apr1$K.4gp7RT$tj9R2jHh0D4Gb5o5fIAzm/ HASHED_PASSWORD=$apr1$K.4gp7RT$tj9R2jHh0D4Gb5o5fIAzm/
``` ```
If Container does not deploy put the HASHED_PASSWORD in ''.
Deploy the traefik container with letsencrypt SSL Deploy the traefik container with letsencrypt SSL
```shell ```shell
docker compose --project-name traefik \ docker compose --project-name traefik \
--env-file ~/gitops/traefik.env \ --env-file ~/gitops/traefik.env \
-f docs/compose/compose.traefik.yaml \ -f overrides/compose.traefik.yaml \
-f docs/compose/compose.traefik-ssl.yaml up -d -f overrides/compose.traefik-ssl.yaml up -d
``` ```
This will make the traefik dashboard available on `traefik.example.com` and all certificates will reside in `/data/traefik/certificates` on host filesystem. This will make the traefik dashboard available on `traefik.example.com` and all certificates will reside in the Docker volume `cert-data`.
For LAN setup deploy the traefik container without overriding `docs/compose/compose.traefik-ssl.yaml`. For LAN setup deploy the traefik container without overriding `overrides/compose.traefik-ssl.yaml`.
### Install MariaDB ### Install MariaDB
@@ -120,7 +122,7 @@ Note: Change the password from `changeit` to more secure one.
Deploy the mariadb container Deploy the mariadb container
```shell ```shell
docker compose --project-name mariadb --env-file ~/gitops/mariadb.env -f docs/compose/compose.mariadb-shared.yaml up -d docker compose --project-name mariadb --env-file ~/gitops/mariadb.env -f overrides/compose.mariadb-shared.yaml up -d
``` ```
This will make `mariadb-database` service available under `mariadb-network`. Data will reside in `/data/mariadb`. This will make `mariadb-database` service available under `mariadb-network`. Data will reside in `/data/mariadb`.
@@ -138,8 +140,8 @@ cp example.env ~/gitops/erpnext-one.env
sed -i 's/DB_PASSWORD=123/DB_PASSWORD=changeit/g' ~/gitops/erpnext-one.env sed -i 's/DB_PASSWORD=123/DB_PASSWORD=changeit/g' ~/gitops/erpnext-one.env
sed -i 's/DB_HOST=/DB_HOST=mariadb-database/g' ~/gitops/erpnext-one.env sed -i 's/DB_HOST=/DB_HOST=mariadb-database/g' ~/gitops/erpnext-one.env
sed -i 's/DB_PORT=/DB_PORT=3306/g' ~/gitops/erpnext-one.env sed -i 's/DB_PORT=/DB_PORT=3306/g' ~/gitops/erpnext-one.env
sed -i 's/SITES=`erp.example.com`/SITES=\`one.example.com\`,\`two.example.com\`/g' ~/gitops/erpnext-one.env
echo 'ROUTER=erpnext-one' >> ~/gitops/erpnext-one.env echo 'ROUTER=erpnext-one' >> ~/gitops/erpnext-one.env
echo "SITES=\`one.example.com\`,\`two.example.com\`" >> ~/gitops/erpnext-one.env
echo "BENCH_NETWORK=erpnext-one" >> ~/gitops/erpnext-one.env echo "BENCH_NETWORK=erpnext-one" >> ~/gitops/erpnext-one.env
``` ```
@@ -155,10 +157,9 @@ Create a yaml file called `erpnext-one.yaml` in `~/gitops` directory:
docker compose --project-name erpnext-one \ docker compose --project-name erpnext-one \
--env-file ~/gitops/erpnext-one.env \ --env-file ~/gitops/erpnext-one.env \
-f compose.yaml \ -f compose.yaml \
-f overrides/compose.erpnext.yaml \
-f overrides/compose.redis.yaml \ -f overrides/compose.redis.yaml \
-f docs/compose/compose.multi-bench.yaml \ -f overrides/compose.multi-bench.yaml \
-f docs/compose/compose.multi-bench-ssl.yaml config > ~/gitops/erpnext-one.yaml -f overrides/compose.multi-bench-ssl.yaml config > ~/gitops/erpnext-one.yaml
``` ```
For LAN setup do not override `compose.multi-bench-ssl.yaml`. For LAN setup do not override `compose.multi-bench-ssl.yaml`.
@@ -176,7 +177,7 @@ Create sites `one.example.com` and `two.example.com`:
```shell ```shell
# one.example.com # one.example.com
docker compose --project-name erpnext-one exec backend \ docker compose --project-name erpnext-one exec backend \
bench new-site one.example.com --mariadb-root-password changeit --install-app erpnext --admin-password changeit bench new-site --mariadb-user-host-login-scope=% --db-root-password changeit --install-app erpnext --admin-password changeit one.example.com
``` ```
You can stop here and have a single bench single site setup complete. Continue to add one more site to the current bench. You can stop here and have a single bench single site setup complete. Continue to add one more site to the current bench.
@@ -184,7 +185,7 @@ You can stop here and have a single bench single site setup complete. Continue t
```shell ```shell
# two.example.com # two.example.com
docker compose --project-name erpnext-one exec backend \ docker compose --project-name erpnext-one exec backend \
bench new-site two.example.com --mariadb-root-password changeit --install-app erpnext --admin-password changeit bench new-site --mariadb-user-host-login-scope=% --db-root-password changeit --install-app erpnext --admin-password changeit two.example.com
``` ```
#### Create second bench #### Create second bench
@@ -217,10 +218,9 @@ Create a yaml file called `erpnext-two.yaml` in `~/gitops` directory:
docker compose --project-name erpnext-two \ docker compose --project-name erpnext-two \
--env-file ~/gitops/erpnext-two.env \ --env-file ~/gitops/erpnext-two.env \
-f compose.yaml \ -f compose.yaml \
-f overrides/compose.erpnext.yaml \
-f overrides/compose.redis.yaml \ -f overrides/compose.redis.yaml \
-f docs/compose/compose.multi-bench.yaml \ -f overrides/compose.multi-bench.yaml \
-f docs/compose/compose.multi-bench-ssl.yaml config > ~/gitops/erpnext-two.yaml -f overrides/compose.multi-bench-ssl.yaml config > ~/gitops/erpnext-two.yaml
``` ```
Use the above command after any changes are made to `erpnext-two.env` file to regenerate `~/gitops/erpnext-two.yaml`. e.g. after changing version to migrate the bench. Use the above command after any changes are made to `erpnext-two.env` file to regenerate `~/gitops/erpnext-two.yaml`. e.g. after changing version to migrate the bench.
@@ -236,10 +236,10 @@ Create sites `three.example.com` and `four.example.com`:
```shell ```shell
# three.example.com # three.example.com
docker compose --project-name erpnext-two exec backend \ docker compose --project-name erpnext-two exec backend \
bench new-site three.example.com --mariadb-root-password changeit --install-app erpnext --admin-password changeit bench new-site --mariadb-user-host-login-scope=% --db-root-password changeit --install-app erpnext --admin-password changeit three.example.com
# four.example.com # four.example.com
docker compose --project-name erpnext-two exec backend \ docker compose --project-name erpnext-two exec backend \
bench new-site four.example.com --mariadb-root-password changeit --install-app erpnext --admin-password changeit bench new-site --mariadb-user-host-login-scope=% --db-root-password changeit --install-app erpnext --admin-password changeit four.example.com
``` ```
#### Create custom domain to existing site #### Create custom domain to existing site
@@ -271,8 +271,8 @@ Generate yaml to reverse proxy:
```shell ```shell
docker compose --project-name custom-one-example \ docker compose --project-name custom-one-example \
--env-file ~/gitops/custom-one-example.env \ --env-file ~/gitops/custom-one-example.env \
-f docs/compose/compose.custom-domain.yaml \ -f overrides/compose.custom-domain.yaml \
-f docs/compose/compose.custom-domain-ssl.yaml config > ~/gitops/custom-one-example.yaml -f overrides/compose.custom-domain-ssl.yaml config > ~/gitops/custom-one-example.yaml
``` ```
For LAN setup do not override `compose.custom-domain-ssl.yaml`. For LAN setup do not override `compose.custom-domain-ssl.yaml`.

View File

@@ -7,9 +7,10 @@
Note: Note:
- Wait for the `db` service to start and `configurator` to exit before trying to create a new site. Usually this takes up to 10 seconds. - Wait for the `db` service to start and `configurator` to exit before trying to create a new site. Usually this takes up to 10 seconds.
- Also you have to pass `-p <project_name>` if `-p` passed previously eg. `docker-compose -p <project_name> exec (rest of the command)`.
```sh ```sh
docker-compose exec backend bench new-site <site-name> --mariadb-root-password <db-password> --admin-password <admin-password> docker-compose exec backend bench new-site --mariadb-user-host-login-scope=% --db-root-password <db-password> --admin-password <admin-password> <site-name>
``` ```
If you need to install some app, specify `--install-app`. To see all options, just run `bench new-site --help`. If you need to install some app, specify `--install-app`. To see all options, just run `bench new-site --help`.
@@ -24,7 +25,7 @@ docker-compose exec backend bench set-config -g root_password <root-password>
Also command is slightly different: Also command is slightly different:
```sh ```sh
docker-compose exec backend bench new-site <site-name> --db-type postgres --admin-password <admin-password> docker-compose exec backend bench new-site --mariadb-user-host-login-scope=% --db-type postgres --admin-password <admin-password> <site-name>
``` ```
## Push backup to S3 storage ## Push backup to S3 storage

View File

@@ -0,0 +1,25 @@
# Accessing ERPNext through https on local deployment
- ERPNext container deployment can be accessed through https easily using Caddy web server, Caddy will be used as reverse proxy and forward traffics to the frontend container.
### Prerequisites
- Caddy
- Adding a domain name to hosts file
#### Installation of caddy webserver
- Follow the official Caddy website for the installation guide https://caddyserver.com/docs/install
After completing the installation open the configuration file of Caddy ( You find the config file in ` /etc/caddy/Caddyfile`), add the following configuration to forward traffics to the ERPNext frontend container
```js
erp.localdev.net {
tls internal
reverse_proxy localhost:8085 {
}
}
```
- Caddy's root certificate must be added to other computers if computers from different networks access the ERPNext through https.

View File

@@ -1,13 +1,21 @@
1. [Fixing MariaDB issues after rebuilding the container](#fixing-mariadb-issues-after-rebuilding-the-container) 1. [Fixing MariaDB issues after rebuilding the container](#fixing-mariadb-issues-after-rebuilding-the-container)
1. [Letsencrypt companion not working](#letsencrypt-companion-not-working)
1. [docker-compose does not recognize variables from `.env` file](#docker-compose-does-not-recognize-variables-from-env-file) 1. [docker-compose does not recognize variables from `.env` file](#docker-compose-does-not-recognize-variables-from-env-file)
1. [Windows Based Installation](#windows-based-installation) 1. [Windows Based Installation](#windows-based-installation)
### Fixing MariaDB issues after rebuilding the container ### Fixing MariaDB issues after rebuilding the container
For any reason after rebuilding the container if you are not be able to access MariaDB correctly with the previous configuration. Follow these instructions. For any reason after rebuilding the container if you are not be able to access MariaDB correctly (i.e. `Access denied for user [...]`) with the previous configuration. Follow these instructions.
The parameter `'db_name'@'%'` needs to be set in MariaDB and permission to the site database suitably assigned to the user. First test for network issues. Manually connect to the database through the `backend` container:
```
docker exec -it frappe_docker-backend-1 bash
mysql -uroot -padmin -hdb
```
Replace `root` with the database root user name, `admin` with the root password, and `db` with the service name specified in the docker-compose `.yml` configuration file. If the connection to the database is successful, then the network configuration is correct and you can proceed to the next step. Otherwise, modify the docker-compose `.yml` configuration file, in the `configurator` service's `environment` section, to use the container names (`frappe_docker-db-1`, `frappe_docker-redis-cache-1`, `frappe_docker-redis-queue-1` or as otherwise shown with `docker ps`) instead of the service names and rebuild the containers.
Then, the parameter `'db_name'@'%'` needs to be set in MariaDB and permission to the site database suitably assigned to the user.
This step has to be repeated for all sites available under the current bench. This step has to be repeated for all sites available under the current bench.
Example shows the queries to be executed for site `localhost` Example shows the queries to be executed for site `localhost`
@@ -23,35 +31,49 @@ and take note of the parameters `db_name` and `db_password`.
Enter MariaDB Interactive shell: Enter MariaDB Interactive shell:
```shell ```shell
mysql -uroot -p123 -hmariadb mysql -uroot -padmin -hdb
``` ```
Execute following queries replacing `db_name` and `db_password` with the values found in site_config.json. The parameter `'db_name'@'%'` must not be duplicated. Verify that it is unique with the command:
```
SELECT User, Host FROM mysql.user;
```
Delete duplicated entries, if found, with the following:
```
DROP USER 'db_name'@'host';
```
Modify permissions by executing following queries replacing `db_name` and `db_password` with the values found in site_config.json.
```sql ```sql
UPDATE mysql.user SET Host = '%' where User = 'db_name'; FLUSH PRIVILEGES; -- if there is no user created already first try to created it using the next command
-- CREATE USER 'db_name'@'%' IDENTIFIED BY 'your_password';
-- skip the upgrade command below if you use the create command above
UPDATE mysql.global_priv SET Host = '%' where User = 'db_name'; FLUSH PRIVILEGES;
SET PASSWORD FOR 'db_name'@'%' = PASSWORD('db_password'); FLUSH PRIVILEGES; SET PASSWORD FOR 'db_name'@'%' = PASSWORD('db_password'); FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON `db_name`.* TO 'db_name'@'%'; FLUSH PRIVILEGES; GRANT ALL PRIVILEGES ON `db_name`.* TO 'db_name'@'%' IDENTIFIED BY 'db_password' WITH GRANT OPTION; FLUSH PRIVILEGES;
EXIT; EXIT;
``` ```
Note: For MariaDB 10.4 and above use `mysql.global_priv` instead of `mysql.user`. Note: For MariaDB 10.3 and older use `mysql.user` instead of `mysql.global_priv`.
### Letsencrypt companion not working
- Nginx Letsencrypt Companion needs to be setup before starting ERPNext services.
- Are domain names in `SITES` variable correct?
- Is DNS record configured? `A Name` record needs to point to Public IP of server.
- Try Restarting containers.
### docker-compose does not recognize variables from `.env` file ### docker-compose does not recognize variables from `.env` file
If you are using old version of `docker-compose` the .env file needs to be located in directory from where the docker-compose command is executed. There may also be difference in official `docker-compose` and the one packaged by distro. If you are using old version of `docker-compose` the .env file needs to be located in directory from where the docker-compose command is executed. There may also be difference in official `docker-compose` and the one packaged by distro. Use `--env-file=.env` if available to explicitly specify the path to file.
### Windows Based Installation ### Windows Based Installation
- Set environment variable `COMPOSE_CONVERT_WINDOWS_PATHS` e.g. `set COMPOSE_CONVERT_WINDOWS_PATHS=1` - Set environment variable `COMPOSE_CONVERT_WINDOWS_PATHS` e.g. `set COMPOSE_CONVERT_WINDOWS_PATHS=1`
- Make the `frappe-mariadb.cnf` read-only for mariadb container to pick it up. - While using docker machine, port-forward the ports of VM to ports of host machine. (ports 8080/8000/9000)
- While using docker machine, port-forward the port 80 of VM to port 80 of host machine
- Name all the sites ending with `.localhost`. and access it via browser locally. e.g. `http://site1.localhost` - Name all the sites ending with `.localhost`. and access it via browser locally. e.g. `http://site1.localhost`
- related issue comment https://github.com/frappe/frappe_docker/issues/448#issuecomment-851723912
### Redo installation
- If you have made changes and just want to start over again (abandoning all changes), remove all docker
- containers
- images
- volumes
- Install a fresh

1
encoded-apps-b64.txt Normal file
View File

@@ -0,0 +1 @@
WwogICAgewogICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2ZyYXBwZS9lcnBuZXh0IiwKICAgICAgICAiYnJhbmNoIjogInZlcnNpb24tMTUiCiAgICB9LAogICAgewogICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2ZyYXBwZS9ocm1zIiwKICAgICAgICAiYnJhbmNoIjogInZlcnNpb24tMTUiCiAgICB9LAogICAgewogICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2ZyYXBwZS9oZWxwZGVzayIsCiAgICAgICAgImJyYW5jaCI6ICJtYWluIgogICAgfSwKICAgIHsKICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9mcmFwcGUvcGF5bWVudHMiLAogICAgICAgICJicmFuY2giOiAidmVyc2lvbi0xNSIKICAgIH0KXQ==

View File

@@ -1,12 +1,12 @@
# Reference: https://github.com/frappe/frappe_docker/blob/main/docs/images-and-compose-files.md # Reference: https://github.com/frappe/frappe_docker/blob/main/docs/environment-variables.md
FRAPPE_VERSION=v14.22.0 ERPNEXT_VERSION=v15.83.0
# Only with ERPNext override
ERPNEXT_VERSION=v14.12.1
DB_PASSWORD=123 DB_PASSWORD=123
#Only if you use docker secrets for the db password
DB_PASSWORD_SECRETS_FILE=
# Only if you use external database # Only if you use external database
DB_HOST= DB_HOST=
DB_PORT= DB_PORT=
@@ -14,10 +14,9 @@ DB_PORT=
# Only if you use external Redis # Only if you use external Redis
REDIS_CACHE= REDIS_CACHE=
REDIS_QUEUE= REDIS_QUEUE=
REDIS_SOCKETIO=
# Only with HTTPS override # Only with HTTPS override
LETSENCRYPT_EMAIL=mail@example.com LETSENCRYPT_EMAIL=admin@khaeli.com
# These environment variables are not required. # These environment variables are not required.
@@ -27,6 +26,9 @@ LETSENCRYPT_EMAIL=mail@example.com
# and do want to access it by `127.0.0.1` host. Than you would set this variable to `mysite`. # and do want to access it by `127.0.0.1` host. Than you would set this variable to `mysite`.
FRAPPE_SITE_NAME_HEADER= FRAPPE_SITE_NAME_HEADER=
# Default value is `8080`.
HTTP_PUBLISH_PORT=
# Default value is `127.0.0.1`. Set IP address as our trusted upstream address. # Default value is `127.0.0.1`. Set IP address as our trusted upstream address.
UPSTREAM_REAL_IP_ADDRESS= UPSTREAM_REAL_IP_ADDRESS=
@@ -41,8 +43,13 @@ UPSTREAM_REAL_IP_RECURSIVE=
# All Values Allowed by nginx proxy_read_timeout are allowed, default value is 120s # All Values Allowed by nginx proxy_read_timeout are allowed, default value is 120s
# Useful if you have longrunning print formats or slow loading sites # Useful if you have longrunning print formats or slow loading sites
PROXY_READ_TIMOUT= PROXY_READ_TIMEOUT=
# All Values allowed by nginx client_max_body_size are allowed, default value is 50m # All Values allowed by nginx client_max_body_size are allowed, default value is 50m
# Necessary if the upload limit in the frappe application is increased # Necessary if the upload limit in the frappe application is increased
CLIENT_MAX_BODY_SIZE= CLIENT_MAX_BODY_SIZE=
# List of sites for letsencrypt certificates quoted with backtick (`) and separated by comma (,)
# More https://doc.traefik.io/traefik/routing/routers/#rule
# About acme https://doc.traefik.io/traefik/https/acme/#domain-definition
SITES=`erp.khaeli.com`,`hr.khaeli.com`,`helpdesk.khaeli.com`,`payments.khaeli.com`

View File

@@ -1,9 +1,9 @@
FROM debian:bullseye-slim as bench FROM debian:bookworm-slim AS bench
LABEL author=frappé LABEL author=frappé
ARG GIT_REPO=https://github.com/frappe/bench.git ARG GIT_REPO=https://github.com/frappe/bench.git
ARG GIT_BRANCH=develop ARG GIT_BRANCH=v5.x
RUN apt-get update \ RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y \ && DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y \
@@ -18,6 +18,11 @@ RUN apt-get update \
fonts-cantarell \ fonts-cantarell \
xfonts-75dpi \ xfonts-75dpi \
xfonts-base \ xfonts-base \
# weasyprint dependencies
libpango-1.0-0 \
libharfbuzz0b \
libpangoft2-1.0-0 \
libpangocairo-1.0-0 \
# to work inside the container # to work inside the container
locales \ locales \
build-essential \ build-essential \
@@ -42,6 +47,7 @@ RUN apt-get update \
libsasl2-dev \ libsasl2-dev \
libtiff5-dev \ libtiff5-dev \
libwebp-dev \ libwebp-dev \
pkg-config \
redis-tools \ redis-tools \
rlwrap \ rlwrap \
tk8.6-dev \ tk8.6-dev \
@@ -64,16 +70,18 @@ RUN apt-get update \
xz-utils \ xz-utils \
tk-dev \ tk-dev \
liblzma-dev \ liblzma-dev \
file \
&& rm -rf /var/lib/apt/lists/* && rm -rf /var/lib/apt/lists/*
RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen \ RUN sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen \
&& dpkg-reconfigure --frontend=noninteractive locales && dpkg-reconfigure --frontend=noninteractive locales
# Detect arch and install wkhtmltopdf # Detect arch and install wkhtmltopdf
ENV WKHTMLTOPDF_VERSION 0.12.6-1 ARG WKHTMLTOPDF_VERSION=0.12.6.1-3
ARG WKHTMLTOPDF_DISTRO=bookworm
RUN if [ "$(uname -m)" = "aarch64" ]; then export ARCH=arm64; fi \ RUN if [ "$(uname -m)" = "aarch64" ]; then export ARCH=arm64; fi \
&& if [ "$(uname -m)" = "x86_64" ]; then export ARCH=amd64; fi \ && if [ "$(uname -m)" = "x86_64" ]; then export ARCH=amd64; fi \
&& downloaded_file=wkhtmltox_$WKHTMLTOPDF_VERSION.buster_${ARCH}.deb \ && downloaded_file=wkhtmltox_${WKHTMLTOPDF_VERSION}.${WKHTMLTOPDF_DISTRO}_${ARCH}.deb \
&& wget -q https://github.com/wkhtmltopdf/packaging/releases/download/$WKHTMLTOPDF_VERSION/$downloaded_file \ && wget -q https://github.com/wkhtmltopdf/packaging/releases/download/$WKHTMLTOPDF_VERSION/$downloaded_file \
&& dpkg -i $downloaded_file \ && dpkg -i $downloaded_file \
&& rm $downloaded_file && rm $downloaded_file
@@ -89,25 +97,25 @@ USER frappe
WORKDIR /home/frappe WORKDIR /home/frappe
# Install Python via pyenv # Install Python via pyenv
ENV PYTHON_VERSION_V13=3.9.9 ENV PYTHON_VERSION_V14=3.10.13
ENV PYTHON_VERSION=3.10.5 ENV PYTHON_VERSION=3.11.6
ENV PYENV_ROOT /home/frappe/.pyenv ENV PYENV_ROOT=/home/frappe/.pyenv
ENV PATH $PYENV_ROOT/shims:$PYENV_ROOT/bin:$PATH ENV PATH=$PYENV_ROOT/shims:$PYENV_ROOT/bin:$PATH
# From https://github.com/pyenv/pyenv#basic-github-checkout # From https://github.com/pyenv/pyenv#basic-github-checkout
RUN git clone --depth 1 https://github.com/pyenv/pyenv.git .pyenv \ RUN git clone --depth 1 https://github.com/pyenv/pyenv.git .pyenv \
&& pyenv install $PYTHON_VERSION_V13 \ && pyenv install $PYTHON_VERSION_V14 \
&& pyenv install $PYTHON_VERSION \ && pyenv install $PYTHON_VERSION \
&& PYENV_VERSION=$PYTHON_VERSION_V13 pip install --no-cache-dir virtualenv \ && PYENV_VERSION=$PYTHON_VERSION_V14 pip install --no-cache-dir virtualenv \
&& PYENV_VERSION=$PYTHON_VERSION pip install --no-cache-dir virtualenv \ && PYENV_VERSION=$PYTHON_VERSION pip install --no-cache-dir virtualenv \
&& pyenv global $PYTHON_VERSION $PYTHON_VERSION_v13 \ && pyenv global $PYTHON_VERSION $PYTHON_VERSION_v14 \
&& sed -Ei -e '/^([^#]|$)/ {a export PYENV_ROOT="/home/frappe/.pyenv" a export PATH="$PYENV_ROOT/bin:$PATH" a ' -e ':a' -e '$!{n;ba};}' ~/.profile \ && sed -Ei -e '/^([^#]|$)/ {a export PYENV_ROOT="/home/frappe/.pyenv" a export PATH="$PYENV_ROOT/bin:$PATH" a ' -e ':a' -e '$!{n;ba};}' ~/.profile \
&& echo 'eval "$(pyenv init --path)"' >>~/.profile \ && echo 'eval "$(pyenv init --path)"' >>~/.profile \
&& echo 'eval "$(pyenv init -)"' >>~/.bashrc && echo 'eval "$(pyenv init -)"' >>~/.bashrc
# Clone and install bench in the local user home directory # Clone and install bench in the local user home directory
# For development, bench source is located in ~/.bench # For development, bench source is located in ~/.bench
ENV PATH /home/frappe/.local/bin:$PATH ENV PATH=/home/frappe/.local/bin:$PATH
# Skip editable-bench warning # Skip editable-bench warning
# https://github.com/frappe/bench/commit/20560c97c4246b2480d7358c722bc9ad13606138 # https://github.com/frappe/bench/commit/20560c97c4246b2480d7358c722bc9ad13606138
RUN git clone ${GIT_REPO} --depth 1 -b ${GIT_BRANCH} .bench \ RUN git clone ${GIT_REPO} --depth 1 -b ${GIT_BRANCH} .bench \
@@ -116,12 +124,12 @@ RUN git clone ${GIT_REPO} --depth 1 -b ${GIT_BRANCH} .bench \
&& echo "export BENCH_DEVELOPER=1" >>/home/frappe/.bashrc && echo "export BENCH_DEVELOPER=1" >>/home/frappe/.bashrc
# Install Node via nvm # Install Node via nvm
ENV NODE_VERSION_14=14.19.3 ENV NODE_VERSION_14=16.20.2
ENV NODE_VERSION=16.18.0 ENV NODE_VERSION=20.19.2
ENV NVM_DIR /home/frappe/.nvm ENV NVM_DIR=/home/frappe/.nvm
ENV PATH ${NVM_DIR}/versions/node/v${NODE_VERSION}/bin/:${PATH} ENV PATH=${NVM_DIR}/versions/node/v${NODE_VERSION}/bin/:${PATH}
RUN wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash \ RUN wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash \
&& . ${NVM_DIR}/nvm.sh \ && . ${NVM_DIR}/nvm.sh \
&& nvm install ${NODE_VERSION_14} \ && nvm install ${NODE_VERSION_14} \
&& nvm use v${NODE_VERSION_14} \ && nvm use v${NODE_VERSION_14} \
@@ -138,7 +146,7 @@ RUN wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh |
EXPOSE 8000-8005 9000-9005 6787 EXPOSE 8000-8005 9000-9005 6787
FROM bench as bench-test FROM bench AS bench-test
# Print version and verify bashrc is properly sourced so that everything works # Print version and verify bashrc is properly sourced so that everything works
# in the interactive shell and Dockerfile # in the interactive shell and Dockerfile

159
images/custom/Containerfile Normal file
View File

@@ -0,0 +1,159 @@
ARG PYTHON_VERSION=3.11.6
ARG DEBIAN_BASE=bookworm
FROM python:${PYTHON_VERSION}-slim-${DEBIAN_BASE} AS base
COPY resources/nginx-template.conf /templates/nginx/frappe.conf.template
COPY resources/nginx-entrypoint.sh /usr/local/bin/nginx-entrypoint.sh
ARG WKHTMLTOPDF_VERSION=0.12.6.1-3
ARG WKHTMLTOPDF_DISTRO=bookworm
ARG NODE_VERSION=20.19.2
ENV NVM_DIR=/home/frappe/.nvm
ENV PATH=${NVM_DIR}/versions/node/v${NODE_VERSION}/bin/:${PATH}
RUN useradd -ms /bin/bash frappe \
&& apt-get update \
&& apt-get install --no-install-recommends -y \
curl \
git \
vim \
nginx \
gettext-base \
file \
# weasyprint dependencies
libpango-1.0-0 \
libharfbuzz0b \
libpangoft2-1.0-0 \
libpangocairo-1.0-0 \
# For backups
restic \
gpg \
# MariaDB
mariadb-client \
less \
# Postgres
libpq-dev \
postgresql-client \
# For healthcheck
wait-for-it \
jq \
# NodeJS
&& mkdir -p ${NVM_DIR} \
&& curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash \
&& . ${NVM_DIR}/nvm.sh \
&& nvm install ${NODE_VERSION} \
&& nvm use v${NODE_VERSION} \
&& npm install -g yarn \
&& nvm alias default v${NODE_VERSION} \
&& rm -rf ${NVM_DIR}/.cache \
&& echo 'export NVM_DIR="/home/frappe/.nvm"' >>/home/frappe/.bashrc \
&& echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm' >>/home/frappe/.bashrc \
&& echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion' >>/home/frappe/.bashrc \
# Install wkhtmltopdf with patched qt
&& if [ "$(uname -m)" = "aarch64" ]; then export ARCH=arm64; fi \
&& if [ "$(uname -m)" = "x86_64" ]; then export ARCH=amd64; fi \
&& downloaded_file=wkhtmltox_${WKHTMLTOPDF_VERSION}.${WKHTMLTOPDF_DISTRO}_${ARCH}.deb \
&& curl -sLO https://github.com/wkhtmltopdf/packaging/releases/download/$WKHTMLTOPDF_VERSION/$downloaded_file \
&& apt-get install -y ./$downloaded_file \
&& rm $downloaded_file \
# Clean up
&& rm -rf /var/lib/apt/lists/* \
&& rm -fr /etc/nginx/sites-enabled/default \
&& pip3 install frappe-bench \
# Fixes for non-root nginx and logs to stdout
&& sed -i '/user www-data/d' /etc/nginx/nginx.conf \
&& ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.log \
&& touch /run/nginx.pid \
&& chown -R frappe:frappe /etc/nginx/conf.d \
&& chown -R frappe:frappe /etc/nginx/nginx.conf \
&& chown -R frappe:frappe /var/log/nginx \
&& chown -R frappe:frappe /var/lib/nginx \
&& chown -R frappe:frappe /run/nginx.pid \
&& chmod 755 /usr/local/bin/nginx-entrypoint.sh \
&& chmod 644 /templates/nginx/frappe.conf.template
FROM base AS builder
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y \
# For frappe framework
wget \
#for building arm64 binaries
libcairo2-dev \
libpango1.0-dev \
libjpeg-dev \
libgif-dev \
librsvg2-dev \
# For psycopg2
libpq-dev \
# Other
libffi-dev \
liblcms2-dev \
libldap2-dev \
libmariadb-dev \
libsasl2-dev \
libtiff5-dev \
libwebp-dev \
pkg-config \
redis-tools \
rlwrap \
tk8.6-dev \
cron \
# For pandas
gcc \
build-essential \
libbz2-dev \
&& rm -rf /var/lib/apt/lists/*
# apps.json includes
ARG APPS_JSON_BASE64
RUN if [ -n "${APPS_JSON_BASE64}" ]; then \
mkdir /opt/frappe && echo "${APPS_JSON_BASE64}" | base64 -d > /opt/frappe/apps.json; \
fi
USER frappe
ARG FRAPPE_BRANCH=version-15
ARG FRAPPE_PATH=https://github.com/frappe/frappe
RUN export APP_INSTALL_ARGS="" && \
if [ -n "${APPS_JSON_BASE64}" ]; then \
export APP_INSTALL_ARGS="--apps_path=/opt/frappe/apps.json"; \
fi && \
bench init ${APP_INSTALL_ARGS}\
--frappe-branch=${FRAPPE_BRANCH} \
--frappe-path=${FRAPPE_PATH} \
--no-procfile \
--no-backups \
--skip-redis-config-generation \
--verbose \
/home/frappe/frappe-bench && \
cd /home/frappe/frappe-bench && \
echo "{}" > sites/common_site_config.json && \
find apps -mindepth 1 -path "*/.git" | xargs rm -fr
FROM base AS backend
USER frappe
COPY --from=builder --chown=frappe:frappe /home/frappe/frappe-bench /home/frappe/frappe-bench
WORKDIR /home/frappe/frappe-bench
VOLUME [ \
"/home/frappe/frappe-bench/sites", \
"/home/frappe/frappe-bench/sites/assets", \
"/home/frappe/frappe-bench/logs" \
]
CMD [ \
"/home/frappe/frappe-bench/env/bin/gunicorn", \
"--chdir=/home/frappe/frappe-bench/sites", \
"--bind=0.0.0.0:8000", \
"--threads=4", \
"--workers=2", \
"--worker-class=gthread", \
"--worker-tmp-dir=/dev/shm", \
"--timeout=120", \
"--preload", \
"frappe.app:application" \
]

View File

@@ -0,0 +1,58 @@
ARG FRAPPE_BRANCH=version-15
FROM frappe/build:${FRAPPE_BRANCH} AS builder
ARG FRAPPE_BRANCH=version-15
ARG FRAPPE_PATH=https://github.com/frappe/frappe
ARG APPS_JSON_BASE64
USER root
RUN if [ -n "${APPS_JSON_BASE64}" ]; then \
mkdir /opt/frappe && echo "${APPS_JSON_BASE64}" | base64 -d > /opt/frappe/apps.json; \
fi
USER frappe
RUN export APP_INSTALL_ARGS="" && \
if [ -n "${APPS_JSON_BASE64}" ]; then \
export APP_INSTALL_ARGS="--apps_path=/opt/frappe/apps.json"; \
fi && \
bench init ${APP_INSTALL_ARGS}\
--frappe-branch=${FRAPPE_BRANCH} \
--frappe-path=${FRAPPE_PATH} \
--no-procfile \
--no-backups \
--skip-redis-config-generation \
--verbose \
/home/frappe/frappe-bench && \
cd /home/frappe/frappe-bench && \
echo "{}" > sites/common_site_config.json && \
find apps -mindepth 1 -path "*/.git" | xargs rm -fr
FROM frappe/base:${FRAPPE_BRANCH} AS backend
USER frappe
COPY --from=builder --chown=frappe:frappe /home/frappe/frappe-bench /home/frappe/frappe-bench
WORKDIR /home/frappe/frappe-bench
VOLUME [ \
"/home/frappe/frappe-bench/sites", \
"/home/frappe/frappe-bench/sites/assets", \
"/home/frappe/frappe-bench/logs" \
]
CMD [ \
"/home/frappe/frappe-bench/env/bin/gunicorn", \
"--chdir=/home/frappe/frappe-bench/sites", \
"--bind=0.0.0.0:8000", \
"--threads=4", \
"--workers=2", \
"--worker-class=gthread", \
"--worker-tmp-dir=/dev/shm", \
"--timeout=120", \
"--preload", \
"frappe.app:application" \
]

View File

@@ -1,62 +0,0 @@
FROM frappe/bench:latest as assets_builder
ARG FRAPPE_VERSION
ARG FRAPPE_REPO=https://github.com/frappe/frappe
ARG PYTHON_VERSION
ARG NODE_VERSION
ENV NVM_DIR=/home/frappe/.nvm
ENV PATH ${NVM_DIR}/versions/node/v${NODE_VERSION}/bin/:${PATH}
RUN PYENV_VERSION=${PYTHON_VERSION} bench init --version=${FRAPPE_VERSION} --frappe-path=${FRAPPE_REPO} --skip-redis-config-generation --verbose --skip-assets /home/frappe/frappe-bench
WORKDIR /home/frappe/frappe-bench
FROM assets_builder as frappe_assets
RUN bench setup requirements \
&& if [ -z "${FRAPPE_VERSION##*v14*}" ] || [ "$FRAPPE_VERSION" = "develop" ]; then \
export BUILD_OPTS="--production";\
fi \
&& FRAPPE_ENV=production bench build --verbose --hard-link ${BUILD_OPTS}
FROM assets_builder as erpnext_assets
ARG ERPNEXT_VERSION
ARG ERPNEXT_REPO=https://github.com/frappe/erpnext
RUN bench get-app --branch=${ERPNEXT_VERSION} --skip-assets --resolve-deps erpnext ${ERPNEXT_REPO}\
&& if [ -z "${ERPNEXT_VERSION##*v14*}" ] || [ "$ERPNEXT_VERSION" = "develop" ]; then \
export BUILD_OPTS="--production"; \
fi \
&& FRAPPE_ENV=production bench build --verbose --hard-link ${BUILD_OPTS}
FROM alpine/git as bench
# Error pages
ARG BENCH_REPO=https://github.com/frappe/bench
RUN git clone --depth 1 ${BENCH_REPO} /tmp/bench \
&& mkdir /out \
&& mv /tmp/bench/bench/config/templates/502.html /out \
&& touch /out/.build
FROM nginxinc/nginx-unprivileged:1.23.3-alpine as frappe
# Set default ENV variables for backwards compatibility
ENV PROXY_READ_TIMOUT=120
ENV CLIENT_MAX_BODY_SIZE=50m
# https://github.com/nginxinc/docker-nginx-unprivileged/blob/main/stable/alpine/20-envsubst-on-templates.sh
COPY nginx-template.conf /etc/nginx/templates/default.conf.template
# https://github.com/nginxinc/docker-nginx-unprivileged/blob/main/stable/alpine/docker-entrypoint.sh
COPY entrypoint.sh /docker-entrypoint.d/frappe-entrypoint.sh
COPY --from=bench /out /usr/share/nginx/html/
COPY --from=frappe_assets /home/frappe/frappe-bench/sites/assets /usr/share/nginx/html/assets
USER 1000
FROM frappe as erpnext
COPY --from=erpnext_assets /home/frappe/frappe-bench/sites/assets /usr/share/nginx/html/assets

View File

@@ -1,9 +0,0 @@
#!/bin/sh
set -e
# Update timestamp for ".build" file to enable caching assets:
# https://github.com/frappe/frappe/blob/52d8e6d952130eea64a9990b9fd5b1f6877be1b7/frappe/utils/__init__.py#L799-L805
if [ -d /usr/share/nginx/html/sites ]; then
touch /usr/share/nginx/html/sites/.build -r /usr/share/nginx/html/.build
fi

View File

@@ -0,0 +1,148 @@
ARG PYTHON_VERSION=3.11.6
ARG DEBIAN_BASE=bookworm
FROM python:${PYTHON_VERSION}-slim-${DEBIAN_BASE} AS base
ARG WKHTMLTOPDF_VERSION=0.12.6.1-3
ARG WKHTMLTOPDF_DISTRO=bookworm
ARG NODE_VERSION=20.19.2
ENV NVM_DIR=/home/frappe/.nvm
ENV PATH=${NVM_DIR}/versions/node/v${NODE_VERSION}/bin/:${PATH}
RUN useradd -ms /bin/bash frappe \
&& apt-get update \
&& apt-get install --no-install-recommends -y \
curl \
git \
vim \
nginx \
gettext-base \
file \
# weasyprint dependencies
libpango-1.0-0 \
libharfbuzz0b \
libpangoft2-1.0-0 \
libpangocairo-1.0-0 \
# For backups
restic \
gpg \
# MariaDB
mariadb-client \
less \
# Postgres
libpq-dev \
postgresql-client \
# For healthcheck
wait-for-it \
jq \
# NodeJS
&& mkdir -p ${NVM_DIR} \
&& curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash \
&& . ${NVM_DIR}/nvm.sh \
&& nvm install ${NODE_VERSION} \
&& nvm use v${NODE_VERSION} \
&& npm install -g yarn \
&& nvm alias default v${NODE_VERSION} \
&& rm -rf ${NVM_DIR}/.cache \
&& echo 'export NVM_DIR="/home/frappe/.nvm"' >>/home/frappe/.bashrc \
&& echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm' >>/home/frappe/.bashrc \
&& echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion' >>/home/frappe/.bashrc \
# Install wkhtmltopdf with patched qt
&& if [ "$(uname -m)" = "aarch64" ]; then export ARCH=arm64; fi \
&& if [ "$(uname -m)" = "x86_64" ]; then export ARCH=amd64; fi \
&& downloaded_file=wkhtmltox_${WKHTMLTOPDF_VERSION}.${WKHTMLTOPDF_DISTRO}_${ARCH}.deb \
&& curl -sLO https://github.com/wkhtmltopdf/packaging/releases/download/$WKHTMLTOPDF_VERSION/$downloaded_file \
&& apt-get install -y ./$downloaded_file \
&& rm $downloaded_file \
# Clean up
&& rm -rf /var/lib/apt/lists/* \
&& rm -fr /etc/nginx/sites-enabled/default \
&& pip3 install frappe-bench \
# Fixes for non-root nginx and logs to stdout
&& sed -i '/user www-data/d' /etc/nginx/nginx.conf \
&& ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.log \
&& touch /run/nginx.pid \
&& chown -R frappe:frappe /etc/nginx/conf.d \
&& chown -R frappe:frappe /etc/nginx/nginx.conf \
&& chown -R frappe:frappe /var/log/nginx \
&& chown -R frappe:frappe /var/lib/nginx \
&& chown -R frappe:frappe /run/nginx.pid
COPY resources/nginx-template.conf /templates/nginx/frappe.conf.template
COPY resources/nginx-entrypoint.sh /usr/local/bin/nginx-entrypoint.sh
FROM base AS build
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install --no-install-recommends -y \
# For frappe framework
wget \
# For psycopg2
libpq-dev \
# Other
libffi-dev \
liblcms2-dev \
libldap2-dev \
libmariadb-dev \
libsasl2-dev \
libtiff5-dev \
libwebp-dev \
pkg-config \
redis-tools \
rlwrap \
tk8.6-dev \
cron \
# For pandas
gcc \
build-essential \
libbz2-dev \
&& rm -rf /var/lib/apt/lists/*
USER frappe
FROM build AS builder
ARG FRAPPE_BRANCH=version-15
ARG FRAPPE_PATH=https://github.com/frappe/frappe
ARG ERPNEXT_REPO=https://github.com/frappe/erpnext
ARG ERPNEXT_BRANCH=version-15
RUN bench init \
--frappe-branch=${FRAPPE_BRANCH} \
--frappe-path=${FRAPPE_PATH} \
--no-procfile \
--no-backups \
--skip-redis-config-generation \
--verbose \
/home/frappe/frappe-bench && \
cd /home/frappe/frappe-bench && \
bench get-app --branch=${ERPNEXT_BRANCH} --resolve-deps erpnext ${ERPNEXT_REPO} && \
echo "{}" > sites/common_site_config.json && \
find apps -mindepth 1 -path "*/.git" | xargs rm -fr
FROM base AS erpnext
USER frappe
RUN echo "echo \"Commands restricted in prodution container, Read FAQ before you proceed: https://frappe.io/ctr-faq\"" >> ~/.bashrc
COPY --from=builder --chown=frappe:frappe /home/frappe/frappe-bench /home/frappe/frappe-bench
WORKDIR /home/frappe/frappe-bench
VOLUME [ \
"/home/frappe/frappe-bench/sites", \
"/home/frappe/frappe-bench/sites/assets", \
"/home/frappe/frappe-bench/logs" \
]
CMD [ \
"/home/frappe/frappe-bench/env/bin/gunicorn", \
"--chdir=/home/frappe/frappe-bench/sites", \
"--bind=0.0.0.0:8000", \
"--threads=4", \
"--workers=2", \
"--worker-class=gthread", \
"--worker-tmp-dir=/dev/shm", \
"--timeout=120", \
"--preload", \
"frappe.app:application" \
]

View File

@@ -1,34 +0,0 @@
FROM alpine/git as builder
ARG FRAPPE_VERSION
ARG FRAPPE_REPO=https://github.com/frappe/frappe
RUN apk add -U jq
RUN git clone --depth 1 -b ${FRAPPE_VERSION} ${FRAPPE_REPO} /opt/frappe
RUN jq --argjson dependencies "$(jq '.dependencies | INDEX( "express", "redis", "socket.io", "superagent" ) as $keep | \
del( \
. | objects | \
.[ \
keys_unsorted[] | \
select( $keep[ . ] | not ) \
] \
)' /opt/frappe/package.json)" '.dependencies = $dependencies | del(.scripts.prepare)' /opt/frappe/package.json > /opt/frappe/dependencies.json && \
mv /opt/frappe/dependencies.json /opt/frappe/package.json
# NodeJS LTS
FROM node:18-alpine
RUN addgroup -S frappe \
&& adduser -S frappe -G frappe
USER frappe
WORKDIR /home/frappe/frappe-bench
RUN mkdir -p sites apps/frappe
COPY --chown=frappe:frappe --from=builder /opt/frappe/package.json /opt/frappe/socketio.js /opt/frappe/node_utils.js apps/frappe/
RUN cd apps/frappe \
&& npm install --omit=dev
WORKDIR /home/frappe/frappe-bench/sites
CMD [ "node", "/home/frappe/frappe-bench/apps/frappe/socketio.js" ]

View File

@@ -1,146 +0,0 @@
# syntax=docker/dockerfile:1.3
ARG PYTHON_VERSION
FROM python:${PYTHON_VERSION}-slim-bullseye as base
RUN apt-get update \
&& apt-get install --no-install-recommends -y \
# Postgres
libpq-dev \
&& rm -rf /var/lib/apt/lists/*
RUN useradd -ms /bin/bash frappe
USER frappe
RUN mkdir -p /home/frappe/frappe-bench/apps /home/frappe/frappe-bench/logs /home/frappe/frappe-bench/sites /home/frappe/frappe-bench/config
WORKDIR /home/frappe/frappe-bench
USER root
RUN pip install --no-cache-dir -U pip wheel \
&& python -m venv env \
&& env/bin/pip install --no-cache-dir -U pip wheel
COPY install-app.sh /usr/local/bin/install-app
FROM base as build_deps
RUN apt-get update \
&& apt-get install --no-install-recommends -y \
# Install git here because it is not required in production
git \
# gcc and g++ are required for building different packages across different versions
# of Frappe and ERPNext and also on different platforms (for example, linux/arm64).
# It is safe to install build deps even if they are not required
# because they won't be included in final images.
gcc \
g++ \
# Make is required to build wheels of ERPNext deps in develop branch for linux/arm64
make \
&& rm -rf /var/lib/apt/lists/*
FROM build_deps as frappe_builder
ARG FRAPPE_VERSION
ARG FRAPPE_REPO=https://github.com/frappe/frappe
RUN --mount=type=cache,target=/root/.cache/pip \
git clone --depth 1 -b ${FRAPPE_VERSION} ${FRAPPE_REPO} apps/frappe \
&& install-app frappe \
&& env/bin/pip install -U gevent \
# Link Frappe's node_modules/ to make Website Theme work
&& mkdir -p /home/frappe/frappe-bench/sites/assets/frappe/node_modules \
&& ln -s /home/frappe/frappe-bench/sites/assets/frappe/node_modules /home/frappe/frappe-bench/apps/frappe/node_modules
FROM frappe_builder as erpnext_builder
ARG PAYMENTS_VERSION=develop
ARG PAYMENTS_REPO=https://github.com/frappe/payments
ARG ERPNEXT_VERSION
ARG ERPNEXT_REPO=https://github.com/frappe/erpnext
RUN --mount=type=cache,target=/root/.cache/pip \
if [ -z "${ERPNEXT_VERSION##*v14*}" ] || [ "$ERPNEXT_VERSION" = "develop" ]; then \
git clone --depth 1 -b ${PAYMENTS_VERSION} ${PAYMENTS_REPO} apps/payments && install-app payments; \
fi \
&& git clone --depth 1 -b ${ERPNEXT_VERSION} ${ERPNEXT_REPO} apps/erpnext \
&& install-app erpnext
FROM base as configured_base
ARG WKHTMLTOPDF_VERSION=0.12.6-1
ARG NODE_VERSION
ENV NVM_DIR=/home/frappe/.nvm
ENV PATH ${NVM_DIR}/versions/node/v${NODE_VERSION}/bin/:${PATH}
RUN apt-get update \
# Setup Node lists
&& apt-get install --no-install-recommends -y curl git \
# NodeJS with NVM
&& mkdir -p ${NVM_DIR} \
&& curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash \
&& . ${NVM_DIR}/nvm.sh \
&& nvm install ${NODE_VERSION} \
&& nvm use v${NODE_VERSION} \
&& npm install -g yarn \
&& nvm alias default v${NODE_VERSION} \
&& rm -rf ${NVM_DIR}/.cache \
&& echo 'export NVM_DIR="/home/frappe/.nvm"' >>~/.bashrc \
&& echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm' >> ~/.bashrc \
&& echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion' >> ~/.bashrc \
# Install wkhtmltopdf with patched qt
&& if [ "$(uname -m)" = "aarch64" ]; then export ARCH=arm64; fi \
&& if [ "$(uname -m)" = "x86_64" ]; then export ARCH=amd64; fi \
&& downloaded_file=wkhtmltox_$WKHTMLTOPDF_VERSION.buster_${ARCH}.deb \
&& curl -sLO https://github.com/wkhtmltopdf/packaging/releases/download/$WKHTMLTOPDF_VERSION/$downloaded_file \
&& apt-get install -y ./$downloaded_file \
&& rm $downloaded_file \
# Cleanup
&& apt-get purge -y --auto-remove curl \
&& apt-get update \
&& apt-get install --no-install-recommends -y \
# MariaDB
mariadb-client \
# Postgres
postgresql-client \
# For healthcheck
wait-for-it \
jq \
# Clean up
&& rm -rf /var/lib/apt/lists/*
COPY pretend-bench.sh /usr/local/bin/bench
COPY push_backup.py /usr/local/bin/push-backup
COPY configure.py patched_bench_helper.py /usr/local/bin/
COPY gevent_patch.py /opt/patches/
WORKDIR /home/frappe/frappe-bench/sites
CMD [ "/home/frappe/frappe-bench/env/bin/gunicorn", \
"--bind=0.0.0.0:8000", \
"--threads=4", \
"--workers=2", \
"--worker-class=gthread", \
"--worker-tmp-dir=/dev/shm", \
"--timeout=120", \
"--preload", \
"frappe.app:application" \
]
FROM configured_base as frappe
COPY --from=frappe_builder /home/frappe/frappe-bench/apps/frappe /home/frappe/frappe-bench/apps/frappe
COPY --from=frappe_builder /home/frappe/frappe-bench/env /home/frappe/frappe-bench/env
COPY --from=frappe_builder /home/frappe/frappe-bench/sites/apps.txt /home/frappe/frappe-bench/sites/
USER frappe
# Split frappe and erpnext to reduce image size (because of frappe-bench/env/ directory)
FROM configured_base as erpnext
COPY --from=erpnext_builder --chown=frappe:frappe /home/frappe/frappe-bench/apps /home/frappe/frappe-bench/apps
COPY --from=erpnext_builder --chown=frappe:frappe /home/frappe/frappe-bench/env /home/frappe/frappe-bench/env
COPY --from=erpnext_builder --chown=frappe:frappe /home/frappe/frappe-bench/sites/apps.txt /home/frappe/frappe-bench/sites/
USER frappe

View File

@@ -1,56 +0,0 @@
#!/usr/local/bin/python
from __future__ import annotations
import json
import os
from typing import Any, TypeVar
def update_config(**values: Any):
fname = "common_site_config.json"
if not os.path.exists(fname):
with open(fname, "a") as f:
json.dump({}, f)
with open(fname, "r+") as f:
config: dict[str, Any] = json.load(f)
config.update(values)
f.seek(0)
f.truncate()
json.dump(config, f)
_T = TypeVar("_T")
def env(name: str, type_: type[_T] = str) -> _T:
value = os.getenv(name)
if not value:
raise RuntimeError(f'Required environment variable "{name}" not set')
try:
value = type_(value)
except Exception:
raise RuntimeError(
f'Cannot convert environment variable "{name}" to type "{type_}"'
)
return value
def generate_redis_url(url: str):
return f"redis://{url}"
def main() -> int:
update_config(
db_host=env("DB_HOST"),
db_port=env("DB_PORT", int),
redis_cache=generate_redis_url(env("REDIS_CACHE")),
redis_queue=generate_redis_url(env("REDIS_QUEUE")),
redis_socketio=generate_redis_url(env("REDIS_SOCKETIO")),
socketio_port=env("SOCKETIO_PORT", int),
)
return 0
if __name__ == "__main__":
raise SystemExit(main())

View File

@@ -1,3 +0,0 @@
import gevent.monkey
gevent.monkey.patch_all()

View File

@@ -1,11 +0,0 @@
#!/bin/bash
set -e
set -x
APP=$1
cd /home/frappe/frappe-bench
env/bin/pip install -e "apps/$APP"
echo "$APP" >>sites/apps.txt

View File

@@ -1,48 +0,0 @@
from __future__ import annotations
import click
import click.exceptions
import frappe.app
import frappe.database.db_manager
import frappe.utils.bench_helper
def patch_database_creator():
"""
We need to interrupt Frappe site database creation to monkeypatch
functions that resolve host for user that owns site database.
In frappe_docker this was implemented in "new" command:
https://github.com/frappe/frappe_docker/blob/c808ad1767feaf793a2d14541ac0f4d9cbab45b3/build/frappe-worker/commands/new.py#L87
"""
frappe.database.db_manager.DbManager.get_current_host = lambda self: "%"
def patch_click_usage_error():
bits: tuple[str, ...] = (
click.style(
"Only Frappe framework bench commands are available in container setup.",
fg="yellow",
bold=True,
),
"https://frappeframework.com/docs/v13/user/en/bench/frappe-commands",
)
notice = "\n".join(bits)
def format_message(self: click.exceptions.UsageError):
if "No such command" in self.message:
return f"{notice}\n\n{self.message}"
return self.message
click.exceptions.UsageError.format_message = format_message
def main() -> int:
patch_database_creator()
patch_click_usage_error()
frappe.utils.bench_helper.main()
return 0
if __name__ == "__main__":
raise SystemExit(main())

View File

@@ -1,5 +0,0 @@
#!/bin/bash
set -e
# shellcheck disable=SC2068
~/frappe-bench/env/bin/python /usr/local/bin/patched_bench_helper.py frappe $@

View File

@@ -1,117 +0,0 @@
#!/home/frappe/frappe-bench/env/bin/python
from __future__ import annotations
import argparse
import os
import sys
from pathlib import Path
from typing import TYPE_CHECKING, Any, List, cast
import boto3
import frappe
from frappe.utils.backups import BackupGenerator
if TYPE_CHECKING:
from mypy_boto3_s3.service_resource import _Bucket
class Arguments(argparse.Namespace):
site: str
bucket: str
region_name: str
endpoint_url: str
aws_access_key_id: str
aws_secret_access_key: str
bucket_directory: str
def _get_files_from_previous_backup(site_name: str) -> list[Path]:
frappe.connect(site_name)
conf = cast(Any, frappe.conf)
backup_generator = BackupGenerator(
db_name=conf.db_name,
user=conf.db_name,
password=conf.db_password,
db_host=frappe.db.host,
db_port=frappe.db.port,
db_type=conf.db_type,
)
recent_backup_files = backup_generator.get_recent_backup(24)
frappe.destroy()
return [Path(f) for f in recent_backup_files if f]
def get_files_from_previous_backup(site_name: str) -> list[Path]:
files = _get_files_from_previous_backup(site_name)
if not files:
print("No backup found that was taken <24 hours ago.")
return files
def get_bucket(args: Arguments) -> _Bucket:
return boto3.resource(
service_name="s3",
endpoint_url=args.endpoint_url,
region_name=args.region_name,
aws_access_key_id=args.aws_access_key_id,
aws_secret_access_key=args.aws_secret_access_key,
).Bucket(args.bucket)
def upload_file(
path: Path, site_name: str, bucket: _Bucket, bucket_directory: str = None
) -> None:
filename = str(path.absolute())
key = str(Path(site_name) / path.name)
if bucket_directory:
key = bucket_directory + "/" + key
print(f"Uploading {key}")
bucket.upload_file(Filename=filename, Key=key)
os.remove(path)
def push_backup(args: Arguments) -> None:
"""Get latest backup files using Frappe utils, push them to S3 and remove local copy"""
files = get_files_from_previous_backup(args.site)
bucket = get_bucket(args)
for path in files:
upload_file(
path=path,
site_name=args.site,
bucket=bucket,
bucket_directory=args.bucket_directory,
)
print("Done!")
def parse_args(args: list[str]) -> Arguments:
parser = argparse.ArgumentParser()
parser.add_argument("--site", required=True)
parser.add_argument("--bucket", required=True)
parser.add_argument("--region-name", required=True)
parser.add_argument("--endpoint-url", required=True)
# Looking for default AWS credentials variables
parser.add_argument(
"--aws-access-key-id", required=True, default=os.getenv("AWS_ACCESS_KEY_ID")
)
parser.add_argument(
"--aws-secret-access-key",
required=True,
default=os.getenv("AWS_SECRET_ACCESS_KEY"),
)
parser.add_argument("--bucket-directory")
return parser.parse_args(args, namespace=Arguments())
def main(args: list[str]) -> int:
push_backup(parse_args(args))
return 0
if __name__ == "__main__":
raise SystemExit(main(sys.argv[1:]))

104
install_x11_deps.sh Executable file
View File

@@ -0,0 +1,104 @@
#!/bin/bash
set -e
# This script configures X11 forwarding for Linux and macOS systems.
# It installs X11, Openbox (on Linux), and checks for XQuartz (on macOS).
# It also updates the sshd_config file to enable X11Forwarding and restarts the SSH service.
# Check if the script is running with root privileges
if [ "$EUID" -ne 0 ]; then
echo "Error: This script requires root privileges. Please run it as a superuser"
exit 1
fi
# Function to restart SSH service (Linux)
restart_ssh_linux() {
if command -v service >/dev/null 2>&1; then
sudo service ssh restart
else
sudo systemctl restart ssh
fi
}
# Function to restart SSH service (macOS)
restart_ssh_macos() {
launchctl stop com.openssh.sshd
launchctl start com.openssh.sshd
}
update_x11_forwarding() {
if grep -q "X11Forwarding yes" /etc/ssh/sshd_config; then
echo "X11Forwarding is already set to 'yes' in ssh_config."
else
if [[ "$OSTYPE" == "linux-gnu" ]]; then
# Linux: Use sed for Linux
sudo sed -i 's/#\?X11Forwarding.*/X11Forwarding yes/' /etc/ssh/sshd_config
elif [[ "$OSTYPE" == "darwin"* ]]; then
# macOS: Use sed for macOS
sudo sed -i -E 's/#X11Forwarding.*/X11Forwarding yes/' /etc/ssh/sshd_config
restart_ssh_macos
fi
if [[ "$OSTYPE" == "linux-gnu" ]]; then
restart_ssh_linux
fi
fi
}
# Determine the operating system
if [[ "$OSTYPE" == "linux-gnu" ]]; then
# Linux
if command -v startx >/dev/null 2>&1; then
echo "X11 is already installed."
else
# Check which package manager is available
if command -v apt-get >/dev/null 2>&1; then
install_command="sudo apt-get update && sudo apt-get install xorg openbox"
elif command -v dnf >/dev/null 2>&1; then
install_command="sudo dnf install xorg-x11-server-Xorg openbox"
else
echo "Error: Unable to determine the package manager. Manual installation required."
exit 1
fi
fi
# Check if the installation command is defined
if [ -n "$install_command" ]; then
# Execute the installation command
if $install_command; then
echo "X11 and Openbox have been successfully installed."
else
echo "Error: Failed to install X11 and Openbox."
exit 1
fi
else
echo "Error: Unsupported package manager."
exit 1
fi
# Call the function to update X11Forwarding
update_x11_forwarding
# Get the IP address of the host dynamically
host_ip=$(hostname -I | awk '{print $1}')
xhost + "$host_ip" && xhost + local:
# Set the DISPLAY variable to the host IP
export DISPLAY="$host_ip:0.0"
echo "DISPLAY variable set to $DISPLAY"
elif [[ "$OSTYPE" == "darwin"* ]]; then
# macOS
if command -v xquartz >/dev/null 2>&1; then
echo "XQuartz is already installed."
else
echo "Error: XQuartz is required for X11 forwarding on macOS. Please install XQuartz manually."
exit 1
fi
# Call the function to update X11Forwarding
update_x11_forwarding
# Export the DISPLAY variable for macOS
export DISPLAY=:0
echo "DISPLAY variable set to $DISPLAY"
else
echo "Error: Unsupported operating system."
exit 1
fi

View File

@@ -0,0 +1,15 @@
services:
cron:
image: mcuadros/ofelia:latest
depends_on:
- scheduler
command: daemon --docker
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
scheduler:
labels:
ofelia.enabled: "true"
ofelia.job-exec.datecron.schedule: "${BACKUP_CRONSTRING:-@every 6h}"
ofelia.job-exec.datecron.command: "bench --site all backup"
ofelia.job-exec.datecron.user: "frappe"

View File

@@ -1,27 +0,0 @@
x-erpnext-backend-image: &erpnext_backend_image
image: frappe/erpnext-worker:${ERPNEXT_VERSION:?No ERPNext version set}
volumes:
- sites:/home/frappe/frappe-bench/sites
- assets:/home/frappe/frappe-bench/sites/assets:ro
services:
configurator:
<<: *erpnext_backend_image
backend:
<<: *erpnext_backend_image
frontend:
image: frappe/erpnext-nginx:${ERPNEXT_VERSION}
queue-short:
<<: *erpnext_backend_image
queue-default:
<<: *erpnext_backend_image
queue-long:
<<: *erpnext_backend_image
scheduler:
<<: *erpnext_backend_image

View File

@@ -5,10 +5,11 @@ services:
- traefik.http.services.frontend.loadbalancer.server.port=8080 - traefik.http.services.frontend.loadbalancer.server.port=8080
- traefik.http.routers.frontend-http.entrypoints=websecure - traefik.http.routers.frontend-http.entrypoints=websecure
- traefik.http.routers.frontend-http.tls.certresolver=main-resolver - traefik.http.routers.frontend-http.tls.certresolver=main-resolver
- traefik.http.routers.frontend-http.rule=HostRegexp(`{any:.+}`) - traefik.http.routers.frontend-http.rule=Host(${SITES:?List of sites not set})
proxy: proxy:
image: traefik:2.5 image: traefik:v2.11
restart: unless-stopped
command: command:
- --providers.docker=true - --providers.docker=true
- --providers.docker.exposedbydefault=false - --providers.docker.exposedbydefault=false
@@ -21,8 +22,8 @@ services:
- --certificatesResolvers.main-resolver.acme.email=${LETSENCRYPT_EMAIL:?No Let's Encrypt email set} - --certificatesResolvers.main-resolver.acme.email=${LETSENCRYPT_EMAIL:?No Let's Encrypt email set}
- --certificatesResolvers.main-resolver.acme.storage=/letsencrypt/acme.json - --certificatesResolvers.main-resolver.acme.storage=/letsencrypt/acme.json
ports: ports:
- 80:80 - ${HTTP_PUBLISH_PORT:-80}:80
- 443:443 - ${HTTPS_PUBLISH_PORT:-443}:443
volumes: volumes:
- cert-data:/letsencrypt - cert-data:/letsencrypt
- /var/run/docker.sock:/var/run/docker.sock:ro - /var/run/docker.sock:/var/run/docker.sock:ro

View File

@@ -0,0 +1,11 @@
services:
db:
environment:
MYSQL_ROOT_PASSWORD: !reset null
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_password
secrets:
- db_password
secrets:
db_password:
file: ${DB_PASSWORD_SECRETS_FILE:?No db secret file set}

View File

@@ -3,12 +3,14 @@ version: "3.3"
services: services:
database: database:
container_name: mariadb-database container_name: mariadb-database
image: mariadb:10.6 image: mariadb:11.8
restart: unless-stopped restart: unless-stopped
healthcheck: healthcheck:
test: mysqladmin ping -h localhost --password=${DB_PASSWORD:-changeit} test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 1s start_period: 5s
retries: 15 interval: 5s
timeout: 5s
retries: 5
command: command:
- --character-set-server=utf8mb4 - --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci - --collation-server=utf8mb4_unicode_ci
@@ -16,8 +18,9 @@ services:
- --skip-innodb-read-only-compressed - --skip-innodb-read-only-compressed
environment: environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD:-changeit} MYSQL_ROOT_PASSWORD: ${DB_PASSWORD:-changeit}
MARIADB_AUTO_UPGRADE: 1
volumes: volumes:
- ${HOME}/data/mariadb:/var/lib/mysql - db-data:/var/lib/mysql
networks: networks:
- mariadb-network - mariadb-network
@@ -25,3 +28,6 @@ networks:
mariadb-network: mariadb-network:
name: mariadb-network name: mariadb-network
external: false external: false
volumes:
db-data:

View File

@@ -8,18 +8,22 @@ services:
condition: service_healthy condition: service_healthy
db: db:
image: mariadb:10.6 image: mariadb:11.8
healthcheck: healthcheck:
test: mysqladmin ping -h localhost --password=${DB_PASSWORD} test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 1s start_period: 5s
retries: 15 interval: 5s
timeout: 5s
retries: 5
restart: unless-stopped
command: command:
- --character-set-server=utf8mb4 - --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci - --collation-server=utf8mb4_unicode_ci
- --skip-character-set-client-handshake - --skip-character-set-client-handshake
- --skip-innodb-read-only-compressed # Temporary fix for MariaDB 10.6 - --skip-innodb-read-only-compressed # Temporary fix for MariaDB 10.6
environment: environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD:?No db password set} MYSQL_ROOT_PASSWORD: ${DB_PASSWORD:-123}
MARIADB_AUTO_UPGRADE: 1
volumes: volumes:
- db-data:/var/lib/mysql - db-data:/var/lib/mysql

View File

@@ -26,10 +26,6 @@ services:
networks: networks:
- bench-network - bench-network
- mariadb-network - mariadb-network
queue-default:
networks:
- bench-network
- mariadb-network
queue-short: queue-short:
networks: networks:
- bench-network - bench-network
@@ -38,7 +34,12 @@ services:
networks: networks:
- bench-network - bench-network
- mariadb-network - mariadb-network
redis: redis-cache:
networks:
- bench-network
- mariadb-network
redis-queue:
networks: networks:
- bench-network - bench-network
- mariadb-network - mariadb-network

View File

@@ -1,4 +1,4 @@
services: services:
frontend: frontend:
ports: ports:
- 8080:8080 - ${HTTP_PUBLISH_PORT:-8080}:8080

View File

@@ -12,7 +12,7 @@ services:
environment: environment:
POSTGRES_PASSWORD: ${DB_PASSWORD:?No db password set} POSTGRES_PASSWORD: ${DB_PASSWORD:?No db password set}
volumes: volumes:
- db-data:/var/lib/postgresql - db-data:/var/lib/postgresql/data
volumes: volumes:
db-data: db-data:

View File

@@ -7,13 +7,13 @@ services:
- traefik.http.routers.frontend-http.rule=HostRegexp(`{any:.+}`) - traefik.http.routers.frontend-http.rule=HostRegexp(`{any:.+}`)
proxy: proxy:
image: traefik:2.5 image: traefik:v2.11
command: command:
- --providers.docker - --providers.docker
- --providers.docker.exposedbydefault=false - --providers.docker.exposedbydefault=false
- --entrypoints.web.address=:80 - --entrypoints.web.address=:80
ports: ports:
- 80:80 - ${HTTP_PUBLISH_PORT:-80}:80
volumes: volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro - /var/run/docker.sock:/var/run/docker.sock:ro
userns_mode: host userns_mode: host

View File

@@ -1,16 +1,21 @@
services: services:
configurator: configurator:
environment: environment:
REDIS_CACHE: redis:6379/0 REDIS_CACHE: redis-cache:6379
REDIS_QUEUE: redis:6379/1 REDIS_QUEUE: redis-queue:6379
REDIS_SOCKETIO: redis:6379/2
depends_on: depends_on:
- redis - redis-cache
- redis-queue
redis: redis-cache:
image: redis:6.2-alpine image: redis:6.2-alpine
restart: unless-stopped
redis-queue:
image: redis:6.2-alpine
restart: unless-stopped
volumes: volumes:
- redis-data:/data - redis-queue-data:/data
volumes: volumes:
redis-data: redis-queue-data:

View File

@@ -2,7 +2,7 @@ services:
traefik: traefik:
labels: labels:
# https-redirect middleware to redirect HTTP to HTTPS # https-redirect middleware to redirect HTTP to HTTPS
# It can be re-used by other stacks in other Docker Compose files # It can be reused by other stacks in other Docker Compose files
- traefik.http.middlewares.https-redirect.redirectscheme.scheme=https - traefik.http.middlewares.https-redirect.redirectscheme.scheme=https
- traefik.http.middlewares.https-redirect.redirectscheme.permanent=true - traefik.http.middlewares.https-redirect.redirectscheme.permanent=true
# traefik-http to use the middleware to redirect to https # traefik-http to use the middleware to redirect to https
@@ -40,6 +40,9 @@ services:
# Enable the Dashboard and API # Enable the Dashboard and API
- --api - --api
ports: ports:
- 443:443 - ${HTTPS_PUBLISH_PORT:-443}:443
volumes: volumes:
- ${HOME}/data/traefik/certificates:/certificates - cert-data:/certificates
volumes:
cert-data:

View File

@@ -2,7 +2,8 @@ version: "3.3"
services: services:
traefik: traefik:
image: "traefik:v2.6" image: "traefik:v2.11"
restart: unless-stopped
labels: labels:
# Enable Traefik for this service, to make it available in the public network # Enable Traefik for this service, to make it available in the public network
- traefik.enable=true - traefik.enable=true
@@ -34,7 +35,7 @@ services:
# Enable the Dashboard and API # Enable the Dashboard and API
- --api - --api
ports: ports:
- 80:80 - ${HTTP_PUBLISH_PORT:-80}:80
volumes: volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro - /var/run/docker.sock:/var/run/docker.sock:ro
networks: networks:

150
pwd.yml
View File

@@ -2,36 +2,60 @@ version: "3"
services: services:
backend: backend:
image: frappe/erpnext-worker:v14.12.1 image: frappe/erpnext:v15.83.0
networks:
- frappe_network
deploy: deploy:
restart_policy: restart_policy:
condition: on-failure condition: on-failure
volumes: volumes:
- sites:/home/frappe/frappe-bench/sites - sites:/home/frappe/frappe-bench/sites
- assets:/home/frappe/frappe-bench/sites/assets - logs:/home/frappe/frappe-bench/logs
environment:
DB_HOST: db
DB_PORT: "3306"
MYSQL_ROOT_PASSWORD: admin
MARIADB_ROOT_PASSWORD: admin
configurator: configurator:
image: frappe/erpnext-worker:v14.12.1 image: frappe/erpnext:v15.83.0
networks:
- frappe_network
deploy:
restart_policy:
condition: none
entrypoint:
- bash
- -c
command: command:
- configure.py - >
ls -1 apps > sites/apps.txt;
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_QUEUE";
bench set-config -gp socketio_port $$SOCKETIO_PORT;
environment: environment:
DB_HOST: db DB_HOST: db
DB_PORT: "3306" DB_PORT: "3306"
REDIS_CACHE: redis-cache:6379 REDIS_CACHE: redis-cache:6379
REDIS_QUEUE: redis-queue:6379 REDIS_QUEUE: redis-queue:6379
REDIS_SOCKETIO: redis-socketio:6379
SOCKETIO_PORT: "9000" SOCKETIO_PORT: "9000"
volumes: volumes:
- sites:/home/frappe/frappe-bench/sites - sites:/home/frappe/frappe-bench/sites
- logs:/home/frappe/frappe-bench/logs
create-site: create-site:
image: frappe/erpnext-worker:v14.12.1 image: frappe/erpnext:v15.83.0
networks:
- frappe_network
deploy: deploy:
restart_policy: restart_policy:
condition: on-failure condition: none
volumes: volumes:
- sites:/home/frappe/frappe-bench/sites - sites:/home/frappe/frappe-bench/sites
- assets:/home/frappe/frappe-bench/sites/assets - logs:/home/frappe/frappe-bench/logs
entrypoint: entrypoint:
- bash - bash
- -c - -c
@@ -40,28 +64,29 @@ services:
wait-for-it -t 120 db:3306; wait-for-it -t 120 db:3306;
wait-for-it -t 120 redis-cache:6379; wait-for-it -t 120 redis-cache:6379;
wait-for-it -t 120 redis-queue:6379; wait-for-it -t 120 redis-queue:6379;
wait-for-it -t 120 redis-socketio:6379;
export start=`date +%s`; export start=`date +%s`;
until [[ -n `grep -hs ^ common_site_config.json | jq -r ".db_host // empty"` ]] && \ until [[ -n `grep -hs ^ sites/common_site_config.json | jq -r ".db_host // empty"` ]] && \
[[ -n `grep -hs ^ common_site_config.json | jq -r ".redis_cache // empty"` ]] && \ [[ -n `grep -hs ^ sites/common_site_config.json | jq -r ".redis_cache // empty"` ]] && \
[[ -n `grep -hs ^ common_site_config.json | jq -r ".redis_queue // empty"` ]]; [[ -n `grep -hs ^ sites/common_site_config.json | jq -r ".redis_queue // empty"` ]];
do do
echo "Waiting for common_site_config.json to be created"; echo "Waiting for sites/common_site_config.json to be created";
sleep 5; sleep 5;
if (( `date +%s`-start > 120 )); then if (( `date +%s`-start > 120 )); then
echo "could not find common_site_config.json with required keys"; echo "could not find sites/common_site_config.json with required keys";
exit 1 exit 1
fi fi
done; done;
echo "common_site_config.json found"; echo "sites/common_site_config.json found";
bench new-site frontend --admin-password=admin --db-root-password=admin --install-app payments --install-app erpnext --set-default; bench new-site --mariadb-user-host-login-scope='%' --admin-password=admin --db-root-username=root --db-root-password=admin --install-app erpnext --set-default frontend;
db: db:
image: mariadb:10.6 image: mariadb:10.6
networks:
- frappe_network
healthcheck: healthcheck:
test: mysqladmin ping -h localhost --password=admin test: mysqladmin ping -h localhost --password=admin
interval: 1s interval: 1s
retries: 15 retries: 20
deploy: deploy:
restart_policy: restart_policy:
condition: on-failure condition: on-failure
@@ -72,14 +97,21 @@ services:
- --skip-innodb-read-only-compressed # Temporary fix for MariaDB 10.6 - --skip-innodb-read-only-compressed # Temporary fix for MariaDB 10.6
environment: environment:
MYSQL_ROOT_PASSWORD: admin MYSQL_ROOT_PASSWORD: admin
MARIADB_ROOT_PASSWORD: admin
volumes: volumes:
- db-data:/var/lib/mysql - db-data:/var/lib/mysql
frontend: frontend:
image: frappe/erpnext-nginx:v14.12.1 image: frappe/erpnext:v15.83.0
networks:
- frappe_network
depends_on:
- websocket
deploy: deploy:
restart_policy: restart_policy:
condition: on-failure condition: on-failure
command:
- nginx-entrypoint.sh
environment: environment:
BACKEND: backend:8000 BACKEND: backend:8000
FRAPPE_SITE_NAME_HEADER: frontend FRAPPE_SITE_NAME_HEADER: frontend
@@ -87,30 +119,18 @@ services:
UPSTREAM_REAL_IP_ADDRESS: 127.0.0.1 UPSTREAM_REAL_IP_ADDRESS: 127.0.0.1
UPSTREAM_REAL_IP_HEADER: X-Forwarded-For UPSTREAM_REAL_IP_HEADER: X-Forwarded-For
UPSTREAM_REAL_IP_RECURSIVE: "off" UPSTREAM_REAL_IP_RECURSIVE: "off"
PROXY_READ_TIMOUT: 120 PROXY_READ_TIMEOUT: 120
CLIENT_MAX_BODY_SIZE: 50m CLIENT_MAX_BODY_SIZE: 50m
volumes: volumes:
- sites:/usr/share/nginx/html/sites - sites:/home/frappe/frappe-bench/sites
- assets:/usr/share/nginx/html/assets - logs:/home/frappe/frappe-bench/logs
ports: ports:
- "8080:8080" - "8080:8080"
queue-default:
image: frappe/erpnext-worker:v14.12.1
deploy:
restart_policy:
condition: on-failure
command:
- bench
- worker
- --queue
- default
volumes:
- sites:/home/frappe/frappe-bench/sites
- assets:/home/frappe/frappe-bench/sites/assets
queue-long: queue-long:
image: frappe/erpnext-worker:v14.12.1 image: frappe/erpnext:v15.83.0
networks:
- frappe_network
deploy: deploy:
restart_policy: restart_policy:
condition: on-failure condition: on-failure
@@ -118,13 +138,18 @@ services:
- bench - bench
- worker - worker
- --queue - --queue
- long - long,default,short
volumes: volumes:
- sites:/home/frappe/frappe-bench/sites - sites:/home/frappe/frappe-bench/sites
- assets:/home/frappe/frappe-bench/sites/assets - logs:/home/frappe/frappe-bench/logs
environment:
FRAPPE_REDIS_CACHE: redis://redis-cache:6379
FRAPPE_REDIS_QUEUE: redis://redis-queue:6379
queue-short: queue-short:
image: frappe/erpnext-worker:v14.12.1 image: frappe/erpnext:v15.83.0
networks:
- frappe_network
deploy: deploy:
restart_policy: restart_policy:
condition: on-failure condition: on-failure
@@ -132,13 +157,18 @@ services:
- bench - bench
- worker - worker
- --queue - --queue
- short - short,default
volumes: volumes:
- sites:/home/frappe/frappe-bench/sites - sites:/home/frappe/frappe-bench/sites
- assets:/home/frappe/frappe-bench/sites/assets - logs:/home/frappe/frappe-bench/logs
environment:
FRAPPE_REDIS_CACHE: redis://redis-cache:6379
FRAPPE_REDIS_QUEUE: redis://redis-queue:6379
redis-queue: redis-queue:
image: redis:6.2-alpine image: redis:6.2-alpine
networks:
- frappe_network
deploy: deploy:
restart_policy: restart_policy:
condition: on-failure condition: on-failure
@@ -147,22 +177,16 @@ services:
redis-cache: redis-cache:
image: redis:6.2-alpine image: redis:6.2-alpine
networks:
- frappe_network
deploy: deploy:
restart_policy: restart_policy:
condition: on-failure condition: on-failure
volumes:
- redis-cache-data:/data
redis-socketio:
image: redis:6.2-alpine
deploy:
restart_policy:
condition: on-failure
volumes:
- redis-socketio-data:/data
scheduler: scheduler:
image: frappe/erpnext-worker:v14.12.1 image: frappe/erpnext:v15.83.0
networks:
- frappe_network
deploy: deploy:
restart_policy: restart_policy:
condition: on-failure condition: on-failure
@@ -171,21 +195,31 @@ services:
- schedule - schedule
volumes: volumes:
- sites:/home/frappe/frappe-bench/sites - sites:/home/frappe/frappe-bench/sites
- assets:/home/frappe/frappe-bench/sites/assets - logs:/home/frappe/frappe-bench/logs
websocket: websocket:
image: frappe/frappe-socketio:v14.22.0 image: frappe/erpnext:v15.83.0
networks:
- frappe_network
deploy: deploy:
restart_policy: restart_policy:
condition: on-failure condition: on-failure
command:
- node
- /home/frappe/frappe-bench/apps/frappe/socketio.js
environment:
FRAPPE_REDIS_CACHE: redis://redis-cache:6379
FRAPPE_REDIS_QUEUE: redis://redis-queue:6379
volumes: volumes:
- sites:/home/frappe/frappe-bench/sites - sites:/home/frappe/frappe-bench/sites
- assets:/home/frappe/frappe-bench/sites/assets - logs:/home/frappe/frappe-bench/logs
volumes: volumes:
assets:
db-data: db-data:
redis-queue-data: redis-queue-data:
redis-cache-data:
redis-socketio-data:
sites: sites:
logs:
networks:
frappe_network:
driver: bridge

View File

@@ -1,3 +0,0 @@
frappe @ git+https://github.com/frappe/frappe.git
boto3-stubs[s3]
black==22.12.0

View File

@@ -1 +1 @@
pytest==7.2.0 pytest==8.4.2

52
resources/nginx-entrypoint.sh Executable file
View File

@@ -0,0 +1,52 @@
#!/bin/bash
# Set variables that do not exist
if [[ -z "$BACKEND" ]]; then
echo "BACKEND defaulting to 0.0.0.0:8000"
export BACKEND=0.0.0.0:8000
fi
if [[ -z "$SOCKETIO" ]]; then
echo "SOCKETIO defaulting to 0.0.0.0:9000"
export SOCKETIO=0.0.0.0:9000
fi
if [[ -z "$UPSTREAM_REAL_IP_ADDRESS" ]]; then
echo "UPSTREAM_REAL_IP_ADDRESS defaulting to 127.0.0.1"
export UPSTREAM_REAL_IP_ADDRESS=127.0.0.1
fi
if [[ -z "$UPSTREAM_REAL_IP_HEADER" ]]; then
echo "UPSTREAM_REAL_IP_HEADER defaulting to X-Forwarded-For"
export UPSTREAM_REAL_IP_HEADER=X-Forwarded-For
fi
if [[ -z "$UPSTREAM_REAL_IP_RECURSIVE" ]]; then
echo "UPSTREAM_REAL_IP_RECURSIVE defaulting to off"
export UPSTREAM_REAL_IP_RECURSIVE=off
fi
if [[ -z "$FRAPPE_SITE_NAME_HEADER" ]]; then
# shellcheck disable=SC2016
echo 'FRAPPE_SITE_NAME_HEADER defaulting to $host'
# shellcheck disable=SC2016
export FRAPPE_SITE_NAME_HEADER='$host'
fi
if [[ -z "$PROXY_READ_TIMEOUT" ]]; then
echo "PROXY_READ_TIMEOUT defaulting to 120"
export PROXY_READ_TIMEOUT=120
fi
if [[ -z "$CLIENT_MAX_BODY_SIZE" ]]; then
echo "CLIENT_MAX_BODY_SIZE defaulting to 50m"
export CLIENT_MAX_BODY_SIZE=50m
fi
# shellcheck disable=SC2016
envsubst '${BACKEND}
${SOCKETIO}
${UPSTREAM_REAL_IP_ADDRESS}
${UPSTREAM_REAL_IP_HEADER}
${UPSTREAM_REAL_IP_RECURSIVE}
${FRAPPE_SITE_NAME_HEADER}
${PROXY_READ_TIMEOUT}
${CLIENT_MAX_BODY_SIZE}' \
</templates/nginx/frappe.conf.template >/etc/nginx/conf.d/frappe.conf
nginx -g 'daemon off;'

View File

@@ -6,16 +6,10 @@ upstream socketio-server {
server ${SOCKETIO} fail_timeout=0; server ${SOCKETIO} fail_timeout=0;
} }
# Parse the X-Forwarded-Proto header - if set - defaulting to $scheme.
map $http_x_forwarded_proto $proxy_x_forwarded_proto {
default $scheme;
https https;
}
server { server {
listen 8080; listen 8080;
server_name $http_host; server_name ${FRAPPE_SITE_NAME_HEADER};
root /usr/share/nginx/html; root /home/frappe/frappe-bench/sites;
proxy_buffer_size 128k; proxy_buffer_size 128k;
proxy_buffers 4 256k; proxy_buffers 4 256k;
@@ -37,13 +31,11 @@ server {
location ~ ^/protected/(.*) { location ~ ^/protected/(.*) {
internal; internal;
try_files /sites/$http_host/$1 =404; try_files /${FRAPPE_SITE_NAME_HEADER}/$1 =404;
} }
location /socket.io { location /socket.io {
proxy_http_version 1.1; proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $proxy_x_forwarded_proto;
proxy_set_header Upgrade $http_upgrade; proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade"; proxy_set_header Connection "upgrade";
proxy_set_header X-Frappe-Site-Name ${FRAPPE_SITE_NAME_HEADER}; proxy_set_header X-Frappe-Site-Name ${FRAPPE_SITE_NAME_HEADER};
@@ -54,36 +46,31 @@ server {
} }
location / { location / {
rewrite ^(.+)/$ $proxy_x_forwarded_proto://$http_host$1 permanent; rewrite ^(.+)/$ $1 permanent;
rewrite ^(.+)/index\.html$ $proxy_x_forwarded_proto://$http_host$1 permanent; rewrite ^(.+)/index\.html$ $1 permanent;
rewrite ^(.+)\.html$ $proxy_x_forwarded_proto://$http_host$1 permanent; rewrite ^(.+)\.html$ $1 permanent;
location ~ ^/files/.*.(htm|html|svg|xml) { location ~ ^/files/.*.(htm|html|svg|xml) {
add_header Content-disposition "attachment"; add_header Content-disposition "attachment";
try_files /sites/${FRAPPE_SITE_NAME_HEADER}/public/$uri @webserver; try_files /${FRAPPE_SITE_NAME_HEADER}/public/$uri @webserver;
} }
try_files /sites/${FRAPPE_SITE_NAME_HEADER}/public/$uri @webserver; try_files /${FRAPPE_SITE_NAME_HEADER}/public/$uri @webserver;
} }
location @webserver { location @webserver {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_http_version 1.1;
proxy_set_header X-Forwarded-Proto $proxy_x_forwarded_proto; proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Frappe-Site-Name ${FRAPPE_SITE_NAME_HEADER}; proxy_set_header X-Frappe-Site-Name ${FRAPPE_SITE_NAME_HEADER};
proxy_set_header Host $host; proxy_set_header Host $host;
proxy_set_header X-Use-X-Accel-Redirect True; proxy_set_header X-Use-X-Accel-Redirect True;
proxy_read_timeout ${PROXY_READ_TIMOUT}; proxy_read_timeout ${PROXY_READ_TIMEOUT};
proxy_redirect off; proxy_redirect off;
proxy_pass http://backend-server; proxy_pass http://backend-server;
} }
# error pages
error_page 502 /502.html;
location /502.html {
internal;
}
# optimizations # optimizations
sendfile on; sendfile on;
keepalive_timeout 15; keepalive_timeout 15;

View File

@@ -1,69 +0,0 @@
import os
import re
from typing import TYPE_CHECKING
import boto3
if TYPE_CHECKING:
from mypy_boto3_s3.service_resource import BucketObjectsCollection, _Bucket
def get_bucket() -> "_Bucket":
return boto3.resource(
service_name="s3",
endpoint_url="http://minio:9000",
region_name="us-east-1",
aws_access_key_id=os.getenv("S3_ACCESS_KEY"),
aws_secret_access_key=os.getenv("S3_SECRET_KEY"),
).Bucket("frappe")
def get_key_builder():
site_name = os.getenv("SITE_NAME")
assert site_name
def builder(key: str, suffix: str) -> bool:
return bool(re.match(rf"{site_name}.*{suffix}$", key))
return builder
def check_keys(objects: "BucketObjectsCollection"):
check_key = get_key_builder()
db = False
config = False
private_files = False
public_files = False
for obj in objects:
if check_key(obj.key, "database.sql.gz"):
db = True
elif check_key(obj.key, "site_config_backup.json"):
config = True
elif check_key(obj.key, "private-files.tar"):
private_files = True
elif check_key(obj.key, "files.tar"):
public_files = True
exc = lambda type_: Exception(f"Didn't push {type_} backup")
if not db:
raise exc("database")
if not config:
raise exc("site config")
if not private_files:
raise exc("private files")
if not public_files:
raise exc("public files")
print("All files were pushed to S3!")
def main() -> int:
bucket = get_bucket()
check_keys(bucket.objects.all())
return 0
if __name__ == "__main__":
raise SystemExit(main())

View File

@@ -31,7 +31,7 @@ def get_redis_url(addr: str) -> Address:
def get_addresses(config: dict[str, Any]) -> Iterable[Address]: def get_addresses(config: dict[str, Any]) -> Iterable[Address]:
yield (config["db_host"], config["db_port"]) yield (config["db_host"], config["db_port"])
for key in ("redis_cache", "redis_queue", "redis_socketio"): for key in ("redis_cache", "redis_queue"):
yield get_redis_url(config[key]) yield get_redis_url(config[key])

View File

@@ -16,7 +16,7 @@ def check_cache():
def main() -> int: def main() -> int:
frappe.connect(site="tests") frappe.connect(site="tests.localhost")
check_db() check_db()
check_cache() check_cache()
return 0 return 0

View File

@@ -1,24 +0,0 @@
services:
configurator:
image: localhost:5000/frappe/erpnext-worker:${ERPNEXT_VERSION}
backend:
image: localhost:5000/frappe/erpnext-worker:${ERPNEXT_VERSION}
frontend:
image: localhost:5000/frappe/erpnext-nginx:${ERPNEXT_VERSION}
websocket:
image: localhost:5000/frappe/frappe-socketio:${FRAPPE_VERSION}
queue-short:
image: localhost:5000/frappe/erpnext-worker:${ERPNEXT_VERSION}
queue-default:
image: localhost:5000/frappe/erpnext-worker:${ERPNEXT_VERSION}
queue-long:
image: localhost:5000/frappe/erpnext-worker:${ERPNEXT_VERSION}
scheduler:
image: localhost:5000/frappe/erpnext-worker:${ERPNEXT_VERSION}

View File

@@ -1,24 +1,21 @@
services: services:
configurator: configurator:
image: localhost:5000/frappe/frappe-worker:${FRAPPE_VERSION} image: localhost:5000/frappe/erpnext:${ERPNEXT_VERSION}
backend: backend:
image: localhost:5000/frappe/frappe-worker:${FRAPPE_VERSION} image: localhost:5000/frappe/erpnext:${ERPNEXT_VERSION}
frontend: frontend:
image: localhost:5000/frappe/frappe-nginx:${FRAPPE_VERSION} image: localhost:5000/frappe/erpnext:${ERPNEXT_VERSION}
websocket: websocket:
image: localhost:5000/frappe/frappe-socketio:${FRAPPE_VERSION} image: localhost:5000/frappe/erpnext:${ERPNEXT_VERSION}
queue-short: queue-short:
image: localhost:5000/frappe/frappe-worker:${FRAPPE_VERSION} image: localhost:5000/frappe/erpnext:${ERPNEXT_VERSION}
queue-default:
image: localhost:5000/frappe/frappe-worker:${FRAPPE_VERSION}
queue-long: queue-long:
image: localhost:5000/frappe/frappe-worker:${FRAPPE_VERSION} image: localhost:5000/frappe/erpnext:${ERPNEXT_VERSION}
scheduler: scheduler:
image: localhost:5000/frappe/frappe-worker:${FRAPPE_VERSION} image: localhost:5000/frappe/erpnext:${ERPNEXT_VERSION}

View File

@@ -1,4 +1,5 @@
import os import os
import re
import shutil import shutil
import subprocess import subprocess
from dataclasses import dataclass from dataclasses import dataclass
@@ -22,12 +23,27 @@ def _add_version_var(name: str, env_path: Path):
f.write(f"\n{name}={os.environ[name]}") f.write(f"\n{name}={os.environ[name]}")
def _add_sites_var(env_path: Path):
with open(env_path, "r+") as f:
content = f.read()
content = re.sub(
rf"SITES=.*",
f"SITES=`tests.localhost`,`test-erpnext-site.localhost`,`test-pg-site.localhost`",
content,
)
f.seek(0)
f.truncate()
f.write(content)
@pytest.fixture(scope="session") @pytest.fixture(scope="session")
def env_file(tmp_path_factory: pytest.TempPathFactory): def env_file(tmp_path_factory: pytest.TempPathFactory):
tmp_path = tmp_path_factory.mktemp("frappe-docker") tmp_path = tmp_path_factory.mktemp("frappe-docker")
file_path = tmp_path / ".env" file_path = tmp_path / ".env"
shutil.copy("example.env", file_path) shutil.copy("example.env", file_path)
_add_sites_var(file_path)
for var in ("FRAPPE_VERSION", "ERPNEXT_VERSION"): for var in ("FRAPPE_VERSION", "ERPNEXT_VERSION"):
_add_version_var(name=var, env_path=file_path) _add_version_var(name=var, env_path=file_path)
@@ -52,14 +68,14 @@ def frappe_setup(compose: Compose):
@pytest.fixture(scope="session") @pytest.fixture(scope="session")
def frappe_site(compose: Compose): def frappe_site(compose: Compose):
site_name = "tests" site_name = "tests.localhost"
compose.bench( compose.bench(
"new-site", "new-site",
# TODO: change to --mariadb-user-host-login-scope=%
"--no-mariadb-socket",
"--db-root-password=123",
"--admin-password=admin",
site_name, site_name,
"--mariadb-root-password",
"123",
"--admin-password",
"admin",
) )
compose("restart", "backend") compose("restart", "backend")
yield site_name yield site_name
@@ -68,11 +84,7 @@ def frappe_site(compose: Compose):
@pytest.fixture(scope="class") @pytest.fixture(scope="class")
def erpnext_setup(compose: Compose): def erpnext_setup(compose: Compose):
compose.stop() compose.stop()
compose("up", "-d", "--quiet-pull")
args = ["-f", "overrides/compose.erpnext.yaml"]
if CI:
args += ("-f", "tests/compose.ci-erpnext.yaml")
compose(*args, "up", "-d", "--quiet-pull")
yield yield
compose.stop() compose.stop()
@@ -80,23 +92,16 @@ def erpnext_setup(compose: Compose):
@pytest.fixture(scope="class") @pytest.fixture(scope="class")
def erpnext_site(compose: Compose): def erpnext_site(compose: Compose):
site_name = "test_erpnext_site" site_name = "test-erpnext-site.localhost"
args = [ args = [
"new-site", "new-site",
# TODO: change to --mariadb-user-host-login-scope=%
"--no-mariadb-socket",
"--db-root-password=123",
"--admin-password=admin",
"--install-app=erpnext",
site_name, site_name,
"--mariadb-root-password",
"123",
"--admin-password",
"admin",
"--install-app",
"erpnext",
] ]
erpnext_version = os.environ.get("ERPNEXT_VERSION")
if erpnext_version in [
"develop",
"version-14",
] or erpnext_version.startswith("v14"):
args.append("--install-app=payments")
compose.bench(*args) compose.bench(*args)
compose("restart", "backend") compose("restart", "backend")
yield site_name yield site_name
@@ -146,6 +151,7 @@ def s3_service(python_path: str, compose: Compose):
subprocess.check_call(cmd) subprocess.check_call(cmd)
compose("cp", "tests/_create_bucket.py", "backend:/tmp") compose("cp", "tests/_create_bucket.py", "backend:/tmp")
compose.exec("backend", "bench", "pip", "install", "boto3~=1.34.143")
compose.exec( compose.exec(
"-e", "-e",
f"S3_ACCESS_KEY={access_key}", f"S3_ACCESS_KEY={access_key}",

View File

@@ -10,7 +10,6 @@ from tests.utils import Compose, check_url_content
BACKEND_SERVICES = ( BACKEND_SERVICES = (
"backend", "backend",
"queue-short", "queue-short",
"queue-default",
"queue-long", "queue-long",
"scheduler", "scheduler",
) )
@@ -39,7 +38,7 @@ def assets_cb(text: str):
@pytest.mark.parametrize( @pytest.mark.parametrize(
("url", "callback"), (("/", index_cb), ("/api/method/version", api_cb)) ("url", "callback"), (("/", index_cb), ("/api/method/ping", api_cb))
) )
def test_endpoints(url: str, callback: Any, frappe_site: str): def test_endpoints(url: str, callback: Any, frappe_site: str):
check_url_content( check_url_content(
@@ -89,44 +88,31 @@ def test_frappe_connections_in_backends(
): ):
filename = "_ping_frappe_connections.py" filename = "_ping_frappe_connections.py"
compose("cp", f"tests/{filename}", f"{service}:/tmp/") compose("cp", f"tests/{filename}", f"{service}:/tmp/")
compose.exec(service, python_path, f"/tmp/{filename}") compose.exec(
"-w",
"/home/frappe/frappe-bench/sites",
service,
python_path,
f"/tmp/{filename}",
)
def test_push_backup( def test_push_backup(
python_path: str,
frappe_site: str, frappe_site: str,
s3_service: S3ServiceResult, s3_service: S3ServiceResult,
compose: Compose, compose: Compose,
): ):
restic_password = "secret"
compose.bench("--site", frappe_site, "backup", "--with-files") compose.bench("--site", frappe_site, "backup", "--with-files")
compose.exec( restic_args = [
"backend", "--env=RESTIC_REPOSITORY=s3:http://minio:9000/frappe",
"push-backup", f"--env=AWS_ACCESS_KEY_ID={s3_service.access_key}",
"--site", f"--env=AWS_SECRET_ACCESS_KEY={s3_service.secret_key}",
frappe_site, f"--env=RESTIC_PASSWORD={restic_password}",
"--bucket", ]
"frappe", compose.exec(*restic_args, "backend", "restic", "init")
"--region-name", compose.exec(*restic_args, "backend", "restic", "backup", "sites")
"us-east-1", compose.exec(*restic_args, "backend", "restic", "snapshots")
"--endpoint-url",
"http://minio:9000",
"--aws-access-key-id",
s3_service.access_key,
"--aws-secret-access-key",
s3_service.secret_key,
)
compose("cp", "tests/_check_backup_files.py", "backend:/tmp")
compose.exec(
"-e",
f"S3_ACCESS_KEY={s3_service.access_key}",
"-e",
f"S3_SECRET_KEY={s3_service.secret_key}",
"-e",
f"SITE_NAME={frappe_site}",
"backend",
python_path,
"/tmp/_check_backup_files.py",
)
def test_https(frappe_site: str, compose: Compose): def test_https(frappe_site: str, compose: Compose):
@@ -140,7 +126,7 @@ class TestErpnext:
("url", "callback"), ("url", "callback"),
( (
( (
"/api/method/erpnext.templates.pages.product_search.get_product_list", "/api/method/erpnext.templates.pages.search_help.get_help_results_sections?text=help",
api_cb, api_cb,
), ),
("/assets/erpnext/js/setup_wizard.js", assets_cb), ("/assets/erpnext/js/setup_wizard.js", assets_cb),
@@ -157,7 +143,7 @@ class TestPostgres:
def test_site_creation(self, compose: Compose): def test_site_creation(self, compose: Compose):
compose.bench( compose.bench(
"new-site", "new-site",
"test_pg_site", "test-pg-site.localhost",
"--db-type", "--db-type",
"postgres", "postgres",
"--admin-password", "--admin-password",