Browse Source

Docker integration; cleanup of config file names

develop
Rob Colbert 2 years ago
parent
commit
c4489f6385
  1. 8
      .dockerignore
  2. 115
      .env.docker.default
  3. 4
      .gitignore
  4. 21
      Dockerfile
  5. 40
      README.md
  6. 6
      docker-build
  7. 15
      docker-clean
  8. 195
      docker-compose.yml
  9. 2
      docker-console
  10. 5
      docker-proxy
  11. 3
      docker/.ssh/config
  12. 38
      docker/.ssh/id_rsa
  13. 1
      docker/.ssh/id_rsa.pub
  14. 2
      docker/.ssh/known_hosts
  15. 138
      docker/etc/nginx/nginx.conf
  16. 26
      docs/docker.md
  17. 61
      static/502.html
  18. 400
      static/img/dtp-core.svg
  19. 13
      supervisord/dtp-base-host-services.conf
  20. 13
      supervisord/dtp-base-newsletter.conf
  21. 13
      supervisord/dtp-base.conf
  22. 13
      supervisord/dtp-webapp.conf
  23. 13
      supervisord/host-services.conf

8
.dockerignore

@ -0,0 +1,8 @@
.vscode
.git
.env
node_modules
npm-debug.log
data/minio

115
.env.docker.default

@ -0,0 +1,115 @@
#
# Site Configuration
#
DTP_SITE_NAME=DTP Base
DTP_SITE_DESCRIPTION=Enabling the success of the Next economy
DTP_SITE_DOMAIN=localhost
DTP_SITE_DOMAIN_KEY=webapp.digitaltelepresence.com
DTP_SITE_COMPANY=DTP Technologies, LLC
DTP_PASSWORD_SALT=b63ebaf1-3afb-4aee-9138-c42059a58a69
#
# Redis
#
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=1f9936ce-9d21-43dd-8638-908088f06a00
REDIS_KEY_PREFIX=soapy
#
# DTP Host Cache
#
DTP_HOST_CACHE_PORT=8000
DTP_HOST_CACHE_PATH=/tmp/dtp/host-cache
DTP_HOST_CACHE_AUTH_KEY=c071fa18-3c48-4337-a6af-6459ebdd8537
DTP_HOST_CACHE_CLEAN_CRON=*/30 * * * * *
#
# MongoDB
#
MONGODB_HOST=mongodb:27017
MONGODB_DATABASE=dtp-base
MONGODB_POOL_SIZE=10
#
# MinIO/S3
#
MINIO_ENDPOINT=nginx
MINIO_PORT=9000
MINIO_USE_SSL=disabled
MINIO_ACCESS_KEY=dtp-base
MINIO_SECRET_KEY=44710206-9115-443b-b02d-2ee74afe156d
MINIO_IMAGE_BUCKET=base-images
MINIO_VIDEO_BUCKET=base-videos
#
# Web Application Server
#
HTTP_BIND_ADDRESS=0.0.0.0
HTTP_BIND_PORT=3000
HTTP_SESSION_SECRET=1c7ea8dc-f92b-49b9-8f35-da040e8f7313
#
# Bitcoin Average API
#
BITCOINAVERAGE_KEY=YjUzZjgzNTI3OWY2NDhhZTk3NDc1YTNjZjQ5YWZhYjE
BITCOINAVERAGE_CRON=0 */30 * * * *
#
# SMTP/email configuration
#
DTP_EMAIL_SERVICE=disabled
DTP_EMAIL_SMTP_HOST=
DTP_EMAIL_SMTP_PORT=465
DTP_EMAIL_SMTP_SECURE=enabled
DTP_EMAIL_SMTP_FROM=
DTP_EMAIL_SMTP_USER=
DTP_EMAIL_SMTP_PASS=
DTP_EMAIL_SMTP_POOL_ENABLED=enabled
DTP_EMAIL_SMTP_POOL_MAX_CONN=5
DTP_EMAIL_SMTP_POOL_MAX_MSGS=100
#
# Work Paths
#
DTP_IMAGE_WORK_PATH=/tmp/dtp/image-work
DTP_VIDEO_WORK_PATH=/tmp/dtp/video-work
#
# FFMPEG options
#
DTP_FFMPEG_PATH=/usr/bin/ffmpeg
DTP_FFPROBE_PATH=/usr/bin/ffprobe
DTP_ENABLE_GPU=disabled
#
# System Logger options
#
DTP_LOG_CONSOLE=enabled
DTP_LOG_MONGODB=enabled
DTP_LOG_FILE=enabled
DTP_LOG_FILE_PATH=/tmp/dtp/logs
DTP_LOG_FILE_NAME_APP=base-app.log
DTP_LOG_FILE_NAME_HTTP=base-access.log
DTP_LOG_DEBUG=enabled
DTP_LOG_INFO=enabled
DTP_LOG_WARN=enabled
DTP_LOG_HTTP_FORMAT=combined

4
.gitignore

@ -1,6 +1,8 @@
.env
.env.docker
ssl/*crt
ssl/*key
data/minio
node_modules
dist
data/minio

21
Dockerfile

@ -0,0 +1,21 @@
FROM node:16.16-alpine
WORKDIR /home/dtp/live/dtp-base
ENV NODE_ENV=production
# Populate git deploy keys
COPY docker/.ssh /root/.ssh
RUN chown -R root:root /root/.ssh
RUN chmod go-rwx /root/.ssh
RUN chmod 644 /root/.ssh/config
RUN chmod 600 /root/.ssh/id_rsa
# Install system dependencies
RUN apk update
RUN apk add ffmpeg git openrc openssh
# Populate Node.js application
COPY package.json yarn.lock ./
RUN yarn
COPY . .

40
README.md

@ -2,9 +2,7 @@
The base project from which all others are forked when working with my framework and system. You don't have to start from this project at all. BUT, it can save you a lot of time by simply being a 100% compatible base on which you can build your apps and sites.
## Requirements
The only qualified operated system for hosting a DTP Base suite is [Ubuntu 20.04 LTS](https://releases.ubuntu.com/20.04/). It is acceptable to run it in a virtual machine for development and testing, but it should be run as close to bare metal as can be had for production environments.
## Install Data Tier Components
You will need MongoDB and MinIO installed and running before you can start DTP Base web services.
@ -16,17 +14,43 @@ Install redis:
sudo apt-get install redis
```
## Environment Configuration
## Install Node Version Manager (NVM) and Node.js
On a new host or host image, copy `.env.default` to `.env` and edit it as necessary.
```sh
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
```
For password salt and service passwords, the `uuidgen` tool may be useful to help generate hard-to-guess passwords for use in a development environment. Something more sophisticated than a UUID should be used in production.
## Resolve Global Node Dependencies
Yarn, Gulp, and Forever are required to be installed globally. This should be done once per developer workstation and repeated when updates are required.
```sh
nvm install --lts
npm install -g yarn gulp forever
```
Install application dependencies by running Yarn. You should do this on initial install and after every update or `git pull` as dependencies do change often, become upgraded to new versions, receive security fixes, etc.
## Preparing a Fresh Install
### Clone the DTP Base Repository
```sh
cd ~/live
git clone [email protected]:digital-telepresence/dtp-base.git
```
### Install Required Dependencies
```sh
cd ~/live/dtp-base
yarn
```
### Generate SSL/TLS Certificate
```sh
cd ~/live/dtp-base/ssl
./mkcert
```
### Environment Configuration
On a new host or host image, copy `.env.default` to `.env` and edit it as necessary.
For password salt and service passwords, the `uuidgen` tool may be useful to help generate hard-to-guess passwords for use in a development environment. Something more sophisticated than a UUID should be used in production.
## Starting DTP Base In Development Mode
@ -48,6 +72,8 @@ DTP Base is a multi-tier web hosting engine built on:
## Production Environment Information
The only qualified operated system for hosting a DTP Base suite is [Ubuntu 20.04 LTS](https://releases.ubuntu.com/20.04/). It is acceptable to run it in a virtual machine for development and testing, but it should be run as close to bare metal as possible in production environments.
It's impossible to give 100% generic advice here, but it all depends on how large your audience is and how much they use your website. Larger, more active audiences will require a different kind of production server deployment than smaller and less active audiences.
Generally, it's possible to stack all components on one host and operate a fast site for small-to-medium audiences. The size of the host may vary, but it's possible to keep the system stacked and handle quite a large audience.

6
docker-build

@ -0,0 +1,6 @@
#!/bin/sh
yarn --production=false
gulp build
docker build . -t dtp/base

15
docker-clean

@ -0,0 +1,15 @@
#!/bin/bash
echo "stopping all containers"
docker stop $(docker ps -a -q)
echo "removing all containers"
docker rm $(docker ps -a -q)
echo "removing all volumes"
docker volume rm $(docker volume ls -q)
echo "removing all images"
docker rmi $(docker images -a -q)
echo "Docker cleanup done"

195
docker-compose.yml

@ -0,0 +1,195 @@
version: '3.7'
# Settings common for all MinIO containers
x-minio-common: &minio-common
image: quay.io/minio/minio:RELEASE.2022-03-08T22-28-51Z
command: server --console-address ":9001" http://minio{1...4}/data{1...2}
expose:
- 9000
- 9001
environment:
MINIO_ROOT_USER: ${MINIO_ACCESS_KEY}
MINIO_ROOT_PASSWORD: ${MINIO_SECRET_KEY}
restart: always
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
# Settings common for all DTP Base containers
x-base-common: &base-common
image: dtp/base
restart: always
stop_signal: SIGINT
env_file:
- .env.docker
environment:
- NODE_ENV=production
volumes:
- /tmp/dtp:/tmp/dtp
depends_on:
- redis
- mongodb
- minio1
- minio2
- minio3
- minio4
services:
minio1:
<<: *minio-common
hostname: minio1
volumes:
- data1-1:/data1
- data1-2:/data2
minio2:
<<: *minio-common
hostname: minio2
volumes:
- data2-1:/data1
- data2-2:/data2
minio3:
<<: *minio-common
hostname: minio3
volumes:
- data3-1:/data1
- data3-2:/data2
minio4:
<<: *minio-common
hostname: minio4
volumes:
- data4-1:/data1
- data4-2:/data2
redis:
image: redis:6.2-alpine
hostname: redis
restart: always
expose:
- 6379
command: redis-server --save 20 1 --loglevel warning --requirepass ${REDIS_PASSWORD}
volumes:
- redis_data:/data
mongodb:
image: mongo:latest
hostname: mongodb
restart: always
expose:
- 27017
volumes:
- mongodb_data:/data/db
base-host-services:
<<: *base-common
hostname: base-host-services
command: node app/workers/host-services.js
environment:
- DTP_HOST_CACHE_HOST=0.0.0.0
expose:
- "8000/udp"
base-reeeper:
<<: *base-common
hostname: base-reeeper
command: node app/workers/reeeper.js
environment:
- DTP_HOST_CACHE_HOST=base-host-services
depends_on:
- base-host-services
# base-analytics:
# <<: *base-common
# hostname: base-analytics
# command: node app/workers/base-analytics.js
# environment:
# - DTP_HOST_CACHE_HOST=base-host-services
# Base Crypto
# Makes calls to a Cryptocurrency exchange API to fetch the current exchange
# rate versus the US Dollar.
# base-crypto:
# <<: *base-common
# hostname: base-crypto
# command: node app/workers/base-crypto.js
# environment:
# - DTP_HOST_CACHE_HOST=base-host-services
# Base Newsletter Worker
# Processes newsletter transmit jobs and their email jobs.
base-newsletter:
<<: *base-common
hostname: base-newsletter
command: node app/workers/newsletter.js
environment:
- DTP_HOST_CACHE_HOST=base-host-services
depends_on:
- base-host-services
# Base Web Application
# Provides the DTP Base Node.js web application
base-app-001:
<<: *base-common
hostname: base-app-001
command: node dtp-webapp.js
environment:
- DTP_HOST_CACHE_HOST=base-host-services
expose:
- 3000
depends_on:
- base-host-services
- base-newsletter
- base-reeeper
# Nginx
# Provides an HTTP front-end to MinIO and the DTP Base application components
# running in their various containers in the stack.
nginx:
image: nginx:1.19.2-alpine
hostname: nginx
restart: always
volumes:
- ./docker/etc/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
ports:
- "3000:3000"
- "8000:8000"
- "8001:8001"
- "9000:9000"
- "9001:9001"
depends_on:
- base-app-001
- minio1
- minio2
- minio3
- minio4
dns-proxy-server:
image: defreitas/dns-proxy-server
hostname: dns.mageddo
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /etc/resolv.conf:/etc/resolv.conf
ports:
- "5380:5380"
depends_on:
- nginx
- base-app-001
## By default this config uses default local driver,
## For custom volumes replace with volume driver configuration.
volumes:
mongodb_data:
redis_data:
data1-1:
data1-2:
data2-1:
data2-2:
data3-1:
data3-2:
data4-1:
data4-2:

2
docker-console

@ -0,0 +1,2 @@
#!/bin/bash
docker-compose run base-host-services sh

5
docker-proxy

@ -0,0 +1,5 @@
#!/bin/bash
docker run --rm --hostname dns.mageddo --name dns-proxy-server -p 5380:5380 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /etc/resolv.conf:/etc/resolv.conf \
defreitas/dns-proxy-server

3
docker/.ssh/config

@ -0,0 +1,3 @@
Host git.digitaltelepresence.com
User git
CertificateFile /root/.ssh/id_rsa

38
docker/.ssh/id_rsa

@ -0,0 +1,38 @@
-----BEGIN OPENSSH PRIVATE KEY-----
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
-----END OPENSSH PRIVATE KEY-----

1
docker/.ssh/id_rsa.pub

@ -0,0 +1 @@
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCzrPnvWYJQ9KSL+rwS6mA1KbWEY2uORqEDFSsEJ1yAgqcBfBK9Y3DEiPl+l60xB5qmlVskebraqoULiSNXnAtMv6g3ENb9IAY6M7R2ZIrtSrZOJagPkuQ8DgBKBD9xqycruSUmlBSjPAA/H8cErjawvIjYTpOZaOEJt/66XY6tFCTdjOtmmPZvJIKfbfrdA4DwM1V+9rFDwKgrrGQyZlc0uQigRmzcIvpC/UEmqIn/oB3qM+LIoQ3tECY2OV+tz8n0PRTwoB/rws96vUFublJvZFDrm8v0cZLG+Xs0XK+JCjjlaW4GtZ2cw9MtHto2XrUxY9jCMag7XV/mMAc3+qZg301f2PdTx929Z30POvJvwocA5SRgWsKbHXP3i653IitCfyDJI00R7OjJNNS74BwFByWhv9KJjCJEarXcSV3NrMh2ptxq8SbvFgoWoRKFS/viiqb41UOBsZZrLVnObB+d9LVSgEEwDZdbbdPa8zeX7AzMjoYjP01fKkcT2bytJp8= [email protected]

2
docker/.ssh/known_hosts

@ -0,0 +1,2 @@
|1|5jczd9sZCMV0zY+B2tHMNweYEhY=|Nh/+S/QWhYLG+vfiwY0J8VuBKfA= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLNxeRruHUCy2HUyFVnOKv17vQbFth6iqc8T1i1DyRKC2nrS15VIEnwfHPo0qR7merRJEa/50CyunYY4PvbeYiU=
|1|Dy5o3mQ4SXKNMhgMYNzYVdi/KAs=|vg+t7yhXLjtkX3yd54VRzRROJXo= ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLNxeRruHUCy2HUyFVnOKv17vQbFth6iqc8T1i1DyRKC2nrS15VIEnwfHPo0qR7merRJEa/50CyunYY4PvbeYiU=

138
docker/etc/nginx/nginx.conf

@ -0,0 +1,138 @@
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 4096;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
# include /etc/nginx/conf.d/*.conf;
upstream base_app {
least_conn;
server base-app-001:3000;
}
upstream minio {
server minio1:9000;
server minio2:9000;
server minio3:9000;
server minio4:9000;
}
upstream console {
ip_hash;
server minio1:9001;
server minio2:9001;
server minio3:9001;
server minio4:9001;
}
server {
listen 9000;
listen [::]:9000;
server_name localhost;
# To allow special characters in headers
ignore_invalid_headers off;
# Allow any size file to be uploaded.
# Set to a value such as 1000m; to restrict file size to a specific value
client_max_body_size 0;
# To disable buffering
proxy_buffering off;
proxy_request_buffering off;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_connect_timeout 300;
# Default is HTTP/1, keepalive is only enabled in HTTP/1.1
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;
proxy_pass http://minio;
}
}
server {
listen 9001;
listen [::]:9001;
server_name localhost;
# To allow special characters in headers
ignore_invalid_headers off;
# Allow any size file to be uploaded.
# Set to a value such as 1000m; to restrict file size to a specific value
client_max_body_size 0;
# To disable buffering
proxy_buffering off;
proxy_request_buffering off;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-NginX-Proxy true;
# This is necessary to pass the correct IP to be hashed
real_ip_header X-Real-IP;
proxy_connect_timeout 300;
# To support websocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
chunked_transfer_encoding off;
proxy_pass http://console;
}
}
# DTP Base Application Server
# Provides load-balanced front-end to the Base web app
server {
server_name localhost;
listen [::]:3000 ipv6only=on;
listen 3000;
# Allow any size file to be uploaded.
# Set to a value such as 1000m; to restrict file size to a specific value
client_max_body_size 20m;
location / {
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://base_app;
}
}
}

26
docs/docker.md

@ -0,0 +1,26 @@
# Docker Support
Docker is only supported for use in development/local environments to emulate a production environment with scaled-out infrastructure. The Docker environment is defined and described in `docker-compose.yml`
The host services worker is required to be operating on each host. And, we tend to think of a Docker container as a "host" - but it's not. And, they can easily map a path to a path on the host's file system. So, we map /tmp/dtp on the host into each DTP container, and we point all DTP processes at one container running the host services worker. Do not emulate that topology in a production environment, it would defeat the purpose of the host services worker as an edge cache.
## Initialize the Environment
```sh
docker-compose run sites-host-services node dtp-sites-cli.js --action=create-domain shing.tv
```
## Grand Admin Access
```sh
docker-compose run sites-host-services node dtp-sites-cli.js --action=grant --permission=admin [email address]
```
## Start the Environment
```sh
docker-compose up -d
```
## Stop the Environment
```sh
docker-compose down
```

61
static/502.html

@ -0,0 +1,61 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>DTP Soapbox Community Engine</title>
<style type="text/css">
html, body {
margin: 0;
padding: 0;
}
body {
position: fixed;
top: 0; right: 0; bottom: 0; left: 0;
width: 100%;
height: 100%;
background-color: #1a1a1a;
color: #e8e8e8;
}
img.responsive {
display: block;
margin: 0 auto;
width: 100%;
max-width: 160px;
height: auto;
}
.container {
display: flex;
flex-direction: column;
height: 100%;
justify-content: center;
max-width: 960px;
margin: 0 auto;
background-color: #000000;
color: #e8e8e8;
}
.container section {
padding: 25px 8px;
text-align: center;
}
.container h1 {
font-size: 2em;
}
</style>
</head>
<body>
<div class="container">
<section>
<img src="/static/img/dtp-core.svg" class="responsive" alt="DTP Core Logo"/>
<p>The system is down for maintenance and will be back online shortly...</p>
</section>
</div>
</body>
</html>

400
static/img/dtp-core.svg

@ -0,0 +1,400 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="477.11536pt"
height="477.12122pt"
version="1.1"
viewBox="0 0 477.11536 477.12122"
id="svg216"
sodipodi:docname="dtp-core.svg"
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
<metadata
id="metadata220">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1019"
id="namedview218"
showgrid="false"
inkscape:zoom="1.0114286"
inkscape:cx="288.51293"
inkscape:cy="296.52704"
inkscape:window-x="0"
inkscape:window-y="36"
inkscape:window-maximized="1"
inkscape:current-layer="g214" />
<defs
id="defs68">
<symbol
id="i"
overflow="visible"
style="overflow:visible">
<path
d="m 18.766,-1.125 c -0.96875,0.5 -1.9805,0.875 -3.0312,1.125 -1.043,0.25781 -2.1367,0.39062 -3.2812,0.39062 -3.3984,0 -6.0898,-0.94531 -8.0781,-2.8438 -1.9922,-1.9062 -2.9844,-4.4844 -2.9844,-7.7344 0,-3.2578 0.99219,-5.8359 2.9844,-7.7344 1.9883,-1.9062 4.6797,-2.8594 8.0781,-2.8594 1.1445,0 2.2383,0.13281 3.2812,0.39062 1.0508,0.25 2.0625,0.625 3.0312,1.125 v 4.2188 c -0.98047,-0.65625 -1.9453,-1.1406 -2.8906,-1.4531 -0.94922,-0.3125 -1.9492,-0.46875 -3,-0.46875 -1.875,0 -3.3516,0.60547 -4.4219,1.8125 -1.0742,1.1992 -1.6094,2.8555 -1.6094,4.9688 0,2.1055 0.53516,3.7617 1.6094,4.9688 1.0703,1.1992 2.5469,1.7969 4.4219,1.7969 1.0508,0 2.0508,-0.14844 3,-0.45312 0.94531,-0.3125 1.9102,-0.80078 2.8906,-1.4688 z"
id="path2"
inkscape:connector-curvature="0" />
</symbol>
<symbol
id="c"
overflow="visible"
style="overflow:visible">
<path
d="m 13.734,-11.141 c -0.4375,-0.19531 -0.87109,-0.34375 -1.2969,-0.4375 -0.41797,-0.10156 -0.83984,-0.15625 -1.2656,-0.15625 -1.2617,0 -2.2305,0.40625 -2.9062,1.2188 -0.67969,0.80469 -1.0156,1.9531 -1.0156,3.4531 v 7.0625 H 2.3591 v -15.312 h 4.8906 v 2.5156 c 0.625,-1 1.3438,-1.7266 2.1562,-2.1875 0.82031,-0.46875 1.8008,-0.70312 2.9375,-0.70312 0.16406,0 0.34375,0.01172 0.53125,0.03125 0.19531,0.01172 0.47656,0.03906 0.84375,0.07813 z"
id="path5"
inkscape:connector-curvature="0" />
</symbol>
<symbol
id="a"
overflow="visible"
style="overflow:visible">
<path
d="m 17.641,-7.7031 v 1.4062 H 6.188 c 0.125,1.1484 0.53906,2.0078 1.25,2.5781 0.70703,0.57422 1.7031,0.85938 2.9844,0.85938 1.0312,0 2.082,-0.14844 3.1562,-0.45312 1.082,-0.3125 2.1914,-0.77344 3.3281,-1.3906 v 3.7656 c -1.1562,0.4375 -2.3125,0.76562 -3.4688,0.98438 -1.1562,0.22656 -2.3125,0.34375 -3.4688,0.34375 -2.7734,0 -4.9297,-0.70312 -6.4688,-2.1094 -1.5312,-1.4062 -2.2969,-3.3789 -2.2969,-5.9219 0,-2.5 0.75391,-4.4609 2.2656,-5.8906 1.5078,-1.4375 3.582,-2.1562 6.2188,-2.1562 2.4062,0 4.332,0.73047 5.7812,2.1875 1.4453,1.4492 2.1719,3.3828 2.1719,5.7969 z m -5.0312,-1.625 c 0,-0.92578 -0.27344,-1.6719 -0.8125,-2.2344 -0.54297,-0.57031 -1.25,-0.85938 -2.125,-0.85938 -0.94922,0 -1.7188,0.26562 -2.3125,0.79688 -0.5937,0.53126 -0.96484,1.2969 -1.1094,2.2969 z"
id="path8"
inkscape:connector-curvature="0" />
</symbol>
<symbol
id="k"
overflow="visible"
style="overflow:visible">
<path
d="m 9.2188,-6.8906 c -1.0234,0 -1.793,0.17188 -2.3125,0.51562 -0.51172,0.34375 -0.76562,0.85547 -0.76562,1.5312 0,0.625 0.20703,1.1172 0.625,1.4688 0.41406,0.34375 0.98828,0.51562 1.7188,0.51562 0.92578,0 1.7031,-0.32812 2.3281,-0.98438 0.63281,-0.66406 0.95312,-1.4922 0.95312,-2.4844 v -0.5625 z m 7.4688,-1.8438 V 0 h -4.9219 v -2.2656 c -0.65625,0.92969 -1.3984,1.6055 -2.2188,2.0312 -0.82422,0.41406 -1.8242,0.625 -3,0.625 -1.5859,0 -2.8711,-0.45703 -3.8594,-1.375 -0.99219,-0.92578 -1.4844,-2.1289 -1.4844,-3.6094 0,-1.7891 0.61328,-3.1016 1.8438,-3.9375 1.2383,-0.84375 3.1797,-1.2656 5.8281,-1.2656 h 2.8906 v -0.39062 c 0,-0.76953 -0.30859,-1.332 -0.92188,-1.6875 -0.61719,-0.36328 -1.5703,-0.54688 -2.8594,-0.54688 -1.0547,0 -2.0312,0.10547 -2.9375,0.3125 -0.89844,0.21094 -1.7305,0.52344 -2.5,0.9375 v -3.7344 c 1.0391,-0.25 2.0859,-0.44141 3.1406,-0.57812 1.0625,-0.13281 2.125,-0.20312 3.1875,-0.20312 2.7578,0 4.75,0.54688 5.9688,1.6406 1.2266,1.0859 1.8438,2.8555 1.8438,5.3125 z"
id="path11"
inkscape:connector-curvature="0" />
</symbol>
<symbol
id="b"
overflow="visible"
style="overflow:visible">
<path
d="m 7.7031,-19.656 v 4.3438 H 12.75 v 3.5 H 7.7031 v 6.5 c 0,0.71094 0.14062,1.1875 0.42188,1.4375 0.28126,0.25 0.83594,0.375 1.6719,0.375 h 2.5156 v 3.5 h -4.1875 c -1.9375,0 -3.3125,-0.39844 -4.125,-1.2031 -0.80469,-0.8125 -1.2031,-2.1797 -1.2031,-4.1094 v -6.5 h -2.4219 v -3.5 h 2.4219 v -4.3438 z"
id="path14"
inkscape:connector-curvature="0" />
</symbol>
<symbol
id="j"
overflow="visible"
style="overflow:visible">
<path
d="m 12.766,-13.078 v -8.2031 h 4.9219 V -10e-5 H 12.766 v -2.2188 c -0.66797,0.90625 -1.4062,1.5703 -2.2188,1.9844 -0.8126,0.4141 -1.7578,0.625 -2.8281,0.625 -1.8867,0 -3.4336,-0.75 -4.6406,-2.25 -1.2109,-1.5 -1.8125,-3.4258 -1.8125,-5.7812 0,-2.3633 0.60156,-4.2969 1.8125,-5.7969 1.207,-1.5 2.7539,-2.25 4.6406,-2.25 1.0625,0 2,0.21484 2.8125,0.64062 0.82031,0.42969 1.5664,1.0859 2.2344,1.9688 z m -3.2188,9.9219 c 1.0391,0 1.8359,-0.37891 2.3906,-1.1406 0.55078,-0.76953 0.82812,-1.8828 0.82812,-3.3438 0,-1.457 -0.27734,-2.5664 -0.82812,-3.3281 -0.55469,-0.76953 -1.3516,-1.1562 -2.3906,-1.1562 -1.043,0 -1.8398,0.38672 -2.3906,1.1562 -0.55469,0.76172 -0.82812,1.8711 -0.82812,3.3281 0,1.4609 0.27344,2.5742 0.82812,3.3438 0.55078,0.76172 1.3477,1.1406 2.3906,1.1406 z"
id="path17"
inkscape:connector-curvature="0" />
</symbol>
<symbol
id="g"
overflow="visible"
style="overflow:visible">
<path
d="m 10.5,-3.1562 c 1.0508,0 1.8516,-0.37891 2.4062,-1.1406 0.55078,-0.76953 0.82812,-1.8828 0.82812,-3.3438 0,-1.457 -0.27734,-2.5664 -0.82812,-3.3281 -0.55469,-0.76953 -1.3555,-1.1562 -2.4062,-1.1562 -1.0547,0 -1.8594,0.38672 -2.4219,1.1562 -0.55469,0.77344 -0.82812,1.8828 -0.82812,3.3281 0,1.4492 0.27344,2.5586 0.82812,3.3281 0.5625,0.77344 1.3672,1.1562 2.4219,1.1562 z m -3.25,-9.9219 c 0.67578,-0.88281 1.4219,-1.5391 2.2344,-1.9688 0.82031,-0.42578 1.7656,-0.64062 2.8281,-0.64062 1.8945,0 3.4453,0.75 4.6562,2.25 1.207,1.5 1.8125,3.4336 1.8125,5.7969 0,2.3555 -0.60547,4.2812 -1.8125,5.7812 -1.2109,1.5 -2.7617,2.25 -4.6562,2.25 -1.0625,0 -2.0078,-0.21094 -2.8281,-0.625 C 8.6719,-0.6602 7.9258,-1.32032 7.25,-2.21882 V -2e-5 H 2.3594 v -21.281 H 7.25 Z"
id="path20"
inkscape:connector-curvature="0" />
</symbol>
<symbol
id="f"
overflow="visible"
style="overflow:visible">
<path
d="m 0.34375,-15.312 h 4.8906 l 4.125,10.391 3.5,-10.391 h 4.8906 l -6.4375,16.766 c -0.64844,1.6953 -1.4023,2.8828 -2.2656,3.5625 -0.86719,0.6875 -2,1.0312 -3.4062,1.0312 H 2.79685 V 2.8289 h 1.5312 c 0.83203,0 1.4375,-0.13672 1.8125,-0.40625 C 6.52336,2.16093 6.82024,1.69218 7.03117,1.01645 L 7.17179,0.59457 Z"
id="path23"
inkscape:connector-curvature="0" />
</symbol>
<symbol
id="e"
overflow="visible"
style="overflow:visible">
<path
d="m 2.1875,-5.9688 v -9.3438 h 4.9219 v 1.5312 c 0,0.83594 -0.00781,1.875 -0.015625,3.125 -0.011719,1.25 -0.015625,2.0859 -0.015625,2.5 0,1.2422 0.03125,2.1328 0.09375,2.6719 0.070313,0.54297 0.17969,0.93359 0.32812,1.1719 0.20703,0.32422 0.47266,0.57422 0.79688,0.75 0.32031,0.16797 0.69141,0.25 1.1094,0.25 1.0195,0 1.8203,-0.39062 2.4062,-1.1719 0.58203,-0.78125 0.875,-1.8672 0.875,-3.2656 v -7.5625 h 4.8906 V -6e-4 H 12.6875 V -2.2194 C 11.94531,-1.32096 11.1641,-0.6608 10.3437,-0.235 9.51948,0.17906 8.6093,0.39 7.6093,0.39 5.8476,0.39 4.5038,-0.14906 3.5781,-1.235 2.64841,-2.317 2.1875,-3.8952 2.1875,-5.9694 Z"
id="path26"
inkscape:connector-curvature="0" />
</symbol>
<symbol
id="v"
overflow="visible"
style="overflow:visible">
<path
d="m 7.8281,-16.438 v 12.453 h 1.8906 c 2.1562,0 3.8008,-0.53125 4.9375,-1.5938 1.1328,-1.0625 1.7031,-2.6133 1.7031,-4.6562 0,-2.0195 -0.57031,-3.5547 -1.7031,-4.6094 -1.125,-1.0625 -2.7734,-1.5938 -4.9375,-1.5938 z m -5.25,-3.9688 H 8.125 c 3.0938,0 5.3984,0.21875 6.9219,0.65625 1.5195,0.4375 2.8203,1.1875 3.9062,2.25 0.95703,0.91797 1.6641,1.9805 2.125,3.1875 0.46875,1.1992 0.70312,2.5586 0.70312,4.0781 0,1.543 -0.23438,2.918 -0.70312,4.125 -0.46094,1.2109 -1.168,2.2773 -2.125,3.2031 -1.0938,1.0547 -2.4062,1.8047 -3.9375,2.25 C 13.4844,-0.21935 11.1875,-6e-4 8.125,-6e-4 H 2.5781 Z"
id="path29"
inkscape:connector-curvature="0" />
</symbol>
<symbol
id="u"
overflow="visible"
style="overflow:visible">
<path
d="m 14.312,-14.828 v 3.7188 c -1.043,-0.4375 -2.0547,-0.76562 -3.0312,-0.98438 -0.98047,-0.21875 -1.9023,-0.32812 -2.7656,-0.32812 -0.92969,0 -1.6211,0.11719 -2.0781,0.34375 -0.44922,0.23047 -0.67188,0.58984 -0.67188,1.0781 0,0.38672 0.17188,0.68359 0.51562,0.89062 0.34375,0.21094 0.95703,0.36719 1.8438,0.46875 l 0.85938,0.125 c 2.5078,0.32422 4.1953,0.85156 5.0625,1.5781 0.86328,0.73047 1.2969,1.8711 1.2969,3.4219 0,1.6367 -0.60547,2.8672 -1.8125,3.6875 -1.1992,0.8125 -2.9922,1.2188 -5.375,1.2188 -1.0234,0 -2.0742,-0.078125 -3.1562,-0.23438 -1.0742,-0.15625 -2.1797,-0.39453 -3.3125,-0.71875 v -3.7188 c 0.96875,0.48047 1.9609,0.83984 2.9844,1.0781 1.0312,0.23047 2.0781,0.34375 3.1406,0.34375 0.95703,0 1.6758,-0.12891 2.1562,-0.39062 0.47656,-0.26953 0.71875,-0.66406 0.71875,-1.1875 0,-0.4375 -0.16797,-0.75781 -0.5,-0.96875 -0.33594,-0.21875 -0.99609,-0.38281 -1.9844,-0.5 L 7.34339,-6.01551 c -2.1797,-0.26953 -3.7031,-0.77344 -4.5781,-1.5156 -0.875,-0.73828 -1.3125,-1.8594 -1.3125,-3.3594 0,-1.625 0.55078,-2.8281 1.6562,-3.6094 1.1133,-0.78906 2.8203,-1.1875 5.125,-1.1875 0.89453,0 1.8359,0.07422 2.8281,0.21875 1,0.13672 2.082,0.35156 3.25,0.64062 z"
id="path32"
inkscape:connector-curvature="0" />
</symbol>
<symbol
id="t"
overflow="visible"
style="overflow:visible">
<path
d="M 2.3594,-15.312 H 7.25 V 0 H 2.3594 Z m 0,-5.9688 H 7.25 v 4 H 2.3594 Z"
id="path35"
inkscape:connector-curvature="0" />
</symbol>
<symbol
id="s"
overflow="visible"
style="overflow:visible">
<path
d="m 12.766,-2.5938 c -0.66797,0.88672 -1.4062,1.543 -2.2188,1.9688 C 9.7347,-0.20703 8.7894,0 7.7191,0 5.8519,0 4.3129,-0.73438 3.0941,-2.2031 1.8753,-3.6797 1.266,-5.5547 1.266,-7.8281 c 0,-2.2891 0.60938,-4.1641 1.8281,-5.625 1.2188,-1.4688 2.7578,-2.2031 4.625,-2.2031 1.0703,0 2.0156,0.21484 2.8281,0.64062 0.8125,0.41797 1.5508,1.0742 2.2188,1.9688 v -2.2656 h 4.9219 v 13.766 c 0,2.457 -0.77734,4.3359 -2.3281,5.6406 -1.5547,1.3008 -3.8086,1.9531 -6.7656,1.9531 -0.94922,0 -1.8711,-0.074219 -2.7656,-0.21875 C 4.93016,5.68013 4.0317,5.45748 3.1255,5.15669 v -3.8125 c 0.86328,0.48828 1.7031,0.85156 2.5156,1.0938 0.82031,0.23828 1.6484,0.35938 2.4844,0.35938 1.6016,0 2.7734,-0.35156 3.5156,-1.0469 0.75,-0.69922 1.125,-1.7969 1.125,-3.2969 z M 9.5472,-12.125 c -1.0117,0 -1.8047,0.375 -2.375,1.125 -0.5625,0.74219 -0.84375,1.7969 -0.84375,3.1719 0,1.3984 0.26953,2.4609 0.8125,3.1875 0.55078,0.71875 1.3516,1.0781 2.4062,1.0781 1.0195,0 1.8125,-0.36719 2.375,-1.1094 0.5625,-0.75 0.84375,-1.8008 0.84375,-3.1562 0,-1.375 -0.28125,-2.4297 -0.84375,-3.1719 -0.5625,-0.75 -1.3555,-1.125 -2.375,-1.125 z"
id="path38"
inkscape:connector-curvature="0" />
</symbol>
<symbol
id="h"
overflow="visible"
style="overflow:visible">
<path
d="M 17.75,-9.3281 V 0 h -4.9219 v -7.1406 c 0,-1.3203 -0.03125,-2.2344 -0.09375,-2.7344 -0.0625,-0.5 -0.16797,-0.86719 -0.3125,-1.1094 -0.1875,-0.3125 -0.44922,-0.55469 -0.78125,-0.73438 -0.32422,-0.17578 -0.69531,-0.26562 -1.1094,-0.26562 -1.0234,0 -1.8242,0.39844 -2.4062,1.1875 -0.58594,0.78125 -0.875,1.8711 -0.875,3.2656 V -1e-4 H 2.3594 v -15.312 H 7.25 v 2.2344 c 0.73828,-0.88281 1.5195,-1.5391 2.3438,-1.9688 0.83203,-0.42578 1.75,-0.64062 2.75,-0.64062 1.7695,0 3.1133,0.54688 4.0312,1.6406 0.91406,1.0859 1.375,2.6562 1.375,4.7188 z"
id="path41"
inkscape:connector-curvature="0" />
</symbol>
<symbol
id="r"
overflow="visible"
style="overflow:visible">
<path
d="m 12.422,-21.281 v 3.2188 H 9.7189 c -0.6875,0 -1.1719,0.125 -1.4531,0.375 -0.27344,0.25 -0.40625,0.6875 -0.40625,1.3125 v 1.0625 h 4.1875 v 3.5 H 7.85955 V -2e-4 h -4.8906 v -11.812 h -2.4375 v -3.5 h 2.4375 v -1.0625 c 0,-1.6641 0.46094,-2.8984 1.3906,-3.7031 0.92578,-0.80078 2.3672,-1.2031 4.3281,-1.2031 z"
id="path44"
inkscape:connector-curvature="0" />
</symbol>
<symbol
id="d"
overflow="visible"
style="overflow:visible">
<path
d="m 9.6406,-12.188 c -1.0859,0 -1.9141,0.39062 -2.4844,1.1719 -0.57422,0.78125 -0.85938,1.9062 -0.85938,3.375 0,1.4688 0.28516,2.5938 0.85938,3.375 0.57031,0.77344 1.3984,1.1562 2.4844,1.1562 1.0625,0 1.875,-0.38281 2.4375,-1.1562 0.57031,-0.78125 0.85938,-1.9062 0.85938,-3.375 0,-1.4688 -0.28906,-2.5938 -0.85938,-3.375 -0.5625,-0.78125 -1.375,-1.1719 -2.4375,-1.1719 z m 0,-3.5 c 2.6328,0 4.6914,0.71484 6.1719,2.1406 1.4766,1.418 2.2188,3.3867 2.2188,5.9062 0,2.5117 -0.74219,4.4805 -2.2188,5.9062 C 14.332,-0.317 12.2734,0.39 9.6406,0.39 6.9922,0.39 4.9258,-0.31703 3.4375,-1.735 1.9453,-3.1608 1.2031,-5.1295 1.2031,-7.6412 c 0,-2.5195 0.74219,-4.4883 2.2344,-5.9062 1.4883,-1.4258 3.5547,-2.1406 6.2031,-2.1406 z"
id="path47"
inkscape:connector-curvature="0" />
</symbol>
<symbol
id="q"
overflow="visible"
style="overflow:visible">
<path
d="m 16.547,-12.766 c 0.61328,-0.94531 1.3477,-1.6719 2.2031,-2.1719 0.85156,-0.5 1.7891,-0.75 2.8125,-0.75 1.7578,0 3.0977,0.54688 4.0156,1.6406 0.92578,1.0859 1.3906,2.6562 1.3906,4.7188 V -4e-4 h -4.9219 v -7.9844 -0.35938 c 0.0078,-0.13281 0.01563,-0.32031 0.01563,-0.5625 0,-1.082 -0.16406,-1.8633 -0.48438,-2.3438 -0.3125,-0.48828 -0.82422,-0.73438 -1.5312,-0.73438 -0.92969,0 -1.6484,0.38672 -2.1562,1.1562 -0.51172,0.76172 -0.77344,1.8672 -0.78125,3.3125 v 7.5156 h -4.9219 v -7.9844 c 0,-1.6953 -0.14844,-2.7852 -0.4375,-3.2656 -0.29297,-0.48828 -0.8125,-0.73438 -1.5625,-0.73438 -0.9375,0 -1.6641,0.38672 -2.1719,1.1562 -0.51172,0.76172 -0.76562,1.8594 -0.76562,3.2969 v 7.5312 h -4.9219 v -15.312 h 4.9219 v 2.2344 c 0.60156,-0.86328 1.2891,-1.5156 2.0625,-1.9531 0.78125,-0.4375 1.6406,-0.65625 2.5781,-0.65625 1.0625,0 2,0.25781 2.8125,0.76562 0.8125,0.51172 1.4258,1.2305 1.8438,2.1562 z"
id="path50"
inkscape:connector-curvature="0" />
</symbol>
<symbol
id="p"
overflow="visible"
style="overflow:visible">
<path
d="M 17.75,-9.3281 V 0 h -4.9219 v -7.1094 c 0,-1.3438 -0.03125,-2.2656 -0.09375,-2.7656 -0.0625,-0.5 -0.16797,-0.86719 -0.3125,-1.1094 -0.1875,-0.3125 -0.44922,-0.55469 -0.78125,-0.73438 -0.32422,-0.17578 -0.69531,-0.26562 -1.1094,-0.26562 -1.0234,0 -1.8242,0.39844 -2.4062,1.1875 -0.58594,0.78125 -0.875,1.8711 -0.875,3.2656 V -1e-4 H 2.3594 v -21.281 H 7.25 v 8.2031 c 0.73828,-0.88281 1.5195,-1.5391 2.3438,-1.9688 0.83203,-0.42578 1.75,-0.64062 2.75,-0.64062 1.7695,0 3.1133,0.54688 4.0312,1.6406 0.91406,1.0859 1.375,2.6562 1.375,4.7188 z"
id="path53"
inkscape:connector-curvature="0" />
</symbol>
<symbol
id="o"
overflow="visible"
style="overflow:visible">
<path
d="m 2.5781,-20.406 h 5.875 l 7.4219,14 v -14 h 4.9844 V 0 h -5.875 L 7.5625,-14 V 0 H 2.5781 Z"
id="path56"
inkscape:connector-curvature="0" />
</symbol>
<symbol
id="n"
overflow="visible"
style="overflow:visible">
<path
d="m 2.5781,-20.406 h 8.7344 c 2.5938,0 4.582,0.57812 5.9688,1.7344 1.3945,1.1484 2.0938,2.7891 2.0938,4.9219 0,2.1367 -0.69922,3.7812 -2.0938,4.9375 -1.3867,1.1562 -3.375,1.7344 -5.9688,1.7344 H 7.8281 V 3e-4 h -5.25 z m 5.25,3.8125 v 5.7031 H 10.75 c 1.0195,0 1.8047,-0.25 2.3594,-0.75 0.5625,-0.5 0.84375,-1.2031 0.84375,-2.1094 0,-0.91406 -0.28125,-1.6172 -0.84375,-2.1094 -0.55469,-0.48828 -1.3398,-0.73438 -2.3594,-0.73438 z"
id="path59"
inkscape:connector-curvature="0" />
</symbol>
<symbol
id="m"
overflow="visible"
style="overflow:visible">
<path
d="M 2.3594,-15.312 H 7.25 v 15.031 c 0,2.0508 -0.49609,3.6172 -1.4844,4.7031 -0.98047,1.082 -2.4062,1.625 -4.2812,1.625 H -0.9375 V 2.8283 h 0.85938 c 0.92578,0 1.5625,-0.21094 1.9062,-0.625 0.35156,-0.41797 0.53125,-1.2461 0.53125,-2.4844 z m 0,-5.9688 H 7.25 v 4 H 2.3594 Z"
id="path62"
inkscape:connector-curvature="0" />
</symbol>
<symbol
id="l"
overflow="visible"
style="overflow:visible">
<path
d="m 14.719,-14.828 v 3.9844 c -0.65625,-0.45703 -1.3242,-0.79688 -2,-1.0156 -0.66797,-0.21875 -1.3594,-0.32812 -2.0781,-0.32812 -1.3672,0 -2.4336,0.40234 -3.2031,1.2031 -0.76172,0.79297 -1.1406,1.9062 -1.1406,3.3438 0,1.4297 0.37891,2.543 1.1406,3.3438 0.76953,0.79297 1.8359,1.1875 3.2031,1.1875 0.75781,0 1.4844,-0.10938 2.1719,-0.32812 0.6875,-0.22656 1.3203,-0.56641 1.9062,-1.0156 v 4 c -0.76172,0.28125 -1.5391,0.48828 -2.3281,0.625 -0.78125,0.14453 -1.5742,0.21875 -2.375,0.21875 -2.7617,0 -4.9219,-0.70703 -6.4844,-2.125 -1.5547,-1.4141 -2.3281,-3.3828 -2.3281,-5.9062 0,-2.5312 0.77344,-4.5039 2.3281,-5.9219 1.5625,-1.4141 3.7227,-2.125 6.4844,-2.125 0.80078,0 1.5938,0.07422 2.375,0.21875 0.78125,0.13672 1.5547,0.35156 2.3281,0.64062 z"
id="path65"
inkscape:connector-curvature="0" />
</symbol>
</defs>
<g
id="g214"
transform="translate(-111.4435,-41.446575)">
<path
d="M 553.38,235.79 394.24,76.63 c -28.992,-6.2773 -59.461,-6.2773 -88.445,0 l -159.14,159.16 c -6.2773,28.965 -6.2773,59.465 0,88.434 l 159.14,159.15 c 28.992,6.2812 59.461,6.2812 88.445,0 l 159.14,-159.15 c 6.2656,-28.973 6.2656,-59.469 0,-88.434 z m -20.535,44.926 c -0.0625,13.273 -1.5078,26.527 -4.4141,39.434 -0.21094,0.98047 -0.68359,1.8555 -1.3828,2.5352 l -134.36,134.36 c -0.70703,0.70703 -1.5625,1.1914 -2.5352,1.4062 -13.145,2.9453 -26.652,4.4336 -40.152,4.4336 -0.91797,0 -1.8359,-0.0234 -2.75,-0.043 h -0.20703 c -12.504,-0.19141 -25,-1.6797 -37.184,-4.3906 -0.96484,-0.23438 -1.8477,-0.69922 -2.5469,-1.4062 l -134.34,-134.36 c -0.69922,-0.68359 -1.1797,-1.5586 -1.3984,-2.5352 -2.9219,-13.059 -4.4023,-26.477 -4.4258,-39.91 0,-0.0664 -0.0156,-0.14453 -0.0156,-0.22266 0,-0.0898 0.0156,-0.15625 0.0156,-0.23438 0.0156,-13.43 1.4961,-26.852 4.4258,-39.91 0.21875,-0.96875 0.69531,-1.8477 1.3984,-2.5352 l 134.34,-134.36 c 0.69922,-0.69531 1.5742,-1.1719 2.5469,-1.3984 12.828,-2.867198 25.996,-4.339798 39.184,-4.402298 0.0742,-0.0039 0.13281,-0.02734 0.23047,-0.02734 h 0.0273 c 0.0508,0 0.10156,0.01563 0.15625,0.01563 13.676,-0.05078 27.383,1.4219 40.699,4.414098 0.97266,0.23047 1.832,0.69922 2.5352,1.3984 l 134.36,134.34 c 0.69922,0.69922 1.1719,1.5781 1.3828,2.5469 2.9688,13.227 4.4531,26.836 4.4297,40.453 v 0.16406 c -0.004,0.0664 -0.0195,0.14453 -0.0195,0.22656 z"
id="path70"
inkscape:connector-curvature="0" />
<path
d="m 146.74,345.84 c -2.0391,-2.0273 -5.3438,-2.0508 -7.3711,0 l -26.402,26.398 c -2.0312,2.0273 -2.0312,5.3242 0,7.3516 1.0234,1.0195 2.3516,1.5391 3.6914,1.5391 1.3398,0 2.6641,-0.52734 3.6797,-1.5391 l 26.402,-26.395 c 2.0273,-2.0234 2.0273,-5.3281 0,-7.3555 z"
id="path72"
inkscape:connector-curvature="0" />
<path
d="m 174.23,373.33 c -2.043,-2.043 -5.3438,-2.043 -7.3711,0 l -26.402,26.398 c -2.0312,2.0273 -2.0312,5.332 0,7.3594 1.0234,1.0117 2.3516,1.5195 3.6914,1.5195 1.3281,0 2.6641,-0.50781 3.6797,-1.5195 l 26.402,-26.398 c 2.0273,-2.0273 2.0273,-5.3242 0,-7.3594 z"
id="path74"
inkscape:connector-curvature="0" />
<path
d="m 201.71,400.82 c -2.0391,-2.0508 -5.3359,-2.0508 -7.3711,0 l -26.395,26.395 c -2.0391,2.0312 -2.0391,5.332 0,7.3594 1.0117,1.0352 2.3398,1.5391 3.6797,1.5391 1.3399,0 2.6641,-0.50781 3.6914,-1.5391 l 26.395,-26.395 c 2.0352,-2.0352 2.0352,-5.332 0,-7.3594 z"
id="path76"
inkscape:connector-curvature="0" />
<path
d="m 229.2,428.3 c -2.0391,-2.0508 -5.3438,-2.0508 -7.3711,0 l -26.402,26.398 c -2.0273,2.0273 -2.0273,5.3242 0,7.3594 1.0234,1.0117 2.3516,1.5391 3.6914,1.5391 1.3398,0 2.6641,-0.53125 3.6797,-1.5391 l 26.402,-26.398 c 2.0352,-2.0273 2.0352,-5.332 0,-7.3594 z"
id="path78"
inkscape:connector-curvature="0" />
<path
d="m 256.69,455.8 c -2.0391,-2.0312 -5.3438,-2.0508 -7.3711,0 l -26.402,26.395 c -2.0273,2.0273 -2.0273,5.332 0,7.3594 1.0234,1.0195 2.3516,1.5195 3.6914,1.5195 1.3281,0 2.6641,-0.50391 3.6797,-1.5195 l 26.402,-26.395 c 2.0273,-2.0312 2.0273,-5.3281 0,-7.3594 z"
id="path80"
inkscape:connector-curvature="0" />
<path
d="m 276.8,483.29 -26.395,26.395 c -2.0312,2.0312 -2.0312,5.332 0,7.3594 1.0234,1.0195 2.3516,1.5234 3.6914,1.5234 1.3281,0 2.6641,-0.50781 3.6797,-1.5234 l 26.402,-26.395 c 2.0273,-2.0273 2.0273,-5.332 0,-7.3594 -2.043,-2.0547 -5.3398,-2.0547 -7.3789,0 z"
id="path82"
inkscape:connector-curvature="0" />
<path
d="m 419.51,78.27 c 1.3203,0 2.6758,-0.51562 3.6836,-1.5273 l 26.398,-26.395 c 2.0273,-2.043 2.0273,-5.3438 0,-7.3711 -2.0273,-2.0273 -5.332,-2.0273 -7.3594,0 l -26.414,26.395 c -2.0273,2.0391 -2.0273,5.3438 0,7.3711 1.0352,1.0156 2.3633,1.5273 3.6914,1.5273 z"
id="path84"
inkscape:connector-curvature="0" />
<path
d="m 443.3,104.23 c 1.043,1.0195 2.3633,1.5234 3.6914,1.5234 1.3281,0 2.6758,-0.50391 3.6914,-1.5234 l 26.395,-26.395 c 2.0312,-2.0391 2.0312,-5.3359 0,-7.3711 -2.0273,-2.0391 -5.3242,-2.0391 -7.3516,0 l -26.422,26.395 c -2.0312,2.0391 -2.0312,5.3438 -0.004,7.3711 z"
id="path86"
inkscape:connector-curvature="0" />
<path
d="m 470.8,131.72 c 1.0352,1.0117 2.3633,1.5352 3.6914,1.5352 1.3203,0 2.6758,-0.51953 3.6836,-1.5352 l 26.398,-26.395 c 2.0273,-2.0391 2.0273,-5.3359 0,-7.3711 -2.0312,-2.0312 -5.332,-2.0312 -7.3594,0 l -26.414,26.395 c -2.0312,2.0391 -2.0312,5.3359 0,7.3711 z"
id="path88"
inkscape:connector-curvature="0" />
<path
d="m 498.28,159.2 c 1.0352,1.0117 2.3633,1.5234 3.6914,1.5234 1.3281,0 2.6758,-0.50781 3.6914,-1.5234 l 26.395,-26.395 c 2.0273,-2.0391 2.0273,-5.3438 0,-7.3711 -2.0273,-2.0391 -5.3242,-2.0391 -7.3594,0 l -26.414,26.395 c -2.0352,2.043 -2.0352,5.3438 -0.004,7.3711 z"
id="path90"
inkscape:connector-curvature="0" />
<path
d="m 525.77,186.69 c 1.0352,1.0117 2.3633,1.5234 3.6836,1.5234 1.3281,0 2.6758,-0.50781 3.6914,-1.5234 l 26.395,-26.395 c 2.0312,-2.0391 2.0312,-5.3438 0,-7.3711 -2.0273,-2.0391 -5.3242,-2.0391 -7.3516,0 l -26.414,26.398 c -2.0391,2.0391 -2.0391,5.3359 -0.004,7.3672 z"
id="path92"
inkscape:connector-curvature="0" />
<path
d="m 553.26,214.18 c 1.0195,1.0117 2.3633,1.5195 3.6914,1.5195 1.3203,0 2.6758,-0.50391 3.6836,-1.5195 l 26.398,-26.395 c 2.0273,-2.043 2.0273,-5.3438 0,-7.3711 -2.0273,-2.0391 -5.332,-2.0391 -7.3594,0 l -26.414,26.395 c -2.0273,2.0391 -2.0273,5.332 0,7.3711 z"
id="path94"
inkscape:connector-curvature="0" />
<path
d="m 276.8,76.742 c 1.0234,1.0117 2.3516,1.5195 3.6914,1.5195 1.3398,0 2.6641,-0.50391 3.6914,-1.5195 2.0273,-2.0391 2.0273,-5.3438 0,-7.3711 l -26.402,-26.395 c -2.0273,-2.0391 -5.332,-2.0391 -7.3711,0 -2.0312,2.0312 -2.0312,5.332 0,7.3711 z"
id="path96"
inkscape:connector-curvature="0" />
<path
d="m 249.3,104.23 c 1.0234,1.0195 2.3516,1.5234 3.6914,1.5234 1.3398,0 2.6641,-0.50391 3.6914,-1.5234 2.0273,-2.0273 2.0273,-5.332 0,-7.3711 l -26.402,-26.395 c -2.0273,-2.0391 -5.332,-2.0391 -7.3711,0 -2.0273,2.0391 -2.0273,5.3438 0,7.3711 z"
id="path98"
inkscape:connector-curvature="0" />
<path
d="m 221.82,131.72 c 1.0234,1.0117 2.3516,1.5234 3.6914,1.5234 1.3398,0 2.6641,-0.50781 3.6914,-1.5234 2.0312,-2.0273 2.0312,-5.332 0,-7.3711 l -26.402,-26.395 c -2.0273,-2.0312 -5.332,-2.0312 -7.3711,0 -2.0273,2.0391 -2.0273,5.3438 0,7.3711 z"
id="path100"
inkscape:connector-curvature="0" />
<path
d="m 194.34,159.2 c 1.0117,1.0117 2.3398,1.5234 3.6797,1.5234 1.3398,0 2.6641,-0.50781 3.6914,-1.5234 2.0312,-2.0312 2.0312,-5.332 0,-7.3711 l -26.402,-26.395 c -2.0312,-2.0391 -5.332,-2.0391 -7.3711,0 -2.0273,2.0273 -2.0273,5.332 0,7.3711 z"
id="path102"
inkscape:connector-curvature="0" />
<path
d="m 166.85,186.69 c 1.0195,1.0117 2.3398,1.5234 3.6797,1.5234 1.3399,0 2.6641,-0.50781 3.6914,-1.5234 2.0273,-2.0312 2.0273,-5.332 0,-7.3711 l -26.402,-26.398 c -2.0312,-2.0391 -5.332,-2.0391 -7.3711,0 -2.0312,2.0312 -2.0312,5.332 0,7.3711 z"
id="path104"
inkscape:connector-curvature="0" />
<path
d="m 139.37,214.18 c 1.0117,1.0117 2.3516,1.5195 3.6797,1.5195 1.3398,0 2.6758,-0.50391 3.6914,-1.5195 2.0273,-2.0391 2.0273,-5.3438 0,-7.3711 l -26.402,-26.395 c -2.0273,-2.0391 -5.332,-2.0391 -7.3711,0 -2.0312,2.0312 -2.0312,5.332 0,7.3711 z"
id="path106"
inkscape:connector-curvature="0" />
<path
d="m 560.64,345.84 c -2.0273,-2.0508 -5.3242,-2.0508 -7.375,0 -2.0273,2.0273 -2.0273,5.332 0,7.3594 l 26.414,26.395 c 1.0195,1.0195 2.3398,1.5391 3.668,1.5391 1.3438,0 2.6758,-0.52734 3.6914,-1.5391 2.0273,-2.0273 2.0273,-5.3242 0,-7.3516 z"
id="path108"
inkscape:connector-curvature="0" />
<path
d="m 533.15,373.33 c -2.0273,-2.043 -5.332,-2.043 -7.375,0 -2.0312,2.0312 -2.0312,5.332 0,7.3594 l 26.414,26.398 c 1.0117,1.0117 2.3398,1.5391 3.668,1.5391 1.3438,0 2.6758,-0.53125 3.6836,-1.5391 2.0312,-2.0273 2.0312,-5.332 0,-7.3594 z"
id="path110"
inkscape:connector-curvature="0" />
<path
d="m 505.66,400.82 c -2.0312,-2.0508 -5.332,-2.0508 -7.3789,0 -2.0273,2.0273 -2.0273,5.3242 0,7.3594 l 26.414,26.395 c 1.0195,1.0352 2.3477,1.5391 3.668,1.5391 1.3477,0 2.6758,-0.50781 3.6914,-1.5391 2.0273,-2.0273 2.0273,-5.3242 0,-7.3594 z"
id="path112"
inkscape:connector-curvature="0" />
<path
d="m 478.17,428.3 c -2.0273,-2.0508 -5.3242,-2.0508 -7.3594,0 -2.043,2.0273 -2.043,5.332 0,7.3594 l 26.398,26.398 c 1.0195,1.0117 2.3398,1.5391 3.668,1.5391 1.3438,0 2.6758,-0.53125 3.6914,-1.5391 2.0273,-2.0312 2.0273,-5.332 0,-7.3594 z"
id="path114"
inkscape:connector-curvature="0" />
<path
d="m 450.69,455.8 c -2.0273,-2.0508 -5.332,-2.0508 -7.3789,0 -2.0273,2.0273 -2.0273,5.3242 0,7.3594 l 26.422,26.395 c 1.0117,1.0195 2.3398,1.5195 3.668,1.5195 1.3438,0 2.6758,-0.50391 3.6836,-1.5195 2.0312,-2.0273 2.0312,-5.332 0,-7.3594 z"
id="path116"
inkscape:connector-curvature="0" />
<path
d="m 423.2,483.29 c -2.0273,-2.0508 -5.3242,-2.0508 -7.3516,0 -2.0508,2.0273 -2.0508,5.332 0,7.3594 l 26.395,26.395 c 1.0195,1.0195 2.3477,1.5234 3.668,1.5234 1.3477,0 2.6758,-0.50781 3.6914,-1.5234 2.0273,-2.0273 2.0273,-5.3242 0,-7.3594 z"
id="path118"
inkscape:connector-curvature="0" />
<path
d="m 448.56,281.75 c 0,9.3125 7.5781,16.891 16.891,16.891 9.3086,0 16.891,-7.5781 16.891,-16.891 0,-9.3008 -7.582,-16.891 -16.891,-16.891 -9.3164,0.008 -16.891,7.5898 -16.891,16.891 z"
id="path120"
inkscape:connector-curvature="0"
style="fill:#000000" />
<path
d="m 364.41,399.67 c 0,-9.3125 -7.582,-16.891 -16.891,-16.891 -9.3086,0 -16.879,7.5781 -16.879,16.891 0,9.3129 7.5664,16.891 16.879,16.891 9.3125,-0.004 16.891,-7.5781 16.891,-16.891 z"
id="path122"
inkscape:connector-curvature="0"
style="fill:#000000" />
<path
d="m 247.22,282.48 c 0,-9.3125 -7.5664,-16.891 -16.891,-16.891 -9.3008,0 -16.867,7.5781 -16.867,16.891 0,9.3242 7.5664,16.879 16.867,16.879 9.3242,0 16.891,-7.5547 16.891,-16.879 z"
id="path124"
inkscape:connector-curvature="0"
style="fill:#000000" />
<path
d="m 331.38,164.56 c 0,9.3125 7.582,16.891 16.891,16.891 9.3008,0 16.879,-7.5781 16.879,-16.891 0,-9.3008 -7.582,-16.879 -16.879,-16.879 -9.3086,0.004 -16.891,7.5781 -16.891,16.879 z"
id="path126"
inkscape:connector-curvature="0"
style="fill:#000000" />
<path
d="m 492.02,275.46 30.359,-0.14453 c -0.29297,-10.668 -1.5391,-21.309 -3.7852,-31.719 l -132.19,-132.18 c -10.484,-2.25 -21.219,-3.5234 -31.965,-3.7852 l -0.21875,30.277 c 12.195,2.7227 21.352,13.637 21.352,26.652 0,15.055 -12.242,27.301 -27.301,27.301 -15.055,0 -27.301,-12.254 -27.301,-27.301 0,-13.539 9.9023,-24.797 22.832,-26.938 l 0.21094,-29.949 c -10.219,0.35156 -20.418,1.5898 -30.406,3.7344 l -132.19,132.19 c -2.207,10.242 -3.457,20.703 -3.7695,31.199 h 26.492 c 3.3281,-11.328 13.816,-19.629 26.191,-19.629 15.062,0 27.312,12.258 27.312,27.312 0,15.059 -12.254,27.301 -27.312,27.301 -14.125,0 -25.781,-10.797 -27.156,-24.555 h -25.531 c 0.3125,10.484 1.5625,20.945 3.7695,31.191 l 132.19,132.17 c 9.2344,1.9883 18.652,3.2031 28.125,3.6523 l -0.76172,-26.062 c -11.906,-2.9453 -20.742,-13.727 -20.742,-26.512 0,-15.055 12.242,-27.289 27.301,-27.289 15.055,0 27.312,12.242 27.312,27.289 0,13.742 -10.207,25.145 -23.441,27.035 l 0.75,25.715 c 11.52,-0.13281 23.023,-1.4062 34.242,-3.832 l 132.19,-132.17 c 2.168,-10.074 3.4141,-20.363 3.7461,-30.684 l -29.887,0.14453 c -2.0117,13.098 -13.355,23.172 -26.996,23.172 -15.055,0 -27.316,-12.258 -27.316,-27.312 0,-15.059 12.258,-27.301 27.316,-27.301 12.91,0.008 23.727,8.9922 26.578,21.027 z m -78.227,-27.07 c -7.0117,0 -13.469,-2.2461 -18.766,-6.0547 l -19.641,19.656 c 3.7852,5.2812 6.0469,11.754 6.0469,18.742 0,7 -2.2617,13.461 -6.0469,18.75 l 19.641,19.641 c 5.293,-3.7852 11.754,-6.0312 18.766,-6.0312 17.723,0 32.148,14.43 32.148,32.156 0,17.746 -14.426,32.172 -32.148,32.172 -17.746,0 -32.172,-14.426 -32.172,-32.172 0,-6.9883 2.2383,-13.469 6.0469,-18.742 l -19.66,-19.66 c -5.2656,3.8086 -11.754,6.0547 -18.738,6.0547 -7,0 -13.473,-2.2461 -18.754,-6.0547 l -19.652,19.66 c 3.8086,5.2695 6.0547,11.754 6.0547,18.742 0,17.746 -14.426,32.172 -32.168,32.172 -17.734,0 -32.172,-14.426 -32.172,-32.172 0,-17.723 14.438,-32.156 32.172,-32.156 6.9883,0 13.461,2.2461 18.742,6.0312 l 19.652,-19.641 c -3.8086,-5.2852 -6.043,-11.754 -6.043,-18.75 0,-6.9961 2.2344,-13.461 6.043,-18.742 l -19.652,-19.656 c -5.2812,3.8086 -11.754,6.0547 -18.742,6.0547 -17.734,0 -32.172,-14.426 -32.172,-32.168 0,-17.746 14.438,-32.168 32.172,-32.168 17.734,0 32.168,14.422 32.168,32.168 0,6.9883 -2.2578,13.461 -6.0547,18.742 l 19.652,19.66 c 5.2812,-3.8086 11.754,-6.0547 18.754,-6.0547 6.9883,0 13.473,2.2461 18.738,6.0547 l 19.66,-19.66 c -3.8086,-5.2812 -6.0469,-11.754 -6.0469,-18.742 0,-17.746 14.426,-32.168 32.172,-32.168 17.723,0 32.148,14.422 32.148,32.168 0,17.742 -14.426,32.168 -32.148,32.168 z"
id="path128"
inkscape:connector-curvature="0" />
<path
d="m 413.79,367.01 c 11.988,0 21.727,-9.7422 21.727,-21.75 0,-11.988 -9.7383,-21.727 -21.727,-21.727 -12.012,0 -21.75,9.7383 -21.75,21.727 0,12.004 9.7383,21.75 21.75,21.75 z"
id="path130"
inkscape:connector-curvature="0" />
<path
d="m 284.75,323.53 c -11.996,0 -21.758,9.7383 -21.758,21.727 0,12.008 9.7617,21.75 21.758,21.75 11.977,0 21.738,-9.7422 21.738,-21.75 0,-11.988 -9.7539,-21.727 -21.738,-21.727 z"
id="path132"
inkscape:connector-curvature="0" />
<path
d="m 349.27,259 c -11.988,0 -21.75,9.7617 -21.75,21.75 0,11.996 9.7617,21.734 21.75,21.734 11.984,0 21.746,-9.7383 21.746,-21.734 0,-11.992 -9.7617,-21.75 -21.746,-21.75 z"
id="path134"
inkscape:connector-curvature="0"
style="fill:#00ff00" />
<path
d="m 284.75,194.48 c -11.996,0 -21.758,9.7617 -21.758,21.746 0,11.984 9.7617,21.75 21.758,21.75 11.977,0 21.738,-9.7617 21.738,-21.75 0,-11.988 -9.7539,-21.746 -21.738,-21.746 z"
id="path136"
inkscape:connector-curvature="0"
style="fill:#000000" />
<path
d="m 413.79,194.48 c -12.012,0 -21.75,9.7617 -21.75,21.746 0,11.984 9.7383,21.75 21.75,21.75 11.988,0 21.727,-9.7617 21.727,-21.75 0.004,-11.988 -9.7422,-21.746 -21.727,-21.746 z"
id="path138"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 33 KiB

13
supervisord/dtp-base-host-services.conf

@ -0,0 +1,13 @@
[program:dtp-base:host-services]
numprocs=1
process_name=%(program_name)s_%(process_num)02d
command=/home/dtp/.nvm/versions/node/v16.13.0/bin/node --optimize_for_size --max_old_space_size=1024 --gc_interval=100 app/workers/host-services.js
directory=/home/dtp/live/dtp-base
autostart=true
autorestart=true
startretries=3
stopsignal=INT
stderr_logfile=/var/log/dtp-base/host-services.err.log
stdout_logfile=/var/log/dtp-base/host-services.out.log
user=dtp
environment=HOME='/home/dtp/live/dtp-base',HTTP_BIND_PORT=30%(process_num)02d,NODE_ENV=production,LOGNAME=host-services

13
supervisord/dtp-base-newsletter.conf

@ -0,0 +1,13 @@
[program:dtp-base:newsletter]
numprocs=1
process_name=%(program_name)s_%(process_num)02d
command=/home/dtp/.nvm/versions/node/v16.13.0/bin/node --optimize_for_size --max_old_space_size=1024 --gc_interval=100 app/workers/newsletter.js
directory=/home/dtp/live/dtp-base
autostart=true
autorestart=true
startretries=3
stopsignal=INT
stderr_logfile=/var/log/dtp-base/newsletter.err.log
stdout_logfile=/var/log/dtp-base/newsletter.out.log
user=dtp
environment=HOME='/home/dtp/live/dtp-base',HTTP_BIND_PORT=30%(process_num)02d,NODE_ENV=production,LOGNAME=newsletter

13
supervisord/dtp-base.conf

@ -0,0 +1,13 @@
[program:dtp-base]
numprocs=1
process_name=%(program_name)s_%(process_num)02d
command=/home/dtp/.nvm/versions/node/v16.13.0/bin/node --optimize_for_size --max_old_space_size=1024 --gc_interval=100 dtp-webapp.js
directory=/home/dtp/live/dtp-base
autostart=true
autorestart=true
startretries=3
stopsignal=INT
stderr_logfile=/var/log/dtp-base/dtp-base.err.log
stdout_logfile=/var/log/dtp-base/dtp-base.out.log
user=dtp
environment=HOME='/home/dtp/live/dtp-base',HTTP_BIND_PORT=30%(process_num)02d,NODE_ENV=production,LOGNAME=dtp-base

13
supervisord/dtp-webapp.conf

@ -1,13 +0,0 @@
[program:dtp-webapp]
numprocs=1
process_name=%(program_name)s_%(process_num)02d
command=/home/dtp/.nvm/versions/node/v16.13.0/bin/node --optimize_for_size --max_old_space_size=1024 --gc_interval=100 dtp-webapp.js
directory=/home/dtp/live/dtp-webapp
autostart=true
autorestart=true
startretries=3
stopsignal=INT
stderr_logfile=/var/log/dtp-webapp/dtp-webapp.err.log
stdout_logfile=/var/log/dtp-webapp/dtp-webapp.out.log
user=dtp
environment=HOME='/home/dtp/live/dtp-webapp',HTTP_BIND_PORT=30%(process_num)02d,NODE_ENV=production,LOGNAME=dtp-webapp

13
supervisord/host-services.conf

@ -1,13 +0,0 @@
[program:host-services]
numprocs=1
process_name=%(program_name)s_%(process_num)02d
command=/home/dtp/.nvm/versions/node/v16.13.0/bin/node --optimize_for_size --max_old_space_size=1024 --gc_interval=100 app/workers/host-services.js
directory=/home/dtp/live/dtp-webapp
autostart=true
autorestart=true
startretries=3
stopsignal=INT
stderr_logfile=/var/log/dtp-webapp/host-services.err.log
stdout_logfile=/var/log/dtp-webapp/host-services.out.log
user=dtp
environment=HOME='/home/dtp/live/dtp-webapp',HTTP_BIND_PORT=30%(process_num)02d,NODE_ENV=production,LOGNAME=host-services
Loading…
Cancel
Save