ERPNext14 » Historie » Revision 25
Revision 24 (Jeremias Keihsler, 21.02.2023 13:57) → Revision 25/64 (Jeremias Keihsler, 24.08.2023 15:34)
h1. ERPNext 14 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.11.0-0-linux-vm-debian-11-x86_64-nami.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.11.0-0-linux-vm-debian-11-x86_64-nami-disk1.vmdk \ bitnami-erpnext-14.11.0-0-linux-vm-debian-11-x86_64-nami-disk1.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. 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=enp0s3 [Network] Address=HOST-IP-ADDRESS Gateway=GATEWAY-IP-ADDRESS </pre> restart service <pre><code class="shell"> sudo systemctl restart systemd-networkd.service </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 /etc/init.d/ssh force-reload sudo /etc/init.d/ssh restart </code></pre> h3. install 'dialog' <pre><code class="shell"> sudo apt install dialog </code></pre> h3. modify keyboard layout taken from https://docs.bitnami.com/virtual-machine/faq/configuration/configure-keyboard/ <pre><code class="shell"> sudo apt-get install keyboard-configuration console-setup sudo dpkg-reconfigure keyboard-configuration sudo systemctl restart keyboard-setup </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/ <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> h2. automatic backup of ERPNext <pre><code class="shell"> sudo vim /usr/local/bin/erpnext-backup.sh </code></pre> <pre><code class="shell"> #!/bin/sh # JKE 2023-08-24 cd /opt/bitnami/erpnext/frappe-bench /opt/bitnami/erpnext/bin/bench backup-all-sites </code></pre> <pre><code class="shell"> sudo chmod +x /usr/local/bin/erpnext-backup.sh </code></pre> h3. migrate ERPNext to new server h4. backup <pre><code class="shell"> cd /opt/bitnami/erpnext/frappe-bench bench backup-all-sites </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 copy files to new server into @/home/bitnami@ <pre><code class="shell"> gunzip yyyymmdd_hhmmss-erpnext-database.sql.gz </code></pre> connect to MariaDB (password is the same as application-password) taken from https://docs.bitnami.com/general/apps/erpnext/get-started/connect-mariadb/ <pre><code class="shell"> mysql -u root -p </code></pre> <pre><code class="sql"> DROP DATABASE bitnami_erpnext; \q </code></pre> *as of 2023-02-07 restore seems not to work following the instructions* <pre><code class="shell"> cd /opt/bitnami/erpnext/frappe-bench/ bench restore /home/bitnami </code></pre> h2. vanilla install based on Ubuntu h3. backup and load into test-site 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>