Projekt

Allgemein

Profil

ERPNext14 » Historie » Version 49

Jeremias Keihsler, 16.10.2023 10:54

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 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
  sudo apt install keyboard-configuration console-setup
196
</code></pre>
197
198 12 Jeremias Keihsler
h3. set static IP address
199
200
taken from https://docs.bitnami.com/virtual-machine/faq/configuration/configure-static-address/
201
202
check link and current IPs
203
204
<pre><code class="shell">
205
sudo ifconfig
206
</code></pre>
207
208
<pre><code class="shell">
209
cd /etc/systemd/network
210
sudo touch 25-wired.network
211
</code></pre>
212
213
add following lines
214
215
<pre>
216
[Match]
217 30 Jeremias Keihsler
Name=ens3
218 12 Jeremias Keihsler
219
[Network]
220
Address=HOST-IP-ADDRESS
221
Gateway=GATEWAY-IP-ADDRESS
222
</pre>
223
224
restart service
225
226
<pre><code class="shell">
227 1 Jeremias Keihsler
sudo systemctl restart systemd-networkd.service
228 30 Jeremias Keihsler
sudo systemctl enable systemd-networkd
229 12 Jeremias Keihsler
</code></pre>
230
231 2 Jeremias Keihsler
h3. activate SSH-Server
232 1 Jeremias Keihsler
233 2 Jeremias Keihsler
taken from https://docs.bitnami.com/virtual-machine/faq/get-started/enable-ssh/
234 1 Jeremias Keihsler
235 2 Jeremias Keihsler
<pre><code class="shell">
236
sudo rm -f /etc/ssh/sshd_not_to_be_run
237
sudo systemctl enable ssh
238
sudo systemctl start ssh
239
</code></pre>
240 1 Jeremias Keihsler
241 3 Jeremias Keihsler
h3. ... password-based SSH auth (are you serious?)
242
243
maybe ok for testing .. 
244
taken from https://docs.bitnami.com/virtual-machine/faq/get-started/enable-ssh-password/
245
246
edit @/etc/ssh/sshd_config@ and add/modify the following line
247
248
<pre><code class="shell">
249
  PasswordAuthentication yes
250
</code></pre>
251
252
restart SSH server
253
254
<pre><code class="shell">
255 35 Jeremias Keihsler
  sudo systemctl restart ssh
256 28 Jeremias Keihsler
</code></pre>
257
258 4 Jeremias Keihsler
h3. ... and of course cert-based ..
259
260
from the remote machine just
261
262
<pre><code class="shell">
263 36 Jeremias Keihsler
ssh-copy-id bitnami@example.com
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 49 Jeremias Keihsler
bench migrate
453 43 Jeremias Keihsler
</code></pre>
454
455
maybe it is necessary to update @pip@ and/or @frappe-bench@ to make it happen:
456
457
<pre><code class="shell">
458
cd /opt/bitnami/erpnext/frappe-bench
459
pip install --upgrade pip
460
pip3 install --upgrade frappe-bench
461
</code></pre>
462
463
h5. troubleshoot
464
465
the update from v14.16 upwards seem to miss 2 log-files.
466
<pre><code class="shell">
467
cd /opt/bitnami/erpnext/frappe-bench/logs
468
sudo touch database.log
469
sudo chown daemon:daemon database.log
470
sudo chmod 666 database.log
471
cd /opt/bitnami/erpnext/frappe-bench/sites/erpnext/logs
472
sudo touch database.log
473
sudo chown daemon:daemon database.log
474
sudo chmod 666 database.log
475
</code></pre>
476 1 Jeremias Keihsler
477 7 Jeremias Keihsler
h4. backup
478
479 47 Jeremias Keihsler
see also: https://medium.com/@anjanadhakal09/erpnext-frappe-backup-and-restore-in-new-site-4aa908dc3fb0
480
481 5 Jeremias Keihsler
<pre><code class="shell">
482
cd /opt/bitnami/erpnext/frappe-bench
483 1 Jeremias Keihsler
bench backup-all-sites
484 7 Jeremias Keihsler
</code></pre>
485
486
files are saved very deep
487
488
<pre><code class="shell">
489
cd /opt/bitnami/erpnext/frappe-bench/sites/erpnext/private/backups/
490
</code></pre>
491
492
h4. restore
493
494 46 Jeremias Keihsler
also have a look at:
495
* https://frappeframework.com/docs/user/en/bench/reference/restore
496
* https://serverok.in/erpnext-restore-backup
497 45 Jeremias Keihsler
498 7 Jeremias Keihsler
copy files to new server into @/home/bitnami@
499
500
<pre><code class="shell">
501
gunzip yyyymmdd_hhmmss-erpnext-database.sql.gz
502
</code></pre>
503
504 1 Jeremias Keihsler
connect to MariaDB (password is the same as application-password)
505 8 Jeremias Keihsler
taken from https://docs.bitnami.com/general/apps/erpnext/get-started/connect-mariadb/
506 7 Jeremias Keihsler
507
<pre><code class="shell">
508
mysql -u root -p
509
</code></pre>
510
511 1 Jeremias Keihsler
<pre><code class="sql">
512
DROP DATABASE bitnami_erpnext;
513 8 Jeremias Keihsler
\q
514
</code></pre>
515
516 9 Jeremias Keihsler
*as of 2023-02-07 restore seems not to work following the instructions*
517
518 8 Jeremias Keihsler
<pre><code class="shell">
519
cd /opt/bitnami/erpnext/frappe-bench/
520 5 Jeremias Keihsler
bench restore /home/bitnami
521
</code></pre>
522 1 Jeremias Keihsler
523
h2. vanilla install based on Ubuntu
524 10 Jeremias Keihsler
525 11 Jeremias Keihsler
h3. backup and load into test-site
526 10 Jeremias Keihsler
527 44 Jeremias Keihsler
also have a look at: https://www.it-management-kirchberger.at/manuals-tutorials/server-centos-7/erpnext/todo.html
528
529 10 Jeremias Keihsler
To create a staging site from a production site backup:
530
531
<pre><code class="shell">
532
cd <frappe/erpnext Verzeichnis>
533
mkdir ~/backup/
534
535
bench --site prod.example.net set-maintenance-mode on
536
bench --site prod.example.net set-config pause_scheduler 1
537
bench --site prod.example.net backup --with-files --compress --backup-path ~/backup/ 
538
# notice: Database Public & Private from stdout
539
bench --site prod.example.net set-maintenance-mode off
540
541
restore into other Staging instance:
542
543
bench new-site staging.example.net
544
bench --site staging.example.net set-maintenance-mode on
545
546
bench --site staging.example.net restore ~/backup/YYYYMMDD_HHMMSS-prod.example.net-database.sql.gz
547
  --with-public-files  ~/backup/YYYYMMDD_HHMMSS-prod.example.net-files.tar.gz
548
  --with-private-files ~/backup/YYYYMMDD_HHMMSS-prod.example.net-private-files.tar.gz
549
  MySQL root password:
550
551
bench --site staging.example.net mute_emails true
552
bench --site staging.example.net set-maintenance-mode off
553
rm -r ~/backup/
554
</code></pre>