--- title: "Service Setup" weight: 3 --- {{< lead >}} In order to have your bot started automatically on system start we should set it up as a service. {{< /lead >}} ## General preparation {{< alert style="info" >}} In order not to put confidential information into the configuration file we want to create a configuration file to hold these secrets. Also we will create a folder to put stored data and overlay files into. You can use other folders for those files, just remember to adjust the paths in all places. For this page I will assume the binary is placed in `/usr/local/bin/twitch-bot_linux_amd64`. {{< /alert >}} ```console # First create a folder to hold our secret file(s) $ mkdir /etc/twitch-bot # Second create a folder to hold the data $ mkdir -p /var/lib/twitch-bot/overlays # Create the secrets file and secure access to it $ touch /etc/twitch-bot/environment $ chown root:root /etc/twitch-bot/environment $ chmod 0600 /etc/twitch-bot/environment # Edit the file to hold the secrets (use your favourite editor instead of nano) $ nano /etc/twitch-bot/environment ``` Lets put this into the file we've just edited (replace the brackets, don't leave them inside the file!): ```env BASE_URL=http://localhost:3000/ CONFIG=/var/lib/twitch-bot/config.yaml LOG_LEVEL=info OVERLAYS_DIR=/var/lib/twitch-bot/overlays STORAGE_CONN_STRING=/var/lib/twitch-bot/storage.db STORAGE_CONN_TYPE=sqlite STORAGE_ENCRYPTION_PASS=[put a random secure password here] TWITCH_CLIENT=[put the client-id from the preparations step here] TWITCH_CLIENT_SECRET=[put the client-secret from the preparations step here] ``` If you want to use a database server like MariaDB or PostgreSQL adjust the `STORAGE_CONN_*` variables like described in the project [README](https://github.com/Luzifer/twitch-bot/blob/master/README.md#database-connection-strings). ## Option 1: Using a downloaded or compiled Binary We will create a systemd service to start the binary using the environment variables file we've created in the preparation step. This file will be placed into `/etc/systemd/system/twitch-bot.service`: ```service [Unit] Description=Twitch-Bot Service After=network-online.target Requires=network-online.target [Service] EnvironmentFile=/etc/twitch-bot/environment ExecStart=/usr/local/bin/twitch-bot_linux_amd64 Restart=Always RestartSecs=5 [Install] WantedBy=multi-user.target ``` To enable and start the service which makes it automatically start on every server boot execute these commands: ```console $ systemctl daemon-reload $ systemctl enable --now twitch-bot ``` After the first start a configuration file has been created at `/var/lib/twitch-bot/config.yaml`. You want to change the port in the `http_listen` line in this file: ```yaml # IP/Port to start the web-interface on. Format: IP:Port # The default is 127.0.0.1:0 - Listen on localhost with random port http_listen: "127.0.0.1:3000" ``` After changing the port restart the service once: ```console $ systemctl restart twitch-bot ``` To update the bot first stop the bot, then replace the binary and start the bot again: ```console $ systemctl stop twitch-bot $ mv [path to new binary] /usr/local/bin/twitch-bot_linux_amd64 $ systemctl start twitch-bot ``` ## Option 2: Using a Docker image We will create a systemd service to start the binary using the environment variables file we've created in the preparation step. This file will be placed into `/etc/systemd/system/twitch-bot.service`: ```service [Unit] Description=Twitch-Bot Service After=network-online.target Requires=network-online.target [Service] EnvironmentFile=/etc/twitch-bot/environment ExecStartPre=-/usr/bin/docker rm -f %n ExecStartPre=/usr/bin/docker pull luzifer/twitch-bot:stable ExecStart=/usr/bin/docker run --rm --name %n \ --env-file /etc/twitch-bot/environment \ -v /var/lib/twitch-bot:/var/lib/twitch-bot \ -p 127.0.0.1:3000:3000 \ luzifer/twitch-bot:stable Restart=Always RestartSecs=5 [Install] WantedBy=multi-user.target ``` To enable and start the service which makes it automatically start on every server boot execute these commands: ```console $ systemctl daemon-reload $ systemctl enable --now twitch-bot ``` After the first start a configuration file has been created at `/var/lib/twitch-bot/config.yaml`. You want to change IP and port in the `http_listen` line in this file: ```yaml # IP/Port to start the web-interface on. Format: IP:Port # The default is 127.0.0.1:0 - Listen on localhost with random port http_listen: "0.0.0.0:3000" ``` After changing the port restart the service once: ```console $ systemctl restart twitch-bot ``` To update the bot just restart the service: ```console $ systemctl restart twitch-bot ``` ## Debugging the Service In both options you created a service which is running as a system user. You can do the same things for both options to see what the bot is doing: ```console $ journalctl -fu twitch-bot ``` This will stream the logs of the bots into your terminal and you can read what the bot is doing. In case the bot behaves unexpectedly you can increase the `LOG_LEVEL` from `info` to `debug` within the `/etc/twitch-bot/environment` file and restart the bot to get more verbose logs.