Skip to main content

Set up a production environment

Use this guide to set up and manage a production-level full JMES node.

Create a dedicated user

Although jmesd does not require a super user account, during the setup process you'll need super user permissions to create and modify some files. It is strongly recommended to use a normal user when running jmesd.

Increase limit of file descriptors per process

Linux systems set the maximum number of file descriptors that a process may open to 1024 by default. It is recommended that you increase this amount.

Modify /etc/security/limits.conf* to increase the amount, where nofile is the number of files a process may open at a time.


_5
# If you have never changed this system config or your system is fresh, most of this file will be commented
_5
# ...
_5
* soft nofile 65535 # Uncomment the following two lines at the bottom
_5
* hard nofile 65535 # Change the default values to ~65535
_5
# ...

Run the server as a daemon

jmesd must be running at all times. It is recommended that you register jmesd as a systemd service so that it will be started automatically when the system reboots.

Register jmesd as a service

  1. Create a service definition file in /etc/systemd/system/jmesd.service.

    Example:


    _15
    [Unit]
    _15
    Description=JMES Daemon
    _15
    After=network.target
    _15
    _15
    [Service]
    _15
    Type=simple
    _15
    User=<JMES_USER>
    _15
    ExecStart=<PATH_TO_JMESD>/jmesd start
    _15
    Restart=on-abort
    _15
    _15
    [Install]
    _15
    WantedBy=multi-user.target
    _15
    _15
    [Service]
    _15
    LimitNOFILE=65535

  2. Modify the Service section according to your environment:

    • Enter the user (likely your username, unless you created a user specifically for jmesd).
    • Enter the path to the jmesd executable. <PATH_TO_JMESD> is likely /home/<YOUR_USER>/go/bin/jmesd or /usr/go/bin. Confirm this with whereis jmesd.
    • Make sure you made the correct edits to /etc/security/limits.conf.
  3. Run systemctl daemon-reload followed by systemctl enable jmesd. This will register jmesd as a system service and run the program upon startup.

Controlling the service

Use systemctl to start, stop, and restart the service. Note: Only do this after you've fully configured your node


_8
# Check health
_8
systemctl status jmesd
_8
# Start
_8
systemctl start jmesd
_8
# Stop
_8
systemctl stop jmesd
_8
# Restart
_8
systemctl restart jmesd

Access logs

Use journalctl -t to access entire logs, entire logs in reverse, and the latest and continuous log.


_6
# Entire log reversed
_6
journalctl -t jmesd -r
_6
# Entire log
_6
journalctl -t jmesd
_6
# Latest and continuous
_6
journalctl -t jmesd -f