Projekt

Allgemein

Profil

Setup erpnext14 dockerized » Historie » Revision 6

Revision 5 (Jeremias Keihsler, 19.03.2024 13:19) → Revision 6/35 (Jeremias Keihsler, 19.03.2024 13:31)

h1. Setup erpnext14 dockerized  

 the basic idea is taken from https://www.youtube.com/watch?v=8Q5B7DnxmLg 

 use of docker compose v2 

 h2. download pwd.yml (version erpnext:v14.44.0) 

 https://github.com/frappe/frappe_docker/blob/0333e62884b706d01d38804472f71b3f6a039ff6/pwd.yml 

 save in @/home/user/erpnext@ as @docker-compose.yml@ 

 <pre><code class="yaml"> 
 version: "3" 

 services: 
   backend: 
     image: frappe/erpnext:v14.44.0 
     deploy: 
       restart_policy: 
         condition: on-failure 
     volumes: 
       - sites:/home/frappe/frappe-bench/sites 
       - logs:/home/frappe/frappe-bench/logs 

   configurator: 
     image: frappe/erpnext:v14.44.0 
     deploy: 
       restart_policy: 
         condition: none 
     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_SOCKETIO"; 
         bench set-config -gp socketio_port $$SOCKETIO_PORT; 
     environment: 
       DB_HOST: db 
       DB_PORT: "3306" 
       REDIS_CACHE: redis-cache:6379 
       REDIS_QUEUE: redis-queue:6379 
       REDIS_SOCKETIO: redis-socketio:6379 
       SOCKETIO_PORT: "9000" 
     volumes: 
       - sites:/home/frappe/frappe-bench/sites 
       - logs:/home/frappe/frappe-bench/logs 

   create-site: 
     image: frappe/erpnext:v14.44.0 
     deploy: 
       restart_policy: 
         condition: none 
     volumes: 
       - sites:/home/frappe/frappe-bench/sites 
       - logs:/home/frappe/frappe-bench/logs 
     entrypoint: 
       - bash 
       - -c 
     command: 
       - > 
         wait-for-it -t 120 db:3306; 
         wait-for-it -t 120 redis-cache:6379; 
         wait-for-it -t 120 redis-queue:6379; 
         wait-for-it -t 120 redis-socketio:6379; 
         export start=`date +%s`; 
         until [[ -n `grep -hs ^ sites/common_site_config.json | jq -r ".db_host // empty"` ]] && \ 
           [[ -n `grep -hs ^ sites/common_site_config.json | jq -r ".redis_cache // empty"` ]] && \ 
           [[ -n `grep -hs ^ sites/common_site_config.json | jq -r ".redis_queue // empty"` ]]; 
         do 
           echo "Waiting for sites/common_site_config.json to be created"; 
           sleep 5; 
           if (( `date +%s`-start > 120 )); then 
             echo "could not find sites/common_site_config.json with required keys"; 
             exit 1 
           fi 
         done; 
         echo "sites/common_site_config.json found"; 
         bench new-site erpnext --no-mariadb-socket --admin-password=admin --db-root-password=admin --install-app erpnext --set-default; 

   db: 
     image: mariadb:10.6 
     healthcheck: 
       test: mysqladmin ping -h localhost --password=admin 
       interval: 1s 
       retries: 15 
     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 
     volumes: 
       - db-data:/var/lib/mysql 

   frontend: 
     image: frappe/erpnext:v14.44.0 
     deploy: 
       restart_policy: 
         condition: on-failure 
     command: 
       - nginx-entrypoint.sh 
     environment: 
       BACKEND: backend:8000 
       FRAPPE_SITE_NAME_HEADER: erpnext 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-default: 
     image: frappe/erpnext:v14.44.0 
     deploy: 
       restart_policy: 
         condition: on-failure 
     command: 
       - bench 
       - worker 
       - --queue 
       - default 
     volumes: 
       - sites:/home/frappe/frappe-bench/sites 
       - logs:/home/frappe/frappe-bench/logs 

   queue-long: 
     image: frappe/erpnext:v14.44.0 
     deploy: 
       restart_policy: 
         condition: on-failure 
     command: 
       - bench 
       - worker 
       - --queue 
       - long 
     volumes: 
       - sites:/home/frappe/frappe-bench/sites 
       - logs:/home/frappe/frappe-bench/logs 

   queue-short: 
     image: frappe/erpnext:v14.44.0 
     deploy: 
       restart_policy: 
         condition: on-failure 
     command: 
       - bench 
       - worker 
       - --queue 
       - short 
     volumes: 
       - sites:/home/frappe/frappe-bench/sites 
       - logs:/home/frappe/frappe-bench/logs 

   redis-queue: 
     image: redis:6.2-alpine 
     deploy: 
       restart_policy: 
         condition: on-failure 
     volumes: 
       - redis-queue-data:/data 

   redis-cache: 
     image: redis:6.2-alpine 
     deploy: 
       restart_policy: 
         condition: on-failure 
     volumes: 
       - redis-cache-data:/data 

   redis-socketio: 
     image: redis:6.2-alpine 
     deploy: 
       restart_policy: 
         condition: on-failure 
     volumes: 
       - redis-socketio-data:/data 

   scheduler: 
     image: frappe/erpnext:v14.44.0 
     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:v14.44.0 
     deploy: 
       restart_policy: 
         condition: on-failure 
     command: 
       - node 
       - /home/frappe/frappe-bench/apps/frappe/socketio.js 
     volumes: 
       - sites:/home/frappe/frappe-bench/sites 
       - logs:/home/frappe/frappe-bench/logs 

 volumes: 
   db-data: 
   redis-queue-data: 
   redis-cache-data: 
   redis-socketio-data: 
   sites: 
   logs: 
 </code></pre> 

 <pre><code class="shell"> 
 sudo docker compose up -d 
 sudo docker compose logs 
 sudo docker compose    down 
 sudo docker ps 
 sudo docker exec -it b84444ac0cdb /bin/bash 
 </code></pre> 

 or more generic ... 

 <pre><code class="shell"> 
 sudo docker compose -p pwd -f pwd.yml up -d 
 sudo docker compose -p pwd -f pwd.yml logs 
 sudo docker compose -p pwd -f pwd.yml down 
 sudo docker ps 
 sudo docker exec -it b84444ac0cdb /bin/bash 
 </code></pre> 

 h3. reset everything in the docker instance 

 <pre><code class="shell"> 
 docker-compose down 
 docker rm -f $(docker ps -a -q) 
 docker volume rm $(docker volume ls -q) 
 docker-compose up -d 
 </code></pre>