Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
5988c46
Updated cicd-prod.server.yml to copy the new monitoring folder
Jacob-Sonne Apr 29, 2026
b737047
removed promtail global mode
Jacob-Sonne Apr 29, 2026
15beaf4
changes...
Jacob-Sonne May 8, 2026
0e734f3
Changing Makefile to deploy minitwit api/web/nginx and monitoring in …
Jacob-Sonne May 8, 2026
e56d16e
Made changes to Makefile and minitwit_simulator.py so we can spin up …
Jacob-Sonne May 8, 2026
5885a99
working metrics ready to merge into logging_final
Jacob-Sonne May 10, 2026
1083d7c
Merge branch 'feature/logging_final' into feature/metrics-exporter
Jacob-Sonne May 10, 2026
91aa658
Merge pull request #232 from sebsthiel/feature/metrics-exporter
Jacob-Sonne May 10, 2026
2b06d01
Done with dashboards and monitoring/logging changes
Jacob-Sonne May 10, 2026
0e2fe89
Merge branch 'develop' into feature/logging_final
Jacob-Sonne May 14, 2026
6d4aeee
Update report PDF
invalid-email-address May 14, 2026
5779933
Comment out .env file inclusion
Jacob-Sonne May 14, 2026
bf159de
Replace hardcoded Discord webhook URL with env variable
Jacob-Sonne May 14, 2026
a2b0b40
Add loading webhook secret when deploymonitoring target to Makefile
Jacob-Sonne May 14, 2026
e3c4196
Add DISCORD_WEBHOOK_URL to Grafana environment
Jacob-Sonne May 14, 2026
9e2faf4
Merge branch 'develop' into feature/logging_final
sebsthiel May 14, 2026
09f4331
update replicas
sebsthiel May 14, 2026
742a263
Disable Grafana proxy configuration
Jacob-Sonne May 14, 2026
999d593
Merge pull request #234 from sebsthiel/feature/logging_final
Jacob-Sonne May 14, 2026
e7dfe45
Update report PDF
invalid-email-address May 14, 2026
048d1db
Merge pull request #236 from sebsthiel/update-replicas
AdamBdamCdam May 14, 2026
dc2d3be
Merge pull request #233 from sebsthiel/develop
sebsthiel May 14, 2026
511918b
Update report PDF
invalid-email-address May 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .github/workflows/cicd-prod.server.yml
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,7 @@ jobs:
tags: ${{ secrets.DOCKER_USERNAME }}/minitwitapiimage:latest
cache-from: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/minitwitapiimage:webbuildcache
cache-to: type=registry,ref=${{ secrets.DOCKER_USERNAME }}/minitwitapiimage:webbuildcache,mode=max



- name: Build and push minitwitwebimage
uses: docker/build-push-action@v7
with:
Expand Down
73 changes: 66 additions & 7 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,14 @@
.PHONY: staticcheck gofmt hadolint analysis checkmake all runlocalswarm buildlocal swarm createnetwork env deploy clean test
.PHONY: staticcheck gofmt hadolint analysis checkmake all runlocalswarm buildlocal swarm createnetwork env deploy clean test delete_all_volumes

# Use ONE shell per recipe. Does not work across recipes.
.ONESHELL:
SHELL := /bin/bash

# Make .env variables accessible to all recipes with $(VARIABLE_NAME)
# include .env

# Export all make variables to shell. Recipes can use $VARIABLE_NAME. Especially useful if we use python scripts to run stuff as we might want to expose variables instead of passing them.
# export

all: staticcheck gofmt hadolint checkmake semgrep

Expand All @@ -9,7 +19,6 @@ staticcheck:
go install honnef.co/go/tools/cmd/staticcheck@latest
staticcheck ./...


gofmt:
gofmt -l .

Expand All @@ -28,7 +37,7 @@ STACK_NAME=minitwit
MONITORING_STACK=monitoring
NETWORK=minitwit-network

runlocalswarm: buildlocal initswarm createnetwork setenv deploywebapi
runlocalswarm: buildlocal initswarm createnetwork deploywebapi

buildlocal:
docker build -t minitwit-api:dev -f Dockerfile.api .
Expand All @@ -44,18 +53,68 @@ createnetwork:
echo "Creating overlay network..."; docker network create --driver overlay --attachable $(NETWORK); \
else echo "Network already exists"; fi

setenv:
@set -a && [ -f .env ] && . ./.env || true && set +a

deploywebapi:
@set -a; source .env; set +a;
docker compose -f docker-compose.local-db.yml up -d
docker stack deploy -c docker-compose.develop.yml $(STACK_NAME)

deploymonitoring:
@set -a; source .env; set +a;
docker stack deploy -c docker-compose.monitoring.yml $(MONITORING_STACK)

clean:
docker stack rm $(STACK_NAME) || true
docker stack rm $(MONITORING_STACK) || true
docker compose -f docker-compose.local-db.yml down || true
docker network rm $(NETWORK);
docker network rm $(NETWORK) || true;

delete_grafana_volume:
docker volume rm monitoring_grafana-storage

delete_loki_volume:
docker volume rm monitoring_loki-storage

delete_prometheus_volume:
docker volume rm monitoring_prometheus-storage

delete_all_volumes: delete_grafana_volume delete_loki_volume delete_prometheus_volume

deployall: createnetwork buildlocal initswarm deploywebapi deploymonitoring
watch -n 2 docker service ls

deploy_local_simulator:
cd ./test
python3 minitwit_simulator.py http://127.0.0.1/api

service_watch:
watch -n 2 docker service ls

log_web:
docker service logs minitwit_web -f --tail 20

log_api:
docker service logs minitwit_api -f --tail 20

log_proxy:
docker service logs minitwit_nginx -f --tail 20

log_grafana:
docker service logs monitoring_grafana -f --tail 20

log_loki:
docker service logs monitoring_loki -f --tail 20

log_prometheus:
docker service logs monitoring_prometheus -f --tail 20

log_promtail:
docker service logs monitoring_promtail -f --tail 20

# Used to cleanup VM by removing: unused images, stopped containers, unused volumes, build cache
# and other temporary files.
aggressive_docker_clean:
docker system df
docker system prune -a --volumes
sudo journalctl --vacuum-size=100M
sudo apt-get clean
sudo apt-get autoremove -y
14 changes: 7 additions & 7 deletions docker-compose.monitoring.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,14 @@ services:
environment:
- GF_SERVER_ROOT_URL=https://minitwit-devops.tech/grafana
- GF_SERVER_SERVE_FROM_SUB_PATH=true
- DISCORD_WEBHOOK_URL=${DISCORD_WEBHOOK_URL}
depends_on:
- prometheus
- loki
volumes:
- ./monitoring/grafana/datasource.yml:/etc/grafana/provisioning/datasources/datasource.yml
- ./monitoring/grafana/provisioning/dashboards:/etc/grafana/provisioning/dashboards
- ./monitoring/grafana/dashboards:/var/lib/grafana/dashboards
- grafana-storage:/var/lib/grafana
- ./monitoring/grafana/provisioning:/etc/grafana/provisioning
- ./monitoring/grafana/dashboards:/var/lib/grafana/dashboards
networks:
- minitwit-network
deploy:
Expand Down Expand Up @@ -83,8 +83,8 @@ services:
deploy:
mode: global
labels:
- "prometheus-job=cadvisor"
- "prometheus-port=8080"
- "prometheus_job=cadvisor"
- "prometheus_port=8080"

node_exporter:
image: quay.io/prometheus/node-exporter:latest
Expand All @@ -99,8 +99,8 @@ services:
deploy:
mode: global
labels:
- "prometheus-job=node_exporter"
- "prometheus-port=9100"
- "prometheus_job=node_exporter"
- "prometheus_port=9100"

networks:
# Network shared between services so we can refer to them by name
Expand Down
15 changes: 11 additions & 4 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ services:
timeout: 10s
retries: 3
deploy:
replicas: 6
replicas: 3
restart_policy:
condition: on-failure
update_config:
Expand All @@ -38,7 +38,7 @@ services:
timeout: 10s
retries: 3
deploy:
replicas: 3
replicas: 2
restart_policy:
condition: on-failure
update_config:
Expand All @@ -62,9 +62,16 @@ services:
networks:
- minitwit-network
deploy:
replicas: 2
restart_policy:
condition: on-failure
update_config:
parallelism: 1
delay: 10s
failure_action: rollback
placement:
constraints:
- node.role == manager
preferences:
- spread: node.role

networks: # Network shared between services so we can refer to them by name
minitwit-network:
Expand Down
Loading
Loading