Installing Frappe ERPNext on CentOS 7
-
Frappe's ERPNext is a free, open source ERP system that you can run on your own server. It uses both the MariaDB (or MySQL) relational database as well as the popular NoSQL Redis database as well (at the same time.) Installation can be a little confusing, but pretty easy once you know what to do. We will get up and running with a test site quickly with the following setup:
yum install mariadb mariadb-server wget cd /tmp wget https://raw.githubusercontent.com/frappe/bench/master/playbooks/install.py python install.py --develop --user frappe firewall-cmd --zone=public --add-port=8000/tcp --permanent firewall-cmd --reload cd /home/frappe/frappe-bench bench new-site mysite bench get-app erpnext https://github.com/frappe/erpnext bench --site mysite install-app erpnext bench start &
That's it! Your new site should be available at http://myserver:8000/
For production, we will, of course, want to put something like an NGinx proxy in front of this application, move the port to 443 and add an SSL certificate.
-
@scottalanmiller said in Installing Frappe ERPNext on CentOS 7:
Frappe's ERPNext is a free, open source ERP system that you can run on your own server. It uses both the MariaDB (or MySQL) relational database as well as the popular NoSQL Redis database as well (at the same time.) Installation can be a little confusing, but pretty easy once you know what to do. We will get up and running with a test site quickly with the following setup:
yum install mariadb mariadb-server wget cd /tmp wget https://raw.githubusercontent.com/frappe/bench/master/playbooks/install.py python install.py --develop --user frappe firewall-cmd --zone=public --add-port=8000/tcp --permanent firewall-cmd --reload cd /home/frappe/frappe-bench bench new-site mysite bench get-app erpnext https://github.com/frappe/erpnext bench --site mysite install-app erpnext bench start &
That's it! Your new site should be available at http://myserver:8000/
For production, we will, of course, want to put something like an NGinx proxy in front of this application, move the port to 443 and add an SSL certificate.
Did they remove their install script? If I remember right it used to handle the NGINX setup. You just had to pass whatever the production option was.
-
@scottalanmiller said in Installing Frappe ERPNext on CentOS 7:
For production, we will, of course, want to put something like an NGinx proxy in front of this application, move the port to 443 and add an SSL certificate.
If you put Nginx in front, then you are not changing the port on this box, not adding a SSL certificate to this box. Nginx sees all of that.
-
@JaredBusch said in Installing Frappe ERPNext on CentOS 7:
@scottalanmiller said in Installing Frappe ERPNext on CentOS 7:
For production, we will, of course, want to put something like an NGinx proxy in front of this application, move the port to 443 and add an SSL certificate.
If you put Nginx in front, then you are not changing the port on this box, not adding a SSL certificate to this box. Nginx sees all of that.
No reason Nginx would not be on the same box in front of this. That would be the most common way. No need for extra VMs just for that piece. Not unless you are building out a farm.
-
@scottalanmiller said in Installing Frappe ERPNext on CentOS 7:
@JaredBusch said in Installing Frappe ERPNext on CentOS 7:
@scottalanmiller said in Installing Frappe ERPNext on CentOS 7:
For production, we will, of course, want to put something like an NGinx proxy in front of this application, move the port to 443 and add an SSL certificate.
If you put Nginx in front, then you are not changing the port on this box, not adding a SSL certificate to this box. Nginx sees all of that.
No reason Nginx would not be on the same box in front of this. That would be the most common way. No need for extra VMs just for that piece. Not unless you are building out a farm.
It certainly can be on the same box. And if you are buying a new host, just for this, then yes, that does make the most sense.
But a lot of people have internal infrastructure and have no need to put Nginx on everything individually, because they would have a single proxy in front of everything. -
Dears,
I've installed ERPNext step by step on centos7 as here in post and while installing first instance i get this error
17:11:14 worker_short.1 | 17:11:14 *** Listening on short...
17:11:14 worker_short.1 | 17:11:14 short: frappe.utils.background_jobs.execute_job(async=True, event=u'all', job_name=u'frappe.integrations.doctype.razorpay_settings.razorpay_settings.capture_payment', kwargs={}, method=u'frappe.integrations.doctype.razorpay_settings.razorpay_settings.capture_payment', site=u'mysite', user=u'Administrator') (3c7ce945-ffcf-4fbd-9b10-25c266787478)
17:11:14 worker_short.1 | 17:11:14 short: Job OK (3c7ce945-ffcf-4fbd-9b10-25c266787478)
17:11:14 worker_short.1 | 17:11:14 Result is kept for 500 secondsalso i tried
#bench update --pull
#bench update--patch
#bench update --build
#bench update --bench
#bench update --requirements
#bench update --restart-supervisor
#bench update --upgrade
#bench --site [sitename] --force reinstall
#bench update
#bench reinstalland get the same error
please help
-
None of those look like errors. Is there any errors in the logs?
-
i found that the problem is in database conection between ERPNext and MariaDB, please help me to make ERPnext connect automatically with MariaDB
-
Exception happened during processing of request from ('196.218.198.56', 56004)
14:52:34 web.1 | Traceback (most recent call last):
14:52:34 web.1 | File "/usr/lib64/python2.7/SocketServer.py", line 593, in process_request_thread
14:52:34 web.1 | self.finish_request(request, client_address)
14:52:34 web.1 | File "/usr/lib64/python2.7/SocketServer.py", line 334, in finish_request
14:52:34 web.1 | self.RequestHandlerClass(request, client_address, self)
14:52:34 web.1 | File "/usr/lib64/python2.7/SocketServer.py", line 649, in init
14:52:34 web.1 | self.handle()
14:52:34 web.1 | File "/home/frappe/frappe-bench/env/lib/python2.7/site-packages/werkzeug/serving.py", line 232, in handle
14:52:34 web.1 | rv = BaseHTTPRequestHandler.handle(self)
14:52:34 web.1 | File "/usr/lib64/python2.7/BaseHTTPServer.py", line 340, in handle
14:52:34 web.1 | self.handle_one_request()
14:52:34 web.1 | File "/home/frappe/frappe-bench/env/lib/python2.7/site-packages/werkzeug/serving.py", line 267, in handle_one_request
14:52:34 web.1 | return self.run_wsgi()
14:52:34 web.1 | File "/home/frappe/frappe-bench/env/lib/python2.7/site-packages/werkzeug/serving.py", line 209, in run_wsgi
14:52:34 web.1 | execute(self.server.app)
14:52:34 web.1 | File "/home/frappe/frappe-bench/env/lib/python2.7/site-packages/werkzeug/serving.py", line 199, in execute
14:52:34 web.1 | for data in application_iter:
14:52:34 web.1 | File "/home/frappe/frappe-bench/env/lib/python2.7/site-packages/werkzeug/debug/init.py", line 284, in debug_application
14:52:34 web.1 | app_iter = self.app(environ, start_response)
14:52:34 web.1 | File "/home/frappe/frappe-bench/apps/frappe/frappe/middlewares.py", line 15, in call
14:52:34 web.1 | return super(StaticDataMiddleware, self).call(environ, start_response)
14:52:34 web.1 | File "/home/frappe/frappe-bench/env/lib/python2.7/site-packages/werkzeug/wsgi.py", line 600, in call
14:52:34 web.1 | return self.app(environ, start_response)
14:52:34 web.1 | File "/home/frappe/frappe-bench/env/lib/python2.7/site-packages/werkzeug/wsgi.py", line 600, in call
14:52:34 web.1 | return self.app(environ, start_response)
14:52:34 web.1 | File "/home/frappe/frappe-bench/env/lib/python2.7/site-packages/werkzeug/local.py", line 228, in application
14:52:34 web.1 | return ClosingIterator(app(environ, start_response), self.cleanup)
14:52:34 web.1 | File "/home/frappe/frappe-bench/env/lib/python2.7/site-packages/werkzeug/wrappers.py", line 301, in application
14:52:34 web.1 | return f(*args[:-2] + (request,))(*args[-2:])
14:52:34 web.1 | File "/home/frappe/frappe-bench/apps/frappe/frappe/app.py", line 53, in application
14:52:34 web.1 | init_request(request)
14:52:34 web.1 | File "/home/frappe/frappe-bench/apps/frappe/frappe/app.py", line 104, in init_request
14:52:34 web.1 | frappe.init(site=site, sites_path=_sites_path)
14:52:34 web.1 | File "/home/frappe/frappe-bench/apps/frappe/frappe/init.py", line 134, in init
14:52:34 web.1 | local.conf = _dict(get_site_config())
14:52:34 web.1 | File "/home/frappe/frappe-bench/apps/frappe/frappe/init.py", line 189, in get_site_config
14:52:34 web.1 | sys.exit(1)
14:52:34 web.1 | SystemExit: 1can anyone help me with this error ?
-
Have you checked if the database is running?
-
yes it is running
-
Can you connect to it with the mysql command?
-
yes can
-
@stacksofplates said in Installing Frappe ERPNext on CentOS 7:
Did they remove their install script? If I remember right it used to handle the NGINX setup. You just had to pass whatever the production option was.
+1 thanks for this, will play with it tonight.
whats is the point of putting an NGinx proxy infont of this app in prod ? for load-balancing perhaps ?
cause I usually run my web apps naked, as they are ...
-
@msff-amman-Itofficer thanks, i will check again
-
@scottalanmiller yes i can access mysql
-
@msff-amman-Itofficer said in Installing Frappe ERPNext on CentOS 7:
@stacksofplates said in Installing Frappe ERPNext on CentOS 7:
Did they remove their install script? If I remember right it used to handle the NGINX setup. You just had to pass whatever the production option was.
+1 thanks for this, will play with it tonight.
whats is the point of putting an NGinx proxy infont of this app in prod ? for load-balancing perhaps ?
cause I usually run my web apps naked, as they are ...
Nginx provides some protection, flexibility and caching. Often adds a bit of speed and makes things like SSL much easier and more standard. And in a lot of cases SSL is not supported by apps so Nginx is a necessity.
-
@scottalanmiller said in Installing Frappe ERPNext on CentOS 7:
@msff-amman-Itofficer said in Installing Frappe ERPNext on CentOS 7:
@stacksofplates said in Installing Frappe ERPNext on CentOS 7:
Did they remove their install script? If I remember right it used to handle the NGINX setup. You just had to pass whatever the production option was.
+1 thanks for this, will play with it tonight.
whats is the point of putting an NGinx proxy infont of this app in prod ? for load-balancing perhaps ?
cause I usually run my web apps naked, as they are ...
Nginx provides some protection, flexibility and caching. Often adds a bit of speed and makes things like SSL much easier and more standard. And in a lot of cases SSL is not supported by apps so Nginx is a necessity.
To me the bigger reason for a proxy in front of an app is to let the app remain on default ports. NodeBB runs on 4567 for example. Of course you can change it to 443 or 80. But that is not the design concept. Why go against design?
-
@msff-amman-Itofficer said in Installing Frappe ERPNext on CentOS 7:
@stacksofplates said in Installing Frappe ERPNext on CentOS 7:
Did they remove their install script? If I remember right it used to handle the NGINX setup. You just had to pass whatever the production option was.
+1 thanks for this, will play with it tonight.
whats is the point of putting an NGinx proxy infont of this app in prod ? for load-balancing perhaps ?
cause I usually run my web apps naked, as they are ...
I usually default to using NGINX instead of Apache for most things. All of the sites I have running right now are using NGINX as the server. It's lighter and better at caching.
Having it in front of other apps allows you to keep the original port of the app, run more than one app per port, and adds some security ( with or without SSL).
-
13:41:53 redis_cache.1 |
13:41:53 redis_cache.1 | 24407:M 03 Apr 13:41:53.286 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
13:41:53 redis_cache.1 | 24407:M 03 Apr 13:41:53.286 # Server started, Redis version 3.2.3
13:41:53 redis_cache.1 | 24407:M 03 Apr 13:41:53.286 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
13:41:53 redis_cache.1 | 24407:M 03 Apr 13:41:53.286 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
13:41:53 redis_cache.1 | 24407:M 03 Apr 13:41:53.286 * The server is now ready to accept connections on port 13000
13:41:55 socketio.1 | listening on *: 9000
13:42:00 worker_short.1 | 13:42:00 RQ worker u'rq:worker:51.24410.short' started, version 0.7.1
13:42:00 worker_short.1 | 13:42:00 Cleaning registries for queue: short
13:42:00 worker_short.1 | 13:42:00
13:42:00 worker_short.1 | 13:42:00 *** Listening on short...
13:42:00 watch.1 | Wrote ./assets/js/report.min.js - 256k
13:42:00 watch.1 | Wrote ./assets/js/erpnext-web.min.js - 4k
13:42:00 watch.1 | Wrote ./assets/css/frappe-web.css - 64k
13:42:00 watch.1 | Wrote ./assets/css/web_form.css - 24k
13:42:00 watch.1 | Wrote ./assets/css/desk.min.css - 279k
13:42:00 watch.1 | Wrote ./assets/js/frappe-web.min.js - 141k
13:42:00 watch.1 | Wrote ./assets/css/list.min.css - 14k
13:42:00 watch.1 | Wrote ./assets/css/report.min.css - 8k
13:42:00 watch.1 | Wrote ./assets/js/list.min.js - 150k
13:42:00 watch.1 | Wrote ./assets/css/erpnext.css - 7k
13:42:00 web.1 | Traceback (most recent call last):
13:42:00 web.1 | File "/usr/lib64/python2.7/runpy.py", line 162, in _run_module_as_main
13:42:00 web.1 | "main", fname, loader, pkg_name)
13:42:00 web.1 | File "/usr/lib64/python2.7/runpy.py", line 72, in _run_code
13:42:00 web.1 | exec code in run_globals
13:42:00 web.1 | File "/home/frappe/frappe-bench/apps/frappe/frappe/utils/bench_helper.py", line 79, in <module>
13:42:00 web.1 | main()
13:42:00 web.1 | File "/home/frappe/frappe-bench/apps/frappe/frappe/utils/bench_helper.py", line 16, in main
13:42:00 web.1 | click.Group(commands=commands)(prog_name='bench')
13:42:00 web.1 | File "/home/frappe/frappe-bench/env/lib/python2.7/site-packages/click/core.py", line 722, in call
13:42:00 web.1 | return self.main(*args, **kwargs)
13:42:00 web.1 | File "/home/frappe/frappe-bench/env/lib/python2.7/site-packages/click/core.py", line 697, in main
13:42:00 web.1 | rv = self.invoke(ctx)
13:42:00 web.1 | File "/home/frappe/frappe-bench/env/lib/python2.7/site-packages/click/core.py", line 1066, in invoke
13:42:00 web.1 | return _process_result(sub_ctx.command.invoke(sub_ctx))
13:42:00 web.1 | File "/home/frappe/frappe-bench/env/lib/python2.7/site-packages/click/core.py", line 1066, in invoke
13:42:00 web.1 | return _process_result(sub_ctx.command.invoke(sub_ctx))
13:42:00 web.1 | File "/home/frappe/frappe-bench/env/lib/python2.7/site-packages/click/core.py", line 895, in invoke
13:42:00 web.1 | return ctx.invoke(self.callback, **ctx.params)
13:42:00 web.1 | File "/home/frappe/frappe-bench/env/lib/python2.7/site-packages/click/core.py", line 535, in invoke
13:42:00 web.1 | return callback(*args, **kwargs)
13:42:00 web.1 | File "/home/frappe/frappe-bench/env/lib/python2.7/site-packages/click/decorators.py", line 17, in new_func
13:42:00 web.1 | return f(get_current_context(), *args, **kwargs)
13:42:00 web.1 | File "/home/frappe/frappe-bench/apps/frappe/frappe/commands/init.py", line 24, in _func
13:42:00 web.1 | ret = f(frappe._dict(ctx.obj), *args, **kwargs)
13:42:00 web.1 | File "/home/frappe/frappe-bench/apps/frappe/frappe/commands/utils.py", line 342, in serve
13:42:00 web.1 | frappe.app.serve(port=port, profile=profile, site=site, sites_path='.')
13:42:00 web.1 | File "/home/frappe/frappe-bench/apps/frappe/frappe/app.py", line 220, in serve
13:42:00 web.1 | use_debugger=True, use_evalex=True, threaded=True)
13:42:00 web.1 | File "/home/frappe/frappe-bench/env/lib/python2.7/site-packages/werkzeug/serving.py", line 717, in run_simple
13:42:00 web.1 | s.bind((hostname, port))
13:42:00 web.1 | File "/usr/lib64/python2.7/socket.py", line 224, in meth
13:42:00 web.1 | return getattr(self._sock,name)(*args)
13:42:00 web.1 | socket.error: [Errno 98] Address already in use
13:42:00 watch.1 | Wrote ./assets/js/form.min.js - 190k
13:42:00 watch.1 | Wrote ./assets/js/web_form.min.js - 247k
13:42:00 watch.1 | Wrote ./assets/js/dialog.min.js - 86k
13:42:00 system | web.1 stopped (rc=1)
13:42:00 system | sending SIGTERM to redis_socketio.1 (pid 24390)
13:42:00 system | sending SIGTERM to worker_long.1 (pid 24397)
13:42:00 system | sending SIGTERM to watch.1 (pid 24393)
13:42:00 system | sending SIGTERM to redis_queue.1 (pid 24399)
13:42:00 system | sending SIGTERM to schedule.1 (pid 24403)
13:42:00 system | sending SIGTERM to worker_default.1 (pid 24404)
13:42:00 system | sending SIGTERM to socketio.1 (pid 24405)
13:42:00 system | sending SIGTERM to redis_cache.1 (pid 24407)
13:42:00 system | sending SIGTERM to worker_short.1 (pid 24410)
13:42:00 redis_cache.1 | 24407:signal-handler (1491219720) Received SIGTERM scheduling shutdown...
13:42:00 redis_queue.1 | 24399:signal-handler (1491219720) Received SIGTERM scheduling shutdown...
13:42:00 redis_socketio.1 | 24390:signal-handler (1491219720) Received SIGTERM scheduling shutdown...
13:42:00 worker_short.1 | 13:42:00 Warm shut down requested
13:42:00 system | socketio.1 stopped (rc=-15)
13:42:00 system | worker_long.1 stopped (rc=-15)
13:42:00 system | worker_default.1 stopped (rc=-15)
13:42:00 system | schedule.1 stopped (rc=-15)
13:42:00 redis_socketio.1 | 24390:M 03 Apr 13:42:00.362 # User requested shutdown...
13:42:00 redis_socketio.1 | 24390:M 03 Apr 13:42:00.362 * Removing the pid file.
13:42:00 redis_socketio.1 | 24390:M 03 Apr 13:42:00.362 # Redis is now ready to exit, bye bye...
13:42:00 system | redis_socketio.1 stopped (rc=0)
13:42:00 system | watch.1 stopped (rc=-15)
13:42:00 redis_queue.1 | 24399:M 03 Apr 13:42:00.388 # User requested shutdown...
13:42:00 redis_queue.1 | 24399:M 03 Apr 13:42:00.388 * Removing the pid file.
13:42:00 redis_queue.1 | 24399:M 03 Apr 13:42:00.388 # Redis is now ready to exit, bye bye...
13:42:00 system | redis_queue.1 stopped (rc=0)
13:42:00 redis_cache.1 | 24407:M 03 Apr 13:42:00.399 # User requested shutdown...
13:42:00 redis_cache.1 | 24407:M 03 Apr 13:42:00.399 * Removing the pid file.
13:42:00 redis_cache.1 | 24407:M 03 Apr 13:42:00.399 # Redis is now ready to exit, bye bye...
13:42:00 system | redis_cache.1 stopped (rc=0)
13:42:00 system | worker_short.1 stopped (rc=0)
[frappe@51 frappe-bench]$please help me