Merge pull request #356 from CivMC/feature/pvp-container

Create PVP Server Container
This commit is contained in:
AngrySoundTech
2024-03-20 20:04:35 -04:00
committed by GitHub
21 changed files with 3726 additions and 167 deletions

View File

@@ -2,8 +2,8 @@
name: 🐘 Gradle | Check All
on:
workflow_dispatch:
workflow_call:
pull_request:
types: [ opened, synchronize, reopened ]
jobs:
check_gradle:

View File

@@ -1,7 +1,11 @@
name: 💬 Comment on PR
on:
workflow_call:
workflow_run:
types:
- "completed"
workflows:
- "🐘 Gradle | Check All"
jobs:
comment-on-pr:

View File

@@ -2,8 +2,8 @@
name: 🔎 Lint Yaml
on:
workflow_dispatch:
workflow_call:
pull_request:
types: [ opened, synchronize, reopened ]
jobs:
lint_yaml:

View File

@@ -1,16 +0,0 @@
name: ⬇️ PR Updated
on:
pull_request:
types: [opened, synchronize, reopened]
jobs:
call_gradle_check:
name: ☎️ Call Gradle Check
uses: ./.github/workflows/check_gradle_all.yaml
secrets: inherit
call_lint_yaml:
name: ☎️ Call Lint Yaml
uses: ./.github/workflows/lint_yaml.yaml
secrets: inherit

View File

@@ -1,14 +0,0 @@
name: ✅ PR Updated Completed
on:
workflow_run:
types:
- "completed"
workflows:
- "⬇️ PR Updated"
jobs:
call_comment_on_pr:
name: ☎️ Call Comment on PR
uses: ./.github/workflows/check_gradle_all.yaml
secrets: inherit

View File

@@ -1,49 +0,0 @@
# Publish and release a project when a tag is created.
# TODO: Currently, this only supports plugins.
name: 🏷️ Tag Pushed
on:
push:
tags:
- '*/v*.*.*'
jobs:
split_values:
name: ✂️ Split Values
runs-on: ubuntu-latest
outputs:
version: ${{ steps.split_version.outputs.version }}
project: ${{ steps.split_project.outputs.project }}
steps:
- name: ✂️ Split Project Version
id: split_version
env:
TAG: ${{ github.ref_name }}
run: echo "version=${TAG##*/}" >> $GITHUB_OUTPUT
- name: ✂️ Split Project Name
id: split_project
env:
TAG: ${{ github.ref_name }}
VERSION: ${{steps.split_version.outputs.version }}
run: echo "project=${TAG///$VERSION}" >> $GITHUB_OUTPUT
call_publish_gradle:
needs: split_values
name: ☎️ Call Publish Gradle
uses: ./.github/workflows/publish_gradle_project.yaml
secrets: inherit
with:
category: plugins
project: ${{ needs.split_values.outputs.project }}
call_release_gradle:
needs: split_values
name: ☎️ Call Release Gradle
uses: ./.github/workflows/release_gradle_project.yaml
secrets: inherit
with:
category: plugins
project: ${{ needs.split_values.outputs.project }}

View File

@@ -0,0 +1,82 @@
# Publish a container
name: 🐋 Container | Publish
on:
push:
tags:
- 'containers/*/v*.*.*'
jobs:
determine_values:
name: 🔎 Determine Values
runs-on: ubuntu-latest
outputs:
category: ${{ steps.determine_values.outputs.category }}
version: ${{ steps.determine_values.outputs.version }}
project: ${{ steps.determine_values.outputs.project }}
steps:
- name: 🔎 Determine Project Values
id: determine_values
env:
TAG: ${{ github.ref_name }}
run: |
category=${TAG%%/*}
echo "category=${category}"
echo "category=${category}" >> $GITHUB_OUTPUT
version=${TAG##*/}
echo "version=${version}"
echo "version=${version}" >> $GITHUB_OUTPUT
project=${TAG#*/}
project=${project%/*}
echo "project=${project}"
echo "project=${project}" >> $GITHUB_OUTPUT
publish_container:
name: 🐋 Publish Container
needs: determine_values
runs-on: ubuntu-latest
permissions:
contents: write
packages: write
steps:
- name: 🚩 Checkout Repo
uses: actions/checkout@v4
- name: 🔎 Introspect metadata
id: metadata
uses: docker/metadata-action@v5
with:
images: |
ghcr.io/civmc/civ/${{needs.determine_values.outputs.project}}
tags: |
type=raw,value=latest,enable=${{ endsWith(github.ref, github.event.repository.default_branch) }}
type=ref,event=branch
type=semver,pattern={{version}},value=${{needs.determine_values.outputs.version}}
type=semver,pattern={{major}}.{{minor}},value=${{needs.determine_values.outputs.version}}
type=semver,pattern={{major}},value=${{needs.determine_values.outputs.version}}
- name: 🪵 Login to Github Packages
if: github.event_name != 'pull_request'
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: 🗃️ Create/Update Release
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ needs.determine_values.outputs.category }}/${{ needs.determine_values.outputs.project }}/${{ needs.determine_values.outputs.version }}
- name: 🐳 Build and push
uses: docker/build-push-action@v5
with:
context: containers/${{needs.determine_values.outputs.project}}
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.metadata.outputs.tags }}
labels: ${{ steps.metadata.outputs.labels }}

View File

@@ -1,36 +1,47 @@
# Publish a project to maven
# Release a gradle project
# Publish to maven, and create/update
name: 🐘 Gradle | Publish Project
on:
workflow_dispatch:
inputs:
category:
required: true
description: 'The category of project'
type: choice
options:
- plugins
project:
required: true
description: 'The project to publish'
type: string
workflow_call:
inputs:
category:
required: true
description: 'The category of project'
type: string
project:
required: true
description: 'The project to publish'
type: string
push:
tags:
- 'plugins/*/v*.*.*'
jobs:
determine_values:
name: 🔎 Determine Values
runs-on: ubuntu-latest
outputs:
category: ${{ steps.determine_values.outputs.category }}
version: ${{ steps.determine_values.outputs.version }}
project: ${{ steps.determine_values.outputs.project }}
steps:
- name: 🔎 Determine Project Values
id: determine_values
env:
TAG: ${{ github.ref_name }}
run: |
category=${TAG%%/*}
echo "category=${category}"
echo "category=${category}" >> $GITHUB_OUTPUT
version=${TAG##*/}
echo "version=${version}"
echo "version=${version}" >> $GITHUB_OUTPUT
project=${TAG#*/}
project=${project%/*}
echo "project=${project}"
echo "project=${project}" >> $GITHUB_OUTPUT
publish_gradle:
name: 🐘 Publish Gradle
runs-on: ubuntu-latest
needs: determine_values
permissions:
contents: read
contents: write
packages: write
steps:
@@ -46,10 +57,25 @@ jobs:
java-version: '17'
distribution: 'temurin'
# TODO: Bump version if not already done
- name: 🐘 Gradle Build
uses: gradle/gradle-build-action@v2
env:
CI: true
with:
arguments: "${{needs.determine_values.outputs.category}}:${{needs.determine_values.outputs.project}}:build --scan"
- name: 🗃️ Create/Update Release
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ needs.determine_values.outputs.category }}/${{ needs.determine_values.outputs.project }}/${{ needs.determine_values.outputs.version }}
files: '${{needs.determine_values.outputs.category}}/${{needs.determine_values.outputs.project}}/build/libs/*'
- name: 🐘 Gradle Publish
uses: gradle/gradle-build-action@v2
env:
CI: true
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
arguments: "${{inputs.category}}:${{inputs.project}}:publish --scan"
arguments: "${{needs.determine_values.outputs.category}}:${{needs.determine_values.outputs.project}}:publish --scan"

View File

@@ -1,58 +0,0 @@
# Attach artifacts to a github release
name: 🐘 Gradle | Release Project
on:
workflow_dispatch:
inputs:
category:
required: true
description: 'The category of project'
type: choice
options:
- plugins
project:
required: true
description: 'The project to build'
type: string
workflow_call:
inputs:
category:
required: true
description: 'The category of project'
type: string
project:
required: true
description: 'The project to build'
type: string
jobs:
release_gradle:
name: 🐘 Release Gradle
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: 🚩 Checkout Repo
uses: actions/checkout@v4
- name: ❓ Ensure Wrapper Permissions
run: chmod +x ./gradlew
- name: ☕ Setup Java
uses: actions/setup-java@v3
with:
java-version: '17'
distribution: 'temurin'
- name: 🐘 Gradle Build
uses: gradle/gradle-build-action@v2
env:
CI: true
with:
arguments: "${{inputs.category}}:${{inputs.project}}:build --scan"
- name: 🗃️ Create Release
uses: softprops/action-gh-release@v1
with:
files: '${{inputs.category}}/${{inputs.project}}/build/libs/*'

4
.gitignore vendored
View File

@@ -34,3 +34,7 @@ build
run
temp
### Docker ###
containers/data

25
README.md Normal file
View File

@@ -0,0 +1,25 @@
# Civ
This monorepo will eventually contain all civ projects and development
## Developing Locally
### Plugins
### Containers
A docker compose stack is provided to help test containers built from
this repo. To start the stack, run the following command:
`docker compose up --build`. Please note that this stack is NOT suitable for production use.
Optional services may be started by enabling the profile flag, e.g. `--profile <name>`
Current services and exposed ports are:
| Name | Ports | Description | Profile |
|----------|-------|---------------------|------------|
| pvp | | | |
| mariadb | 3306 | TCP, Database | |
| postgres | 5432 | TCP, Database | |
| rabbitmq | 5672 | TCP, AMQP | |
| | 15672 | HTTP, Management UI | |
| grafana | 3000 | HTTP, Grafana UI | monitoring |

View File

@@ -0,0 +1,9 @@
# TODO: Can't figure this out yet. Manually impory the dashboard.
#apiVersion: 1
#
#providers:
# - name: 'dashboards'
# options:
# path:
# /etc/grafana/provisioning/dashboards/files

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,13 @@
apiVersion: 1
datasources:
- name: InfluxDB
type: influxdb
access: proxy
url: ${CIV_INFLUX_HOST}
secureJsonData:
token: ${CIV_INFLUX_TOKEN}
jsonData:
version: Flux
organization: ${CIV_INFLUX_ORG}
tlsSkipVerify: true

View File

@@ -0,0 +1,27 @@
CREATE DATABASE donum;
CREATE DATABASE banstick;
CREATE DATABASE bastion;
CREATE DATABASE citadel;
CREATE DATABASE civchat2;
CREATE DATABASE civduties;
CREATE DATABASE jukealert;
CREATE DATABASE namelayer;
CREATE DATABASE civmodcore;
CREATE DATABASE castlegates;
CREATE DATABASE essenceglue;
CREATE DATABASE exilepearl;
CREATE DATABASE realisticbiomes;
GRANT ALL PRIVILEGES ON `donum`.* TO 'mariadb'@'%';
GRANT ALL PRIVILEGES ON `banstick`.* TO 'mariadb'@'%';
GRANT ALL PRIVILEGES ON `bastion`.* TO 'mariadb'@'%';
GRANT ALL PRIVILEGES ON `citadel`.* TO 'mariadb'@'%';
GRANT ALL PRIVILEGES ON `civchat2`.* TO 'mariadb'@'%';
GRANT ALL PRIVILEGES ON `civduties`.* TO 'mariadb'@'%';
GRANT ALL PRIVILEGES ON `jukealert`.* TO 'mariadb'@'%';
GRANT ALL PRIVILEGES ON `namelayer`.* TO 'mariadb'@'%';
GRANT ALL PRIVILEGES ON `civmodcore`.* TO 'mariadb'@'%';
GRANT ALL PRIVILEGES ON `castlegates`.* TO 'mariadb'@'%';
GRANT ALL PRIVILEGES ON `essenceglue`.* TO 'mariadb'@'%';
GRANT ALL PRIVILEGES ON `exilepearl`.* TO 'mariadb'@'%';
GRANT ALL PRIVILEGES ON `realisticbiomes`.* TO 'mariadb'@'%';

View File

@@ -0,0 +1,6 @@
CREATE DATABASE kira;
CREATE DATABASE luckperms;
CREATE DATABASE civspy;
\c civspy;
CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;

24
containers/pvp/Dockerfile Normal file
View File

@@ -0,0 +1,24 @@
# Pin to java17
FROM itzg/minecraft-server@sha256:346cb47929edc36e977f3b064f882a9c919df65fe4807ac35c05fdacf442822f
# https://github.com/itzg/docker-minecraft-server/blob/master/README.md#versions
ENV VERSION=1.18.2
# https://github.com/itzg/docker-minecraft-server#optional-plugins-mods-and-config-attach-points
COPY plugins /plugins
ENV REMOVE_OLD_MODS=TRUE
# https://github.com/itzg/docker-minecraft-server#optional-plugins-mods-and-config-attach-points
COPY config /config
ENV COPY_CONFIG_DEST=/data
ENV SYNC_SKIP_NEWER_IN_DESTINATION=false
# https://github.com/itzg/docker-minecraft-server#running-a-paper-server
ENV TYPE=PAPER
ENV EULA=TRUE
ENV USE_AIKAR_FLAGS=TRUE
# https://github.com/itzg/docker-minecraft-server#replacing-variables-inside-configs
ENV REPLACE_ENV_DURING_SYNC=TRUE
ENV REPLACE_ENV_VARIABLE_PREFIX=CIV
ENV CIV_WHITELIST=false

View File

@@ -0,0 +1,32 @@
[
{
"uuid": "771e81cd-2f11-43b4-bd86-731fe468f131",
"name": "Wingzero54",
"level": 4,
"bypassesPlayerLimit": true
},
{
"uuid": "54b84e38-ac83-43c0-b285-8c7163343488",
"name": "Ahrimanne",
"level": 4,
"bypassesPlayerLimit": true
},
{
"uuid": "6e8e4f6f-a414-4f13-962c-6d914363788a",
"name": "SoundTech",
"level": 4,
"bypassesPlayerLimit": true
},
{
"uuid": "82569b12-c44c-4864-8a73-85a9192ee8f9",
"name": "RedDevel",
"level": 4,
"bypassesPlayerLimit": true
},
{
"uuid": "2c7c20f7-8472-4780-9b35-4cd4fae460c6",
"name": "Okx",
"level": 4,
"bypassesPlayerLimit": true
}
]

View File

@@ -0,0 +1,226 @@
# https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Header-&-Footer
header-footer:
enabled: true
disable-in-worlds:
- disabledworld
header:
- '&6&kAAAA&r&6&l Welcome to CivMC! &r&6&kAAAA'
- "&7Online players: &f%online%"
footer:
- '&9Modmail at &6reddit.com/r/civmc'
- '&a%tps% TPS &r&6discord.gg/nDnsU6vJqg'
- '&cPatreon: &6patreon.com/Civ_MC'
- '&6Admins: Wingzero54, Ahrimanne, SoundTech, RedDevel, Okx'
per-world:
world1:
header:
- "an example of world with custom"
footer:
- "header/footer and prefix/suffix"
world2;world3:
header:
- "This is a shared header for"
- "world2 and world3"
# https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Tablist-name-formatting
tablist-name-formatting:
enabled: true
align-tabsuffix-on-the-right: false
character-width-overrides: {}
anti-override: true
disable-in-worlds:
- disabledworld
# https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Nametags
scoreboard-teams:
enabled: false
enable-collision: true
invisible-nametags: false
anti-override: true
# https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Sorting-players-in-tablist
sorting-types:
- "GROUPS:owner,admin,mod,helper,builder,vip,default"
- "PLACEHOLDER_A_TO_Z:%player%"
case-sensitive-sorting: true
disable-in-worlds:
- disabledworld
# https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Unlimited-nametag-mode
unlimited-nametag-mode:
enabled: false
use-marker-tag-for-1-8-x-clients: false
disable-on-boats: true
space-between-lines: 0.22
disable-in-worlds:
- disabledworld
dynamic-lines:
- abovename
- nametag #the original one, combination of tagprefix + customtagname + tagsuffix
- belowname
- another
static-lines:
myCustomLine: 0.66
# https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Yellow-number
yellow-number-in-tablist:
enabled: false
value: "%ping%"
disable-in-worlds:
- disabledworld
# https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Belowname
belowname-objective:
enabled: false
number: "%health%"
text: "&cHealth"
disable-in-worlds:
- disabledworld
# https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Spectator-fix
prevent-spectator-effect:
enabled: false
# https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Bossbar
bossbar:
enabled: false
toggle-command: /bossbar
remember-toggle-choice: false
hidden-by-default: false
disable-in-worlds:
- disabledworld
bars:
ServerInfo:
style: "PROGRESS" # for 1.9+: PROGRESS, NOTCHED_6, NOTCHED_10, NOTCHED_12, NOTCHED_20
color: "%animation:barcolors%" # for 1.9+: BLUE, GREEN, PINK, PURPLE, RED, WHITE, YELLOW
progress: "100" # in %
text: "&fWebsite: &bwww.domain.com"
# https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Per-world-playerlist
per-world-playerlist:
enabled: false
# players with tab.staff will always see all players
allow-bypass-permission: false
# players in these worlds will always see all players
ignore-effect-in-worlds:
- ignoredworld
- build
shared-playerlist-world-groups:
lobby:
- lobby1
- lobby2
minigames:
- paintball
- bedwars
# https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Scoreboard
scoreboard:
enabled: false
toggle-command: /sb
remember-toggle-choice: false
hidden-by-default: false
use-numbers: false
static-number: 0
delay-on-join-milliseconds: 0
respect-other-plugins: true
disable-in-worlds:
- disabledworld
scoreboards:
admin:
# Only players with tab.scoreboard.admin can see this scoreboard, others will see scoreboard1
display-condition: "permission:tab.scoreboard.admin"
title: "Admin scoreboard"
lines:
- "%animation:MyAnimation1%"
- "&6Online:"
- "* &eOnline&7: &f%online%&7/&4%maxplayers%"
- "* &eCurrent World&7: &f%worldonline%"
- "* &eStaff&7: &f%staffonline%"
- " "
- "&6Server Info:"
- "* &bTPS&7: %tps%"
- "* &bUptime&7: &f%server_uptime%"
- "* &bMemory&7: &f%memory-used%&7/&4%memory-max%"
- "%animation:MyAnimation1%"
scoreboard1:
title: "Default"
lines:
- "%animation:MyAnimation1%"
- "&6My Stats:"
- "* &eKills&7: &f%statistic_player_kills%"
- "* &eDeaths&7: &f%statistic_deaths%"
- "* &eHealth&7: &f%health%"
- " "
- "&6Personal Info:"
- "* &bRank&7: &f%group%"
- "* &bPing&7: &f%ping%&7ms"
- "* &bWorld&7: &f%world%"
- "%animation:MyAnimation1%"
# https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Ping-Spoof
ping-spoof:
enabled: true
value: 0
# https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Pet-name-fix
fix-pet-names:
enabled: false
placeholders:
date-format: "dd.MM.yyyy"
time-format: "[HH:mm:ss / h:mm a]"
time-offset: 0
register-tab-expansion: false
# https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Placeholder-output-replacements
placeholder-output-replacements:
"%essentials_vanished%":
"yes": "&7| Vanished"
"no": ""
"%afk%":
true: " &o[AFK]&r"
false: ""
"%essentials_nickname%":
"%essentials_nickname%": "%player%" #placeholder did not parse correctly, show real name instead
# https://github.com/NEZNAMY/TAB/wiki/Feature-guide:-Conditional-placeholders
conditions:
nick: # use it with %condition:nick%
conditions:
- "%player%=%essentials_nickname%"
yes: "%player%"
no: "~%essentials_nickname%"
placeholderapi-refresh-intervals:
default-refresh-interval: 500
server:
"%server_uptime%": 1000
"%server_tps_1_colored%": 1000
"%server_unique_joins%": 5000
player:
"%player_health%": 200
"%player_ping%": 1000
"%vault_prefix%": 1000
relational:
"%rel_factionsuuid_relation_color%": 1000
# assigning groups by permission nodes instead of taking them from permission plugin
assign-groups-by-permissions: false
# if the option above is true, all groups are taken based on permissions and the one higher in this list is used as primary
# Warning! This is not sorting list and has nothing to do with sorting players in tablist!
primary-group-finding-list:
- Owner
- Admin
- Mod
- Helper
- default
debug: false
# https://github.com/NEZNAMY/TAB/wiki/MySQL
mysql:
enabled: false
host: 127.0.0.1
port: 3306
database: tab
username: user
password: password

Binary file not shown.

117
docker-compose.yml Normal file
View File

@@ -0,0 +1,117 @@
version: '3.9'
# Development stack for Civ. This stack can be used to develop and test the server and plugins locally.
# Please note that this stack is NOT suitable for production use, as it exposes all service ports, and uses default passwords.
services:
#################
### Minecraft ###
#################
pvp:
build: containers/pvp
restart: unless-stopped
tty: true
stdin_open: true
depends_on:
mariadb:
condition: service_healthy
postgres:
condition: service_healthy
environment:
INIT_MEMORY: 1G
MAX_MEMORY: 5G
CIV_SERVER_NAME: local-pvp
CIV_MYSQL_HOST: mariadb
CIV_MYSQL_USERNAME: mariadb
CIV_MYSQL_PASSWORD: mariadb
CIV_POSTGRES_HOST: postgres
CIV_POSTGRES_USERNAME: postgres
CIV_POSTGRES_PASSWORD: postgres
CIV_RABBITMQ_HOST: rabbitmq
CIV_RABBITMQ_USERNAME: rabbitmq
CIV_RABBITMQ_PASSWORD: rabbitmq
volumes:
- ./containers/data/pvp:/data
#################
### Databases ###
#################
mariadb:
image: mariadb:10.7.1
restart: unless-stopped
command: --max-connections 500
healthcheck:
test: [ "CMD-SHELL", 'mysqladmin ping --user "$$MYSQL_USER" --password="$$MYSQL_PASSWORD"' ]
timeout: 20s
retries: 10
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: mariadb
MYSQL_USER: mariadb
MYSQL_PASSWORD: mariadb
MYSQL_DATABASE: mariadb
volumes:
- ./containers/provisioning/mariadb/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
- ./containers/data/mariadb:/var/lib/mysql
postgres:
image: timescale/timescaledb:latest-pg14
restart: unless-stopped
healthcheck:
test: [ "CMD-SHELL", 'pg_isready -U "$$POSTGRES_USER"' ]
interval: 10s
timeout: 5s
retries: 5
ports:
- "5432:5432"
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: postgres
volumes:
- ./containers/provisioning/postgres/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
- ./containers/data/postgres:/var/lib/postgresql/data
rabbitmq:
image: rabbitmq:3.9.16-management
restart: unless-stopped
healthcheck:
test: [ "CMD", "rabbitmq-diagnostics", "ping" ]
interval: 60s
timeout: 10s
retries: 5
ports:
- "5672:5672"
- "15672:15672"
environment:
RABBITMQ_DEFAULT_USER: rabbitmq
RABBITMQ_DEFAULT_PASS: rabbitmq
##################
### Monitoring ###
##################
grafana:
image: grafana/grafana-oss:latest
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
profiles:
- monitoring
ports:
- "3000:3000"
environment:
CIV_INFLUX_HOST: http://influx:8086
CIV_INFLUX_ORG: CivMC
CIV_INFLUX_TOKEN: admintoken
volumes:
- ./containers/provisioning/grafana:/etc/grafana/provisioning