Setup erpnext14 dockerized » Historie » Revision 8
Revision 7 (Jeremias Keihsler, 19.03.2024 13:56) → Revision 8/35 (Jeremias Keihsler, 19.03.2024 14:56)
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 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: - "80: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> h2. erpnext as a service https://stackoverflow.com/questions/43671482/how-to-run-docker-compose-up-d-at-system-start-up <pre> # /etc/systemd/system/docker-compose-app.service [Unit] Description=Docker Compose Application Service Requires=docker.service After=docker.service [Service] Type=oneshot RemainAfterExit=yes WorkingDirectory=/srv/docker ExecStart=/usr/local/bin/docker-compose up -d ExecStop=/usr/local/bin/docker-compose down TimeoutStartSec=0 [Install] WantedBy=multi-user.target </pre> <pre><code class="shell"> systemctl enable docker-compose-app </code></pre>