Skip to content
Snippets Groups Projects
readme_template 7.38 KiB
[![$GITHUB_REPONAME](img/$GITHUB_REPONAME_header.png)](https://github.com/$CREATOR_USERNAME/$CREATOR_REPONAME)

---

[![Docker Pulls](https://img.shields.io/docker/pulls/griefed/$DOCKERHUB_REPONAME?style=flat-square)](https://hub.docker.com/repository/docker/griefed/$DOCKERHUB_REPONAME)
[![Docker Image Size (latest by date)](https://img.shields.io/docker/image-size/griefed/$DOCKERHUB_REPONAME?label=Image%20size&sort=date&style=flat-square)](https://hub.docker.com/repository/docker/griefed/$DOCKERHUB_REPONAME)
[![Docker Cloud Build Status](https://img.shields.io/docker/cloud/build/griefed/$DOCKERHUB_REPONAME?label=Docker%20build&style=flat-square)](https://hub.docker.com/repository/docker/griefed/$DOCKERHUB_REPONAME)
[![Docker Cloud Automated build](https://img.shields.io/docker/cloud/automated/griefed/$DOCKERHUB_REPONAME?label=Docker%20build&style=flat-square)](https://hub.docker.com/repository/docker/griefed/$DOCKERHUB_REPONAME)
[![GitHub Repo stars](https://img.shields.io/github/stars/Griefed/$GITHUB_REPONAME?label=GitHub%20Stars&style=social)](https://github.com/Griefed/$GITHUB_REPONAME)
[![GitHub forks](https://img.shields.io/github/forks/Griefed/$GITHUB_REPONAME?label=GitHub%20Forks&style=social)](https://github.com/Griefed/$GITHUB_REPONAME)

$GITHUB_REPONAME

$DESCRIPTION

[![$CREATOR_REPONAME](img/$GITHUB_REPONAME_screenshot.png)](https://github.com/$CREATOR_USERNAME/$CREATOR_REPONAME)

---

Creates a Container which runs [$CREATOR_USERNAME's](https://github.com/$CREATOR_USERNAME) [$CREATOR_REPONAME](https://github.com/$CREATOR_USERNAME/$CREATOR_REPONAME), with [lsiobase/$BASE_IMAGE](https://hub.docker.com/r/lsiobase/$BASE_IMAGE) as the base image, as seen on $EXAMPLE_SITE_LINK.

The lsiobase/$BASE_IMAGE image is a custom base image built with [Alpine linux](https://alpinelinux.org/) and [S6 overlay](https://github.com/just-containers/s6-overlay).
Using this image allows us to use the same user/group ids in the container as on the host, making file transfers much easier

## Deployment

Tags | Description
-----|-------------
$DOCKERHUB_TAG_ONE | Use tag `$DOCKERHUB_TAG_ONE` if accessing $CREATOR_REPONAME via IP:PORT
$DOCKERHUB_TAG_TWO | Use tag `$DOCKERHUB_TAG_TWO` if accessing $CREATOR_REPONAME through a reverse proxy line NGINX


```docker-compose.yml
version: '3.6'
services:
  $DOCKERHUB_REPONAME:
    container_name: $DOCKERHUB_REPONAME
    image: $DOCKERHUB_USERNAME/$DOCKERHUB_REPONAME
    restart: unless-stopped
    volumes:
      - ./path/to/config:/config
    environment:
      - TOKEN=<YOUR_BOT_TOKEN_HERE>
      - TZ=Europe/Berlin
      - PUID=1000  # User ID
      - PGID=1000  # Group ID
    ports:
      - 3000:$CONTAINER_PORT
      - $CONTAINER_PORT2
```

## Raspberry Pi

To run this container on a Raspberry Pi, use the `arm`-prefix for the `$DOCKERHUB_TAG_ONE`- and `$DOCKERHUB_TAG_TWO`-tags. I've tested the `$DOCKERHUB_TAG_ONE`-tag on a Raspberry Pi 3B.

`$DOCKERHUB_USERNAME/$DOCKERHUB_REPONAME:$DOCKERHUB_TAG_ONE-arm`
`$DOCKERHUB_USERNAME/$DOCKERHUB_REPONAME:$DOCKERHUB_TAG_TWO-arm`

## Configuration

Configuration | Explanation
------------ | -------------
[Restart policy](https://docs.docker.com/compose/compose-file/#restart) | "no", always, on-failure, unless-stopped
config volume | Contains config files and logs.
data volume | Contains your/the containers important data.
TZ | Timezone
PUID | for UserID
PGID | for GroupID
ports | The port where $DOCKERHUB_REPONAME will be available at. Only relevant when using `$DOCKERHUB_USERNAME/$DOCKERHUB_REPONAME:$DOCKERHUB_TAG_ONE`
## User / Group Identifiers

When using volumes, permissions issues can arise between the host OS and the container. [Linuxserver.io](https://www.linuxserver.io/) avoids this issue by allowing you to specify the user `PUID` and group `PGID`.

Ensure any volume directories on the host are owned by the same user you specify and any permissions issues will vanish like magic.

In this instance `PUID=1000` and `PGID=1000`, to find yours use `id user` as below:

```
  $ id username
    uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
```

## Specify channels to ignore:
D-Zone will, by default, listen to all channels on the servers which your bot is connected to.
If you want to set ignoreChannels, you need to edit your `discord-config.json`file in the folder you specified in your `volumes:`.
Edit the "servers" block on a per server basis, e.g.:
```json
  "servers": [
    {
      "id": "<YOUR_SERVER_ID_HERE",
      "default": true,
      "ignoreChannels": ["TEXTCHANNEL_ID1","TEXTCHANNEL_ID2","TEXTCHANNEL_ID3"]
    }
  ]
```
If you want to define multiple servers, see https://github.com/d-zone-org/d-zone/blob/master/discord-config-example.json

## Running D-Zone behind a reverse proxy like NGINX

If you want to serve d-zone with a reverse proxy like nginx and HTTPS, then this may be of help to you:

```docker-compose.yml
version: '3.6'
services:
  d-zone:
    container_name: $DOCKERHUB_REPONAME
    image: griefed/$DOCKERHUB_REPONAME:$DOCKERHUB_TAG_TWO
    restart: unless-stopped
    volumes:
      - ./path/to/config/files:/config
    environment:
      - TOKEN=<YOUR_BOT_TOKEN_HERE>
      - TZ=Europe/Berlin
      - PUID=1000  #User ID
      - PGID=1000  #Group ID
```

I use a dockerized NGINX as a reverse proxy, specifically [linuxserver/swag](https://hub.docker.com/r/linuxserver/swag).

```nginx
server {
    listen 443 ssl;
    listen [::]:443 ssl;

    server_name SUBDMOAIN.*;

    include /config/nginx/ssl.conf;

    client_max_body_size 0;

    # enable for ldap auth, fill in ldap details in ldap.conf
    #include /config/nginx/ldap.conf;

    # enable for Authelia
    #include /config/nginx/authelia-server.conf;

    location / {
        # enable the next two lines for http auth
        #auth_basic "Restricted";
        #auth_basic_user_file /config/nginx/.htpasswd;

        # enable the next two lines for ldap auth
        #auth_request /auth;
        #error_page 401 =200 /ldaplogin;

        # enable for Authelia
        #include /config/nginx/authelia-location.conf;

        include /config/nginx/proxy.conf;
        resolver 127.0.0.11 valid=30s;

        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_pass_request_headers on;
        set $upstream_app d-zone;
        set $upstream_port 3000;
        set $upstream_proto http;
        proxy_pass $upstream_proto://$upstream_app:$upstream_port;
    }
}
```

### Building the image yourself

Use the [Dockerfile](https://github.com/Griefed/$GITHUB_REPONAME/Dockerfile) to build the image yourself, in case you want to make any changes to it

#### docker-compose.yml

```docker-compose.yml
version: '3.6'
services:
  $DOCKERHUB_REPONAME:
    container_name: $DOCKERHUB_REPONAME
    build: ./$GITHUB_REPONAME/
    restart: unless-stopped
    volumes:
      - ./path/to/config/files:/config
    environment:
      - TZ=Europe/Berlin
      - PUID=1000  # User ID
      - PGID=1000  # Group ID
    ports:
      - 8080:$CONTAINER_PORT
      - $CONTAINER_PORT2
```

1. Clone the repository: `git clone https://github.com/Griefed/$GITHUB_REPONAME.git ./$GITHUB_REPONAME`
1. Rename **Dockerfile.$DOCKERHUB_TAG_ONE** to **Dockerfile**: `mv Dockerfile.$DOCKERHUB_TAG_ONE Dockerfile`
1. Prepare docker-compose.yml file as seen above
1. `docker-compose up -d --build $DOCKERHUB_REPONAME`
1. Visit IP.ADDRESS.OF.HOST:8080
1. ???
1. Profit!