Projekt

Allgemein

Profil

ERPNext14 » Historie » Version 46

Jeremias Keihsler, 14.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
tar xvf bitnami-erpnext-14.11.0-0-linux-vm-debian-11-x86_64-nami.ova
17
</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
  bitnami-erpnext-14.11.0-0-linux-vm-debian-11-x86_64-nami-disk1.vmdk \
24
  bitnami-erpnext-14.11.0-0-linux-vm-debian-11-x86_64-nami-disk1.qcow2
25
</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 12 Jeremias Keihsler
h3. set static IP address
191
192
taken from https://docs.bitnami.com/virtual-machine/faq/configuration/configure-static-address/
193
194
check link and current IPs
195
196
<pre><code class="shell">
197
sudo ifconfig
198
</code></pre>
199
200
<pre><code class="shell">
201
cd /etc/systemd/network
202
sudo touch 25-wired.network
203
</code></pre>
204
205
add following lines
206
207
<pre>
208
[Match]
209 30 Jeremias Keihsler
Name=ens3
210 12 Jeremias Keihsler
211
[Network]
212
Address=HOST-IP-ADDRESS
213
Gateway=GATEWAY-IP-ADDRESS
214
</pre>
215
216
restart service
217
218
<pre><code class="shell">
219 1 Jeremias Keihsler
sudo systemctl restart systemd-networkd.service
220 30 Jeremias Keihsler
sudo systemctl enable systemd-networkd
221 12 Jeremias Keihsler
</code></pre>
222
223 2 Jeremias Keihsler
h3. activate SSH-Server
224 1 Jeremias Keihsler
225 2 Jeremias Keihsler
taken from https://docs.bitnami.com/virtual-machine/faq/get-started/enable-ssh/
226 1 Jeremias Keihsler
227 2 Jeremias Keihsler
<pre><code class="shell">
228
sudo rm -f /etc/ssh/sshd_not_to_be_run
229
sudo systemctl enable ssh
230
sudo systemctl start ssh
231
</code></pre>
232 1 Jeremias Keihsler
233 3 Jeremias Keihsler
h3. ... password-based SSH auth (are you serious?)
234
235
maybe ok for testing .. 
236
taken from https://docs.bitnami.com/virtual-machine/faq/get-started/enable-ssh-password/
237
238
edit @/etc/ssh/sshd_config@ and add/modify the following line
239
240
<pre><code class="shell">
241
  PasswordAuthentication yes
242
</code></pre>
243
244
restart SSH server
245
246
<pre><code class="shell">
247 35 Jeremias Keihsler
  sudo systemctl restart ssh
248 3 Jeremias Keihsler
</code></pre>
249
250 28 Jeremias Keihsler
h3. ... and of course cert-based ..
251
252
from the remote machine just
253
254
<pre><code class="shell">
255
ssh-copy-id bitnami@example.com
256
</code></pre>
257
258 4 Jeremias Keihsler
h3. modify keyboard layout
259
260
taken from https://docs.bitnami.com/virtual-machine/faq/configuration/configure-keyboard/
261
262
<pre><code class="shell">
263 36 Jeremias Keihsler
  sudo apt install keyboard-configuration console-setup
264 31 Jeremias Keihsler
</code></pre>
265
266 5 Jeremias Keihsler
h3. alias ll
267
268 6 Jeremias Keihsler
for everyone .. taken from https://www.server-world.info/en/note?os=Debian_11&p=initial_conf&f=2
269
270 5 Jeremias Keihsler
<pre><code class="shell">
271
sudo vim /etc/profile.d/command_alias.sh
272
</code></pre>
273
274
<pre>
275
# create new file
276
# add alias you'd like to set
277
alias ll='ls $LS_OPTIONS -l'
278
# alias l='ls $LS_OPTIONS -lA'
279
# alias rm='rm -i'
280
# alias cp='cp -i'
281
# alias mv='mv -i'
282
</pre>
283
284
<pre><code class="shell">
285
source /etc/profile.d/command_alias.sh
286
</code></pre>
287
288 13 Jeremias Keihsler
h3. Install the Wkhtmltopdf extension
289
290
taken from https://docs.bitnami.com/aws/apps/erpnext/configuration/install-wkhtmltopdf/
291
292 42 Jeremias Keihsler
alternatively it should be possible to install via something like @bench install wkhtmltopdf@
293
294 13 Jeremias Keihsler
<pre><code class="shell">
295
find /opt/bitnami/common/bin -name fc-* | sudo xargs -I {} mv {} {}.bak
296 22 Jeremias Keihsler
sudo apt install zlib1g fontconfig libxrender1 libfreetype6 libxext6 libx11-6
297 14 Jeremias Keihsler
</code></pre>
298
299
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.
300
301
https://github.com/wkhtmltopdf/wkhtmltopdf/releases/
302
303 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
304
305 14 Jeremias Keihsler
<pre><code class="shell">
306 13 Jeremias Keihsler
wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/X.Y.Z/wkhtmltox_X.Y.Z.PLATFORM.deb
307
sudo apt install -f ./wkhtmltox_X.Y.Z.PLATFORM.deb
308
sudo /opt/bitnami/ctlscript.sh restart
309
</code></pre>
310
311 21 Jeremias Keihsler
h4. install alternative way?
312
313
without QT but with virtual X11-Server
314
315
https://packages.debian.org/bullseye/xvfb
316
https://installati.one/debian/11/wkhtmltopdf/
317
https://packages.debian.org/stable/wkhtmltopdf
318
319
needs some testing
320
321 23 Jeremias Keihsler
h4. Troubleshooting PDF formating issues
322 18 Jeremias Keihsler
323
taken from https://discuss.frappe.io/t/pdf-alignment-problem/34425/7
324
325
set the IP-adr. in @site_config.json@
326
327
<pre><code class="shell">
328
vim /opt/bitnami/erpnext/frappe-bench/sites/erpnext/site_config.json
329
</code></pre>
330
331 24 Jeremias Keihsler
replace @http:localhost@ with the @https://hostname-ip:443@
332 18 Jeremias Keihsler
333
<pre>
334 24 Jeremias Keihsler
 "host_name": "https://192.168.41.131:443"
335 18 Jeremias Keihsler
</pre>
336
337 20 Jeremias Keihsler
h4. Troubleshooting (is just a reminder ... I stumbled across but didn't do it, as there were no related issues yet)
338 13 Jeremias Keihsler
339
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:
340
341
<pre><code class="shell">
342
sudo dpkg --remove --force-depends xfonts-75dpi
343
sudo dpkg --remove --force-depends xfonts-100dpi
344 18 Jeremias Keihsler
</code></pre>
345 13 Jeremias Keihsler
346 16 Jeremias Keihsler
h3. install weasyprint
347
348
taken from https://packages.debian.org/bullseye/weasyprint
349
350
<pre><code class="shell">
351
sudo apt install weasyprint
352
</code></pre>
353
354 29 Jeremias Keihsler
h3. automatic backup of ERPNext
355 25 Jeremias Keihsler
356
<pre><code class="shell">
357
sudo vim /usr/local/bin/erpnext-backup.sh
358
</code></pre>
359
360
<pre><code class="shell">
361 26 Jeremias Keihsler
#!/bin/bash -l
362 1 Jeremias Keihsler
363 26 Jeremias Keihsler
# there is some 'magic' in the shebang, the '-l' is invoking the environment of the calling user (in this case 'bitnami')
364 1 Jeremias Keihsler
# JKE 2023-08-24
365 25 Jeremias Keihsler
cd /opt/bitnami/erpnext/frappe-bench
366 33 Jeremias Keihsler
# JKE 2023-10-13 backup sites individually and with files
367
# bench backup-all-sites
368 34 Jeremias Keihsler
# bench --site erpnext backup --with-files
369 39 Jeremias Keihsler
# bench --site erpnext set-maintenance-mode on
370 34 Jeremias Keihsler
bench --site all backup --with-files
371 39 Jeremias Keihsler
# bench --site erpnext set-maintenance-mode off
372 38 Jeremias Keihsler
# bench --site all backup --with-files --compress --backup-path /var/cache/myerpnext.bak/
373 33 Jeremias Keihsler
# /JKE 2023-10-13
374 25 Jeremias Keihsler
</code></pre>
375
376
<pre><code class="shell">
377
sudo chmod +x /usr/local/bin/erpnext-backup.sh
378 1 Jeremias Keihsler
</code></pre>
379
380 26 Jeremias Keihsler
<pre><code class="shell">
381
sudo vim /etc/cron.d/erpnext-backup
382
</code></pre>
383 1 Jeremias Keihsler
384 26 Jeremias Keihsler
<pre><code class="shell">
385
# JKE 2023-08-24
386
#
387
#    min  hr   dom  month dow     user    command
388
#    -    -    -    -     -
389
#    |    |    |    |     |
390
#    |    |    |    |     +-day of week (0-7) sunday=0 or 7
391
#    |    |    |    +---------month (1-12)
392
#    |    |    +----------------day of month (1-31)
393
#    |    +-----------------------hour (0-23)
394
#    +------------------------------min (0-59)
395
#
396
#     32   13   *    *     *       bitnami  /usr/local/bin/erpnext-backup.sh >> /home/bitnami/erpnext-backup.log 2>&1
397
     15   18   *    *     *       bitnami  /usr/local/bin/erpnext-backup.sh
398
</code></pre>
399
400
here is again some 'magic', there is no MTA available. So any output from the cron-job gets discarded.
401
use the upper construct to debug and append the output to @/home/bitnami/erpnext-backup.log@
402 25 Jeremias Keihsler
403 1 Jeremias Keihsler
the backups are stored in @/opt/bitnami/erpnext/frappe-bench/sites/erpnext/private/backups@
404 29 Jeremias Keihsler
405
h4. retrieve backups from external machine
406
407
rsync is not installed by default ..
408
409
<pre><code class="shell">
410
sudo apt-get install rsync
411
</code></pre>
412
413
from the external machine, just invoke like
414
415
<pre><code class="shell">
416
rsync --verbose --progress --stats --recursive bitnami@example.com:/opt/bitnami/erpnext/frappe-bench/sites/erpnext/private/backups/* .
417
</code></pre>
418 16 Jeremias Keihsler
419 40 Jeremias Keihsler
h3. check ERPNext version
420
421
<pre><code class="shell">
422
cd /opt/bitnami/erpnext/frappe-bench
423
bench version
424
</code></pre>
425
426 1 Jeremias Keihsler
h3. migrate ERPNext to new server
427 43 Jeremias Keihsler
428
h4. backup complete machine
429
430
come on, you know how to do that image..
431
432
h4. check the current version
433
434
<pre><code class="shell">
435
cd /opt/bitnami/erpnext/frappe-bench
436
bench version
437
bench --version
438
</code></pre>
439
440
h4. upgrade ERPNext
441
442
taken from: https://docs.bitnami.com/general/apps/erpnext/administration/upgrade/
443
444
Executing the following commands as bitnami user or the user who installed the application:
445
this may also help: https://medium.com/@prasantpant141/update-your-frappe-to-specific-latest-version-a08689fcd296
446
447
<pre><code class="shell">
448
cd /opt/bitnami/erpnext/frappe-bench/apps/erpnext
449
. ../../../venv/bin/activate
450
bench update
451
deactivate
452
</code></pre>
453
454
maybe it is necessary to update @pip@ and/or @frappe-bench@ to make it happen:
455
456
<pre><code class="shell">
457
cd /opt/bitnami/erpnext/frappe-bench
458
pip install --upgrade pip
459
pip3 install --upgrade frappe-bench
460
</code></pre>
461
462
h5. troubleshoot
463
464
the update from v14.16 upwards seem to miss 2 log-files.
465
<pre><code class="shell">
466
cd /opt/bitnami/erpnext/frappe-bench/logs
467
sudo touch database.log
468
sudo chown daemon:daemon database.log
469
sudo chmod 666 database.log
470
cd /opt/bitnami/erpnext/frappe-bench/sites/erpnext/logs
471
sudo touch database.log
472
sudo chown daemon:daemon database.log
473
sudo chmod 666 database.log
474
</code></pre>
475 1 Jeremias Keihsler
476 7 Jeremias Keihsler
h4. backup
477
478 5 Jeremias Keihsler
<pre><code class="shell">
479
cd /opt/bitnami/erpnext/frappe-bench
480 1 Jeremias Keihsler
bench backup-all-sites
481 7 Jeremias Keihsler
</code></pre>
482
483
files are saved very deep
484
485
<pre><code class="shell">
486
cd /opt/bitnami/erpnext/frappe-bench/sites/erpnext/private/backups/
487
</code></pre>
488
489
h4. restore
490
491 46 Jeremias Keihsler
also have a look at:
492
* https://frappeframework.com/docs/user/en/bench/reference/restore
493
* https://serverok.in/erpnext-restore-backup
494 45 Jeremias Keihsler
495 7 Jeremias Keihsler
copy files to new server into @/home/bitnami@
496
497
<pre><code class="shell">
498
gunzip yyyymmdd_hhmmss-erpnext-database.sql.gz
499
</code></pre>
500
501 1 Jeremias Keihsler
connect to MariaDB (password is the same as application-password)
502 8 Jeremias Keihsler
taken from https://docs.bitnami.com/general/apps/erpnext/get-started/connect-mariadb/
503 7 Jeremias Keihsler
504
<pre><code class="shell">
505
mysql -u root -p
506
</code></pre>
507
508 1 Jeremias Keihsler
<pre><code class="sql">
509
DROP DATABASE bitnami_erpnext;
510 8 Jeremias Keihsler
\q
511
</code></pre>
512
513 9 Jeremias Keihsler
*as of 2023-02-07 restore seems not to work following the instructions*
514
515 8 Jeremias Keihsler
<pre><code class="shell">
516
cd /opt/bitnami/erpnext/frappe-bench/
517 5 Jeremias Keihsler
bench restore /home/bitnami
518
</code></pre>
519 1 Jeremias Keihsler
520
h2. vanilla install based on Ubuntu
521 10 Jeremias Keihsler
522 11 Jeremias Keihsler
h3. backup and load into test-site
523 10 Jeremias Keihsler
524 44 Jeremias Keihsler
also have a look at: https://www.it-management-kirchberger.at/manuals-tutorials/server-centos-7/erpnext/todo.html
525
526 10 Jeremias Keihsler
To create a staging site from a production site backup:
527
528
<pre><code class="shell">
529
cd <frappe/erpnext Verzeichnis>
530
mkdir ~/backup/
531
532
bench --site prod.example.net set-maintenance-mode on
533
bench --site prod.example.net set-config pause_scheduler 1
534
bench --site prod.example.net backup --with-files --compress --backup-path ~/backup/ 
535
# notice: Database Public & Private from stdout
536
bench --site prod.example.net set-maintenance-mode off
537
538
restore into other Staging instance:
539
540
bench new-site staging.example.net
541
bench --site staging.example.net set-maintenance-mode on
542
543
bench --site staging.example.net restore ~/backup/YYYYMMDD_HHMMSS-prod.example.net-database.sql.gz
544
  --with-public-files  ~/backup/YYYYMMDD_HHMMSS-prod.example.net-files.tar.gz
545
  --with-private-files ~/backup/YYYYMMDD_HHMMSS-prod.example.net-private-files.tar.gz
546
  MySQL root password:
547
548
bench --site staging.example.net mute_emails true
549
bench --site staging.example.net set-maintenance-mode off
550
rm -r ~/backup/
551
</code></pre>