diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..1d161ee --- /dev/null +++ b/Makefile @@ -0,0 +1,25 @@ +.PHONY: format help + +# Help system from https://marmelab.com/blog/2016/02/29/auto-documented-makefile.html +.DEFAULT_GOAL := help + +help: + @grep -E '^[a-zA-Z0-9_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' + +up: ## Build and run the required containers by fetching binaries + docker-compose -f docker-compose.nocompile.yaml up -d + +up-full: ## Build and run the required containers by compiling source + docker-compose -f docker-compose.compile.yaml up -d + +down: ## Stop the containers + docker-compose -f docker-compose.nocompile.yaml up -d + +down-full: ## Stop the containers + docker-compose -f docker-compose.compile.yaml up -d + +logs: ## Get logs from the containers + docker-compose -f docker-compose.nocompile.yaml up -d + +logs-full: ## Get logs from the containers + docker-compose -f docker-compose.compile.yaml up -d diff --git a/docker-compose.yaml b/docker-compose.compile.yaml similarity index 94% rename from docker-compose.yaml rename to docker-compose.compile.yaml index 06e91f6..9df04ce 100644 --- a/docker-compose.yaml +++ b/docker-compose.compile.yaml @@ -42,8 +42,8 @@ services: exporter: container_name: exporter build: - context: . - dockerfile: Dockerfile-monerod_exporter + context: dockerfiles + dockerfile: monerod_exporter restart: unless-stopped environment: DAEMON_HOST: http://monerod:18083 @@ -53,8 +53,8 @@ services: monerod: container_name: monerod build: - context: . - dockerfile: Dockerfile-monero + context: dockerfiles + dockerfile: monero_compile args: threads: ${THREADS:-1} volumes: diff --git a/docker-compose.nocompile.yaml b/docker-compose.nocompile.yaml new file mode 100644 index 0000000..9456a38 --- /dev/null +++ b/docker-compose.nocompile.yaml @@ -0,0 +1,68 @@ +version: '3' +volumes: + grafana: + prometheus: +services: + prometheus: + image: prom/prometheus:v2.18.0 + container_name: prometheus + restart: unless-stopped + command: + - --config.file=/etc/prometheus/prometheus.yml + - --storage.tsdb.path=/prometheus + - --web.console.libraries=/usr/share/prometheus/console_libraries + - --web.console.templates=/usr/share/prometheus/consoles + - --web.enable-admin-api + volumes: + - prometheus:/prometheus + - ./files/prometheus:/etc/prometheus + ports: + - 9090:9090 + grafana: + image: grafana/grafana:6.5.0 + container_name: grafana + restart: unless-stopped + ports: + - 3000:3000 + environment: + HOSTNAME: grafana + GF_SECURITY_ADMIN_USER: admin + GF_SECURITY_ADMIN_PASSWORD: ${GRAFANA_PASSWORD} + GF_SERVER_ROOT_URL: ${GRAFANA_URL} + GF_ANALYTICS_REPORTING_ENABLED: "false" + GF_ANALYTICS_CHECK_FOR_UPDATES: "false" + GF_USERS_ALLOW_SIGN_UP: "false" + GF_USERS_ALLOW_ORG_CREATE: "false" + GF_LOG_LEVEL: "debug" + volumes: + - ./files/grafana/dashboards.yaml:/etc/grafana/provisioning/dashboards/default.yaml:ro + - ./files/grafana/prometheus.yaml:/etc/grafana/provisioning/datasources/prometheus.yaml:ro + - ./files/grafana/daemon_metrics.json:/var/lib/grafana/dashboards/daemon_metrics.json:ro + - grafana:/var/lib/grafana + exporter: + container_name: exporter + build: + context: dockerfiles + dockerfile: monerod_exporter + restart: unless-stopped + environment: + DAEMON_HOST: http://monerod:18083 + PORT: 8080 + ports: + - 8080:8080 + monerod: + container_name: monerod + build: + context: dockerfiles + dockerfile: monero_nocompile + args: + threads: ${THREADS:-1} + volumes: + - ${DATA_DIR:-./data}:/data + ports: + - 18080:18080 # p2p + - 18081:18081 # restricted rpc + - 18082:18082 # zmq + - 18083:18083 # unrestricted rpc + command: + monerod --data-dir=/data --p2p-bind-ip=0.0.0.0 --p2p-bind-port=18080 --rpc-restricted-bind-port=18081 --zmq-rpc-bind-ip=0.0.0.0 --zmq-rpc-bind-port=18082 --rpc-bind-ip=0.0.0.0 --rpc-bind-port=18083 --non-interactive --confirm-external-bind --public-node --log-level=0 diff --git a/Dockerfile-monero b/dockerfiles/monero_compile similarity index 86% rename from Dockerfile-monero rename to dockerfiles/monero_compile index 1687cc8..977bf61 100644 --- a/Dockerfile-monero +++ b/dockerfiles/monero_compile @@ -23,12 +23,6 @@ COPY --from=og /opt/monero/build/Linux/_no_branch_/release/bin/monerod /bin/mone COPY --from=og /opt/monero/build/Linux/_no_branch_/release/bin/monero-wallet-cli /bin/monero-wallet-cli COPY --from=og /opt/monero/build/Linux/_no_branch_/release/bin/monero-wallet-rpc /bin/monero-wallet-rpc -RUN adduser --system --group --disabled-password monero && \ - mkdir -p /data && \ - chown -R monero:monero /data - -USER monero - EXPOSE 18080 EXPOSE 18081 EXPOSE 18082 diff --git a/dockerfiles/monero_nocompile b/dockerfiles/monero_nocompile new file mode 100644 index 0000000..4c7a2f8 --- /dev/null +++ b/dockerfiles/monero_nocompile @@ -0,0 +1,39 @@ +FROM ubuntu:19.10 + +ENV MONERO_HASH 2335716555ff0428da0f206a491d9c57b7ae2221d1cfbbb3bf43960d3a2a4dfe +ENV MONERO_DL_URL https://github.com/monero-project/monero/releases/download/v0.17.0.1/monero-linux-x64-v0.17.0.1.tar.bz2 +ENV MONERO_DL_FILE monero.tar.bz2 +ENV MONERO_SUMS_FILE sha256sums + +WORKDIR /opt/monero + +# Update system and install dependencies +# Download Monero binaries from Github +# Confirm hashes match +# Install daemon binary +# Clean up + +RUN apt-get update \ + && apt-get upgrade -y \ + && apt-get install -y tar wget \ + && wget -qO ${MONERO_DL_FILE} ${MONERO_DL_URL} \ + && echo "${MONERO_HASH} ${MONERO_DL_FILE}" > ${MONERO_SUMS_FILE} \ + && sha256sum -c ${MONERO_SUMS_FILE}; \ + if [ "$?" -eq 0 ]; \ + then \ + echo -e "[+] Hashes match - proceeding with container build"; \ + else \ + echo -e "[!] Hashes do not match - exiting"; \ + exit 5; \ + fi \ + && mkdir ./tmp \ + && tar xjf ${MONERO_DL_FILE} -C ./tmp --strip 1 \ + && mv ./tmp/* /usr/local/bin/ \ + && rm -rf ./tmp ${MONERO_SUMS_FILE} ${MONERO_DL_FILE} + +WORKDIR /data + +EXPOSE 18080 +EXPOSE 18081 +EXPOSE 18082 +EXPOSE 18083 diff --git a/Dockerfile-monerod_exporter b/dockerfiles/monerod_exporter similarity index 100% rename from Dockerfile-monerod_exporter rename to dockerfiles/monerod_exporter