Projekt

Allgemein

Profil

ERPNext14 » Historie » Version 40

Jeremias Keihsler, 13.10.2023 21:27

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