Add ERPnext.
This commit is contained in:
23
erpnext/README.md
Normal file
23
erpnext/README.md
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
Steps to install ERPNext on [Excloud](https://excloud.in)
|
||||||
|
|
||||||
|
### Minimum Requirements:
|
||||||
|
- Instance: `t1.small`
|
||||||
|
- Disk: `8GB`
|
||||||
|
|
||||||
|
### Overview
|
||||||
|
|
||||||
|
This scripts creates a secure installation for ERPNext. The secure password is stored at the path `/var/frappe/admin-password`
|
||||||
|
|
||||||
|
### Commands to Install
|
||||||
|
|
||||||
|
#### Clone Repo
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/excloud-in/examples
|
||||||
|
```
|
||||||
|
#### Install ERPNext
|
||||||
|
```bash
|
||||||
|
cd examples/erpnext
|
||||||
|
bash install-erpnext.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: It takes 1-2 mins for ERPNext to bootstrap wait for it.
|
||||||
204
erpnext/compose.yaml
Normal file
204
erpnext/compose.yaml
Normal file
@@ -0,0 +1,204 @@
|
|||||||
|
version: "3"
|
||||||
|
|
||||||
|
services:
|
||||||
|
backend:
|
||||||
|
image: frappe/erpnext:v15.75.0
|
||||||
|
networks:
|
||||||
|
- frappe_network
|
||||||
|
depends_on:
|
||||||
|
- init
|
||||||
|
deploy:
|
||||||
|
restart_policy:
|
||||||
|
condition: on-failure
|
||||||
|
volumes:
|
||||||
|
- sites:/home/frappe/frappe-bench/sites
|
||||||
|
- logs:/home/frappe/frappe-bench/logs
|
||||||
|
environment:
|
||||||
|
DB_HOST: db
|
||||||
|
DB_PORT: "3306"
|
||||||
|
MYSQL_ROOT_PASSWORD: ${ADMIN_PASSWORD}
|
||||||
|
MARIADB_ROOT_PASSWORD: ${ADMIN_PASSWORD}
|
||||||
|
|
||||||
|
db:
|
||||||
|
image: mariadb:10.6
|
||||||
|
networks:
|
||||||
|
- frappe_network
|
||||||
|
healthcheck:
|
||||||
|
test: mysqladmin ping -h localhost --password=${ADMIN_PASSWORD}
|
||||||
|
interval: 1s
|
||||||
|
retries: 20
|
||||||
|
deploy:
|
||||||
|
restart_policy:
|
||||||
|
condition: on-failure
|
||||||
|
command:
|
||||||
|
- --character-set-server=utf8mb4
|
||||||
|
- --collation-server=utf8mb4_unicode_ci
|
||||||
|
- --skip-character-set-client-handshake
|
||||||
|
- --skip-innodb-read-only-compressed # Temporary fix for MariaDB 10.6
|
||||||
|
environment:
|
||||||
|
MYSQL_ROOT_PASSWORD: ${ADMIN_PASSWORD}
|
||||||
|
MARIADB_ROOT_PASSWORD: ${ADMIN_PASSWORD}
|
||||||
|
volumes:
|
||||||
|
- db-data:/var/lib/mysql
|
||||||
|
|
||||||
|
frontend:
|
||||||
|
image: frappe/erpnext:v15.75.0
|
||||||
|
networks:
|
||||||
|
- frappe_network
|
||||||
|
depends_on:
|
||||||
|
- init
|
||||||
|
deploy:
|
||||||
|
restart_policy:
|
||||||
|
condition: on-failure
|
||||||
|
entrypoint:
|
||||||
|
- bash
|
||||||
|
- -c
|
||||||
|
command:
|
||||||
|
- >
|
||||||
|
while [ ! -f /home/frappe/frappe-bench/sites/init_done ]; do sleep 1; done && echo "Init done";
|
||||||
|
exec nginx-entrypoint.sh;
|
||||||
|
environment:
|
||||||
|
BACKEND: backend:8000
|
||||||
|
FRAPPE_SITE_NAME_HEADER: frontend
|
||||||
|
SOCKETIO: websocket:9000
|
||||||
|
UPSTREAM_REAL_IP_ADDRESS: 127.0.0.1
|
||||||
|
UPSTREAM_REAL_IP_HEADER: X-Forwarded-For
|
||||||
|
UPSTREAM_REAL_IP_RECURSIVE: "off"
|
||||||
|
PROXY_READ_TIMEOUT: 120
|
||||||
|
CLIENT_MAX_BODY_SIZE: 50m
|
||||||
|
volumes:
|
||||||
|
- sites:/home/frappe/frappe-bench/sites
|
||||||
|
- logs:/home/frappe/frappe-bench/logs
|
||||||
|
ports:
|
||||||
|
- "8080:8080"
|
||||||
|
|
||||||
|
queue-long:
|
||||||
|
image: frappe/erpnext:v15.75.0
|
||||||
|
networks:
|
||||||
|
- frappe_network
|
||||||
|
depends_on:
|
||||||
|
- redis-cache
|
||||||
|
- redis-queue
|
||||||
|
deploy:
|
||||||
|
restart_policy:
|
||||||
|
condition: on-failure
|
||||||
|
command:
|
||||||
|
- bench
|
||||||
|
- worker
|
||||||
|
- --queue
|
||||||
|
- long,default,short
|
||||||
|
volumes:
|
||||||
|
- sites:/home/frappe/frappe-bench/sites
|
||||||
|
- logs:/home/frappe/frappe-bench/logs
|
||||||
|
|
||||||
|
queue-short:
|
||||||
|
image: frappe/erpnext:v15.75.0
|
||||||
|
networks:
|
||||||
|
- frappe_network
|
||||||
|
depends_on:
|
||||||
|
- redis-cache
|
||||||
|
- redis-queue
|
||||||
|
deploy:
|
||||||
|
restart_policy:
|
||||||
|
condition: on-failure
|
||||||
|
command:
|
||||||
|
- bench
|
||||||
|
- worker
|
||||||
|
- --queue
|
||||||
|
- short,default
|
||||||
|
volumes:
|
||||||
|
- sites:/home/frappe/frappe-bench/sites
|
||||||
|
- logs:/home/frappe/frappe-bench/logs
|
||||||
|
|
||||||
|
redis-queue:
|
||||||
|
image: redis:6.2-alpine
|
||||||
|
networks:
|
||||||
|
- frappe_network
|
||||||
|
deploy:
|
||||||
|
restart_policy:
|
||||||
|
condition: on-failure
|
||||||
|
volumes:
|
||||||
|
- redis-queue-data:/data
|
||||||
|
|
||||||
|
redis-cache:
|
||||||
|
image: redis:6.2-alpine
|
||||||
|
networks:
|
||||||
|
- frappe_network
|
||||||
|
deploy:
|
||||||
|
restart_policy:
|
||||||
|
condition: on-failure
|
||||||
|
|
||||||
|
scheduler:
|
||||||
|
image: frappe/erpnext:v15.75.0
|
||||||
|
networks:
|
||||||
|
- frappe_network
|
||||||
|
depends_on:
|
||||||
|
- redis-cache
|
||||||
|
- redis-queue
|
||||||
|
deploy:
|
||||||
|
restart_policy:
|
||||||
|
condition: on-failure
|
||||||
|
command:
|
||||||
|
- bench
|
||||||
|
- schedule
|
||||||
|
volumes:
|
||||||
|
- sites:/home/frappe/frappe-bench/sites
|
||||||
|
- logs:/home/frappe/frappe-bench/logs
|
||||||
|
|
||||||
|
websocket:
|
||||||
|
image: frappe/erpnext:v15.75.0
|
||||||
|
networks:
|
||||||
|
- frappe_network
|
||||||
|
deploy:
|
||||||
|
restart_policy:
|
||||||
|
condition: on-failure
|
||||||
|
entrypoint:
|
||||||
|
- bash
|
||||||
|
- -c
|
||||||
|
command:
|
||||||
|
- >
|
||||||
|
while [ ! -f /home/frappe/frappe-bench/sites/init_done ]; do sleep 1; done && echo "Init done";
|
||||||
|
node /home/frappe/frappe-bench/apps/frappe/socketio.js;
|
||||||
|
volumes:
|
||||||
|
- sites:/home/frappe/frappe-bench/sites
|
||||||
|
- logs:/home/frappe/frappe-bench/logs
|
||||||
|
|
||||||
|
init:
|
||||||
|
image: frappe/erpnext:v15.75.0
|
||||||
|
networks:
|
||||||
|
- frappe_network
|
||||||
|
depends_on:
|
||||||
|
- db
|
||||||
|
- redis-cache
|
||||||
|
- redis-queue
|
||||||
|
entrypoint:
|
||||||
|
- bash
|
||||||
|
- -c
|
||||||
|
command:
|
||||||
|
- >
|
||||||
|
ls -1 apps > sites/apps.txt;
|
||||||
|
bench set-config -g db_host $$DB_HOST;
|
||||||
|
bench set-config -gp db_port $$DB_PORT;
|
||||||
|
bench set-config -g redis_cache "redis://$$REDIS_CACHE";
|
||||||
|
bench set-config -g redis_queue "redis://$$REDIS_QUEUE";
|
||||||
|
bench set-config -g redis_socketio "redis://$$REDIS_QUEUE";
|
||||||
|
bench set-config -gp socketio_port $$SOCKETIO_PORT;
|
||||||
|
bench new-site --db-host=db --mariadb-user-host-login-scope='%' --admin-password=${ADMIN_PASSWORD} --db-root-username=root --db-root-password=${ADMIN_PASSWORD} --install-app erpnext --set-default frontend;
|
||||||
|
touch /home/frappe/frappe-bench/sites/init_done;
|
||||||
|
environment:
|
||||||
|
DB_HOST: db
|
||||||
|
DB_PORT: "3306"
|
||||||
|
REDIS_CACHE: redis-cache:6379
|
||||||
|
REDIS_QUEUE: redis-queue:6379
|
||||||
|
SOCKETIO_PORT: "9000"
|
||||||
|
volumes:
|
||||||
|
- sites:/home/frappe/frappe-bench/sites
|
||||||
|
volumes:
|
||||||
|
db-data:
|
||||||
|
redis-queue-data:
|
||||||
|
sites:
|
||||||
|
logs:
|
||||||
|
|
||||||
|
networks:
|
||||||
|
frappe_network:
|
||||||
|
driver: bridge
|
||||||
48
erpnext/install-erpnext.sh
Normal file
48
erpnext/install-erpnext.sh
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
if command -v docker >/dev/null 2>&1; then
|
||||||
|
echo "Docker is installed"
|
||||||
|
else
|
||||||
|
echo "Docker is not installed Installing...."
|
||||||
|
curl -fsSL https://get.docker.com -o get-docker.sh
|
||||||
|
sudo sh get-docker.sh
|
||||||
|
fi
|
||||||
|
|
||||||
|
sudo usermod -aG docker "$(whoami)"
|
||||||
|
echo "🔄 Updating group membership..."
|
||||||
|
newgrp docker <<EONG
|
||||||
|
echo "✅ Docker is ready to use without sudo."
|
||||||
|
docker --version
|
||||||
|
EONG
|
||||||
|
|
||||||
|
sudo mkdir -p /var/frappe/
|
||||||
|
ADMIN_PASSWORD=$(openssl rand -hex 18)
|
||||||
|
if [ -f /var/frappe/admin-password ]; then
|
||||||
|
echo "Using admin-password at /var/frappe/admin-password"
|
||||||
|
ADMIN_PASSWORD=$(cat /var/frappe/admin-password)
|
||||||
|
else
|
||||||
|
echo "Generating new admin password"
|
||||||
|
echo $ADMIN_PASSWORD > /tmp/admin-password
|
||||||
|
sudo mv /tmp/admin-password /var/frappe/admin-password
|
||||||
|
fi
|
||||||
|
|
||||||
|
sed -i s/\${ADMIN_PASSWORD}/${ADMIN_PASSWORD}/g compose.yaml
|
||||||
|
|
||||||
|
sudo docker compose -f compose.yaml up -d
|
||||||
|
|
||||||
|
start=$(date +%s)
|
||||||
|
|
||||||
|
count=0
|
||||||
|
while [ "$count" -lt 3 ]; do
|
||||||
|
if [ "$(curl -m 1 -s -o /dev/null -w '%{http_code}' http://localhost:8080)" == "200" ];then
|
||||||
|
count=$(( count+1 ))
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
count=0
|
||||||
|
elapsed=$(( $(date +%s) - start ))
|
||||||
|
printf "\rWaiting for ERPNext to bootstrap... %ds" "$elapsed"
|
||||||
|
sleep 1
|
||||||
|
done
|
||||||
|
|
||||||
|
echo -e "\n\n----Installation complete----"
|
||||||
|
echo "Admin Login: Administrator/${ADMIN_PASSWORD}"
|
||||||
|
echo "DB Login: root/${ADMIN_PASSWORD}"
|
||||||
|
echo "URL: http://$(curl -s -4 ip.wtf):8080"
|
||||||
Reference in New Issue
Block a user