How to install Zeppelin Discord Bot (step-by-step)

Source: blogs, Zeppelin Installation, Zeppelin Bot, Zeppelin Bot, Kewwie Zeppelin Bot Fork


Why this guide?

I wanna install Zeppelin Bot on my own server, however somehow the release version is having problem and up-to-date I have not being able to make it run on a new server. Been communicating with the developer and so far zero result.

Furthermore I also want to run my own NGINX + CertBot aside from using Zeppelin nginx package.

How do I do it:

Beyond the scope

I will not include on how to install docker, docker-compose, NGINX, and Certbot because its beyond the scope of this guide. However you can follow Zeppelin Bot original guide at Zeppelin Installation

Lets Begin

Be sure you already have Docker, Docker-Compose, NGINX and certbot running.

# Add New User and give sudo and docker access
adduser discordbot
usermod -aG sudo discordbot
usermod -aG docker discordbot

change to your newly created user su - discordbot

Clone my Zeppelin fork which currently work and I also add the nonginx composer files

git clone
cd zeppelinbot
cp .env.example .env

Make your key by openssl rand -hex 16 save the key because you goin to paste it into your .env file.

Check your user and group ID

id -u
id -g

save the userid and groupid because you goin to paste it into your .env file.

Discord Bot Setup

Please refer to Discord Bot Setup Page.

Edit your configurations file (.env)

# 32 character encryption key

# Values from the Discord developer portal

# The defaults here automatically work for the development environment.
# For production, change localhost:3300 to your domain.

# Comma-separated list of user IDs who should have access to the bot's global commands

# A comma-separated list of server IDs that should be allowed by default

# When using the Docker-based development environment, this is only used internally. The API will be available at localhost:DOCKER_DEV_WEB_PORT/api.

# Only required if relevant feature is used

# The user ID and group ID that should be used within the Docker containers
# This should match your own user ID and group ID. Run `id -u` and `id -g` to find them.

# NOTE: You only need to fill in these values for running the production environment. See development config above.
# The MySQL database running in the container is exposed to the host on this port,
# allowing access with database tools such as DBeaver
# Password for the Zeppelin database user
# Password for the MySQL root user

Run you docker-compose

docker compose -f docker-compose.nonginx.yml up -d

if everything work as it should be then your compile docker zeppelin-prod-build_dashboard-1 and zeppelin-prod-prepare_backend-1 will stop running after 5 or 10 minutes tops and it will created inside your backend directory and dashboard directory a new dist folder. If you did not see them, then you need to recheck your docker logs.

Setup NGINX conf

# I did not add http and https redirect so please add it up yourself
server {
    listen 443 ssl http2;
    root /home/discordbot/zeppelinbot/dashboard/dist;

    # SSL
    ssl_certificate /etc/letsencrypt/live/;
    ssl_certificate_key /etc/letsencrypt/live/;
    ssl_trusted_certificate /etc/letsencrypt/live/;

    # security
    include custom-snippets/security.conf;

    # logging
    access_log /var/log/nginx/;
    error_log /var/log/nginx/;

    # index.php
    index index.htm index.html;

    location / {
        try_files $uri $uri/ /index.html;

    location ^~ /api {
        rewrite ^/api(/.*)$ $1 break;
        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;
        proxy_connect_timeout 600;
        proxy_send_timeout 600;
        proxy_read_timeout 600;
        send_timeout 600;
        client_max_body_size 50M;

If everything working properly you should be able to reach your dashboard via and also able to run config dashboard.

Rebuild Docker

Be sure you kill all your docker container docker compose -f docker-compose.nonginx.yml down -v

and then you can rebuild it using docker compose -f docker-compose.nonginx.yml up --build -d

P.S. In some cases, I will remove all the zeppelinbot directory and redo the clone just to be sure the DB datadump get wipeout.


I hope this guide will help you install and run Zeppelin Discord Bot easily without any problem. Please ask me any help via comment or Zeppelin Hangar