Last active
June 15, 2022 22:31
-
-
Save martinhbramwell/347d8fd4b3f073b099aabbf4512c14b4 to your computer and use it in GitHub Desktop.
Install ERPNext on Ubuntu Bionic 18.04 LTS and Focal 20.04 LTS
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
# | |
export MYPWD=""; # MySQL password | |
export ADMPWD=""; # Administrator password | |
export THESITE="my site"; # Site name | |
export USERCTX=".profile"; | |
source ${HOME}/${USERCTX}; | |
if [ "${BASH_SOURCE[0]}" -ef "$0" ] | |
then | |
echo -e " | |
- o 0 o - | |
This first section is set up to facilitate snippet drag and drop from the GitHub gist. | |
At the end of it you'll be ready to get the files and run them. | |
- o 0 o - | |
Steps from a completely raw install | |
................................... | |
1. Addressing | |
# Install net-tools | |
sudo apt install net-tools | |
# Find out your IP address | |
ifconfig | |
# You will have gotten something like this: | |
# ens3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 | |
# inet 192.168.122.98 netmask 255.255.255.0 broadcast 192.168.122.255 | |
# : : : : : : : : : : : | |
# : : : : : : : : : : : | |
# | |
# So, your new server's address is 192.168.122.98 | |
2. At your workstation make preparations to connect to the new server through an SSH client. Copy your SSH public key. | |
3. SSH server stuff... (on the new server). | |
# Create directory and keys file | |
mkdir -p ${HOME}/.ssh; | |
# Paste public key of workstation after entering: | |
cat > ${HOME}/.ssh/authorized_keys | |
** paste the text of your id_rsa.pub file here the hit '<ctrl>-d' to save and exit | |
<ctrl>-d is used to exit | |
# Fix permissions | |
chmod u+x,go-rwx ${HOME}/.ssh; | |
chmod go-wx ${HOME}/.ssh/authorized_keys; | |
3. APT house cleaning | |
echo -e "\n ********* Updating ********* \n\n"; | |
sudo apt -y update; | |
echo -e "\n ********* Upgrading ********* \n\n"; | |
sudo DEBIAN_FRONTEND=noninteractive apt -y upgrade; | |
echo -e "\n ********* Dist Upgrading ********* \n\n"; | |
sudo apt -y dist-upgrade; | |
echo -e "\n ********* Cleaning ********* \n\n"; | |
sudo apt -y clean; | |
echo -e "\n ********* Removing ********* \n\n"; | |
sudo apt -y autoremove; | |
# ####################################################################################################################### | |
"; | |
read -n1 -r -p "Press <q> to quit, any other to proceed..." key | |
if [ "$key" = 'q' ]; then | |
echo -e "\nQuitting"; | |
exit; | |
fi; | |
echo -e " | |
# ####################################################################################################################### | |
*** DANGER *** | |
This is a tool that I use. It MIGHT work for you. I offer no guarantees of any kind. | |
Personally I would NEVER use these scripts on any machine containing anything I would not want to lose. | |
*** PURPOSE *** | |
These scripts prepare ERPNext on either Ubuntu Focal (20.04 LTS) or Bionic (18.04 LTS) on a virtual machine under QEMU/KVM. | |
They might work on earlier versions or other environments. I have not tried. | |
*** USAGE *** | |
Steps: | |
1. Create a new user for working with ERPNext, give it 'sudoer' privileges | |
# Create user | |
sudo adduser erpdev; | |
# Add to sudoers | |
sudo usermod -aG sudo erpdev; | |
# Create SSH directory for new user | |
sudo mkdir /home/erpdev/.ssh; | |
# Place pub keys of workstations | |
cat > authorized_keys | |
** paste the text of your id_rsa.pub file here the hit '<ctrl>-d' to save and exit | |
<ctrl>-d | |
# Move authorized keys file to new user's home | |
sudo mv authorized_keys /home/erpdev/.ssh | |
# Fix permissions | |
sudo chmod go-rwx /home/erpdev/.ssh; | |
sudo chmod -R o-rwx /home/erpdev/.ssh; | |
# sudo chmod g-rwx /home/erpdev/.ssh/id_rsa; | |
sudo chown -R erpdev:erpdev /home/erpdev/.ssh; | |
2. *** Logout as yourself. Log back in as user 'erpdev'. *** | |
3. Set up SUDO_ASKPASS. (The scripts depend on it) | |
# Ensure you have a directory '${HOME}/.ssh' | |
mkdir -p ${HOME}/.ssh; | |
# Create a file '${HOME}/.ssh/.supwd.sh' containing the following two lines, eg: cat > ${HOME}/.ssh/.supwd.sh | |
#!/usr/bin/env bash | |
echo ' <your user's password goes here> '; | |
# Run this command: | |
chmod +x ${HOME}/.ssh/.supwd.sh; | |
# Append the following line to your ${HOME}/.profile file, eg: cat >> ${HOME}/.profile | |
export SUDO_ASKPASS=${HOME}/.ssh/.supwd.sh; | |
# 'source' your ${HOME}/.profile file, to make the SUDO_ASKPASS immediately useful. | |
source ${HOME}/.profile; | |
# This command should display your password | |
${HOME}/.ssh/.supwd.sh; | |
# This command should ALSO display your password | |
${SUDO_ASKPASS}; | |
4. Get the first of the installer script files ready to run | |
# Move into a temporary directory | |
mkdir -p /tmp/erpnext | |
chmod ugo+rwx /tmp/erpnext | |
cd /tmp/erpnext | |
# Pull and set permissions for the first of the four files (this one) | |
wget -O ErpNextQikInstall_0.sh gist.githubusercontent.com/martinhbramwell/347d8fd4b3f073b099aabbf4512c14b4/raw/ErpNextQikInstall_0.sh?cachebust=anything; | |
chmod +x ErpNextQikInstall_0.sh; | |
# Edit the three settings at the top of the script: MYPWD, ADMPWD & THESITE, eg: nano ErpNextQikInstall_0.sh; | |
# nano ErpNextQikInstall_0.sh; # If you use nano, use <ctrl>-x to exit | |
# Execute the script to ensure 'sudo -A' is working | |
./ErpNextQikInstall_0.sh; | |
# *** The steps below test if you have done everything to get it working. *** | |
# ####################################################################################################################### | |
"; | |
read -n1 -r -p "Press <q> to quit, any other to proceed..." key | |
if [ "$key" = 'q' ]; then | |
echo -e "\nQuitting"; | |
exit; | |
fi; | |
export WARNING_MSG="Warnings:"; | |
export WARNING="${WARNING_MSG}"; | |
export SSHDIR=".ssh"; | |
export SUPWDFILE=".supwd.sh"; | |
export SUPWDPATH="${HOME}/${SSHDIR}/${SUPWDFILE}"; | |
echo -e " | |
Ensuring there is a '${SUPWDFILE}' executable for 'SUDO_ASKPASS'..."; | |
[ -f ${SUPWDPATH} ] || WARNING="${WARNING}\n - ${SUPWDPATH} :: was not found"; | |
chmod u+x,go-rwx ${SUPWDPATH}; | |
export USERCTX=".profile"; | |
export ASKPASS_ENVVAR="export SUDO_ASKPASS=\${HOME}/.ssh/.supwd.sh"; | |
echo -e " | |
Ensuring the 'SUDO_ASKPASS' environment variable will be exported at log in....${ASKPASS_ENVVAR}"; | |
cat ${HOME}/${USERCTX} | grep "${ASKPASS_ENVVAR}" >/dev/null || WARNING="${WARNING}\n - SUDO_ASKPASS :: expected '${HOME}/${USERCTX}' to contain '${ASKPASS_ENVVAR}'."; | |
source ${HOME}/${USERCTX}; | |
echo -e " | |
Ensuring the 'SUDO_ASKPASS' env var has a value"; | |
[ -z "${SUDO_ASKPASS}" ] && WARNING="${WARNING}\n - SUDO_ASKPASS :: expected 'SUDO_ASKPASS' to contain '${SUPWDPATH}'."; | |
echo -e " | |
Ensuring 'sudo -A command' actually works"; | |
sudo -A touch /scrap 2>/dev/null || WARNING="${WARNING}\n - SUDO_ASKPASS :: Failed to run 'sudo -A command'."; | |
sudo -A rm /scrap 2>/dev/null; | |
echo -e " | |
Ensuring ERPNext Administrator password 'ADMPWD' has been set."; | |
[ -z "${ADMPWD}" ] && WARNING="${WARNING}\n - ERPNext Administrator password 'ADMPWD' has no value set."; | |
echo -e " | |
Ensuring MariaDb root password 'MYPWD' has been set."; | |
[ -z "${MYPWD}" ] && WARNING="${WARNING}\n - MariaDb root password 'MYPWD' has no value set."; | |
echo -e " | |
Ensuring the name for your new site 'THESITE' has been set."; | |
[ "my site" = "${THESITE}" ] && WARNING="${WARNING}\n - Name for your new site 'THESITE' has no VALID value set. [ '${THESITE}' ?? ]"; | |
if [[ "${WARNING}" != "${WARNING_MSG}" ]]; then | |
echo -e "\n${WARNING}"; | |
echo -e "\n To run these scripts you will need to understand how to get 'SUDO_ASKPASS' to work."; | |
echo -e " Try https://stackoverflow.com/questions/12608293/how-to-setup-a-sudo-askpass-environment-variable"; | |
echo -e " Note: The preceding tests expect you'll use a file named '${SUPWDPATH}'"; | |
exit 1; | |
else | |
echo -e "\n\nNo issues found"; | |
mkdir -p ${HOME}/.ssh/secrets/ | |
cd ${HOME}/.ssh/secrets/ | |
cat > ${HOME}/.ssh/secrets/pwds.sh <<PWEOF | |
#!/usr/bin/env bash | |
# | |
export MYPWD="${MYPWD}"; # MySQL password | |
export ADMPWD="${ADMPWD}"; # Administrator password | |
export THESITE="${THESITE}"; # Site name | |
PWEOF | |
chmod go-rwx ${HOME}/.ssh/secrets; | |
chmod go-rwx ${HOME}/.ssh/secrets/*.*; | |
fi; | |
echo -e "....................."; | |
read -n1 -r -p "Press <q> to quit, any other to proceed..." key | |
if [ "$key" = 'q' ]; then | |
echo -e "\nQuitting"; | |
exit; | |
fi; | |
echo -e " | |
# # ####################################################################################################################### | |
4. Get the second of the installer script files ready to run | |
# Pull and set permissions | |
cd /tmp/erpnext; | |
wget -O ErpNextQikInstall_1.sh gist.githubusercontent.com/martinhbramwell/347d8fd4b3f073b099aabbf4512c14b4/raw/ErpNextQikInstall_1.sh?cachebust=anything; | |
chmod +x ErpNextQikInstall_1.sh; | |
# Execute the script | |
./ErpNextQikInstall_1.sh; | |
# *** Notes *** | |
# 1. You'll notice the files are divided into three sections by if ... elif ... else ... fi. | |
# If you get part way through a script and are forced to stop and retry you can move the | |
# successfully executed parts into the 'Skipped' section. | |
# 2. The bits to do with 'sudo -A apt install -y ntpdate;' are to force correct date and time. | |
# I use virtual machines with hot snapshot capability. Reverting a snapshot after hours or days | |
# will find the date and time set to the time the snapshots was taken, which will cause 'apt' to fail. | |
"; | |
read -n1 -r -p "Press <q> to quit, any other to proceed..." key | |
if [ "$key" = 'q' ]; then | |
echo -e "\nQuitting"; | |
exit; | |
fi; | |
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
# | |
if [ $(id -u) = 0 ]; then | |
echo -e "These scripts must not be run as root!"; | |
exit 1; | |
fi; | |
source ${HOME}/.ssh/secrets/pwds.sh; | |
read -n1 -r -p "Press <q> to quit, any other to proceed..." key | |
if [ "$key" = 'q' ]; then | |
echo -e "Quitting"; | |
exit; | |
elif [ "$key" = 's' ]; then | |
echo -e "Not Skipping"; | |
# #################################################################################################### | |
# #################################################################################################### | |
exit; | |
else | |
# echo -e "\n\nSynchronizing clock"; | |
# date; | |
# sudo -A ntpdate pool.ntp.org; | |
# date; | |
# #################################################################################################### | |
echo -e "\nConfiguring firewall\n\n"; | |
sudo -A ufw default deny incoming; | |
sudo -A ufw allow ssh; | |
sudo -A ufw allow http; | |
sudo -A ufw allow https; | |
sudo -A ufw allow 8000; | |
sudo -A ufw allow 9000; | |
sudo -A ufw allow 11000; | |
sudo -A ufw allow imap; | |
sudo -A ufw allow smtp; | |
sudo -A ufw allow ntp; | |
sudo -A ufw disable; | |
echo -e "\nInstalling clock synchronizer"; | |
sudo -A apt install -y ntpdate; | |
echo -e "\n\nSynchronizing clock"; | |
date; | |
sudo -A ntpdate pool.ntp.org; | |
date; | |
sudo -A apt -y install git; | |
sudo -A apt -y install curl; | |
sudo -A apt -y install tree; | |
echo -e "\n\nPatch SSH config"; | |
sudo -A sed -i '/ChallengeResponseAuthentication/c\ChallengeResponseAuthentication no' /etc/ssh/sshd_config; | |
sudo -A sed -i '/PasswordAuthentication/c\PasswordAuthentication no' /etc/ssh/sshd_config; | |
sudo -A sed -i '/UsePAM/c\UsePAM no' /etc/ssh/sshd_config; | |
sudo -A sed -i '/PermitRootLogin/c\PermitRootLogin no' /etc/ssh/sshd_config; | |
echo -e "Apt preparation"; | |
sudo -A apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8; | |
sudo -A add-apt-repository "deb [arch=amd64,arm64,ppc64el] http://mariadb.mirror.liquidtelecom.com/repo/10.4/ubuntu $(lsb_release -cs) main" | |
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo -A apt-key add - | |
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo -A tee /etc/apt/sources.list.d/yarn.list | |
sudo -A apt -y update | |
echo -e "Apt Installs"; | |
# sudo -A apt -y install python-minimal; | |
sudo -A apt -y install python3-dev; | |
sudo -A apt -y install python3-setuptools; | |
sudo -A apt -y install python3-pip; | |
sudo -A apt -y install python3-testresources; | |
sudo -A apt -y install nginx; | |
sudo -A apt -y install software-properties-common; | |
sudo -A apt -y install redis-server; | |
sudo -A apt -y install mariadb-server-10.4; | |
sudo -A apt -y install mariadb-client; | |
sudo -A apt -y install libmysqlclient-dev; | |
sudo -A apt -y install yarn; | |
export MYSQL_CNF_FILE="${HOME}/.my.cnf"; | |
# export MYSQL_CNF_FILE="/etc/mysql/mariadb.cnf"; # THIS IS A BETTER FILE TO USE FOR PRODUCTION PURPOSES !!!! | |
sudo -A cat ${MYSQL_CNF_FILE} | |
tee ${MYSQL_CNF_FILE} >/dev/null <<MCF | |
[client] | |
user=root | |
password="${MYPWD}" | |
[mysql] | |
user=root | |
password="${MYPWD}" | |
[mysqldump] | |
user=root | |
password="${MYPWD}" | |
[mysqldiff] | |
user=root | |
password="${MYPWD}" | |
MCF | |
chmod u+x,go-rwx ${MYSQL_CNF_FILE}; | |
# echo -e " | |
# ${MYSQL_CNF_FILE} | |
# ${MYPWD} | |
# ++++++++++++++ | |
# "; | |
if mysql -u root -e "select 1+1;" mysql &>/dev/null; then | |
echo -e "MariaDB already secured"; | |
else | |
echo "Securing MariaDB...."; | |
sudo -A mysql_secure_installation 2>/dev/null <<MSI | |
n | |
y | |
${MYPWD} | |
${MYPWD} | |
y | |
y | |
y | |
y | |
MSI | |
echo -e "Update MySql"; | |
sudo -A mysql -u root -e "FLUSH PRIVILEGES;;" mysql; | |
fi; | |
sudo -A service mysql restart | |
mysql -u root -p${MYPWD} -e "SELECT 1+1"; | |
export MYCNF_PATCH="/dev/shm/mycnf.patch"; | |
sudo -A tee ${MYCNF_PATCH} >/dev/null <<MCFP18 | |
--- my.cnf 2020-05-09 19:27:56.000000000 +0000 | |
+++ my.cnf.new 2020-05-19 22:01:02.759916503 +0000 | |
@@ -28,6 +28,9 @@ | |
nice = 0 | |
[mysqld] | |
+character-set-client-handshake = FALSE | |
+character-set-server = utf8mb4 | |
+collation-server = utf8mb4_unicode_ci | |
# | |
# * Basic Settings | |
# | |
MCFP18 | |
export MYCNFN="my.cnf"; | |
echo -e "Patching '${MYCNFN}'"; | |
pushd /etc/mysql/ >/dev/null; | |
export MYCNF="$(realpath ./${MYCNFN})"; | |
sudo -A patch -p0 --forward ${MYCNF} < ${MYCNF_PATCH} >/dev/null; | |
popd >/dev/null; | |
echo -e "\n\nInstalling NodeJs and NPM"; | |
curl -sL https://deb.nodesource.com/setup_12.x | sudo -A -E bash - | |
sudo -A apt install -y nodejs | |
echo -e "\nInstalled NodeJs and NPM\n\n"; | |
echo -e "\nConfiguring file watchers\n\n"; | |
echo fs.inotify.max_user_watches=524288 | sudo -A tee -a /etc/sysctl.conf && sudo -A sysctl -p | |
echo -e "\n\nInstall bench"; | |
sudo -A pip3 install frappe-bench | |
echo -e " | |
_____________________________________________________ | |
Sanity checks | |
"; | |
echo -e "Check NGinx ok"; | |
sudo -A service nginx status | |
echo -e "\n\nCheck Mysql ok"; | |
# mysql -u root -p${MYPWD} -e "SELECT 1+1"; | |
sudo -A mysql -u root -e "SELECT 1+1"; | |
echo -e "\n\nNodeJs version"; | |
node --version | |
echo -e "NPM version"; | |
npm --version | |
echo -e "\n\nCheck Redis ok (expecting PONG)"; | |
redis-cli ping | |
echo -e " | |
_____________________________________________________ | |
Ready to install Frappe .... | |
"; | |
export PATH="${HOME}/.local/bin:${PATH}"; | |
cd ${HOME} | |
bench --version | |
bench init --frappe-branch version-12 --python /usr/bin/python3 frappe-bench | |
if [[ "$(lsb_release -sr)" < "20.04" ]]; then | |
echo -e " | |
Correcting for 'pandas' bug. | |
"; | |
else | |
echo -e " | |
Correcting for 'pandas' bug. | |
This takes a LONG time. It can appear to hang for 10 - 20 minutes at the line: | |
Building wheel for pandas (setup.py) ... \ | |
"; | |
fi | |
cd ${HOME}/frappe-bench | |
./env/bin/pip install numpy==1.18.5 | |
./env/bin/pip install pandas==0.24.2 | |
sudo -A ufw --force enable; | |
echo -e " | |
Done | |
========================================================================================================================= | |
# # ####################################################################################################################### | |
*** You'll need to *restart* your virtual server before doing the next steps *** | |
*** Then ... | |
5. After restarting your server, run the final two scripts | |
# Pull and set permissions on the third script | |
mkdir -p /tmp/erpnext | |
cd /tmp/erpnext | |
wget -O ErpNextQikInstall_2.sh gist.githubusercontent.com/martinhbramwell/347d8fd4b3f073b099aabbf4512c14b4/raw/ErpNextQikInstall_2.sh?cachebust=anything; | |
chmod +x ErpNextQikInstall_2.sh; | |
# Pull and set permissions on the fourth script | |
mkdir -p /tmp/erpnext | |
cd /tmp/erpnext | |
wget -O ErpNextQikInstall_3.sh gist.githubusercontent.com/martinhbramwell/347d8fd4b3f073b099aabbf4512c14b4/raw/ErpNextQikInstall_3.sh?cachebust=anything; | |
chmod +x ErpNextQikInstall_3.sh; | |
# In one terminal session --> execute the third script | |
cd /tmp/erpnext | |
./ErpNextQikInstall_2.sh; | |
*** The last part of the third script leaves ErpNext running and waiting for connections! *** | |
*** It is normal for it to *appear* to hang at the end after displaying the following lines: *** | |
: : : : : : : | |
: : : : : : : | |
15:18:23 watch.1 | Rebuilding modules.min.js | |
15:18:24 watch.1 | Rebuilding barcode_scanner.min.js | |
15:18:26 watch.1 | Rebuilding data_import_tools.min.js | |
# When the third script is complete and waiting, open a new terminal window and execute the fourth script | |
cd /tmp/erpnext | |
./ErpNextQikInstall_3.sh; | |
"; | |
exit; | |
# #################################################################################################### | |
fi | |
echo -e " | |
Done | |
========================================== | |
"; | |
exit; | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
# | |
source ${HOME}/.ssh/secrets/pwds.sh; | |
echo -e " | |
*** Attention *** | |
This script produces a lot of output, then appears to slow down and come to a stop at... | |
: : : : : : : | |
15:18:23 watch.1 | Rebuilding social.min.js | |
15:18:23 watch.1 | Rebuilding modules.min.js | |
15:18:24 watch.1 | Rebuilding barcode_scanner.min.js | |
15:18:26 watch.1 | Rebuilding data_import_tools.min.js | |
It does not stop because it failed. | |
You will be seeing the Frappe application server running and ready to accept connections. | |
*** IT MUST BE RUNNING IN ORDER TO INSTALL ERPNext (script #3) *** | |
While installing ERPNext it will display many log lines as it reports the progress of the installation. | |
"; | |
read -n1 -r -p "Press <q> to quit, any other to proceed..." key | |
if [ "$key" = 'q' ]; then | |
echo -e "Quitting"; | |
exit; | |
elif [ "$key" = 's' ]; then | |
echo -e "Skipping"; | |
# #################################################################################################### | |
# #################################################################################################### | |
exit; | |
else | |
echo -e "\nCalibrating date & time..."; | |
sudo -A ntpdate pool.ntp.org; | |
# #################################################################################################### | |
cd ${HOME}/frappe-bench/ | |
./env/bin/pip3 install -e apps/frappe/ | |
bench start | |
# #################################################################################################### | |
fi | |
echo -e " | |
Done | |
========================================== | |
"; | |
exit; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env bash | |
# | |
source ${HOME}/.ssh/secrets/pwds.sh; | |
echo -e " | |
*** Notice *** | |
#1 | |
*** THE 'bench' MUST BE RUNNING IN ORDER TO COMPLETE THIS SCRIPT *** | |
You should either: | |
- Check that Script #2 is still running OR | |
- Start the 'bench' in a separate terminal window | |
While installing ERPNext it will display many log lines as it reports the progress of the installation. | |
#2 The 'bench' will terminate part way through this script. You will be asked to | |
start it again before continuing with the last two tasks. | |
"; | |
read -n1 -r -p "Press <q> to quit, any other to proceed..." key | |
if [ "$key" = 'q' ]; then | |
echo -e "Quitting"; | |
exit; | |
elif [ "$key" = 's' ]; then | |
echo -e "Skipping"; | |
# #################################################################################################### | |
# #################################################################################################### | |
exit; | |
else | |
echo -e "\nCalibrating date & time..."; | |
sudo -A ntpdate pool.ntp.org; | |
# #################################################################################################### | |
echo -e "Adding '${THESITE}' to /etc/hosts"; | |
grep "127.0.0.1 *${THESITE}" /etc/hosts >/dev/null || \ | |
echo -e "\n127.0.0.1 ${THESITE}" | sudo -A tee -a /etc/hosts; | |
cat /etc/hosts; | |
pushd ${HOME}/frappe-bench/; | |
export NEW_SITE="${THESITE}"; | |
mkdir -p ./config; | |
touch ./config/nginx.conf; | |
mv ./config/nginx.conf ./config/nginx.conf_$(date +"%Y%m%d_%H%M"); | |
echo -e "Creating the new '${NEW_SITE}' site in Frappe"; | |
bench new-site --mariadb-root-password ${MYPWD} --admin-password ${ADMPWD} ${NEW_SITE} | |
echo -e "Configuring NGinx for the '${NEW_SITE}' site."; | |
bench config dns_multitenant on | |
echo "" > sites/currentsite.txt | |
bench setup nginx | |
echo -e "Linking Frappe site config to NGinx site config."; | |
pushd /etc/nginx/sites-enabled/ | |
sudo -A rm default | |
sudo -A ln -s /home/erpdev/frappe-bench/config/nginx.conf nginx.conf | |
popd | |
popd | |
ls -la /etc/nginx/sites-enabled/ | |
echo -e "Restarting NGinx."; | |
sudo -A service nginx restart | |
echo -e "Adding '${NEW_SITE}' to /etc/hosts"; | |
grep "127.0.0.1 *${NEW_SITE}" /etc/hosts >/dev/null || \ | |
echo -e "\n127.0.0.1 ${NEW_SITE}" | sudo -A tee -a /etc/hosts; cat /etc/hosts; | |
pushd ${HOME}/frappe-bench/; | |
bench get-app --branch version-12 erpnext | |
echo -e "Building ERPNext app "; | |
./env/bin/pip3 install -e apps/erpnext/ | |
echo -e "Installing ERPNext app in '${NEW_SITE}' site"; | |
bench --site ${NEW_SITE} install-app erpnext | |
popd | |
echo -e " | |
The last two tasks will fail if the 'bench' is not running | |
Check back to the other console to restart bench if it failed, executing ... | |
cd \${HOME}/frappe-bench | |
bench start | |
... when bench has finished starting."; | |
read -n1 -r -p "...press any key to proceed (or q to quit)..." key | |
if [ "$key" != 'q' ]; then | |
echo -e " | |
Continuing..."; | |
pushd ${HOME}/frappe-bench >/dev/null; | |
echo -e "\nClearing cache..."; | |
bench --site ${THESITE} clear-cache; | |
echo -e "\nMigrating changes ..."; | |
bench --site ${THESITE} migrate | |
popd >/dev/null; | |
else | |
echo -e " | |
Skipped 'clear-cache' and 'migrate' ..."; | |
fi; | |
# #################################################################################################### | |
fi | |
echo -e " | |
Done | |
========================================== | |
"; | |
exit; |
Really? I'm amazed! So much has changed in Frappe & ERPNext ..........
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
This worked like charm. Thank you @martinhbramwell