Oct 14, 2024 3 min read

MeshCentral: The Ultimate Self-Hosting Setup

MeshCentral: The Ultimate Self-Hosting Setup
Table of Contents

MeshCentral is an open-source, self-hosted, web-based remote management tool designed to provide full control over devices through a centralized platform. With its powerful features like remote desktop, file management, and terminal access, MeshCentral is an excellent choice for those who value customization, data sovereignty, and the ability to manage devices securely without relying on third-party services. This guide walks you through installing, configuring, and managing MeshCentral, covering essential topics like reverse proxy setup, logging, backups, updates, and leveraging its advanced features.

Installing MeshCentral

πŸ“¦ Docker/Docker Compose Setup

MeshCentral can be deployed easily using Docker Compose for streamlined management and portability. Below is a docker-compose.yml file tailored for MeshCentral:


version: '3.7'

services:

meshcentral:

image: meshcentral/meshcentral

container_name: meshcentral

ports:

- "443:443" # HTTPS

- "80:80"   # HTTP

- "4433:4433" # WebSocket

volumes:

- ./meshcentral-data:/meshcentral-data

environment:

- MESH_ADMINPASS=YourAdminPassword

restart: always

To deploy MeshCentral using Docker Compose, run the following commands in the directory with the above docker-compose.yml:


docker-compose up -d

This will pull the latest MeshCentral image, create the necessary volumes, and start the service.

πŸš€ Manual Installation

For manual installation on a Linux server, use these steps:

  1. Install Node.js and npm (at least v14):

curl -fsSL https://deb.nodesource.com/setup_14.x | sudo -E bash -

sudo apt-get install -y nodejs

  1. Install MeshCentral globally via npm:

sudo npm install meshcentral -g

  1. Start MeshCentral and generate default configurations:

mkdir ~/meshcentral-data

cd ~/meshcentral-data

node /usr/lib/node_modules/meshcentral

MeshCentral will now be accessible on http://<your-server-ip>:80.

Configuring Nginx as a Reverse Proxy

🌐 Nginx Configuration

To serve MeshCentral via Nginx, create a server block configuration file in /etc/nginx/sites-available/meshcentral:


server {

listen 80;

server_name yourdomain.com;

location / {

proxy_pass http://127.0.0.1:443;

proxy_set_header Host $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;

}

}

Enable the configuration and restart Nginx:


sudo ln -s /etc/nginx/sites-available/meshcentral /etc/nginx/sites-enabled/

sudo nginx -t

sudo systemctl reload nginx

πŸ”’ SSL/TLS Setup

Secure your app with SSL using Let's Encrypt and Certbot:


sudo apt install certbot python3-certbot-nginx

sudo certbot --nginx -d yourdomain.com

Certbot will automatically configure SSL and set up renewal.

πŸ› οΈ Testing and Reloading Nginx

Verify and reload the Nginx configuration:


sudo nginx -t

sudo systemctl reload nginx

Now MeshCentral is securely served over HTTPS at https://yourdomain.com.

Logging and Debugging MeshCentral

πŸ—ƒοΈ Enabling Debug Logs

To enable debug-level logging, modify the config.json file inside the MeshCentral data directory:


"log": {

"level": "debug"

}

Restart MeshCentral to apply the changes:


sudo systemctl restart meshcentral

πŸ“„ Viewing Logs

For Docker-based deployments, view logs with:


docker logs -f meshcentral

For manual installations, logs are stored in the working directory:


tail -f ~/meshcentral-data/meshcentral.log

πŸ› οΈ Troubleshooting Common Issues

Analyze logs to identify common issues like port conflicts or misconfigurations. For example:

  • Port in use: Ensure no other service is using the same ports (80, 443, etc.).

  • Nginx 502 errors: Verify proxy_pass settings and ensure MeshCentral is running.

πŸ“€ Exporting Logs

To integrate logs with ELK Stack, send them to Logstash using Filebeat. Install Filebeat:


sudo apt install filebeat

sudo filebeat setup

Then configure Filebeat to monitor meshcentral.log.

Backup and Restore

πŸ—‚οΈ File-Based Backups

Backup MeshCentral’s configuration and data directory:


tar -czf meshcentral-backup.tar.gz ~/meshcentral-data

To restore, simply extract the backup:


tar -xzf meshcentral-backup.tar.gz -C ~/

πŸ”„ Database Backups

If using an external database, export it with:


mysqldump -u root -p meshcentral > meshcentral_db_backup.sql

Restore with:


mysql -u root -p meshcentral < meshcentral_db_backup.sql

πŸ“… Automated Backup Scripts

Set up a cron job for daily backups:


crontab -e

Add the following line:


0 2 * * * tar -czf ~/meshcentral-backup-$(date +\%Y-\%m-\%d).tar.gz ~/meshcentral-data

Updating and Upgrading MeshCentral

⬆️ Updating Docker Images

For Docker deployments, update the image and restart the container:


docker-compose pull

docker-compose up -d

πŸ› οΈ Manual Updates

To manually update MeshCentral, run:


sudo npm install meshcentral -g

Then restart the service.

πŸ” Checking for Updates

Check for updates in the MeshCentral admin interface or by visiting the official repository.

Leveraging MeshCentral’s Unique Features

πŸ”§ Enabling APIs

To enable APIs, add the following to the config.json:


"WebRTC": {

"enabled": true

},

"AgentPing": {

"enabled": true

}

Restart MeshCentral to apply the configuration.

🌟 Advanced Configurations

Enable 2FA for admin accounts by modifying the config.json as follows:


"settings": {

"twofactor": true

}

This enhances security for accessing the control panel.

Wrapping Up

This guide provided a step-by-step walkthrough for deploying, configuring, and managing MeshCentral, from installation to advanced features. By leveraging the provided code examples, you can set up a robust self-hosted remote management platform tailored to your needs. MeshCentral’s flexibility and feature set make it a powerful tool for secure, centralized device managementβ€”perfect for developers, sysadmins, and tech enthusiasts. Start your journey with MeshCentral today!

Great! You’ve successfully signed up.
Welcome back! You've successfully signed in.
You've successfully subscribed to Selfhosted Ninja.
Your link has expired.
Success! Check your email for magic link to sign-in.
Success! Your billing info has been updated.
Your billing was not updated.