It is not possible to publish products on Website

Hi,
ERPNext runs without any problems, but unfortunately I have not found a way to make my products available on the website. I hope someone can help me.
I have read several times that this should be possible by default, but I cannot find the described ways because the buttons are not available.

I have ERPNext on Proxmox VE in a LXC container. There I have hosted it myself as described on Github using Docker Compose.

Installed Apps

ERPNext: v15.63.0

Frappe Framework: v15.69.1

If you need any information please let me know.

https://github.com/frappe/webshop

I have already tried this, but then I run into problems. First of all, the instructions do not mention that Payments must be downloaded. This is not a problem in itself and after downloading, the webshop can also be installed in the terminal without an error message.

When I then access ERPNext, I only get “Internal Server Error”. I can then no longer access the web interface. I can only access the web interface again when the payments is removed. Just removing the webshop does not solve the error either.

$ bench get-app payments --resolve-deps
$ bench --site frontend install-app webshop

Installing payments...
Updating DocTypes for payments      : [========================================] 100%
* Installing Payment Custom Fields in Web Form
Updating Dashboard for payments
App erpnext already installed

Installing webshop...
Updating DocTypes for webshop       : [========================================] 100%
Thank you for installing Frappe Webshop!
Updating Dashboard for webshop

Please check the frappe logs. You might get some clue.
Or paste it here

I have just tried this.

frappe@e2bf51c43428:~/frappe-bench$ bench get-app payments --resolve-deps
Following apps will be installed
1. payments
Getting payments
$ git clone https://github.com/frappe/payments.git   --origin upstream
Cloning into 'payments'...
remote: Enumerating objects: 2199, done.
remote: Counting objects: 100% (873/873), done.
remote: Compressing objects: 100% (313/313), done.
remote: Total 2199 (delta 720), reused 568 (delta 560), pack-reused 1326 (from 3)
Receiving objects: 100% (2199/2199), 407.15 KiB | 1.23 MiB/s, done.
Resolving deltas: 100% (1200/1200), done.
Installing payments
$ /home/frappe/frappe-bench/env/bin/python -m pip install --quiet --upgrade -e /home/frappe/frappe-bench/apps/payments
$ bench build --app payments
✔ Application Assets Linked


yarn run v1.22.22
$ node esbuild --production --apps payments --run-build-command
File                                                        Size

 DONE  Total Build Time: 202.457ms

Done in 1.12s.
Compiling translations for payments
frappe@e2bf51c43428:~/frappe-bench$ bench get-app webshop
Getting webshop
$ git clone https://github.com/frappe/webshop.git   --origin upstream
Cloning into 'webshop'...
remote: Enumerating objects: 403589, done.
remote: Counting objects: 100% (1127/1127), done.
remote: Compressing objects: 100% (332/332), done.
remote: Total 403589 (delta 978), reused 795 (delta 795), pack-reused 402462 (from 2)
Receiving objects: 100% (403589/403589), 913.82 MiB | 29.18 MiB/s, done.
Resolving deltas: 100% (284729/284729), done.
Ignoring dependencies of webshop. To install dependencies use --resolve-deps
Installing webshop
$ /home/frappe/frappe-bench/env/bin/python -m pip install --quiet --upgrade -e /home/frappe/frappe-bench/apps/webshop
$ bench build --app webshop
✔ Application Assets Linked


yarn run v1.22.22
$ node esbuild --production --apps webshop --run-build-command
Browserslist: caniuse-lite is outdated. Please run:
  npx update-browserslist-db@latest
  Why you should do it regularly: https://github.com/browserslist/update-db#readme
File                                                        Size

webshop/dist/js/
└─ web.bundle.WLOGYSZO.js                                   33.36 Kb

webshop/dist/css/
└─ webshop-web.bundle.MYPPSQVR.css                          22.79 Kb

webshop/dist/css-rtl/
└─ webshop-web.bundle.7SUF4XJI.css                          22.78 Kb

 DONE  Total Build Time: 1.141s

Done in 2.08s.
Compiling translations for webshop
frappe@e2bf51c43428:~/frappe-bench$ bench --site frontend install-app webshop

Installing payments...
Updating DocTypes for payments      : [========================================] 100%
* Installing Payment Custom Fields in Web Form
Updating Dashboard for payments
App erpnext already installed

Installing webshop...
Updating DocTypes for webshop       : [========================================] 100%
Thank you for installing Frappe Webshop!
Updating Dashboard for webshop



Here are the logs. If something is missing, please let me know.

bench.log

2025-05-29 11:26:05,236 INFO /usr/local/bin/bench get-app payments --resolve-deps
2025-05-29 11:26:05,833 LOG Getting payments
2025-05-29 11:26:05,834 DEBUG cd ./apps && git clone https://github.com/frappe/payments.git   --origin upstream
2025-05-29 11:26:06,774 LOG Installing payments
2025-05-29 11:26:06,775 DEBUG cd /home/frappe/frappe-bench && /home/frappe/frappe-bench/env/bin/python -m pip install --quiet --upgrade -e /home/frappe/frappe-bench/apps/payments 
2025-05-29 11:26:08,821 DEBUG bench build --app payments
2025-05-29 11:26:08,958 INFO /usr/local/bin/bench build --app payments
2025-05-29 11:26:20,026 INFO /usr/local/bin/bench get-app payments
2025-05-29 11:26:34,733 INFO /usr/local/bin/bench get-app webshop
2025-05-29 11:26:35,056 LOG Getting webshop
2025-05-29 11:26:35,056 DEBUG cd ./apps && git clone https://github.com/frappe/webshop.git   --origin upstream
2025-05-29 11:26:45,588 INFO /usr/local/bin/bench schedule
2025-05-29 11:26:47,193 INFO /usr/local/bin/bench schedule
2025-05-29 11:26:49,000 INFO /usr/local/bin/bench schedule
2025-05-29 11:26:51,193 INFO /usr/local/bin/bench schedule
2025-05-29 11:26:54,214 INFO /usr/local/bin/bench schedule
2025-05-29 11:26:59,043 INFO /usr/local/bin/bench schedule
2025-05-29 11:27:06,896 INFO /usr/local/bin/bench schedule
2025-05-29 11:27:21,077 INFO /usr/local/bin/bench schedule
2025-05-29 11:27:25,491 LOG Installing webshop
2025-05-29 11:27:25,491 DEBUG cd /home/frappe/frappe-bench && /home/frappe/frappe-bench/env/bin/python -m pip install --quiet --upgrade -e /home/frappe/frappe-bench/apps/webshop 
2025-05-29 11:27:27,490 DEBUG bench build --app webshop
2025-05-29 11:27:27,626 INFO /usr/local/bin/bench build --app webshop
2025-05-29 11:27:33,502 INFO /usr/local/bin/bench --site frontend install-app webshop
2025-05-29 11:27:47,792 INFO /usr/local/bin/bench schedule

database.log

2025-05-29 11:27:35,163 WARNING database DDL Query made to DB:
create table `tabPayment Gateway` (
			name varchar(140) primary key,
			creation datetime(6),
			modified datetime(6),
			modified_by varchar(140),
			owner varchar(140),
			docstatus int(1) not null default '0',
			idx int(8) not null default '0',
			`gateway` varchar(140) unique,
`gateway_settings` varchar(140),
`gateway_controller` varchar(140),
`_user_tags` text,
`_comments` text,
`_assign` text,
`_liked_by` text,
index modified(modified))
			ENGINE=InnoDB
			ROW_FORMAT=DYNAMIC
			CHARACTER SET=utf8mb4
			COLLATE=utf8mb4_unicode_ci
2025-05-29 11:27:35,307 WARNING database DDL Query made to DB:
create table `tabGoCardless Mandate` (
			name varchar(140) primary key,
			creation datetime(6),
			modified datetime(6),
			modified_by varchar(140),
			owner varchar(140),
			docstatus int(1) not null default '0',
			idx int(8) not null default '0',
			`disabled` int(1) not null default 0,
`customer` varchar(140),
`mandate` varchar(140) unique,
`gocardless_customer` varchar(140),
`_user_tags` text,
`_comments` text,
`_assign` text,
`_liked_by` text,
index modified(modified))
			ENGINE=InnoDB
			ROW_FORMAT=DYNAMIC
			CHARACTER SET=utf8mb4
			COLLATE=utf8mb4_unicode_ci
2025-05-29 11:27:35,541 WARNING database DDL Query made to DB:
create table `tabMpesa Settings` (
			name varchar(140) primary key,
			creation datetime(6),
			modified datetime(6),
			modified_by varchar(140),
			owner varchar(140),
			docstatus int(1) not null default '0',
			idx int(8) not null default '0',
			`payment_gateway_name` varchar(140) unique,
`consumer_key` varchar(140),
`consumer_secret` text,
`initiator_name` varchar(140),
`till_number` varchar(140),
`transaction_limit` decimal(21,9) not null default 150000.0,
`sandbox` int(1) not null default 0,
`business_shortcode` varchar(140),
`online_passkey` text,
`security_credential` text,
`account_balance` longtext,
`_user_tags` text,
`_comments` text,
`_assign` text,
`_liked_by` text,
index modified(modified))
			ENGINE=InnoDB
			ROW_FORMAT=DYNAMIC
			CHARACTER SET=utf8mb4
			COLLATE=utf8mb4_unicode_ci
2025-05-29 11:27:35,698 WARNING database DDL Query made to DB:
create table `tabGoCardless Settings` (
			name varchar(140) primary key,
			creation datetime(6),
			modified datetime(6),
			modified_by varchar(140),
			owner varchar(140),
			docstatus int(1) not null default '0',
			idx int(8) not null default '0',
			`gateway_name` varchar(140) unique,
`access_token` varchar(140),
`webhooks_secret` varchar(140),
`use_sandbox` int(1) not null default 0,
`header_img` text,
`_user_tags` text,
`_comments` text,
`_assign` text,
`_liked_by` text,
index modified(modified))
			ENGINE=InnoDB
			ROW_FORMAT=DYNAMIC
			CHARACTER SET=utf8mb4
			COLLATE=utf8mb4_unicode_ci
2025-05-29 11:27:35,833 WARNING database DDL Query made to DB:
create table `tabBraintree Settings` (
			name varchar(140) primary key,
			creation datetime(6),
			modified datetime(6),
			modified_by varchar(140),
			owner varchar(140),
			docstatus int(1) not null default '0',
			idx int(8) not null default '0',
			`gateway_name` varchar(140),
`merchant_id` varchar(140),
`public_key` varchar(140),
`private_key` text,
`use_sandbox` int(1) not null default 0,
`header_img` text,
`_user_tags` text,
`_comments` text,
`_assign` text,
`_liked_by` text,
index modified(modified))
			ENGINE=InnoDB
			ROW_FORMAT=DYNAMIC
			CHARACTER SET=utf8mb4
			COLLATE=utf8mb4_unicode_ci
2025-05-29 11:27:36,358 WARNING database DDL Query made to DB:
create table `tabStripe Settings` (
			name varchar(140) primary key,
			creation datetime(6),
			modified datetime(6),
			modified_by varchar(140),
			owner varchar(140),
			docstatus int(1) not null default '0',
			idx int(8) not null default '0',
			`gateway_name` varchar(140),
`publishable_key` varchar(140),
`secret_key` text,
`header_img` text,
`redirect_url` varchar(140),
`_user_tags` text,
`_comments` text,
`_assign` text,
`_liked_by` text,
index modified(modified))
			ENGINE=InnoDB
			ROW_FORMAT=DYNAMIC
			CHARACTER SET=utf8mb4
			COLLATE=utf8mb4_unicode_ci
2025-05-29 11:27:37,973 WARNING database DDL Query made to DB:
ALTER TABLE `tabWeb Form` MODIFY `condition_json` json, MODIFY `amount` decimal(21,9) not null default 0
2025-05-29 11:27:39,296 WARNING database DDL Query made to DB:
create table `tabWebsite Item Tabbed Section` (
			name varchar(140) primary key,
			creation datetime(6),
			modified datetime(6),
			modified_by varchar(140),
			owner varchar(140),
			docstatus int(1) not null default '0',
			idx int(8) not null default '0',
			`label` varchar(140),
`content` longtext,
parent varchar(140),
parentfield varchar(140),
parenttype varchar(140),
index parent(parent))
			ENGINE=InnoDB
			ROW_FORMAT=DYNAMIC
			CHARACTER SET=utf8mb4
			COLLATE=utf8mb4_unicode_ci
2025-05-29 11:27:39,447 WARNING database DDL Query made to DB:
create table `tabRecommended Items` (
			name varchar(140) primary key,
			creation datetime(6),
			modified datetime(6),
			modified_by varchar(140),
			owner varchar(140),
			docstatus int(1) not null default '0',
			idx int(8) not null default '0',
			`website_item` varchar(140),
`website_item_name` varchar(140),
`item_code` varchar(140),
`route` text,
`website_item_image` text,
`website_item_thumbnail` varchar(140),
parent varchar(140),
parentfield varchar(140),
parenttype varchar(140),
index parent(parent))
			ENGINE=InnoDB
			ROW_FORMAT=DYNAMIC
			CHARACTER SET=utf8mb4
			COLLATE=utf8mb4_unicode_ci
2025-05-29 11:27:39,569 WARNING database DDL Query made to DB:
create table `tabWishlist Item` (
			name varchar(140) primary key,
			creation datetime(6),
			modified datetime(6),
			modified_by varchar(140),
			owner varchar(140),
			docstatus int(1) not null default '0',
			idx int(8) not null default '0',
			`item_code` varchar(140),
`website_item` varchar(140),
`web_item_name` varchar(140),
`item_name` varchar(140),
`item_group` varchar(140),
`description` longtext,
`route` text,
`image` text,
`warehouse` varchar(140),
parent varchar(140),
parentfield varchar(140),
parenttype varchar(140),
index parent(parent))
			ENGINE=InnoDB
			ROW_FORMAT=DYNAMIC
			CHARACTER SET=utf8mb4
			COLLATE=utf8mb4_unicode_ci
2025-05-29 11:27:39,688 WARNING database DDL Query made to DB:
create table `tabHomepage Featured Product` (
			name varchar(140) primary key,
			creation datetime(6),
			modified datetime(6),
			modified_by varchar(140),
			owner varchar(140),
			docstatus int(1) not null default '0',
			idx int(8) not null default '0',
			`item_code` varchar(140),
`item_name` varchar(140),
`description` longtext,
`image` text,
`thumbnail` text,
`route` text,
parent varchar(140),
parentfield varchar(140),
parenttype varchar(140),
index parent(parent))
			ENGINE=InnoDB
			ROW_FORMAT=DYNAMIC
			CHARACTER SET=utf8mb4
			COLLATE=utf8mb4_unicode_ci
2025-05-29 11:27:39,817 WARNING database DDL Query made to DB:
create table `tabWishlist` (
			name varchar(140) primary key,
			creation datetime(6),
			modified datetime(6),
			modified_by varchar(140),
			owner varchar(140),
			docstatus int(1) not null default '0',
			idx int(8) not null default '0',
			`user` varchar(140) unique,
`_user_tags` text,
`_comments` text,
`_assign` text,
`_liked_by` text,
index modified(modified))
			ENGINE=InnoDB
			ROW_FORMAT=DYNAMIC
			CHARACTER SET=utf8mb4
			COLLATE=utf8mb4_unicode_ci
2025-05-29 11:27:39,961 WARNING database DDL Query made to DB:
create table `tabItem Review` (
			name varchar(140) primary key,
			creation datetime(6),
			modified datetime(6),
			modified_by varchar(140),
			owner varchar(140),
			docstatus int(1) not null default '0',
			idx int(8) not null default '0',
			`website_item` varchar(140),
`user` varchar(140),
`customer` varchar(140),
`item` varchar(140),
`published_on` varchar(140),
`review_title` varchar(140),
`rating` decimal(3,2),
`comment` text,
`_user_tags` text,
`_comments` text,
`_assign` text,
`_liked_by` text,
index modified(modified))
			ENGINE=InnoDB
			ROW_FORMAT=DYNAMIC
			CHARACTER SET=utf8mb4
			COLLATE=utf8mb4_unicode_ci
2025-05-29 11:27:40,262 WARNING database DDL Query made to DB:
create table `tabWebsite Offer` (
			name varchar(140) primary key,
			creation datetime(6),
			modified datetime(6),
			modified_by varchar(140),
			owner varchar(140),
			docstatus int(1) not null default '0',
			idx int(8) not null default '0',
			`offer_title` varchar(140),
`offer_subtitle` varchar(140),
`offer_details` longtext,
parent varchar(140),
parentfield varchar(140),
parenttype varchar(140),
index parent(parent))
			ENGINE=InnoDB
			ROW_FORMAT=DYNAMIC
			CHARACTER SET=utf8mb4
			COLLATE=utf8mb4_unicode_ci
2025-05-29 11:27:40,424 WARNING database DDL Query made to DB:
create table `tabWebsite Item` (
			name varchar(140) primary key,
			creation datetime(6),
			modified datetime(6),
			modified_by varchar(140),
			owner varchar(140),
			docstatus int(1) not null default '0',
			idx int(8) not null default '0',
			`naming_series` varchar(140) default 'WEB-ITM-.####',
`web_item_name` varchar(140),
`route` text,
`has_variants` int(1) not null default 0,
`variant_of` varchar(140),
`published` int(1) not null default 1,
`item_code` varchar(140),
`item_name` varchar(140),
`item_group` varchar(140),
`stock_uom` varchar(140),
`description` longtext,
`brand` varchar(140),
`website_image` text,
`website_image_alt` varchar(140),
`slideshow` varchar(140),
`thumbnail` varchar(140),
`website_warehouse` varchar(140),
`on_backorder` int(1) not null default 0,
`short_description` text,
`web_long_description` longtext,
`show_tabbed_section` int(1) not null default 0,
`ranking` int(11) not null default 0,
`website_content` longtext,
`_user_tags` text,
`_comments` text,
`_assign` text,
`_liked_by` text,
index `variant_of`(`variant_of`),
index `item_group`(`item_group`),
index `brand`(`brand`),
index modified(modified))
			ENGINE=InnoDB
			ROW_FORMAT=DYNAMIC
			CHARACTER SET=utf8mb4
			COLLATE=utf8mb4_unicode_ci
2025-05-29 11:27:40,570 WARNING database DDL Query made to DB:
ALTER TABLE `tabWebsite Item`
				ADD INDEX IF NOT EXISTS `route_index`(route(500))
2025-05-29 11:27:42,190 WARNING database DDL Query made to DB:
ALTER TABLE `tabItem` MODIFY `standard_rate` decimal(21,9) not null default 0, MODIFY `last_purchase_rate` decimal(21,9) not null default 0, MODIFY `safety_stock` decimal(21,9) not null default 0, MODIFY `max_discount` decimal(21,9) not null default 0, MODIFY `over_billing_allowance` decimal(21,9) not null default 0, MODIFY `total_projected_qty` decimal(21,9) not null default 0, MODIFY `over_delivery_receipt_allowance` decimal(21,9) not null default 0, MODIFY `valuation_rate` decimal(21,9) not null default 0, MODIFY `opening_stock` decimal(21,9) not null default 0, MODIFY `weight_per_unit` decimal(21,9) not null default 0

I have also tried to install the webshop with “webshop --resolve-deps” and get the following message.

frappe@e2bf51c43428:~/frappe-bench$ bench get-app webshop --resolve-deps
ERROR: Invalid frappe path: payments
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/site-packages/bench/utils/__init__.py", line 96, in is_valid_frappe_branch
    res = g.ls_remote("--heads", "--tags", frappe_path, frappe_branch)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/git/cmd.py", line 986, in <lambda>
    return lambda *args, **kwargs: self._call_process(name, *args, **kwargs)
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/git/cmd.py", line 1599, in _call_process
    return self.execute(call, **exec_kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/git/cmd.py", line 1389, in execute
    raise GitCommandError(redacted_command, status, stderr_value, stdout_value)
git.exc.GitCommandError: Cmd('git') failed due to: exit code(128)
  cmdline: git ls-remote --heads --tags payments develop
  stderr: 'fatal: 'payments' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/usr/local/bin/bench", line 8, in <module>
    sys.exit(cli())
             ^^^^^
  File "/usr/local/lib/python3.11/site-packages/bench/cli.py", line 132, in cli
    bench_command()
  File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1442, in __call__
    return self.main(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1363, in main
    rv = self.invoke(ctx)
         ^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1830, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1226, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/click/core.py", line 794, in invoke
    return callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/bench/commands/make.py", line 181, in get_app
    get_app(
  File "/usr/local/lib/python3.11/site-packages/bench/app.py", line 695, in get_app
    resolution = make_resolution_plan(app, bench)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/bench/app.py", line 613, in make_resolution_plan
    is_valid_frappe_branch(dep_app.url, dep_app.branch)
  File "/usr/local/lib/python3.11/site-packages/bench/utils/__init__.py", line 102, in is_valid_frappe_branch
    raise InvalidRemoteException(f"Invalid frappe path: {frappe_path}") from e
bench.exceptions.InvalidRemoteException: Invalid frappe path: payments
frappe@e2bf51c43428:~/frappe-bench$