[Tutorial] How to 'manually' install ERPNext v13.11 Production on Debian 10 (w/SSL cert)

:rofl: No. I think not!

Maybe someone can take the time to figure out all of the differences between Debian 10 and Debian 11 and then write another guide for Debain 11.

This one is for Debian 10.

Maybe one day I will have the time to do a Debian 11 version, but that is not anytime very soon.

Thanks.

BKM

image

same bro, i try this command on mariadb 10.6 with ubuntu 22 but error.

@bkm @Divert can you help me please? whats a correct command for this? Tell me ASAP.

thanks

@Tri_Agung read my comment here. It will give you the hint to your answer.

Still I have not been able to install ERPNext no matter what guide I try. I am trying to set a VPS from Digital Ocean that already has ERPNext in it’s image. Just fire up the image and you have ERPNext, the problem is that it is not clear to me how to set your custom domains.

What is the difference between sites and domains in ERPNext language?

Unfortunately I cannot help you with this.

I am a fan of ONLY using LTS version of operating systems so as to reduce the volatility of the constantly changing support packages.

That is why I write my tutorials for only LTS versions of the OS as well. So what I spend my valuable time researching and writing about currently are Debian 10 and Ubuntu 20.04.

For any other operating systems, you are on your own. The newer OS versions take up way too much time due to the constant changes, and I still have a business to run.

BKM

Sites are separate instances of ERPNext, such as you might have with a multi-tennant configuration.

Domains are the modules that focuses ERPNext into different business solutions such as Distribution, Retail Sales, Manufacturing, etc.

BKM

1 Like

In this case, are you speaking about URL domains or ERPNext business solution domains?

If it is the former, then this excerpt from the instructions should help you set your URL to the site:

Hope this helps.

BKM

1 Like

@bkm Thanks a lot, this tutorial Works flawlessly. I just installed successfully. Thanks again…

In the steps where you ask log out and back in, I had to do a su - [USER] and averything worked fine.

returned

Setting Up Environment
$ /usr/bin/python3 -m venv env
The virtual environment was not created successfully because ensurepip is not
available.  On Debian/Ubuntu systems, you need to install the python3-venv
package using the following command.

    apt install python3.8-venv

After

apt install python3.8-venv

it worked.

I think installation procudure can be summarized as

  • Install required apps (mariadb, redis, nginx, etc…)
  • Install bench and frappe
  • Install erpnext
  • setup production
  • dns, site, ssl post configurations.

These are independent actions I believe.

So I think we need clear steps for each action. It would also help anyone if we can identify which step they have trouble.

We can create something like this for each step I think.

Excelente tutorial despues de muchos intentos hasta ahora, por fin logre instalarlo con exito … Gracias BKM

There is currently an issue at this step:

bench init --frappe-branch version-13 frappe-bench

This error comes up:

The virtual environment was not created successfully because ensurepip is not
available. On Debian/Ubuntu systems, you need to install the python3-venv
package using the following command.

apt install python3.8-venv

You may need to use sudo with that command. After installing the python3-venv
package, recreate your virtual environment.

The fix is to run:

apt install python3.8-venv

And the installation will continue afterwards.

2 Likes

I am getting an error after this line.

sammy@localhost:~$ pip3 install frappe-bench
Traceback (most recent call last):
File “/usr/bin/pip3”, line 11, in
load_entry_point(‘pip==20.0.2’, ‘console_scripts’, ‘pip3’)()
File “/usr/local/lib/python3.8/dist-packages/pkg_resources/init.py”, line 486, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File “/usr/local/lib/python3.8/dist-packages/pkg_resources/init.py”, line 2867, in load_entry_point
return ep.load()
File “/usr/local/lib/python3.8/dist-packages/pkg_resources/init.py”, line 2471, in load
return self.resolve()
File “/usr/local/lib/python3.8/dist-packages/pkg_resources/init.py”, line 2477, in resolve
module = import(self.module_name, fromlist=[‘name’], level=0)
File “/usr/lib/python3/dist-packages/pip/_internal/cli/main.py”, line 10, in
from pip._internal.cli.autocompletion import autocomplete
File “/usr/lib/python3/dist-packages/pip/_internal/cli/autocompletion.py”, line 9, in
from pip._internal.cli.main_parser import create_main_parser
File “/usr/lib/python3/dist-packages/pip/_internal/cli/main_parser.py”, line 7, in
from pip._internal.cli import cmdoptions
File “/usr/lib/python3/dist-packages/pip/_internal/cli/cmdoptions.py”, line 24, in
from pip._internal.exceptions import CommandError
File “/usr/lib/python3/dist-packages/pip/_internal/exceptions.py”, line 10, in
from pip._vendor.six import iteritems
File “/usr/lib/python3/dist-packages/pip/_vendor/init.py”, line 65, in
vendored(“cachecontrol”)
File “/usr/lib/python3/dist-packages/pip/_vendor/init.py”, line 36, in vendored
import(modulename, globals(), locals(), level=0)
File “”, line 991, in _find_and_load
File “”, line 975, in _find_and_load_unlocked
File “”, line 655, in _load_unlocked
File “”, line 618, in _load_backward_compatible
File “”, line 259, in load_module
File “/usr/share/python-wheels/CacheControl-0.12.6-py2.py3-none-any.whl/cachecontrol/init.py”, line 9, in
File “”, line 991, in _find_and_load
File “”, line 975, in _find_and_load_unlocked
File “”, line 655, in _load_unlocked
File “”, line 618, in _load_backward_compatible
File “”, line 259, in load_module
File “/usr/share/python-wheels/CacheControl-0.12.6-py2.py3-none-any.whl/cachecontrol/wrapper.py”, line 1, in
File “”, line 991, in _find_and_load
File “”, line 975, in _find_and_load_unlocked
File “”, line 655, in _load_unlocked
File “”, line 618, in _load_backward_compatible
File “”, line 259, in load_module
File “/usr/share/python-wheels/CacheControl-0.12.6-py2.py3-none-any.whl/cachecontrol/adapter.py”, line 5, in
File “”, line 991, in _find_and_load
File “”, line 975, in _find_and_load_unlocked
File “”, line 655, in _load_unlocked
File “”, line 618, in _load_backward_compatible
File “”, line 259, in load_module
File “/usr/share/python-wheels/requests-2.22.0-py2.py3-none-any.whl/requests/init.py”, line 95, in
File “”, line 991, in _find_and_load
File “”, line 975, in _find_and_load_unlocked
File “”, line 655, in _load_unlocked
File “”, line 618, in _load_backward_compatible
File “”, line 259, in load_module
File “/usr/share/python-wheels/urllib3-1.25.8-py2.py3-none-any.whl/urllib3/contrib/pyopenssl.py”, line 46, in
File “/usr/lib/python3/dist-packages/OpenSSL/init.py”, line 8, in
from OpenSSL import crypto, SSL
File “/usr/lib/python3/dist-packages/OpenSSL/crypto.py”, line 1553, in
class X509StoreFlags(object):
File “/usr/lib/python3/dist-packages/OpenSSL/crypto.py”, line 1573, in X509StoreFlags
CB_ISSUER_CHECK = _lib.X509_V_FLAG_CB_ISSUER_CHECK
AttributeError: module ‘lib’ has no attribute ‘X509_V_FLAG_CB_ISSUER_CHECK’
Error in sys.excepthook:
Traceback (most recent call last):
File “/usr/lib/python3/dist-packages/apport_python_hook.py”, line 72, in apport_excepthook
from apport.fileutils import likely_packaged, get_recent_crashes
File “/usr/lib/python3/dist-packages/apport/init.py”, line 5, in
from apport.report import Report
File “/usr/lib/python3/dist-packages/apport/report.py”, line 32, in
import apport.fileutils
File “/usr/lib/python3/dist-packages/apport/fileutils.py”, line 12, in
import os, glob, subprocess, os.path, time, pwd, sys, requests_unixsocket
File “/usr/lib/python3/dist-packages/requests_unixsocket/init.py”, line 1, in
import requests
File “”, line 991, in _find_and_load
File “”, line 975, in _find_and_load_unlocked
File “”, line 655, in _load_unlocked
File “”, line 618, in _load_backward_compatible
File “”, line 259, in load_module
File “/usr/share/python-wheels/requests-2.22.0-py2.py3-none-any.whl/requests/init.py”, line 95, in
File “”, line 991, in _find_and_load
File “”, line 975, in _find_and_load_unlocked
File “”, line 655, in _load_unlocked
File “”, line 618, in _load_backward_compatible
File “”, line 259, in load_module
File “/usr/share/python-wheels/urllib3-1.25.8-py2.py3-none-any.whl/urllib3/contrib/pyopenssl.py”, line 46, in
File “/usr/lib/python3/dist-packages/OpenSSL/init.py”, line 8, in
from OpenSSL import crypto, SSL
File “/usr/lib/python3/dist-packages/OpenSSL/crypto.py”, line 1553, in
class X509StoreFlags(object):
File “/usr/lib/python3/dist-packages/OpenSSL/crypto.py”, line 1573, in X509StoreFlags
CB_ISSUER_CHECK = _lib.X509_V_FLAG_CB_ISSUER_CHECK
AttributeError: module ‘lib’ has no attribute ‘X509_V_FLAG_CB_ISSUER_CHECK’

Original exception was:
Traceback (most recent call last):
File “/usr/bin/pip3”, line 11, in
load_entry_point(‘pip==20.0.2’, ‘console_scripts’, ‘pip3’)()
File “/usr/local/lib/python3.8/dist-packages/pkg_resources/init.py”, line 486, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File “/usr/local/lib/python3.8/dist-packages/pkg_resources/init.py”, line 2867, in load_entry_point
return ep.load()
File “/usr/local/lib/python3.8/dist-packages/pkg_resources/init.py”, line 2471, in load
return self.resolve()
File “/usr/local/lib/python3.8/dist-packages/pkg_resources/init.py”, line 2477, in resolve
module = import(self.module_name, fromlist=[‘name’], level=0)
File “/usr/lib/python3/dist-packages/pip/_internal/cli/main.py”, line 10, in
from pip._internal.cli.autocompletion import autocomplete
File “/usr/lib/python3/dist-packages/pip/_internal/cli/autocompletion.py”, line 9, in
from pip._internal.cli.main_parser import create_main_parser
File “/usr/lib/python3/dist-packages/pip/_internal/cli/main_parser.py”, line 7, in
from pip._internal.cli import cmdoptions
File “/usr/lib/python3/dist-packages/pip/_internal/cli/cmdoptions.py”, line 24, in
from pip._internal.exceptions import CommandError
File “/usr/lib/python3/dist-packages/pip/_internal/exceptions.py”, line 10, in
from pip._vendor.six import iteritems
File “/usr/lib/python3/dist-packages/pip/_vendor/init.py”, line 65, in
vendored(“cachecontrol”)
File “/usr/lib/python3/dist-packages/pip/_vendor/init.py”, line 36, in vendored
import(modulename, globals(), locals(), level=0)
File “”, line 991, in _find_and_load
File “”, line 975, in _find_and_load_unlocked
File “”, line 655, in _load_unlocked
File “”, line 618, in _load_backward_compatible
File “”, line 259, in load_module
File “/usr/share/python-wheels/CacheControl-0.12.6-py2.py3-none-any.whl/cachecontrol/init.py”, line 9, in
File “”, line 991, in _find_and_load
File “”, line 975, in _find_and_load_unlocked
File “”, line 655, in _load_unlocked
File “”, line 618, in _load_backward_compatible
File “”, line 259, in load_module
File “/usr/share/python-wheels/CacheControl-0.12.6-py2.py3-none-any.whl/cachecontrol/wrapper.py”, line 1, in
File “”, line 991, in _find_and_load
File “”, line 975, in _find_and_load_unlocked
File “”, line 655, in _load_unlocked
File “”, line 618, in _load_backward_compatible
File “”, line 259, in load_module
File “/usr/share/python-wheels/CacheControl-0.12.6-py2.py3-none-any.whl/cachecontrol/adapter.py”, line 5, in
File “”, line 991, in _find_and_load
File “”, line 975, in _find_and_load_unlocked
File “”, line 655, in _load_unlocked
File “”, line 618, in _load_backward_compatible
File “”, line 259, in load_module
File “/usr/share/python-wheels/requests-2.22.0-py2.py3-none-any.whl/requests/init.py”, line 95, in
File “”, line 991, in _find_and_load
File “”, line 975, in _find_and_load_unlocked
File “”, line 655, in _load_unlocked
File “”, line 618, in _load_backward_compatible
File “”, line 259, in load_module
File “/usr/share/python-wheels/urllib3-1.25.8-py2.py3-none-any.whl/urllib3/contrib/pyopenssl.py”, line 46, in
File “/usr/lib/python3/dist-packages/OpenSSL/init.py”, line 8, in
from OpenSSL import crypto, SSL
File “/usr/lib/python3/dist-packages/OpenSSL/crypto.py”, line 1553, in
class X509StoreFlags(object):
File “/usr/lib/python3/dist-packages/OpenSSL/crypto.py”, line 1573, in X509StoreFlags
CB_ISSUER_CHECK = _lib.X509_V_FLAG_CB_ISSUER_CHECK
AttributeError: module ‘lib’ has no attribute ‘X509_V_FLAG_CB_ISSUER_CHECK’

Is this because of recent update of frappe framework to v14 ?

That seems very likely. V14 uses a newer python distribution. Now that v14 is the standard release, this tutorial will likely fail since it will try to get the v14 packages to do the install.

In order to install the v13 packages you will likely have to alter the ‘bench init’ command to go after the v13 version specifically. A similar edit will probably also be required for ‘bench get-app’ command.

I will not be doing anything for v14 anytime soon, but there are already other tutorials for setting up v14.

BKM

1 Like

Yes, would do that if I could get past this line which seems to give the error.

Ahh… I remember that now. Yes, I have been using a different version of bench as well. I did a separate post regarding the breaking changes in recent ‘bench’ version releases.

Use these commands instead:

pip3 install frappe-bench==5.12.0
sudo pip3 install frappe-bench==5.12.0

You can read more about the reason for this at this post:

Hope this helps…

BKM

2 Likes

Great. Thank you!

This should fix the issue of
AttributeError: module ‘lib’ has no attribute ‘X509_V_FLAG_CB_ISSUER_CHECK’

sudo pip3 uninstall pyopenssl cryptography
sudo pip3 install pyopenssl==22.0.0 cryptography=36.0.0
2 Likes
sudo pip3 install pyopenssl==22.0.0 cryptography==36.0.0

PS: I believe a single operator “=” was a typo

1 Like

Is there a better way to handle this part of site creation? I find that urls generated by sites created in this method carry site1.local as base url instead of the domain url added. this means url links don’t work.

That is why you have to add a line in the site_confi.json specifying the hostname.

BKM