Projekt

Allgemein

Profil

ERPNext14 » Historie » Revision 59

Revision 58 (Jeremias Keihsler, 17.10.2023 12:14) → Revision 59/64 (Jeremias Keihsler, 17.10.2023 12:23)

h1. ERPNext 14 

 long term goal is to run ERPNext in a podman-pod. Maybe this can be a first stepping stone: 
 https://piotrkrzyzek.com/how-to-setup-self-host-erpnext-in-docker-without-treafik-nginx-only/ 
 until then we use Bitnami VMs. 

 h2. Bitnami based on Debian 11 

 out of the box ERPNext is installed. This describes what else can/needs to be done: 

 h3. convert VirtualBox-ova to be used with KVM 

 untar @.ova@ 

 <pre><code class="shell"> 
 tar xvf bitnami-erpnext-14.44.0-r0-debian-11-x86_64-amd64.ova 
 </code></pre> 

 convert @.vmdk@ to @.qcow2@ while showing 'progress' 

 <pre><code class="shell"> 
 qemu-img convert -p -f vmdk -O qcow2 \ 
   bitnami-erpnext-14-14.44.0-r0-debian-11-x86_64-amd64-disk-0.vmdk \ 
   bitnami-erpnext-14-14.44.0-r0-debian-11-x86_64-amd64-disk-0.qcow2 
 </code></pre> 

 this is a sample virsh dumpxml with a bridged interface 

 <pre><code class="xml"> 
 <domain type="kvm" id="7"> 
   <name>bitnami_erpnext</name> 
   <uuid>acf57964-b3d8-4148-9391-b4552a72a32c</uuid> 
   <metadata> 
     <libosinfo:libosinfo> 
     <libosinfo:os id="http://debian.org/debian/11"/> 
     </libosinfo:libosinfo> 
   </metadata> 
   <memory unit="KiB">4194304</memory> 
   <currentMemory unit="KiB">4194304</currentMemory> 
   <vcpu placement="static">2</vcpu> 
   <resource> 
     <partition>/machine</partition> 
   </resource> 
   <os> 
     <type arch="x86_64" machine="pc-i440fx-rhel7.0.0">hvm</type> 
     <boot dev="hd"/> 
     <bootmenu enable="yes"/> 
   </os> 
   <features> 
     <acpi/> 
     <apic/> 
   </features> 
   <cpu mode="host-passthrough" check="none"> 
     <topology sockets="1" cores="1" threads="2"/> 
   </cpu> 
   <clock offset="utc"> 
     <timer name="rtc" tickpolicy="catchup"/> 
     <timer name="pit" tickpolicy="delay"/> 
     <timer name="hpet" present="no"/> 
   </clock> 
   <on_poweroff>destroy</on_poweroff> 
   <on_reboot>restart</on_reboot> 
   <on_crash>destroy</on_crash> 
   <pm> 
     <suspend-to-mem enabled="no"/> 
     <suspend-to-disk enabled="no"/> 
   </pm> 
   <devices> 
     <emulator>/usr/libexec/qemu-kvm</emulator> 
     <disk type="file" device="disk"> 
       <driver name="qemu" type="qcow2"/> 
       <source file="/../libvirt/images/bitnami-erpnext-14.11.0-0-linux-vm-debian-11-x86_64-nami-disk1.qcow2"/> 
       <backingStore/> 
       <target dev="vdb" bus="virtio"/> 
       <alias name="virtio-disk1"/> 
       <address type="pci" domain="0x0000" bus="0x00" slot="0x0b" function="0x0"/> 
     </disk> 
     <controller type="usb" index="0" model="ich9-ehci1"> 
       <alias name="usb"/> 
       <address type="pci" domain="0x0000" bus="0x00" slot="0x05" function="0x7"/> 
     </controller> 
     <controller type="usb" index="0" model="ich9-uhci1"> 
       <alias name="usb"/> 
       <master startport="0"/> 
       <address type="pci" domain="0x0000" bus="0x00" slot="0x05" function="0x0" multifunction="on"/> 
     </controller> 
     <controller type="usb" index="0" model="ich9-uhci2"> 
       <alias name="usb"/> 
       <master startport="2"/> 
       <address type="pci" domain="0x0000" bus="0x00" slot="0x05" function="0x1"/> 
     </controller> 
     <controller type="usb" index="0" model="ich9-uhci3"> 
       <alias name="usb"/> 
       <master startport="4"/> 
       <address type="pci" domain="0x0000" bus="0x00" slot="0x05" function="0x2"/> 
     </controller> 
     <controller type="pci" index="0" model="pci-root"> 
       <alias name="pci.0"/> 
     </controller> 
     <controller type="virtio-serial" index="0"> 
       <alias name="virtio-serial0"/> 
       <address type="pci" domain="0x0000" bus="0x00" slot="0x06" function="0x0"/> 
     </controller> 
     <controller type="scsi" index="0" model="virtio-scsi"> 
       <alias name="scsi0"/> 
       <address type="pci" domain="0x0000" bus="0x00" slot="0x0a" function="0x0"/> 
     </controller> 
     <interface type="bridge"> 
       <mac address="52:54:00:29:00:87"/> 
       <source bridge="br0"/> 
       <target dev="vnet1"/> 
       <model type="virtio"/> 
       <alias name="net0"/> 
       <address type="pci" domain="0x0000" bus="0x00" slot="0x03" function="0x0"/> 
     </interface> 
     <serial type="pty"> 
       <source path="/dev/pts/9"/> 
       <target type="isa-serial" port="0"> 
         <model name="isa-serial"/> 
       </target> 
       <alias name="serial0"/> 
     </serial> 
     <console type="pty" tty="/dev/pts/9"> 
       <source path="/dev/pts/9"/> 
       <target type="serial" port="0"/> 
       <alias name="serial0"/> 
     </console> 
     <channel type="unix"> 
       <source mode="bind" path="/var/lib/libvirt/qemu/channel/target/domain-7-bitnami_erpnext/org.qemu.guest_agent.0"/> 
       <target type="virtio" name="org.qemu.guest_agent.0" state="disconnected"/> 
       <alias name="channel0"/> 
       <address type="virtio-serial" controller="0" bus="0" port="1"/> 
     </channel> 
     <channel type="spicevmc"> 
       <target type="virtio" name="com.redhat.spice.0" state="disconnected"/> 
       <alias name="channel1"/> 
       <address type="virtio-serial" controller="0" bus="0" port="2"/> 
     </channel> 
     <input type="tablet" bus="usb"> 
       <alias name="input0"/> 
       <address type="usb" bus="0" port="1"/> 
     </input> 
     <input type="mouse" bus="ps2"> 
       <alias name="input1"/> 
     </input> 
     <input type="keyboard" bus="ps2"> 
       <alias name="input2"/> 
     </input> 
     <graphics type="spice" port="5901" autoport="yes" listen="127.0.0.1"> 
       <listen type="address" address="127.0.0.1"/> 
     </graphics> 
     <sound model="ich6"> 
       <alias name="sound0"/> 
       <address type="pci" domain="0x0000" bus="0x00" slot="0x04" function="0x0"/> 
     </sound> 
     <video> 
       <model type="qxl" ram="65536" vram="65536" vgamem="16384" heads="1" primary="yes"/> 
       <alias name="video0"/> 
       <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x0"/> 
     </video> 
     <redirdev bus="usb" type="spicevmc"> 
       <alias name="redir0"/> 
       <address type="usb" bus="0" port="2"/> 
     </redirdev> 
     <redirdev bus="usb" type="spicevmc"> 
       <alias name="redir1"/> 
       <address type="usb" bus="0" port="3"/> 
     </redirdev> 
     <memballoon model="virtio"> 
       <alias name="balloon0"/> 
       <address type="pci" domain="0x0000" bus="0x00" slot="0x08" function="0x0"/> 
     </memballoon> 
     <rng model="virtio"> 
       <backend model="random">/dev/urandom</backend> 
       <alias name="rng0"/> 
       <address type="pci" domain="0x0000" bus="0x00" slot="0x09" function="0x0"/> 
     </rng> 
   </devices> 
   <seclabel type="dynamic" model="selinux" relabel="yes"> 
     <label>system_u:system_r:svirt_t:s0:c328,c377</label> 
     <imagelabel>system_u:object_r:svirt_image_t:s0:c328,c377</imagelabel> 
   </seclabel> 
   <seclabel type="dynamic" model="dac" relabel="yes"> 
     <label>+107:+107</label> 
     <imagelabel>+107:+107</imagelabel> 
   </seclabel> 
 </domain> 
 </code></pre> 

 h3. modify keyboard layout 

 taken from https://docs.bitnami.com/virtual-machine/faq/configuration/configure-keyboard/ 

 <pre><code class="shell"> 
 sudo apt update 
 sudo apt install keyboard-configuration console-setup 
 </code></pre> 

 h3. set static IP address 

 taken from https://docs.bitnami.com/virtual-machine/faq/configuration/configure-static-address/ 

 check link and current IPs 

 <pre><code class="shell"> 
 sudo ifconfig 
 </code></pre> 

 <pre><code class="shell"> 
 cd /etc/systemd/network 
 sudo touch 25-wired.network 
 </code></pre> 

 add following lines 

 <pre> 
 [Match] 
 Name=ens3 

 [Network] 
 Address=HOST-IP-ADDRESS 
 Gateway=GATEWAY-IP-ADDRESS 
 </pre> 

 restart service 

 <pre><code class="shell"> 
 sudo systemctl restart systemd-networkd 
 sudo systemctl enable systemd-networkd 
 </code></pre> 

 h3. activate SSH-Server 

 taken from https://docs.bitnami.com/virtual-machine/faq/get-started/enable-ssh/ 

 <pre><code class="shell"> 
 sudo rm -f /etc/ssh/sshd_not_to_be_run 
 sudo systemctl enable ssh 
 sudo systemctl start ssh 
 </code></pre> 

 h3. ... password-based SSH auth (are you serious?) 

 maybe ok for testing ..  
 taken from https://docs.bitnami.com/virtual-machine/faq/get-started/enable-ssh-password/ 

 edit @/etc/ssh/sshd_config@ and add/modify the following line 

 <pre><code class="shell"> 
   PasswordAuthentication yes 
 </code></pre> 

 restart SSH server 

 <pre><code class="shell"> 
   sudo systemctl restart ssh 
 </code></pre> 

 h3. ... and of course cert-based .. 

 from the remote machine just 

 <pre><code class="shell"> 
 ssh-copy-id bitnami@example.com 
 </code></pre> 

 h3. install some little tools 

 <pre><code class="shell"> 
 sudo apt install vim htop rsync 
 </code></pre> 

 h3. alias ll 

 for everyone .. taken from https://www.server-world.info/en/note?os=Debian_11&p=initial_conf&f=2 

 <pre><code class="shell"> 
 sudo vim /etc/profile.d/command_alias.sh 
 </code></pre> 

 <pre> 
 # create new file 
 # add alias you'd like to set 
 alias ll='ls $LS_OPTIONS -l' 
 # alias l='ls $LS_OPTIONS -lA' 
 # alias rm='rm -i' 
 # alias cp='cp -i' 
 # alias mv='mv -i' 
 </pre> 

 <pre><code class="shell"> 
 source /etc/profile.d/command_alias.sh 
 </code></pre> 

 h3. Install the Wkhtmltopdf extension 

 taken from https://docs.bitnami.com/aws/apps/erpnext/configuration/install-wkhtmltopdf/ 

 alternatively it should be possible to install via something like @bench install wkhtmltopdf@ but it's not working as of 2023-10-17 

 <pre><code class="shell"> 
 # cd /opt/bitnami/erpnext/frappe-bench/apps/erpnext/ find /opt/bitnami/common/bin -name fc-* | sudo xargs -I {} mv {} {}.bak 
 # . ../../../venv/bin/activate 
 # pip install ansible 
 # sudo bench apt install wkhtmltopdf zlib1g fontconfig libxrender1 libfreetype6 libxext6 libx11-6 
 </code></pre> 

 



 <pre><code class="shell"> 
 find /opt/bitnami/common/bin -name fc-* | sudo xargs -I {} mv {} {}.bak 
 sudo apt install zlib1g fontconfig libxrender1 libfreetype6 libxext6 libx11-6 
 </code></pre> 

 Download the latest version of the package from the Wkhtmltopdf project releases page and install it. Replace the X.Y.Z and PLATFORM placeholders with the correct version and platform strings from the release filename. 

 https://github.com/wkhtmltopdf/wkhtmltopdf/releases/ 

 as of 2023-02-16 https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.buster_amd64.deb 

 <pre><code class="shell"> 
 wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/X.Y.Z/wkhtmltox_X.Y.Z.PLATFORM.deb 
 sudo apt install -f ./wkhtmltox_X.Y.Z.PLATFORM.deb 
 sudo /opt/bitnami/ctlscript.sh restart 
 </code></pre> 

 h4. install alternative way? 

 without QT but with virtual X11-Server 

 https://packages.debian.org/bullseye/xvfb 
 https://installati.one/debian/11/wkhtmltopdf/ 
 https://packages.debian.org/stable/wkhtmltopdf 

 needs some testing 

 h4. Troubleshooting PDF formating issues 

 taken from https://discuss.frappe.io/t/pdf-alignment-problem/34425/7 

 set the IP-adr. in @site_config.json@ 

 <pre><code class="shell"> 
 vim /opt/bitnami/erpnext/frappe-bench/sites/erpnext/site_config.json 
 </code></pre> 

 replace @http:localhost@ with the @https://hostname-ip:443@ 

 <pre> 
  "host_name": "https://192.168.41.131:443" 
 </pre> 

 h4. Troubleshooting (is just a reminder ... I stumbled across but didn't do it, as there were no related issues yet) 

 If you experience issues with display resolution on Linux platforms, they could be related to the xfonts-75dpi or xfonts-100dpi packages. Uninstall them by executing: 

 <pre><code class="shell"> 
 sudo dpkg --remove --force-depends xfonts-75dpi 
 sudo dpkg --remove --force-depends xfonts-100dpi 
 </code></pre> 

 h3. install weasyprint 

 taken from https://packages.debian.org/bullseye/weasyprint 

 <pre><code class="shell"> 
 sudo apt install weasyprint 
 </code></pre> 

 h3. automatic backup of ERPNext 

 <pre><code class="shell"> 
 sudo vim /usr/local/bin/erpnext-backup.sh 
 </code></pre> 

 <pre><code class="shell"> 
 #!/bin/bash -l 

 # there is some 'magic' in the shebang, the '-l' is invoking the environment of the calling user (in this case 'bitnami') 
 # JKE 2023-08-24 
 cd /opt/bitnami/erpnext/frappe-bench 
 # JKE 2023-10-13 backup sites individually and with files 
 # bench backup-all-sites 
 # bench --site erpnext backup --with-files 
 # bench --site erpnext set-maintenance-mode on 
 bench --site all backup --with-files 
 # bench --site erpnext set-maintenance-mode off 
 # bench --site all backup --with-files --compress --backup-path /var/cache/myerpnext.bak/ 
 # /JKE 2023-10-13 
 </code></pre> 

 <pre><code class="shell"> 
 sudo chmod +x /usr/local/bin/erpnext-backup.sh 
 </code></pre> 

 <pre><code class="shell"> 
 sudo vim /etc/cron.d/erpnext-backup 
 </code></pre> 

 <pre><code class="shell"> 
 # JKE 2023-08-24 
 # 
 #      min    hr     dom    month dow       user      command 
 #      -      -      -      -       - 
 #      |      |      |      |       | 
 #      |      |      |      |       +-day of week (0-7) sunday=0 or 7 
 #      |      |      |      +---------month (1-12) 
 #      |      |      +----------------day of month (1-31) 
 #      |      +-----------------------hour (0-23) 
 #      +------------------------------min (0-59) 
 # 
 #       32     13     *      *       *         bitnami    /usr/local/bin/erpnext-backup.sh >> /home/bitnami/erpnext-backup.log 2>&1 
      15     18     *      *       *         bitnami    /usr/local/bin/erpnext-backup.sh 
 </code></pre> 

 here is again some 'magic', there is no MTA available. So any output from the cron-job gets discarded. 
 use the upper construct to debug and append the output to @/home/bitnami/erpnext-backup.log@ 

 the backups are stored in @/opt/bitnami/erpnext/frappe-bench/sites/erpnext/private/backups@ 

 h4. retrieve backups from external machine 

 rsync is not installed by default .. 

 <pre><code class="shell"> 
 sudo apt-get install rsync 
 </code></pre> 

 from the external machine, just invoke like 

 <pre><code class="shell"> 
 rsync --verbose --progress --stats --recursive bitnami@example.com:/opt/bitnami/erpnext/frappe-bench/sites/erpnext/private/backups/* . 
 </code></pre> 

 h3. check ERPNext version 

 <pre><code class="shell"> 
 cd /opt/bitnami/erpnext/frappe-bench 
 bench version 
 </code></pre> 

 h3. migrate ERPNext to new server 

 h4. backup complete machine 

 come on, you know how to do that image.. 

 h4. check the current version 

 <pre><code class="shell"> 
 cd /opt/bitnami/erpnext/frappe-bench 
 bench version 
 bench --version 
 </code></pre> 

 h4. upgrade ERPNext 

 taken from: https://docs.bitnami.com/general/apps/erpnext/administration/upgrade/ 

 Executing the following commands as bitnami user or the user who installed the application: 
 this may also help: https://medium.com/@prasantpant141/update-your-frappe-to-specific-latest-version-a08689fcd296 

 <pre><code class="shell"> 
 cd /opt/bitnami/erpnext/frappe-bench/apps/erpnext 
 . ../../../venv/bin/activate 
 bench update 
 deactivate 
 bench --site erpnext migrate 
 </code></pre> 

 maybe it is necessary to update @pip@ and/or @frappe-bench@ to make it happen: 

 <pre><code class="shell"> 
 cd /opt/bitnami/erpnext/frappe-bench 
 pip install --upgrade pip 
 pip3 install --upgrade frappe-bench 
 </code></pre> 

 h5. troubleshoot 

 the update from v14.16 upwards seem to miss 2 log-files. 
 <pre><code class="shell"> 
 cd /opt/bitnami/erpnext/frappe-bench/logs 
 sudo touch database.log 
 sudo chown daemon:daemon database.log 
 sudo chmod 666 database.log 
 cd /opt/bitnami/erpnext/frappe-bench/sites/erpnext/logs 
 sudo touch database.log 
 sudo chown daemon:daemon database.log 
 sudo chmod 666 database.log 
 </code></pre> 

 h4. backup 

 see also: https://medium.com/@anjanadhakal09/erpnext-frappe-backup-and-restore-in-new-site-4aa908dc3fb0 

 <pre><code class="shell"> 
 cd /opt/bitnami/erpnext/frappe-bench 
 bench --site all backup --with-files 
 </code></pre> 

 files are saved very deep 

 <pre><code class="shell"> 
 cd /opt/bitnami/erpnext/frappe-bench/sites/erpnext/private/backups/ 
 </code></pre> 

 h4. restore 

 also have a look at: 
 * https://frappeframework.com/docs/user/en/bench/reference/restore 
 * https://serverok.in/erpnext-restore-backup 

 copy files to new server into @/home/bitnami@ 

 <pre><code class="shell"> 
 cd /opt/bitnami/erpnext/frappe-bench/ 
 bench --site erpnext restore /home/bitnami/yyyymmdd_hhmmss-erpnext-database.sql.gz    --with-public-files /home/bitnami/yyyymmdd_hhmmss-erpnext-files.tar --with-private-files /home/bitnami/yyyymmdd_hhmmss-erpnext-private-files.tar 
 bench --site erpnext migrate 
 </code></pre> 

 h2. vanilla install based on Ubuntu 

 h3. backup and load into test-site 

 also have a look at: https://www.it-management-kirchberger.at/manuals-tutorials/server-centos-7/erpnext/todo.html 

 To create a staging site from a production site backup: 

 <pre><code class="shell"> 
 cd <frappe/erpnext Verzeichnis> 
 mkdir ~/backup/ 

 bench --site prod.example.net set-maintenance-mode on 
 bench --site prod.example.net set-config pause_scheduler 1 
 bench --site prod.example.net backup --with-files --compress --backup-path ~/backup/  
 # notice: Database Public & Private from stdout 
 bench --site prod.example.net set-maintenance-mode off 

 restore into other Staging instance: 

 bench new-site staging.example.net 
 bench --site staging.example.net set-maintenance-mode on 

 bench --site staging.example.net restore ~/backup/YYYYMMDD_HHMMSS-prod.example.net-database.sql.gz 
   --with-public-files    ~/backup/YYYYMMDD_HHMMSS-prod.example.net-files.tar.gz 
   --with-private-files ~/backup/YYYYMMDD_HHMMSS-prod.example.net-private-files.tar.gz 
   MySQL root password: 

 bench --site staging.example.net mute_emails true 
 bench --site staging.example.net set-maintenance-mode off 
 rm -r ~/backup/ 
 </code></pre>