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!