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