Systemd skripty
Jednotlivé mikroslužby jsou v případě on-premise spouštěny přes (dnes již běžně používané) systemd skripty.
Příprava skriptů
- systemd skripty nahrajeme do složky
/opt/tsm/systemd.d/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | $ ls -la /opt/tsm/systemd.d
celkem 76
drwxrwxr-x. 2 tsm tsm 4096 11. čen 10.30 .
drwxr-xr-x. 7 tsm tsm 4096 11. čen 12.42 ..
-rw-r--r--. 1 tsm tsm 511 11. čen 09.48 tsm-address-management.service
-rw-r--r--. 1 tsm tsm 481 11. čen 09.48 tsm-calendar.service
-rw-r--r--. 1 tsm tsm 478 11. čen 09.48 tsm-catalog.service
-rw-r--r--. 1 tsm tsm 490 11. čen 09.48 tsm-config-form.service
-rw-r--r--. 1 tsm tsm 481 11. čen 09.48 tsm-customer.service
-rw-r--r--. 1 tsm tsm 466 11. čen 09.49 tsm-dms.service
-rw-r--r--. 1 tsm tsm 480 11. čen 09.49 tsm-gateway.service
-rw-r--r--. 1 tsm tsm 484 11. čen 09.49 tsm-inventory.service
-rw-r--r--. 1 tsm tsm 481 11. čen 09.49 tsm-ordering.service
-rw-r--r--. 1 tsm tsm 511 11. čen 09.49 tsm-process-definition.service
-rw-r--r--. 1 tsm tsm 510 11. čen 09.49 tsm-service-discovery.service
-rw-r--r--. 1 tsm tsm 475 11. čen 09.49 tsm-ticket.service
-rw-r--r--. 1 tsm tsm 502 11. čen 09.49 tsm-user-management.service
|
Kompletní sada skriptů
Ukázky systemd skriptů jsou dostupné na adrese: https://tsm-proxy-distro.datalite.cloud/systemd.d/
Ukázka systemd souboru s konfigurací pro službu tsm-address-management (opět, ostatní služby to mají podobně). Soubor se jmenuje tsm-address-management.service:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | [Unit]
Description=TSM address-management
Requires=default.target
After=default.target
[Service]
EnvironmentFile=/opt/tsm/tsm.env
WorkingDirectory=/opt/tsm/app
ExecStart=/bin/bash -ce "exec ${JAVA_HOME}/bin/java -Xms1G -Xmx1500M -jar tsm-address-management-postgres.jar >> ${APP_LOGS}/tsm-address-management.stdout.log 2>&1"
ExecStop=/bin/kill -15 $MAINPID
Restart=on-failure
PrivateTmp=true
User=tsm-admin
Group=tsm-admin
KillSignal=SIGTERM
SuccessExitStatus=143
[Install]
WantedBy=default.target
|
Na co je potřeba dávat pozor v nastavení dodávaných systemd skriptů:
- základní proměnné prostředí jsou umístěny v souboru
/opt/tsm/tsm.env, v systemd souboru je to řádek:
| EnvironmentFile=/opt/tsm/tsm.env
|
Obsah souboru /opt/tsm/tsm.env je:
| BASEDIR=/opt/tsm
JAVA_HOME=/opt/tsm/sw/java
APP_HOME=/opt/tsm/app
APP_LOGS=/opt/tsm/logs/app
|
- pracovní adresář, tj. adresář, kde
jar balíček startuje je nastaven na /opt/tsm/app, v systemd skriptu je to řádek:
| WorkingDirectory=/opt/tsm/app
|
Důležité
Pracovní adresář je důležité nastavení, protože v podadresáři config/ pak aplikace "hledá" yml konfigurační soubory (jedná se o chování SpringBoot aplikace - Java framework, v němž jsou mikroslužby TSM vyvíjené).
- nastavení uživatele a skupiny, pok kterou aplikace poběží, v
systemd skriptu jsou to dva řádky:
| User=tsm-admin
Group=tsm-admin
|
- logování mikroslužeb, v
systemd skriptu je uvedeno na řádku, kde je volba ExecStart:
| ExecStart=/bin/bash -ce \
"exec ${JAVA_HOME}/bin/java -Xms1G -Xmx1500M \
-jar tsm-address-management-postgres.jar >> \
${APP_LOGS}/tsm-address-management.stdout.log 2>&1"
|
Výstup je přesměrován do souboru ${APP_LOGS}/tsm-address-management.stdout.log. Proměnná APP_LOGS ukazuje do složky /opt/tsm/logs/app. Jak již bylo zmíněno, proměnná se bere ze souboru /opt/tsm/tsm.env (v systemd se jedná o nastavení EnvironmentFile=/opt/tsm/tsm.env).
Zprovoznění přes systemd
Když máme všechny skripty umístěné ve složce /opt/tsm/systemd.d připraveny, můžeme přejít k samotnému zprovoznění přes systemd.
- přepneme se na uživatele
root pomocí sudo:
- nastavíme proměnnou
BASEDIR, ta musí obsahovat cestu ke složce s našimi upravenými systemd skripty, v v našem případě provedeme v terminálu:
- přejdeme do složky
/usr/lib/systemd/system
| cd /usr/lib/systemd/system
|
A spustíme následující sadu příkazů v terminálu:
1
2
3
4
5
6
7
8
9
10
11
12
13 | ln -sf ${BASEDIR}/systemd.d/tsm-address-management.service
ln -sf ${BASEDIR}/systemd.d/tsm-calendar.service
ln -sf ${BASEDIR}/systemd.d/tsm-catalog.service
ln -sf ${BASEDIR}/systemd.d/tsm-config-form.service
ln -sf ${BASEDIR}/systemd.d/tsm-customer.service
ln -sf ${BASEDIR}/systemd.d/tsm-dms.service
ln -sf ${BASEDIR}/systemd.d/tsm-gateway.service
ln -sf ${BASEDIR}/systemd.d/tsm-inventory.service
ln -sf ${BASEDIR}/systemd.d/tsm-ordering.service
ln -sf ${BASEDIR}/systemd.d/tsm-process-definition.service
ln -sf ${BASEDIR}/systemd.d/tsm-service-discovery.service
ln -sf ${BASEDIR}/systemd.d/tsm-ticket.service
ln -sf ${BASEDIR}/systemd.d/tsm-user-management.service
|
Následně povolíme automatický start systemd služeb, v terminálu spustíme:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 | systemctl enable tsm-address-management
systemctl enable tsm-calendar
systemctl enable tsm-catalog
systemctl enable tsm-config-form
systemctl enable tsm-customer
systemctl enable tsm-dms
systemctl enable tsm-gateway
systemctl enable tsm-inventory
systemctl enable tsm-ordering
systemctl enable tsm-process-definition
systemctl enable tsm-service-discovery
systemctl enable tsm-ticket
systemctl enable tsm-user-management
systemctl daemon-reload
|
- zkusíme nastartovat službu
tsm-service-discovery:
| systemctl start tsm-service-discovery
|
- podívat se jestli služba běží:
| systemctl status tsm-service-discovery
● tsm-service-discovery.service - TSM service-discovery
Loaded: loaded (/opt/tsm/systemd.d/tsm-service-discovery.service; enabled; vendor preset: disabled)
Active: active (running) since Ne 2021-06-13 23:34:41 CEST; 12h ago
Main PID: 3582 (java)
CGroup: /system.slice/tsm-service-discovery.service
└─3582 /opt/tsm/sw/java/bin/java -Xms512M -Xmx1G -jar tsm-service-discovery-postgres.jar
|
- případně se podívat do výstupního logu:
| less /opt/tsm/logs/app/tsm-service-discovary.stdout.log
|
Pokud vše funguje, nastartujeme zbytek služeb:
1
2
3
4
5
6
7
8
9
10
11
12
13 | systemctl start tsm-address-management
systemctl start tsm-calendar
systemctl start tsm-catalog
systemctl start tsm-config-form
systemctl start tsm-customer
systemctl start tsm-dms
systemctl start tsm-gateway
systemctl start tsm-inventory
systemctl start tsm-ordering
systemctl start tsm-process-definition
systemctl start tsm-service-discovery
systemctl start tsm-ticket
systemctl start tsm-user-management
|
Systemd skripty pro ostatní služby
Zprovoznění ostatních skriptů pro infrastrukturní služby probíhá obdobně jako pro mikro-služby. Nejprve je nutné připravit soubory ve složce /opt/tsm/systemd.d:
- zook.service
- kafka.service
- elastic.service
- kibana.service
- proxy.service
Zookeeper
Obsah souboru /opt/tsm/systemd.d/zook.service:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | [Unit]
Description=Zookeeper
Requires=default.target
After=default.target
[Service]
EnvironmentFile=/opt/tsm/tsm.env
Environment="KAFKA_HEAP_OPTS=-Xms512M -Xmx1G"
WorkingDirectory=/opt/tsm/sw/kafka
ExecStart=/bin/bash -ce "exec ${BASEDIR}/sw/kafka/bin/zookeeper-server-start.sh ${BASEDIR}/sw/kafka/config/zookeeper.properties"
KillMode=process
KillSignal=SIGTERM
SuccessExitStatus=143
TimeoutStopSec=10
PrivateTmp=true
Restart=on-failure
User=tsm-admin
Group=tsm-admin
[Install]
WantedBy=default.target
|
Kafka
Obsah souboru /opt/tsm/systemd.d/kafka.service:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 | [Unit]
Description=Kafka
Requires=default.target
After=default.target
[Service]
EnvironmentFile=/opt/tsm/tsm.env
WorkingDirectory=/opt/tsm/sw/kafka
LimitNOFILE=65535
LimitNPROC=65535
Environment="KAFKA_HEAP_OPTS=-Xms1G -Xmx2G"
ExecStart=/bin/bash -ce "exec ${BASEDIR}/sw/kafka/bin/kafka-server-start.sh ${BASEDIR}/sw/kafka/config/server.properties"
KillMode=process
KillSignal=SIGTERM
SuccessExitStatus=143
TimeoutStopSec=10
PrivateTmp=true
Restart=on-failure
User=tsm-admin
Group=tsm-admin
[Install]
WantedBy=default.target
|
Elasticsearch
Obsah souboru /opt/tsm/systemd.d/elastic.service:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 | [Unit]
Description=Elastic
Requires=default.target
After=default.target
[Service]
EnvironmentFile=/opt/tsm/tsm.env
WorkingDirectory=/opt/tsm/sw/elastic
LimitNOFILE=65535
LimitNPROC=65535
ExecStart=/bin/bash -ce "exec ${BASEDIR}/sw/elastic/bin/elasticsearch"
KillMode=process
KillSignal=SIGTERM
SuccessExitStatus=143
TimeoutStopSec=10
PrivateTmp=true
Restart=on-failure
User=tsm-admin
Group=tsm-admin
[Install]
WantedBy=default.target
|
Kibana
Obsah souboru /opt/tsm/systemd.d/kibana.service:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | [Unit]
Description=Kibana
Requires=default.target
After=default.target
[Service]
EnvironmentFile=/opt/tsm/tsm.env
WorkingDirectory=/opt/tsm/sw/kibana
LimitNOFILE=65535
LimitNPROC=65535
ExecStart=/bin/bash -ce "exec ${BASEDIR}/sw/kibana/bin/kibana"
KillMode=process
PrivateTmp=true
Restart=on-failure
User=tsm-admin
Group=tsm-admin
[Install]
WantedBy=default.target
|
Proxy (nginx)
Obsah souboru /opt/tsm/systemd.d/proxy.service:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | [Unit]
Description=NGINX (with virtual host stats, openssl, ldap auth, jwt auth, lua)
After=syslog.target network-online.target
Wants=network-online.target
[Service]
Type=forking
ExecStartPre=/opt/tsm/proxy/nginx/sbin/nginx -t
ExecStart=/opt/tsm/proxy/nginx/sbin/nginx
ExecStop=/opt/tsm/proxy/nginx/sbin/nginx -s stop
ExecReload=/opt/tsm/proxy/nginx/sbin/nginx -s reload
PrivateTmp=true
User=tsm-admin
Group=tsm-admin
[Install]
WantedBy=default.target
|
Zprovoznění infra služeb přes systemd
- přepneme se na uživatele
root pomocí sudo:
- nastavíme proměnnou
BASEDIR, ta musí obsahovat cestu ke složce s našimi upravenými systemd skripty, v v našem případě provedeme v terminálu:
- přejdeme do složky
/usr/lib/systemd/system
| cd /usr/lib/systemd/system
|
A spustíme následující sadu příkazů v terminálu:
| ln -sf ${BASEDIR}/systemd.d/zook.service
ln -sf ${BASEDIR}/systemd.d/kafka.service
ln -sf ${BASEDIR}/systemd.d/elastic.service
ln -sf ${BASEDIR}/systemd.d/kibana.service
ln -sf ${BASEDIR}/systemd.d/proxy.service
|
Následně povolíme automatický start systemd služeb, v terminálu spustíme:
| systemctl enable zook
systemctl enable kafka
systemctl enable elastic
systemctl enable kibana
systemctl enable proxy
systemctl daemon-reload
|