Projekt

Allgemein

Profil

ERPNext14 » Historie » Version 57

Jeremias Keihsler, 17.10.2023 10:01

1 1 Jeremias Keihsler
h1. ERPNext 14
2
3 41 Jeremias Keihsler
long term goal is to run ERPNext in a podman-pod. Maybe this can be a first stepping stone:
4
https://piotrkrzyzek.com/how-to-setup-self-host-erpnext-in-docker-without-treafik-nginx-only/
5
until then we use Bitnami VMs.
6
7 1 Jeremias Keihsler
h2. Bitnami based on Debian 11
8
9
out of the box ERPNext is installed. This describes what else can/needs to be done:
10
11
h3. convert VirtualBox-ova to be used with KVM
12
13
untar @.ova@
14
15
<pre><code class="shell">
16 52 Jeremias Keihsler
tar xvf bitnami-erpnext-14.44.0-r0-debian-11-x86_64-amd64.ova
17 1 Jeremias Keihsler
</code></pre>
18
19
convert @.vmdk@ to @.qcow2@ while showing 'progress'
20
21
<pre><code class="shell">
22
qemu-img convert -p -f vmdk -O qcow2 \
23 52 Jeremias Keihsler
  bitnami-erpnext-14-14.44.0-r0-debian-11-x86_64-amd64-disk-0.vmdk \
24
  bitnami-erpnext-14-14.44.0-r0-debian-11-x86_64-amd64-disk-0.qcow2
25 1 Jeremias Keihsler
</code></pre>
26
27
this is a sample virsh dumpxml with a bridged interface
28
29
<pre><code class="xml">
30
<domain type="kvm" id="7">
31 2 Jeremias Keihsler
  <name>bitnami_erpnext</name>
32
  <uuid>acf57964-b3d8-4148-9391-b4552a72a32c</uuid>
33
  <metadata>
34
    <libosinfo:libosinfo>
35
    <libosinfo:os id="http://debian.org/debian/11"/>
36
    </libosinfo:libosinfo>
37
  </metadata>
38
  <memory unit="KiB">4194304</memory>
39
  <currentMemory unit="KiB">4194304</currentMemory>
40
  <vcpu placement="static">2</vcpu>
41
  <resource>
42
    <partition>/machine</partition>
43
  </resource>
44
  <os>
45
    <type arch="x86_64" machine="pc-i440fx-rhel7.0.0">hvm</type>
46
    <boot dev="hd"/>
47
    <bootmenu enable="yes"/>
48
  </os>
49
  <features>
50
    <acpi/>
51
    <apic/>
52
  </features>
53
  <cpu mode="host-passthrough" check="none">
54
    <topology sockets="1" cores="1" threads="2"/>
55
  </cpu>
56
  <clock offset="utc">
57
    <timer name="rtc" tickpolicy="catchup"/>
58
    <timer name="pit" tickpolicy="delay"/>
59
    <timer name="hpet" present="no"/>
60
  </clock>
61
  <on_poweroff>destroy</on_poweroff>
62
  <on_reboot>restart</on_reboot>
63
  <on_crash>destroy</on_crash>
64
  <pm>
65
    <suspend-to-mem enabled="no"/>
66
    <suspend-to-disk enabled="no"/>
67
  </pm>
68
  <devices>
69
    <emulator>/usr/libexec/qemu-kvm</emulator>
70
    <disk type="file" device="disk">
71
      <driver name="qemu" type="qcow2"/>
72
      <source file="/../libvirt/images/bitnami-erpnext-14.11.0-0-linux-vm-debian-11-x86_64-nami-disk1.qcow2"/>
73
      <backingStore/>
74
      <target dev="vdb" bus="virtio"/>
75
      <alias name="virtio-disk1"/>
76
      <address type="pci" domain="0x0000" bus="0x00" slot="0x0b" function="0x0"/>
77
    </disk>
78
    <controller type="usb" index="0" model="ich9-ehci1">
79
      <alias name="usb"/>
80
      <address type="pci" domain="0x0000" bus="0x00" slot="0x05" function="0x7"/>
81
    </controller>
82
    <controller type="usb" index="0" model="ich9-uhci1">
83
      <alias name="usb"/>
84
      <master startport="0"/>
85
      <address type="pci" domain="0x0000" bus="0x00" slot="0x05" function="0x0" multifunction="on"/>
86
    </controller>
87
    <controller type="usb" index="0" model="ich9-uhci2">
88
      <alias name="usb"/>
89
      <master startport="2"/>
90
      <address type="pci" domain="0x0000" bus="0x00" slot="0x05" function="0x1"/>
91
    </controller>
92
    <controller type="usb" index="0" model="ich9-uhci3">
93
      <alias name="usb"/>
94
      <master startport="4"/>
95
      <address type="pci" domain="0x0000" bus="0x00" slot="0x05" function="0x2"/>
96
    </controller>
97
    <controller type="pci" index="0" model="pci-root">
98
      <alias name="pci.0"/>
99
    </controller>
100
    <controller type="virtio-serial" index="0">
101
      <alias name="virtio-serial0"/>
102
      <address type="pci" domain="0x0000" bus="0x00" slot="0x06" function="0x0"/>
103
    </controller>
104
    <controller type="scsi" index="0" model="virtio-scsi">
105
      <alias name="scsi0"/>
106
      <address type="pci" domain="0x0000" bus="0x00" slot="0x0a" function="0x0"/>
107
    </controller>
108
    <interface type="bridge">
109
      <mac address="52:54:00:29:00:87"/>
110
      <source bridge="br0"/>
111
      <target dev="vnet1"/>
112
      <model type="virtio"/>
113
      <alias name="net0"/>
114
      <address type="pci" domain="0x0000" bus="0x00" slot="0x03" function="0x0"/>
115
    </interface>
116
    <serial type="pty">
117
      <source path="/dev/pts/9"/>
118
      <target type="isa-serial" port="0">
119
        <model name="isa-serial"/>
120
      </target>
121
      <alias name="serial0"/>
122
    </serial>
123
    <console type="pty" tty="/dev/pts/9">
124
      <source path="/dev/pts/9"/>
125
      <target type="serial" port="0"/>
126
      <alias name="serial0"/>
127
    </console>
128
    <channel type="unix">
129
      <source mode="bind" path="/var/lib/libvirt/qemu/channel/target/domain-7-bitnami_erpnext/org.qemu.guest_agent.0"/>
130
      <target type="virtio" name="org.qemu.guest_agent.0" state="disconnected"/>
131
      <alias name="channel0"/>
132
      <address type="virtio-serial" controller="0" bus="0" port="1"/>
133
    </channel>
134
    <channel type="spicevmc">
135
      <target type="virtio" name="com.redhat.spice.0" state="disconnected"/>
136
      <alias name="channel1"/>
137
      <address type="virtio-serial" controller="0" bus="0" port="2"/>
138
    </channel>
139
    <input type="tablet" bus="usb">
140
      <alias name="input0"/>
141
      <address type="usb" bus="0" port="1"/>
142
    </input>
143
    <input type="mouse" bus="ps2">
144
      <alias name="input1"/>
145
    </input>
146
    <input type="keyboard" bus="ps2">
147
      <alias name="input2"/>
148
    </input>
149
    <graphics type="spice" port="5901" autoport="yes" listen="127.0.0.1">
150
      <listen type="address" address="127.0.0.1"/>
151
    </graphics>
152
    <sound model="ich6">
153
      <alias name="sound0"/>
154
      <address type="pci" domain="0x0000" bus="0x00" slot="0x04" function="0x0"/>
155
    </sound>
156
    <video>
157
      <model type="qxl" ram="65536" vram="65536" vgamem="16384" heads="1" primary="yes"/>
158
      <alias name="video0"/>
159
      <address type="pci" domain="0x0000" bus="0x00" slot="0x02" function="0x0"/>
160
    </video>
161
    <redirdev bus="usb" type="spicevmc">
162
      <alias name="redir0"/>
163
      <address type="usb" bus="0" port="2"/>
164
    </redirdev>
165
    <redirdev bus="usb" type="spicevmc">
166
      <alias name="redir1"/>
167
      <address type="usb" bus="0" port="3"/>
168
    </redirdev>
169
    <memballoon model="virtio">
170
      <alias name="balloon0"/>
171
      <address type="pci" domain="0x0000" bus="0x00" slot="0x08" function="0x0"/>
172
    </memballoon>
173
    <rng model="virtio">
174
      <backend model="random">/dev/urandom</backend>
175
      <alias name="rng0"/>
176
      <address type="pci" domain="0x0000" bus="0x00" slot="0x09" function="0x0"/>
177
    </rng>
178
  </devices>
179
  <seclabel type="dynamic" model="selinux" relabel="yes">
180
    <label>system_u:system_r:svirt_t:s0:c328,c377</label>
181
    <imagelabel>system_u:object_r:svirt_image_t:s0:c328,c377</imagelabel>
182
  </seclabel>
183
  <seclabel type="dynamic" model="dac" relabel="yes">
184
    <label>+107:+107</label>
185
    <imagelabel>+107:+107</imagelabel>
186
  </seclabel>
187 1 Jeremias Keihsler
</domain>
188
</code></pre>
189
190 48 Jeremias Keihsler
h3. modify keyboard layout
191
192
taken from https://docs.bitnami.com/virtual-machine/faq/configuration/configure-keyboard/
193
194
<pre><code class="shell">
195 54 Jeremias Keihsler
sudo apt update
196
sudo apt install keyboard-configuration console-setup
197 48 Jeremias Keihsler
</code></pre>
198
199 12 Jeremias Keihsler
h3. set static IP address
200
201
taken from https://docs.bitnami.com/virtual-machine/faq/configuration/configure-static-address/
202
203
check link and current IPs
204
205
<pre><code class="shell">
206
sudo ifconfig
207
</code></pre>
208
209
<pre><code class="shell">
210
cd /etc/systemd/network
211
sudo touch 25-wired.network
212
</code></pre>
213
214
add following lines
215
216
<pre>
217
[Match]
218 30 Jeremias Keihsler
Name=ens3
219 12 Jeremias Keihsler
220
[Network]
221
Address=HOST-IP-ADDRESS
222
Gateway=GATEWAY-IP-ADDRESS
223
</pre>
224
225
restart service
226
227
<pre><code class="shell">
228 55 Jeremias Keihsler
sudo systemctl restart systemd-networkd
229 30 Jeremias Keihsler
sudo systemctl enable systemd-networkd
230 12 Jeremias Keihsler
</code></pre>
231
232 2 Jeremias Keihsler
h3. activate SSH-Server
233 1 Jeremias Keihsler
234 2 Jeremias Keihsler
taken from https://docs.bitnami.com/virtual-machine/faq/get-started/enable-ssh/
235 1 Jeremias Keihsler
236 2 Jeremias Keihsler
<pre><code class="shell">
237
sudo rm -f /etc/ssh/sshd_not_to_be_run
238
sudo systemctl enable ssh
239
sudo systemctl start ssh
240
</code></pre>
241 1 Jeremias Keihsler
242 3 Jeremias Keihsler
h3. ... password-based SSH auth (are you serious?)
243
244
maybe ok for testing .. 
245
taken from https://docs.bitnami.com/virtual-machine/faq/get-started/enable-ssh-password/
246
247
edit @/etc/ssh/sshd_config@ and add/modify the following line
248
249
<pre><code class="shell">
250
  PasswordAuthentication yes
251
</code></pre>
252
253
restart SSH server
254
255
<pre><code class="shell">
256 35 Jeremias Keihsler
  sudo systemctl restart ssh
257 28 Jeremias Keihsler
</code></pre>
258
259 4 Jeremias Keihsler
h3. ... and of course cert-based ..
260
261
from the remote machine just
262
263
<pre><code class="shell">
264 36 Jeremias Keihsler
ssh-copy-id bitnami@example.com
265 31 Jeremias Keihsler
</code></pre>
266
267 56 Jeremias Keihsler
h3. install some little tools
268
269
<pre><code class="shell">
270
sudo apt install vim htop rsync
271
</code></pre>
272
273 5 Jeremias Keihsler
h3. alias ll
274
275 6 Jeremias Keihsler
for everyone .. taken from https://www.server-world.info/en/note?os=Debian_11&p=initial_conf&f=2
276
277 5 Jeremias Keihsler
<pre><code class="shell">
278
sudo vim /etc/profile.d/command_alias.sh
279
</code></pre>
280
281
<pre>
282
# create new file
283
# add alias you'd like to set
284
alias ll='ls $LS_OPTIONS -l'
285
# alias l='ls $LS_OPTIONS -lA'
286
# alias rm='rm -i'
287
# alias cp='cp -i'
288
# alias mv='mv -i'
289
</pre>
290
291
<pre><code class="shell">
292
source /etc/profile.d/command_alias.sh
293
</code></pre>
294
295 13 Jeremias Keihsler
h3. Install the Wkhtmltopdf extension
296
297
taken from https://docs.bitnami.com/aws/apps/erpnext/configuration/install-wkhtmltopdf/
298
299 42 Jeremias Keihsler
alternatively it should be possible to install via something like @bench install wkhtmltopdf@
300
301 13 Jeremias Keihsler
<pre><code class="shell">
302
find /opt/bitnami/common/bin -name fc-* | sudo xargs -I {} mv {} {}.bak
303 22 Jeremias Keihsler
sudo apt install zlib1g fontconfig libxrender1 libfreetype6 libxext6 libx11-6
304 14 Jeremias Keihsler
</code></pre>
305
306
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.
307
308
https://github.com/wkhtmltopdf/wkhtmltopdf/releases/
309
310 15 Jeremias Keihsler
as of 2023-02-16 https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6-1/wkhtmltox_0.12.6-1.buster_amd64.deb
311
312 14 Jeremias Keihsler
<pre><code class="shell">
313 13 Jeremias Keihsler
wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/X.Y.Z/wkhtmltox_X.Y.Z.PLATFORM.deb
314
sudo apt install -f ./wkhtmltox_X.Y.Z.PLATFORM.deb
315
sudo /opt/bitnami/ctlscript.sh restart
316
</code></pre>
317
318 21 Jeremias Keihsler
h4. install alternative way?
319
320
without QT but with virtual X11-Server
321
322
https://packages.debian.org/bullseye/xvfb
323
https://installati.one/debian/11/wkhtmltopdf/
324
https://packages.debian.org/stable/wkhtmltopdf
325
326
needs some testing
327
328 23 Jeremias Keihsler
h4. Troubleshooting PDF formating issues
329 18 Jeremias Keihsler
330
taken from https://discuss.frappe.io/t/pdf-alignment-problem/34425/7
331
332
set the IP-adr. in @site_config.json@
333
334
<pre><code class="shell">
335
vim /opt/bitnami/erpnext/frappe-bench/sites/erpnext/site_config.json
336
</code></pre>
337
338 24 Jeremias Keihsler
replace @http:localhost@ with the @https://hostname-ip:443@
339 18 Jeremias Keihsler
340
<pre>
341 24 Jeremias Keihsler
 "host_name": "https://192.168.41.131:443"
342 18 Jeremias Keihsler
</pre>
343
344 20 Jeremias Keihsler
h4. Troubleshooting (is just a reminder ... I stumbled across but didn't do it, as there were no related issues yet)
345 13 Jeremias Keihsler
346
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:
347
348
<pre><code class="shell">
349
sudo dpkg --remove --force-depends xfonts-75dpi
350
sudo dpkg --remove --force-depends xfonts-100dpi
351 18 Jeremias Keihsler
</code></pre>
352 13 Jeremias Keihsler
353 16 Jeremias Keihsler
h3. install weasyprint
354
355
taken from https://packages.debian.org/bullseye/weasyprint
356
357
<pre><code class="shell">
358
sudo apt install weasyprint
359
</code></pre>
360
361 29 Jeremias Keihsler
h3. automatic backup of ERPNext
362 25 Jeremias Keihsler
363
<pre><code class="shell">
364
sudo vim /usr/local/bin/erpnext-backup.sh
365
</code></pre>
366
367
<pre><code class="shell">
368 26 Jeremias Keihsler
#!/bin/bash -l
369 1 Jeremias Keihsler
370 26 Jeremias Keihsler
# there is some 'magic' in the shebang, the '-l' is invoking the environment of the calling user (in this case 'bitnami')
371 1 Jeremias Keihsler
# JKE 2023-08-24
372 25 Jeremias Keihsler
cd /opt/bitnami/erpnext/frappe-bench
373 33 Jeremias Keihsler
# JKE 2023-10-13 backup sites individually and with files
374
# bench backup-all-sites
375 34 Jeremias Keihsler
# bench --site erpnext backup --with-files
376 39 Jeremias Keihsler
# bench --site erpnext set-maintenance-mode on
377 34 Jeremias Keihsler
bench --site all backup --with-files
378 39 Jeremias Keihsler
# bench --site erpnext set-maintenance-mode off
379 38 Jeremias Keihsler
# bench --site all backup --with-files --compress --backup-path /var/cache/myerpnext.bak/
380 33 Jeremias Keihsler
# /JKE 2023-10-13
381 25 Jeremias Keihsler
</code></pre>
382
383
<pre><code class="shell">
384
sudo chmod +x /usr/local/bin/erpnext-backup.sh
385 1 Jeremias Keihsler
</code></pre>
386
387 26 Jeremias Keihsler
<pre><code class="shell">
388
sudo vim /etc/cron.d/erpnext-backup
389
</code></pre>
390 1 Jeremias Keihsler
391 26 Jeremias Keihsler
<pre><code class="shell">
392
# JKE 2023-08-24
393
#
394
#    min  hr   dom  month dow     user    command
395
#    -    -    -    -     -
396
#    |    |    |    |     |
397
#    |    |    |    |     +-day of week (0-7) sunday=0 or 7
398
#    |    |    |    +---------month (1-12)
399
#    |    |    +----------------day of month (1-31)
400
#    |    +-----------------------hour (0-23)
401
#    +------------------------------min (0-59)
402
#
403
#     32   13   *    *     *       bitnami  /usr/local/bin/erpnext-backup.sh >> /home/bitnami/erpnext-backup.log 2>&1
404
     15   18   *    *     *       bitnami  /usr/local/bin/erpnext-backup.sh
405
</code></pre>
406
407
here is again some 'magic', there is no MTA available. So any output from the cron-job gets discarded.
408
use the upper construct to debug and append the output to @/home/bitnami/erpnext-backup.log@
409 25 Jeremias Keihsler
410 1 Jeremias Keihsler
the backups are stored in @/opt/bitnami/erpnext/frappe-bench/sites/erpnext/private/backups@
411 29 Jeremias Keihsler
412
h4. retrieve backups from external machine
413
414
rsync is not installed by default ..
415
416
<pre><code class="shell">
417
sudo apt-get install rsync
418
</code></pre>
419
420
from the external machine, just invoke like
421
422
<pre><code class="shell">
423
rsync --verbose --progress --stats --recursive bitnami@example.com:/opt/bitnami/erpnext/frappe-bench/sites/erpnext/private/backups/* .
424
</code></pre>
425 16 Jeremias Keihsler
426 40 Jeremias Keihsler
h3. check ERPNext version
427
428
<pre><code class="shell">
429
cd /opt/bitnami/erpnext/frappe-bench
430
bench version
431
</code></pre>
432
433 1 Jeremias Keihsler
h3. migrate ERPNext to new server
434 43 Jeremias Keihsler
435
h4. backup complete machine
436
437
come on, you know how to do that image..
438
439
h4. check the current version
440
441
<pre><code class="shell">
442
cd /opt/bitnami/erpnext/frappe-bench
443
bench version
444
bench --version
445
</code></pre>
446
447
h4. upgrade ERPNext
448
449
taken from: https://docs.bitnami.com/general/apps/erpnext/administration/upgrade/
450
451
Executing the following commands as bitnami user or the user who installed the application:
452
this may also help: https://medium.com/@prasantpant141/update-your-frappe-to-specific-latest-version-a08689fcd296
453
454
<pre><code class="shell">
455
cd /opt/bitnami/erpnext/frappe-bench/apps/erpnext
456
. ../../../venv/bin/activate
457
bench update
458
deactivate
459 53 Jeremias Keihsler
bench --site erpnext migrate
460 43 Jeremias Keihsler
</code></pre>
461
462
maybe it is necessary to update @pip@ and/or @frappe-bench@ to make it happen:
463
464
<pre><code class="shell">
465
cd /opt/bitnami/erpnext/frappe-bench
466
pip install --upgrade pip
467
pip3 install --upgrade frappe-bench
468
</code></pre>
469
470
h5. troubleshoot
471
472
the update from v14.16 upwards seem to miss 2 log-files.
473
<pre><code class="shell">
474
cd /opt/bitnami/erpnext/frappe-bench/logs
475
sudo touch database.log
476
sudo chown daemon:daemon database.log
477
sudo chmod 666 database.log
478
cd /opt/bitnami/erpnext/frappe-bench/sites/erpnext/logs
479
sudo touch database.log
480
sudo chown daemon:daemon database.log
481
sudo chmod 666 database.log
482
</code></pre>
483 1 Jeremias Keihsler
484 7 Jeremias Keihsler
h4. backup
485
486 47 Jeremias Keihsler
see also: https://medium.com/@anjanadhakal09/erpnext-frappe-backup-and-restore-in-new-site-4aa908dc3fb0
487
488 5 Jeremias Keihsler
<pre><code class="shell">
489
cd /opt/bitnami/erpnext/frappe-bench
490 50 Jeremias Keihsler
bench --site all backup --with-files
491 7 Jeremias Keihsler
</code></pre>
492
493
files are saved very deep
494
495
<pre><code class="shell">
496
cd /opt/bitnami/erpnext/frappe-bench/sites/erpnext/private/backups/
497
</code></pre>
498
499
h4. restore
500
501 46 Jeremias Keihsler
also have a look at:
502
* https://frappeframework.com/docs/user/en/bench/reference/restore
503
* https://serverok.in/erpnext-restore-backup
504 45 Jeremias Keihsler
505 7 Jeremias Keihsler
copy files to new server into @/home/bitnami@
506
507
<pre><code class="shell">
508 8 Jeremias Keihsler
cd /opt/bitnami/erpnext/frappe-bench/
509 51 Jeremias Keihsler
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
510 57 Jeremias Keihsler
bench --site erpnext migrate
511 5 Jeremias Keihsler
</code></pre>
512 1 Jeremias Keihsler
513
h2. vanilla install based on Ubuntu
514 10 Jeremias Keihsler
515 11 Jeremias Keihsler
h3. backup and load into test-site
516 10 Jeremias Keihsler
517 44 Jeremias Keihsler
also have a look at: https://www.it-management-kirchberger.at/manuals-tutorials/server-centos-7/erpnext/todo.html
518
519 10 Jeremias Keihsler
To create a staging site from a production site backup:
520
521
<pre><code class="shell">
522
cd <frappe/erpnext Verzeichnis>
523
mkdir ~/backup/
524
525
bench --site prod.example.net set-maintenance-mode on
526
bench --site prod.example.net set-config pause_scheduler 1
527
bench --site prod.example.net backup --with-files --compress --backup-path ~/backup/ 
528
# notice: Database Public & Private from stdout
529
bench --site prod.example.net set-maintenance-mode off
530
531
restore into other Staging instance:
532
533
bench new-site staging.example.net
534
bench --site staging.example.net set-maintenance-mode on
535
536
bench --site staging.example.net restore ~/backup/YYYYMMDD_HHMMSS-prod.example.net-database.sql.gz
537
  --with-public-files  ~/backup/YYYYMMDD_HHMMSS-prod.example.net-files.tar.gz
538
  --with-private-files ~/backup/YYYYMMDD_HHMMSS-prod.example.net-private-files.tar.gz
539
  MySQL root password:
540
541
bench --site staging.example.net mute_emails true
542
bench --site staging.example.net set-maintenance-mode off
543
rm -r ~/backup/
544
</code></pre>