Projekt

Allgemein

Profil

ERPNext14 » Historie » Version 42

Jeremias Keihsler, 14.10.2023 09:44

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
427 7 Jeremias Keihsler
h3. migrate ERPNext to new server
428 1 Jeremias Keihsler
429 7 Jeremias Keihsler
h4. backup
430
431 5 Jeremias Keihsler
<pre><code class="shell">
432
cd /opt/bitnami/erpnext/frappe-bench
433 1 Jeremias Keihsler
bench backup-all-sites
434 7 Jeremias Keihsler
</code></pre>
435
436
files are saved very deep
437
438
<pre><code class="shell">
439
cd /opt/bitnami/erpnext/frappe-bench/sites/erpnext/private/backups/
440
</code></pre>
441
442
h4. restore
443
444
copy files to new server into @/home/bitnami@
445
446
<pre><code class="shell">
447
gunzip yyyymmdd_hhmmss-erpnext-database.sql.gz
448
</code></pre>
449
450 1 Jeremias Keihsler
connect to MariaDB (password is the same as application-password)
451 8 Jeremias Keihsler
taken from https://docs.bitnami.com/general/apps/erpnext/get-started/connect-mariadb/
452 7 Jeremias Keihsler
453
<pre><code class="shell">
454
mysql -u root -p
455
</code></pre>
456
457 1 Jeremias Keihsler
<pre><code class="sql">
458
DROP DATABASE bitnami_erpnext;
459 8 Jeremias Keihsler
\q
460
</code></pre>
461
462 9 Jeremias Keihsler
*as of 2023-02-07 restore seems not to work following the instructions*
463
464 8 Jeremias Keihsler
<pre><code class="shell">
465
cd /opt/bitnami/erpnext/frappe-bench/
466 5 Jeremias Keihsler
bench restore /home/bitnami
467
</code></pre>
468 1 Jeremias Keihsler
469
h2. vanilla install based on Ubuntu
470 10 Jeremias Keihsler
471 11 Jeremias Keihsler
h3. backup and load into test-site
472 10 Jeremias Keihsler
473
To create a staging site from a production site backup:
474
475
<pre><code class="shell">
476
cd <frappe/erpnext Verzeichnis>
477
mkdir ~/backup/
478
479
bench --site prod.example.net set-maintenance-mode on
480
bench --site prod.example.net set-config pause_scheduler 1
481
bench --site prod.example.net backup --with-files --compress --backup-path ~/backup/ 
482
# notice: Database Public & Private from stdout
483
bench --site prod.example.net set-maintenance-mode off
484
485
restore into other Staging instance:
486
487
bench new-site staging.example.net
488
bench --site staging.example.net set-maintenance-mode on
489
490
bench --site staging.example.net restore ~/backup/YYYYMMDD_HHMMSS-prod.example.net-database.sql.gz
491
  --with-public-files  ~/backup/YYYYMMDD_HHMMSS-prod.example.net-files.tar.gz
492
  --with-private-files ~/backup/YYYYMMDD_HHMMSS-prod.example.net-private-files.tar.gz
493
  MySQL root password:
494
495
bench --site staging.example.net mute_emails true
496
bench --site staging.example.net set-maintenance-mode off
497
rm -r ~/backup/
498
</code></pre>