Running Nextcloud alongwith ERPNext on same server!

Hey,

Has anyone tried to run two applications on the same machine ??

I ve been tying to run nextcloud alongwith erpnext.

I ve tried numerous times but unable to run both at same time.

I have tried to tweak frappe-bench.conf file to listen on 80 port for link of nextcloud server, but never succeeded.

Can anyone please guide me in the right direction & help me setup the server.

Perhaps you can start by telling about your setup.

Also, provide a bit more information than “I have tried to tweak frappe-bench.conf file to listen on 80 port for link of nextcloud server, but never succeeded.” I’m sorry to say, but that tells us nothing, and any suggestions will be based on guesswork.

I have erpnext running on port 8000 and PHP applications, including nextcloud on port 80. No issues.

How are you set up? Are you running the same web server for nextcloud and erpnext? What did you try? What does your config look like? How do you know it is not working? What errors are you getting?

This is important missing information to help somebody help you.

@crafter

I have installed erpnext manually on port 80 & 443 with dns multitenant setup on & accessing it via domain name (forward to my server ip.)
I installed erpnext first successfully & then ran setup of nextcloud, while setting up, I am trying to access it via a cname entry, but it shows me frappe error page rather than nextcloud login page, maybe I am doing wrong.

can you please tell me how u are able to run php applications with frappe/erpnext installed.

also is it possible to configure it on domain name rather than IP address ? i need ssl setup.

You can use apache or nginx’s namedVirtualServer (the name may vary, but the concept is the same) and listen on a different port to 80/443 for this service

@trentmu @crafter nevermind I already solved it last night :slight_smile:

Good stuff. It might help others if you share your solution.

1 Like

it is a shame that some people use the community for their problems, but are unable to share the results. long live open source

7 Likes

Dear @Stefan_Walter_Minder, I was too lazy to prepare log for everyone, will be sharing my log of the installation with you tomorrow.

Sorry to keep you waiting.

Thx :slight_smile:

with dockerized ERPNext anything is possible now! checkout announcement:

@Stefan_Walter_Minder

Hey there,

sorry for late reply,

You can do what @yashodhan suggested if you know docker well, else you can do my way, personally I have never used docker so I achieved Nextcloud & Erpnext by following steps mentioned below.

It requires Ubuntu Server 18.04.4 Lts on a VM or your personalised hardware
note: after fresh install, do not upgrade, only use apt-get update cmd

Login via default user, & change root user password by

sudo passwd root
Then change to root user by
su root
Then change directory to root by
cd /
Then run update command by
apt-get update
After system gets updated, install erpnext support package by
apt-get install python3-minimal build-essential python3-setuptools
reboot system by,
Reboot

Then login via your default user into ubuntu

Now you can use your default user to install both Nextcloud & erpnext or you can create a new user

For using same user, you need to follow this command

sudo usermod -aG sudo user_name (replace your username with user_name )

if you want to create a new user you can use

Sudo adduser username (replace your username with username)
sudo usermod -aG sudo user_name (replace your username with user_name )

Now you need to switch to you desired user for which you will install erpnext & nextcloud, please follow

Su username & enter password

First we will install erpnext (I have installed production version with easy install script)

use these commands

wget https://raw.githubusercontent.com/frappe/bench/master/playbooks/install.py
Then install erpnext by following this command
sudo python3 install.py --production --user username (replace with your username)
You will be asked asked to enter mysql root password & erpnext admin password - please enter & make note of the same.

After successful installation of the Erpnext, user Admin password to login & activate erpnext site
You can access your defaul erpnext site (site1.local)

you need to setup dns multitenant to access both on domain. you need to change directory to frappe-bench folder for this to work

bench config dns_multitenant on (this will turn on dns based setup on site)

To make a new site under DNS based multitenancy, perform the following steps & install erpnext app on the same.

bench new-site erp.your-domain.com (this will create frappe bench site without erpnext app)
bench --site erp.your-domain.com install-app erpnext (this will install erpnext)
bench setup nginx (this will reconfigure nginx file to allow only dns based sites and disable port based sites.)
sudo service nginx reload (this will reload nginx)

you also need to delete the default site which was created with automated setup of erpnext, use these command

bench drop-site site1.local --no-backup

Now we will install nextcloud alongside erpnext.
For Nextcloud to work, it requires LEMP Stack (Nginx, MariaDB, PHP7.2) on Ubuntu 18.04 LTS

Nginx & Mariadb were already installed with erpnext bundle, so we will only install Php 7.2 & its modules for it to work.
Use this command to install

sudo apt install php7.2 php7.2-fpm php7.2-mysql php-common php7.2-cli php7.2-common php7.2-json php7.2-opcache php7.2-readline php7.2-mbstring php7.2-xml php7.2-gd php7.2-curl -y

sudo systemctl start php7.2-fpm ( to start php)

Enable auto-start at boot time.

sudo systemctl enable php7.2-fpm

Also we need to configure php to custom settings, you can do so by,

sudo nano /etc/php/7.2/fpm/php.ini

Make changes to the following lines:
file_uploads = On
allow_url_fopen = On
memory_limit = 512M
upload_max_filesize = 100M
display_errors = Off
cgi.fix_pathinfo = 0
date.timezone = America/Chicago

Now we need to make www-data (Nginx user) as the owner of web directory. By default it’s owned by the root user
Also create Nginx Server Block

sudo chown www-data:www-data /usr/share/nginx/html -R (to make logged in user the owner)
sudo nano /etc/nginx/conf.d/default.conf (create nginx server block)

fill the file with the below mentioned code.

server {
listen 80;
listen [::]:80;
server_name _;
root /usr/share/nginx/html/;
index index.php index.html index.htm index.nginx-debian.html;

location / {
try_files $uri $uri/ /index.php;
}

location ~ .php$ {
fastcgi_pass unix:/run/php/php7.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
include snippets/fastcgi-php.conf;
}

A long browser cache lifetime can speed up repeat visits to your page

location ~* .(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$ {
access_log off;
log_not_found off;
expires 360d;
}

disable access to hidden files

location ~ /.ht {
access_log off;
log_not_found off;
deny all;
}
}

Save & exit Then run

sudo nginx -t

sudo systemctl reload nginx

After the above step, you will not be able to access erpnext site, else you will see Nginx welcome page,

Now we need to test our php installation,
To test PHP-FPM with Nginx Web server, we need to create a info.php file in the document root directory.

sudo nano /usr/share/nginx/html/info.php

Paste the following PHP code into the file.

<?php phpinfo(); ?>

Save & exit. Now you can access php information via ip address of the server i.e 192.168.2.1/info.php (Change the ip with your server ip
Now we need to delete the info.php file, its not good for security. Please run this command

sudo rm /usr/share/nginx/html/info.php

Now let’s install NextCloud. by running this command

wget https://download.nextcloud.com/server/releases/nextcloud-18.0.2.zip

You can always use the above URL format to download NextCloud. If a new version comes out, simply replace 18.0.2 with the new version number.

Once downloaded, extract the archive with unzip (if somehow the above command doesnt work, kindly download nextcloud & use filezilla or any other client to copy nextcloud.zip file to user folder, then use unzip)

sudo apt install unzip (to install unzip)
sudo unzip nextcloud-18.0.2.zip -d /usr/share/nginx/

The -d option specifies the target directory. NextCloud web files will be extracted to /usr/share/nginx/nextcloud/ . Then we need to change the owner of this directory to www-data so that the web server (Nginx) can write to this directory.

sudo chown www-data:www-data /usr/share/nginx/nextcloud/ -R

Create a Database and User in MariaDB

sudo mysql -u root -p
enter_your_password (enter mysql root passsword used for erpnext installation earlier)

Then create a database for Nextcloud. This tutorial name the database nextcloud. You can use whatever name you like.

create database nextcloud;

Create the database user. Again, you can use your preferred name for this user. Replace your-password with your preferred password.

create user “nextclouduser”@“localhost” identified by ‘your-password’;

Grant this user all privileges on the nextcloud database.

grant all privileges on nextcloud.* to ‘nextclouduser’@‘localhost’ identified by ‘your-password’;

flush privileges;

exit;

Create a Nginx Config File for Nextcloud

Create a nextcloud.conf file in /etc/nginx/conf.d/ directory.

sudo nano /etc/nginx/conf.d/nextcloud.conf

Put the following text into the file.

server {
listen 80;
server_name nextcloud.your-domain.com;

# Add headers to serve security related headers
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
add_header Referrer-Policy no-referrer;

#I found this header is needed on Ubuntu, but not on Arch Linux. 
add_header X-Frame-Options "SAMEORIGIN";

# Path to the root of your installation
root /usr/share/nginx/nextcloud/;

access_log /var/log/nginx/nextcloud.access;
error_log /var/log/nginx/nextcloud.error;

location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
}

# The following 2 rules are only needed for the user_webfinger app.
# Uncomment it if you're planning to use this app.
#rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
#rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json
# last;

location = /.well-known/carddav {
    return 301 $scheme://$host/remote.php/dav;
}
location = /.well-known/caldav {
   return 301 $scheme://$host/remote.php/dav;
}

location ~ /.well-known/acme-challenge {
  allow all;
}

# set max upload size
client_max_body_size 512M;
fastcgi_buffers 64 4K;

# Disable gzip to avoid the removal of the ETag header
gzip off;

# Uncomment if your server is build with the ngx_pagespeed module
# This module is currently not supported.
#pagespeed off;

error_page 403 /core/templates/403.php;
error_page 404 /core/templates/404.php;

location / {
   rewrite ^ /index.php$uri;
}

location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
   deny all;
}
location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
   deny all;
 }

location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {
   include fastcgi_params;
   fastcgi_split_path_info ^(.+\.php)(/.*)$;
   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
   fastcgi_param PATH_INFO $fastcgi_path_info;
   #Avoid sending the security headers twice
   fastcgi_param modHeadersAvailable true;
   fastcgi_param front_controller_active true;
   fastcgi_pass unix:/run/php/php7.2-fpm.sock;
   fastcgi_intercept_errors on;
   fastcgi_request_buffering off;
}

location ~ ^/(?:updater|ocs-provider)(?:$|/) {
   try_files $uri/ =404;
   index index.php;
}

# Adding the cache control header for js and css files
# Make sure it is BELOW the PHP block
location ~* \.(?:css|js)$ {
    try_files $uri /index.php$uri$is_args$args;
    add_header Cache-Control "public, max-age=7200";
    # Add headers to serve security related headers (It is intended to
    # have those duplicated to the ones above)
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;
    add_header X-Download-Options noopen;
    add_header X-Permitted-Cross-Domain-Policies none;
    add_header Referrer-Policy no-referrer;
    # Optional: Don't log access to assets
    access_log off;

}

location ~* .(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
try_files $uri /index.php$uri$is_args$args;
# Optional: Don’t log access to other assets
access_log off;
}
}

Save and close the file. Test Nginx configuration, then reload Nginx for the changes to take effect.

sudo nginx -t

sudo service nginx reload

Install and Enable PHP Modules

Run the following commands to install PHP modules required or recommended by NextCloud.

sudo apt install php-imagick php7.2-common php7.2-mysql php7.2-fpm php7.2-gd php7.2-json php7.2-curl php7.2-zip php7.2-xml php7.2-mbstring php7.2-bz2 php7.2-intl -y

Now you can access the Nextcloud web install wizard in your browser by entering the domain name for your Nextcloud installation.

Finish the Installation in your Web Browser to nextcloud:

To complete the installation, you need to create an admin account, enter the path of Nextcloud data folder, enter database details created earlier. You can use the default localhost as host address, or you can enter localhost:3306, as MariaDB listens on port 3306.

The data folder is where users’ files are stored. For security, it’s best to place the data directory outside of Nextcloud web root. So instead of storing users’ files under /usr/share/nginx/nextcloud/data/, we can change it to /usr/share/nginx/nextcloud-data. which can be created with the following command:

sudo mkdir /usr/share/nginx/nextcloud-data

Then make sure Nginx user (www-data) has write permission to the data directory.

sudo chown www-data:www-data /usr/share/nginx/nextcloud-data -R

Now access nextcloud & enter the asked details

User name : User
Password : Passwd
Data folder : /usr/share/nginx/nextcloud-data

Database user : mysql_user_name
database passwd : mysql_user_pswd
database name : nextcloud
localhost : localhost

Once entered, you can now access nextcloud web interface.

Now to access erpnext along with nextcloud, you will have to delete default nginx file, to do that run this command

sudo rm sudo rm /etc/nginx/sites-enabled/default.conf

After deleting the above mentioned file, you can access you erpnext site, if not change directory to frappe-bench and run this command.

bench setup nginx
bench restart

you will now be able to access erpnext site & nextcloud site on different sub-domain.

If you do it successfully, please dont thank me, I am not a developer or coder, just an advance user :stuck_out_tongue: who was able to combine bits and pieces of info on the above mentioned subject to achieve the goal

12 Likes

Super, thx 4 ur Help and the time you have spend for the community;)

1 Like

While this is indeed doable, from a security perspective this is a terrible idea. I strongly suggest either putting one/both in containers or just have two different VM’s.

Hi @tanuj82685 Although this fun getting things like this to run from a technical perspective. Please avoid doing such things. We have tried to do such things with other systems befor and have to decided to never put several critical systems on one VM.

The aggony really is not worth it :slight_smile:

What is wrong with this setup from a security perspective?

We also install Frappe/ERPNext join together with NextCloud. Both with nginx but NextCloud on PostgreSQL and Frappe with MariaDB. No Docker, directly through Linux Debian.

Apart from that we are releasing our pibiDAV Frappe/ERPNext App for integration of files between Frappe and NextCloud. Try it downloading from (GitHub - pibico/pibiDAV: pibiDAV is a Frappe APP to Integrate Frappe and Frappe Apps with NextCloud (possibly Owncloud also but not tested))

1 Like

hi @wojosc
Sorry for late reply,
you are right & I have realised that.

My current setup is complex but safe.