Deployment
You can deploy your bot in various ways. EnhancedJDA made small utilities for bot deployment.
Windows Installer (.msi)
You can create a Windows.msi
installer for your bot. It will install the bot and the required JRE, so the user won’t need to install it manually.
Requirements:
- Java Development Kit (at least 14, but not lower than used by bot)
- WiX Toolset
To create an installer, you need to:
- Build your bot to
.jar
file - Download script
- Run script and provide required information
Installation and configuration
To install the bot, run .msi
installer and follow the instructions. You can configure the bot in the location selected during installation.
Linux Installer (.deb)
You can create a Linux .deb
installer for your bot. As in Windows, it will install the bot and the required JRE.
Requirements:
- Java Development Kit (at least 14, but not lower than used by bot)
To create an installer, you need to:
- Build your bot to
.jar
file - Download script
- Run script and provide required information
Installation and configuration
-
Run
dpkg -i <installer_name>.deb
-
If you don't have some dependencies, then run
apt -f install
and run command from the first step again
Package will be installed in /opt/<formatted-application-name>
. There will also be the configuration files. You can run a bot using /opt/<formatted-application-name>/bin/<application-name>
.
formatted-application-name
is a lower case name with -
instead of spaces
Running bot in the background
You can also run the bot in the background.
- Create service file
nano /etc/systemd/system/<application-name>.service
[Unit]
Description=Discord bot
[Service]
User=root
Group=root
Restart=always
WorkingDirectory=/opt/<formatted-application-name>
ExecStart=/opt/<formatted-application-name>/bin/<application-name>
StartLimitInterval=180
StartLimitBurst=30
RestartSec=5s
[Install]
WantedBy=multi-user.target
Don’t forget to change WorkingDirectory
and ExecStart
-
Enable service
systemctl enable <application-name>
-
Start service
systemctl start <application-name>
To check logs use journalctl -fu <application-name>
Pterodactyl
You can run bot on pterodactyl using Generic Java Egg and bot .jar
Docker
Using Dockerfile, JAR file and docker compose
In this method, you need to have a .jar
file in the same directory as Dockerfile
and docker-compose.yml
FROM azul/zulu-openjdk-alpine:17-latest
RUN mkdir /app
COPY *.jar /app/bot.jar
WORKDIR /app
ENTRYPOINT ["java", "-jar", "bot.jar"]
version: '3.8'
services:
bot:
container_name: discord-bot
build: .
restart: unless-stopped
environment:
- ENV=<DEV / PRODUCTION>
- TOKEN=<DISCORD BOT TOKEN>
- DATABASE=<SQLITE or MYSQL Connection URL>
volumes:
- '/var/log/discord-bot:/app/logs'
- '/opt/discord-bot/config:/app/config'
- '/opt/discord-bot/database.db:/app/database.db'
Building image, exporting it and running it later
You can also build an image, save it, and load it later to run using i.e. docker compose.
To build & save image:
- Place
.jar
file andDockerfile
in the same directory - Run
docker build -t <bot-name>:<version> .
- Save image to file
docker save -o <bot-name>.tar <bot-name>:<version>
- (optional) Remove image
docker rmi <bot-name>:<version>
To load & run image:
- Load image using
.tar
created beforedocker load -i <bot-name>.tar
- Run using i.e. docker compose
version: '3.8'
services:
bot:
container_name: discord-bot
image: <bot-name>:<version>
pull_policy: never
restart: unless-stopped
environment:
- ENV=<DEV / PRODUCTION>
- TOKEN=<DISCORD BOT TOKEN>
- DATABASE=<SQLITE or MYSQL Connection URL>
volumes:
- '/var/log/discord-bot:/app/logs'
- '/opt/discord-bot/config:/app/config'
- '/opt/discord-bot/database.db:/app/database.db'