Servers are more common on boats today than ever before. Having some sort of system to run SignalK, a dedicated alerting system, or some other service has become just as integral as having a chart plotter or VHF radio. Here are my servers, and what they run.
Choosing server hardware is still a big decision – you have to factor in what you’ll be running, your power budget, and performance required.
For the longest time, I used Raspberry Pi boards on my sailboats because of their power efficiencies. Before that, I used Soekris systems, hand built systems, and many other derivations back into the 1990s.
Raspberry Pi was a great platform, but I found that the more things I wanted to do with my boat server, the more Pi’s I needed, as a single one was not capable of handling the load. In addition, I had multiple SD card failures both on the boat and on one of the 20+ other Pi’s I had running at home, at the family cabin, and elsewhere. While backups helped with those failures, it was irritating to have to deal with it to begin with. There are better SD cards now that seem to last longer, but nothing replaces an SSD or hard drive.
I use Intel NUCs now for all of my boat servers, home servers, and elsewhere, and have even written about them before in Using an Intel NUC as a powerful boat server. They have proven to be reliable, quiet, and powerful and can be run off of DC battery power directly without an inverter in the mix. The article above goes into more of the details around why I think the NUC is a good boat server hardware-wise.
I have two servers on Rendezvous – one Linux and one Windows.
The Linux system has the most services on it, but tends to operate at a pretty low utilization. It is running Ubuntu Linux 18.04 LTS which is my current favorite server operating system. Ubuntu is very popular, has lots of available packages, is easy to administer, and the LTS version is supported for a long time.
This server is headless and runs in my Internet Alcove, connected to the main switch for the entire local network via Ethernet.
This server is an i3 Intel NUC with the following specs:
- NUC7i3BNK – i3, series 7 NUC base kit. This is the short model. It comes with 4x USB ports, WiFi, Ethernet, and much more. I use many of the USB ports for the various NMEA 2000 interfaces, and the Ethernet port to my local network.
- Samsung 960 EVO 250GB NVMe M.2 SSD – I’ve found these SSDs to be some of the highest reviewed for performance and reliability.
- 4GB RAM
I chose the i3 for power and heat savings, given this computer is installed in a cabinet and runs 24×7. This system is connected to my DC power system directly and does not require an AC inverter or wall wart.
SignalK is a critical component of any boat I have both for displaying dashboards using Instrument Panel, but also translating data from various things and ensuring it is on all networks where it is needed. On Rendezvous, I use several plugins within SignalK that are important:
- Convert SignalK to NMEA 0183 – this spins up a TCP port at 10110 on the server that I can point other devices to, and it spits out a NMEA 0183 stream of data from the NMEA 2000 network. I use this primarily for aisdispatcher (below) and it allows me to have a single endpoint to point devices at, but move around systems on my NMEA 2000 network depending on what I am testing.
- N2K AIS to NMEA 0183 – required to convert AIS messages off of the NMEA 2000 network and send to the plugin above, and thereby to aisdispatcher.
- Victron Venus plugin – I use Victron for all of my DC and AC electrical system, and it is all networked together using Victron’s various busses. However, none of their hardware allows for full NMEA 2000 integration, so I use this plugin within SignalK which connects to my Color Control GX and pulls the data out using a TCP connection, and into SignalK. This allow for display of the data within SignalK, which is fine, but the plugin below is really what glues it together.
- Convert SignalK to NMEA 2000 – this allows me to take the data within SignalK, such as the Victron data above, and convert it into NMEA 2000 PGNs and place it on the network. In particular, I use this for battery status (PGNs 27506 & 127508) so that at various places around the boat, I can see how the electrical system is doing.
- Wilhelm SK – this plugin allows you to use Scott Bender’s fantastic iOS app that visualizes all of SignalK’s data.
I am a mobile base station for a bunch of different AIS aggregators including Marine Traffic and AIShub. I use aisdispatcher to connect to SignalK which has the signalk-n2kais-to-nmea0183 plugin configured. This allows me to grab AIS data from anything that happens to be on the NMEA 2000 network rather than pointing it at a specific device like my Vesper XB-8000, Digital Yachts, etc.
./aisdispatcher -t -h 192.168.3.10 -p 10110 -H marinetraffic.com, aishub.net -v -D60
aisdispatcher filters out non AIS data, scopes it down a bit so I’m not sending tons of data out my LTE link, and sends it on to the aggregators. I’ve been running this for a long time on board, and I like being able to contribute so that others can see AIS targets on those maps. It has also been very fun to see the data being reported when I visit more remote areas and still have LTE coverage.
My crew (and occasionally me!) like to relax in the evenings with a bit of TV. I have a significant Plex server at home with 10 terabytes of data and over 10,000 episodes of TV. I take a subset of this and replicate it to a 2TB hard drive that is attached to the local Plex server on Rendezvous.
While on board, we use a Roku or Apple TV to run the Plex client. Sometimes crew members will use a tablet and can access the on board Plex server as well.
This allows us to have various TV series on board without using up LTE or streaming data. Comes in handy for those rainy days at anchor when no one wants to go outside.
For general network monitoring, graphs, and alerting, I have used Zabbix for years, and it has proven to be reliable and scalable. I have a VPN back to my main Zabbix monitoring server, which connects in to the computer on the boat via a Zabbix proxy. The main server sends a list of what should be monitored, and the boat computer does the work, which is more efficient than monitoring things remotely.
I monitor all of the bandwidth, ports, services, processes, and devices on the boat that are supposed to be on all the time. I can see used bandwidth, port statistics, network latency, and much more. It is extremely helpful when testing new devices, and I have found many issues through when monitoring goes crazy.
The Zabbix agent is used to gather complete performance information on the server itself, and is helpful to see impacts of enabling more devices on the NMEA 2000 network, and what that does to SignalK, etc.
Docker + Venus-docker-grafana
Docker is a container technology which allows you to run an entire “system” of things easily without installing individual components. I am using Docker to run the venus-docker-grafana compose file which runs a customized version of SignalK, InfluxDB, and Grafana.
[email protected]:~/venus$ cat docker-compose.yaml version: '3.4' services: server: image: "sbender9/victron-server:latest" ports: - "8088:8088" volumes: - "config-storage:/config" upnp: image: "sbender9/victron-upnp:latest" network_mode: host influxdb: image: "influxdb:1.7" ports: - "8086:8086" volumes: - "influxdb-storage:/var/lib/influxdb" environment: - INFLUXDB_HTTP_LOG_ENABLED=false grafana: image: "sbender9/victron-grafana:latest" volumes: - "grafana-storage:/var/lib/grafana" ports: - "3000:3000" volumes: influxdb-storage: grafana-storage: config-storage: [email protected]:~/venus$ docker-compose up -d Starting venus_upnp_1 ... Starting venus_upnp_1 Starting venus_grafana_1 ... Starting venus_grafana_1 Starting venus_influxdb_1 ... Starting venus_server_1 ... Starting venus_influxdb_1 Starting venus_influxdb_1 ... done [email protected]:~/venus$
SignalK has been customized to work primarily with Venus GX-series devices, using the same plugins and configurations I listed above for my standalone SignalK server. It then uses another SignalK plugin to put the data into InfluxDB, and Grafana to visualize it in dashboards.
This is a great way to monitor the performance of your Victron system without using their remote VRM platform. I still use that, but this has no impact on my LTE/internet bandwidth, works while I am out of coverage, and keeps a copy of all of the data locally so I can look through it in more detail.
Mail / Postfix / Mailgun
This might seem sort of obvious, but having an email server on board that other devices can use is very important to ensure I am getting accurate notifications.
I use Postfix as it is a well supported mail server. Combine that with Mailgun’s delivery service and an SSL connection, I can be sure that mail is always delivered from on board devices like Maretron’s N2Kserver on my Windows box, Blue Guard’s BG-Link gateway, and many others.
Using Mailgun ensures it is delivered reliably, and not flagged as spam. Relying on a local SMTP server to deliver mail directly to various devices is not recommended in today’s DKIM/SPF/DMARC spam protected email world. Mailgun + Postfix + SASL and SSL help make this a reliable solution.
Monit & M/Monit
I’ve used monit for years to manage and monitor linux systems, and I use it on Rendezvous linux system as well. It keeps an eye on all of the critical services, and will restart them if they fail, notify me via email when things can’t be restarted, and more.
I also use M/Monit on a central server at home to see general status on a dashboard. I find it very useful to have this tool watching all of the critical services and restarting them even if I am not able to get into the system.
The final monitoring tool I use is netdata, which is a lot more real-time and granular than Zabbix. When I am testing new products or network changes, this allows me to see the immediate impact on CPU, memory and other areas of the system. It is also an extremely useful tool for debugging general system performance and capacity.
The Windows system runs Windows 10 Pro, and yes that is not a server-class operating system, but most of the programs I need to run require a desktop operating system, so that’s what I ended up having to use. This system also is my primary navigation PC at the salon helm station while underway and runs a number of client programs.
This system has a 22″ Planar touch-screen monitor on an arm with the server attached to the back for easy servicing and connectivity.
This system is an i7 NUC that is pre-built, which is unusual for me – I normally prefer to build my own from components. However, this one was so cost effective, and had high quality components and Windows 10 pre-loaded. Intel has some crazy part numbers for customer-facing systems, and this one is no exception – it is the NUC8I7BEKQA. It has the following hardware specs:
- Series 8 NUC with an i7-8559U CPU, which is one of the newest and fastest you can get in a NUC – up to 4.5GHz and 4 cores.
- 512GB Intel 760p NVMe SSD – nice size for all of the fat charts and other marine programs. It’s also a higher end SSD speed wise – not the absolute top of the charts, but still more than enough for the boat.
- USB + USB hub – this was pretty important given that there are a number of USB devices connected to this machine.
- 16GB of DDR4-2400 RAM – I wanted a decent amount for Windows + TimeZero + Coastal Explorer + Maretron N2Kviewer
- Video – it has both an HDMI 2.0a port and a USB-C port for video out. I plan on having a second screen using the USB-C port in the next few months.
- WiFi / Ethernet – this is important in my setup as I have the WiFi connected to my local Pepwave router, and the Ethernet port connected to my Furuno-only network. This allows this PC to run TimeZero and use all of the Furuno hardware as well.
I use TimeZero as my primary lower helm station – it displays charts, cameras, and navigation data, controls my radar, runs courses through the NavPilot 300 autopilot and integrates with the Furuno network to fully sync the data.
The Windows system uses an Ethernet connection directly to my private Furuno network which allows it to exchange data with the MFDs, access the AXIS camera server, and control the DRS4D-NXT dopper radar.
In addition, it uses the Actisense NGT-1-USB USB-to-NMEA 2000 interface to get navigational data off of the N2K network such as the PG-700 heading sensor, depth, speed, etc.
I have used Coastal Explorer since the early days, and love it as a navigation and planning tool. The last year or so I have spent more time using TimeZero because of its integration with the rest of my systems, but I still use Coastal while at anchor to display nearby AIS targets and general position info as it tends to be a bit more power efficient.
Coastal Explorer uses the Nemo Gateway to get all navigation and network data, and can run my NavPilot 300 autopilot on a course if needed, although it is not anywhere near as integrated as the TimeZero solution.
Maretron’s N2Kview is the primary server-like program I run on the Windows system. It connects to a Maretron IPG-100 gateway which allows access to all of the NMEA 2000 data, and has a ton of features.
The entire program is touch based and has a number of pre-built screens showing data from the enviroment, DC/AC systems, engines, cameras, and a very feature-packed anchor system. I use it to monitor the engines and navigation data while underway, and the environment and anchor systems when at anchor.
It also has a very good alerting engine. Not only is is relatively easy to setup an alert, but you can have it flash a warning on the screen, sound an alarm or send an email / text. I also have an ALM100 alarm module that it can sound, waking even the deepest sleeper, and it automatically propagates the alarm to all of my DSM-series displays throughout the boat.
Out of all of the things I run on this system, the alerts and monitoring are the most critical both while on board, and remote in case of something serious happening.
This is one of the longest-running tools I’ve used to debug NMEA 2000 networks, and it only runs on Windows. I have a USB-100 Maretron USB-to-NMEA 2000 interface connected to the Windows machine, and use it constantly when testing new devices, setting unique and device instances, and analyzing PGNs being sent/received by the devices.
Similar to the above tool from Maretron, I have an Actisense NGT-1-USB interface (used also for TimeZero) that I use very often to monitor the NMEA 2000 network, configure devices, debug issues, and more. Most recently it was used to log large portions of bus traffic searching for a bug that only happened every few hours.
In addition, I use the same NGT-1-USB interface and Actisense’s Toolkit to configure things like the EMU-1 engine monitor and manage other Actisense updates and firmware.
I have an Airmar WX-220 that I use as a primary GPS and weather source. At times while at anchor, I run Weathercaster to display the data real-time, although I can’t say the software is very reliable or optimized. However it can be interesting to see the data here, although Maretron’s N2Kview does something very similar.
Most modern geek boaters have some sort of server on board. I think it is becoming more and more popular to rely on software to provide services on board like Plex, SignalK conversions, and the like.
I’d love to hear from others in the comments on what services and programs you run on your server!