Projekt

Allgemein

Profil

ERPNext14 » Historie » Version 41

Jeremias Keihsler, 14.10.2023 09:39

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
<pre><code class="shell">
293
find /opt/bitnami/common/bin -name fc-* | sudo xargs -I {} mv {} {}.bak
294 22 Jeremias Keihsler
sudo apt install zlib1g fontconfig libxrender1 libfreetype6 libxext6 libx11-6
295 14 Jeremias Keihsler
</code></pre>
296
297
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.
298
299
https://github.com/wkhtmltopdf/wkhtmltopdf/releases/
300
301 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
302
303 14 Jeremias Keihsler
<pre><code class="shell">
304 13 Jeremias Keihsler
wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/X.Y.Z/wkhtmltox_X.Y.Z.PLATFORM.deb
305
sudo apt install -f ./wkhtmltox_X.Y.Z.PLATFORM.deb
306
sudo /opt/bitnami/ctlscript.sh restart
307
</code></pre>
308
309 21 Jeremias Keihsler
h4. install alternative way?
310
311
without QT but with virtual X11-Server
312
313
https://packages.debian.org/bullseye/xvfb
314
https://installati.one/debian/11/wkhtmltopdf/
315
https://packages.debian.org/stable/wkhtmltopdf
316
317
needs some testing
318
319 23 Jeremias Keihsler
h4. Troubleshooting PDF formating issues
320 18 Jeremias Keihsler
321
taken from https://discuss.frappe.io/t/pdf-alignment-problem/34425/7
322
323
set the IP-adr. in @site_config.json@
324
325
<pre><code class="shell">
326
vim /opt/bitnami/erpnext/frappe-bench/sites/erpnext/site_config.json
327
</code></pre>
328
329 24 Jeremias Keihsler
replace @http:localhost@ with the @https://hostname-ip:443@
330 18 Jeremias Keihsler
331
<pre>
332 24 Jeremias Keihsler
 "host_name": "https://192.168.41.131:443"
333 18 Jeremias Keihsler
</pre>
334
335 20 Jeremias Keihsler
h4. Troubleshooting (is just a reminder ... I stumbled across but didn't do it, as there were no related issues yet)
336 13 Jeremias Keihsler
337
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:
338
339
<pre><code class="shell">
340
sudo dpkg --remove --force-depends xfonts-75dpi
341
sudo dpkg --remove --force-depends xfonts-100dpi
342 18 Jeremias Keihsler
</code></pre>
343 13 Jeremias Keihsler
344 16 Jeremias Keihsler
h3. install weasyprint
345
346
taken from https://packages.debian.org/bullseye/weasyprint
347
348
<pre><code class="shell">
349
sudo apt install weasyprint
350
</code></pre>
351
352 29 Jeremias Keihsler
h3. automatic backup of ERPNext
353 25 Jeremias Keihsler
354
<pre><code class="shell">
355
sudo vim /usr/local/bin/erpnext-backup.sh
356
</code></pre>
357
358
<pre><code class="shell">
359 26 Jeremias Keihsler
#!/bin/bash -l
360 1 Jeremias Keihsler
361 26 Jeremias Keihsler
# there is some 'magic' in the shebang, the '-l' is invoking the environment of the calling user (in this case 'bitnami')
362 1 Jeremias Keihsler
# JKE 2023-08-24
363 25 Jeremias Keihsler
cd /opt/bitnami/erpnext/frappe-bench
364 33 Jeremias Keihsler
# JKE 2023-10-13 backup sites individually and with files
365
# bench backup-all-sites
366 34 Jeremias Keihsler
# bench --site erpnext backup --with-files
367 39 Jeremias Keihsler
# bench --site erpnext set-maintenance-mode on
368 34 Jeremias Keihsler
bench --site all backup --with-files
369 39 Jeremias Keihsler
# bench --site erpnext set-maintenance-mode off
370 38 Jeremias Keihsler
# bench --site all backup --with-files --compress --backup-path /var/cache/myerpnext.bak/
371 33 Jeremias Keihsler
# /JKE 2023-10-13
372 25 Jeremias Keihsler
</code></pre>
373
374
<pre><code class="shell">
375
sudo chmod +x /usr/local/bin/erpnext-backup.sh
376 1 Jeremias Keihsler
</code></pre>
377
378 26 Jeremias Keihsler
<pre><code class="shell">
379
sudo vim /etc/cron.d/erpnext-backup
380
</code></pre>
381 1 Jeremias Keihsler
382 26 Jeremias Keihsler
<pre><code class="shell">
383
# JKE 2023-08-24
384
#
385
#    min  hr   dom  month dow     user    command
386
#    -    -    -    -     -
387
#    |    |    |    |     |
388
#    |    |    |    |     +-day of week (0-7) sunday=0 or 7
389
#    |    |    |    +---------month (1-12)
390
#    |    |    +----------------day of month (1-31)
391
#    |    +-----------------------hour (0-23)
392
#    +------------------------------min (0-59)
393
#
394
#     32   13   *    *     *       bitnami  /usr/local/bin/erpnext-backup.sh >> /home/bitnami/erpnext-backup.log 2>&1
395
     15   18   *    *     *       bitnami  /usr/local/bin/erpnext-backup.sh
396
</code></pre>
397
398
here is again some 'magic', there is no MTA available. So any output from the cron-job gets discarded.
399
use the upper construct to debug and append the output to @/home/bitnami/erpnext-backup.log@
400 25 Jeremias Keihsler
401 1 Jeremias Keihsler
the backups are stored in @/opt/bitnami/erpnext/frappe-bench/sites/erpnext/private/backups@
402 29 Jeremias Keihsler
403
h4. retrieve backups from external machine
404
405
rsync is not installed by default ..
406
407
<pre><code class="shell">
408
sudo apt-get install rsync
409
</code></pre>
410
411
from the external machine, just invoke like
412
413
<pre><code class="shell">
414
rsync --verbose --progress --stats --recursive bitnami@example.com:/opt/bitnami/erpnext/frappe-bench/sites/erpnext/private/backups/* .
415
</code></pre>
416 16 Jeremias Keihsler
417 40 Jeremias Keihsler
h3. check ERPNext version
418
419
<pre><code class="shell">
420
cd /opt/bitnami/erpnext/frappe-bench
421
bench version
422
</code></pre>
423
424
425 7 Jeremias Keihsler
h3. migrate ERPNext to new server
426 1 Jeremias Keihsler
427 7 Jeremias Keihsler
h4. backup
428
429 5 Jeremias Keihsler
<pre><code class="shell">
430
cd /opt/bitnami/erpnext/frappe-bench
431 1 Jeremias Keihsler
bench backup-all-sites
432 7 Jeremias Keihsler
</code></pre>
433
434
files are saved very deep
435
436
<pre><code class="shell">
437
cd /opt/bitnami/erpnext/frappe-bench/sites/erpnext/private/backups/
438
</code></pre>
439
440
h4. restore
441
442
copy files to new server into @/home/bitnami@
443
444
<pre><code class="shell">
445
gunzip yyyymmdd_hhmmss-erpnext-database.sql.gz
446
</code></pre>
447
448 1 Jeremias Keihsler
connect to MariaDB (password is the same as application-password)
449 8 Jeremias Keihsler
taken from https://docs.bitnami.com/general/apps/erpnext/get-started/connect-mariadb/
450 7 Jeremias Keihsler
451
<pre><code class="shell">
452
mysql -u root -p
453
</code></pre>
454
455 1 Jeremias Keihsler
<pre><code class="sql">
456
DROP DATABASE bitnami_erpnext;
457 8 Jeremias Keihsler
\q
458
</code></pre>
459
460 9 Jeremias Keihsler
*as of 2023-02-07 restore seems not to work following the instructions*
461
462 8 Jeremias Keihsler
<pre><code class="shell">
463
cd /opt/bitnami/erpnext/frappe-bench/
464 5 Jeremias Keihsler
bench restore /home/bitnami
465
</code></pre>
466 1 Jeremias Keihsler
467
h2. vanilla install based on Ubuntu
468 10 Jeremias Keihsler
469 11 Jeremias Keihsler
h3. backup and load into test-site
470 10 Jeremias Keihsler
471
To create a staging site from a production site backup:
472
473
<pre><code class="shell">
474
cd <frappe/erpnext Verzeichnis>
475
mkdir ~/backup/
476
477
bench --site prod.example.net set-maintenance-mode on
478
bench --site prod.example.net set-config pause_scheduler 1
479
bench --site prod.example.net backup --with-files --compress --backup-path ~/backup/ 
480
# notice: Database Public & Private from stdout
481
bench --site prod.example.net set-maintenance-mode off
482
483
restore into other Staging instance:
484
485
bench new-site staging.example.net
486
bench --site staging.example.net set-maintenance-mode on
487
488
bench --site staging.example.net restore ~/backup/YYYYMMDD_HHMMSS-prod.example.net-database.sql.gz
489
  --with-public-files  ~/backup/YYYYMMDD_HHMMSS-prod.example.net-files.tar.gz
490
  --with-private-files ~/backup/YYYYMMDD_HHMMSS-prod.example.net-private-files.tar.gz
491
  MySQL root password:
492
493
bench --site staging.example.net mute_emails true
494
bench --site staging.example.net set-maintenance-mode off
495
rm -r ~/backup/
496
</code></pre>