Skip to main content

Run ca systemd service

Pentru producție, miner-node-ul trebuie să ruleze ca systemd service — pornire automată la boot, restart la crash, log management prin journald.

1. Creează unit file

sudo nano /etc/systemd/system/ombra-mainnet.service

Conținut:

[Unit]
Description=OmbraChain Mainnet Miner Node
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=ombra
Group=ombra
WorkingDirectory=/opt/ombra
EnvironmentFile=/opt/ombra/data-mainnet/.env
ExecStart=/usr/bin/node /opt/ombra/apps/miner-node/dist/index.js
Restart=always
RestartSec=10
StandardOutput=append:/var/log/ombra/miner-node.log
StandardError=append:/var/log/ombra/miner-node.error.log

# Limite resurse
LimitNOFILE=65536
MemoryMax=4G
CPUWeight=100

# Hardening
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/opt/ombra/data-mainnet /var/log/ombra
PrivateTmp=true

[Install]
WantedBy=multi-user.target

2. Creează user dedicat

Best practice — nu rula ca root:

sudo useradd -r -s /bin/false -d /opt/ombra ombra
sudo chown -R ombra:ombra /opt/ombra
sudo mkdir -p /var/log/ombra
sudo chown ombra:ombra /var/log/ombra

3. Enable & start

sudo systemctl daemon-reload
sudo systemctl enable ombra-mainnet
sudo systemctl start ombra-mainnet

Verifică status:

sudo systemctl status ombra-mainnet

Output ideal:

● ombra-mainnet.service - OmbraChain Mainnet Miner Node
Loaded: loaded (/etc/systemd/system/ombra-mainnet.service; enabled)
Active: active (running) since 2026-03-15 12:34:56 UTC; 5s ago
Main PID: 12345 (node)
Tasks: 8
Memory: 250M
CPU: 1.2s

4. Log monitoring

Live logs

sudo journalctl -u ombra-mainnet -f
# SAU
sudo tail -f /var/log/ombra/miner-node.log

Errors only

sudo tail -f /var/log/ombra/miner-node.error.log

Last 100 lines

sudo journalctl -u ombra-mainnet -n 100 --no-pager

5. Log rotation

Empêchează log-urile să crească nelimitat:

sudo nano /etc/logrotate.d/ombra

Conținut:

/var/log/ombra/*.log {
daily
rotate 7
compress
delaycompress
notifempty
create 0640 ombra ombra
sharedscripts
postrotate
systemctl reload ombra-mainnet > /dev/null 2>&1 || true
endscript
}

Test:

sudo logrotate -d /etc/logrotate.d/ombra # dry run
sudo logrotate -f /etc/logrotate.d/ombra # force rotate

6. Auto-restart la update

Când dai git pull + rebuild, restart:

cd /opt/ombra
git pull
pnpm install
pnpm --filter @ombrachain/miner-node build
sudo systemctl restart ombra-mainnet

Sau script scripts/update-node.sh:

#!/bin/bash
set -e
cd /opt/ombra
git pull
pnpm install
pnpm --filter @ombrachain/core build
pnpm --filter @ombrachain/node build
pnpm --filter @ombrachain/api build
pnpm --filter @ombrachain/miner-node build
sudo systemctl restart ombra-mainnet
echo "✓ Updated and restarted"
sudo chmod +x scripts/update-node.sh
sudo ./scripts/update-node.sh

7. Monitoring extern (opțional)

Pentru a primi alert dacă serviciul cade:

Healthcheck cron

sudo crontab -e

Adaugă:

*/5 * * * * curl -sf http://localhost:3001/api/chain/height > /dev/null || systemctl restart ombra-mainnet

Uptime Kuma / Healthchecks.io

Ping endpoint extern cu API public:

*/1 * * * * curl -sf http://localhost:3001/api/chain/height && curl -sf https://hc-ping.com/YOUR_UUID

8. Resource monitoring

# CPU + RAM curent
sudo systemctl status ombra-mainnet

# Detailed
sudo systemd-cgtop | grep ombra-mainnet

# Memory mai detailat
sudo cat /proc/$(pidof node)/status | grep -E "VmRSS|VmSize"

Cap RAM (în unit file) la 4G previne OOM kill kernel. Dacă atingi limita constant, mărește la 8G sau optimizează backend AI.

9. Disable / Uninstall

Stop & disable:

sudo systemctl stop ombra-mainnet
sudo systemctl disable ombra-mainnet

Remove complet:

sudo rm /etc/systemd/system/ombra-mainnet.service
sudo systemctl daemon-reload
sudo rm -rf /opt/ombra /var/log/ombra
sudo userdel ombra

⚠ Înainte de remove, backup mnemonic (data-mainnet/wallet-mnemonic.txt) altfel pierzi fondurile!

Vezi și