Merge branch 'release/2.5.1'
This commit is contained in:
37
db-backup-standalone.sh
Executable file
37
db-backup-standalone.sh
Executable file
@@ -0,0 +1,37 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
# Configuration
|
||||||
|
MONGO_SERVICE="mongo"
|
||||||
|
COMPOSE_FILE="docker-compose-standalone.yaml"
|
||||||
|
|
||||||
|
# stop mongo container while we copy its volume
|
||||||
|
docker compose -f "$COMPOSE_FILE" stop "$MONGO_SERVICE"
|
||||||
|
|
||||||
|
# timestamp for filename
|
||||||
|
TIMESTAMP=$(date +"%Y-%m-%d-%H-%M")
|
||||||
|
|
||||||
|
# backup directory and retention (can be overridden via env)
|
||||||
|
BACKUP_DIR="${BACKUP_DIR:-backups}"
|
||||||
|
KEEP="${KEEP:-7}"
|
||||||
|
|
||||||
|
mkdir -p "$BACKUP_DIR"
|
||||||
|
|
||||||
|
BACKUP_FILE="$BACKUP_DIR/mongo-volume-backup-$TIMESTAMP.tar.gz"
|
||||||
|
|
||||||
|
sudo tar -czvpf "$BACKUP_FILE" mongo-volume
|
||||||
|
|
||||||
|
# rotate old backups: keep only the newest $KEEP files
|
||||||
|
if [ "$KEEP" -gt 0 ]; then
|
||||||
|
# gather files sorted newest-first
|
||||||
|
mapfile -t files < <(ls -1t "$BACKUP_DIR"/mongo-volume-backup-*.tar.gz 2>/dev/null || true)
|
||||||
|
if [ "${#files[@]}" -gt "$KEEP" ]; then
|
||||||
|
for f in "${files[@]:$KEEP}"; do
|
||||||
|
echo "Removing old backup: $f"
|
||||||
|
rm -f -- "$f"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# bring mongo container back up
|
||||||
|
docker compose -f "$COMPOSE_FILE" start "$MONGO_SERVICE"
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# print menu: (1) deploy stack, (2) follow logs of "web-app" service, (3) remove stack
|
|
||||||
echo "1. Deploy stack"
|
|
||||||
echo "2. Follow logs of 'web-app' service"
|
|
||||||
echo "3. Remove stack"
|
|
||||||
echo ""
|
|
||||||
echo "Ctrl+C to exit"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# read user input
|
|
||||||
read -p "Enter your choice: " -n 1 -r
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
# deploy stack
|
|
||||||
if [ $REPLY -eq 1 ]
|
|
||||||
then
|
|
||||||
#docker stack deploy -c docker-compose-deploy.yml utility-bills-tracker
|
|
||||||
HOSTNAME=0.0.0.0 \
|
|
||||||
NEXTAUTH_URL=https://rezije.app \
|
|
||||||
docker stack deploy \
|
|
||||||
-c docker-compose-deploy.yml utility-bills-tracker
|
|
||||||
fi
|
|
||||||
|
|
||||||
# follow logs of "web-app" service
|
|
||||||
if [ $REPLY -eq 2 ]
|
|
||||||
then
|
|
||||||
docker service logs -f utility-bills-tracker_web-app
|
|
||||||
fi
|
|
||||||
|
|
||||||
# remove stack
|
|
||||||
if [ $REPLY -eq 3 ]
|
|
||||||
then
|
|
||||||
docker stack rm utility-bills-tracker
|
|
||||||
fi
|
|
||||||
|
|
||||||
# go back to menu
|
|
||||||
./debug-deploy.sh
|
|
||||||
18
deploy-standalone.sh
Executable file
18
deploy-standalone.sh
Executable file
@@ -0,0 +1,18 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
if [ "$1" == "" ] ; then
|
||||||
|
printf "\nDocker image-a version param missing"
|
||||||
|
printf "\n\nSyntax:\n\n deploy-standalone.sh 1.0.0\n\n"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "\nBUILD START ...\n\n"
|
||||||
|
|
||||||
|
IMAGE_VERSION=$1
|
||||||
|
COMPOSE_FILE="docker-compose-standalone.yaml"
|
||||||
|
|
||||||
|
echo "Deploying with image version: $IMAGE_VERSION"
|
||||||
|
|
||||||
|
# Pass IMAGE_VERSION env var for compose variable substitution
|
||||||
|
IMAGE_VERSION="$IMAGE_VERSION" docker compose \
|
||||||
|
-f "$COMPOSE_FILE" \
|
||||||
|
up -d
|
||||||
@@ -1,17 +1,18 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
if [ "$1" == "" ] ; then
|
if [ "$1" == "" ] ; then
|
||||||
printf "\nNisi zadao verziju Docker image-a koji treba deployati"
|
printf "\nDocker image-a version param missing"
|
||||||
printf "\n\nSintaksa:\n\n deploy.sh 1.0.0\n\n"
|
printf "\n\nSyntax:\n\n deploy-swarm.sh 1.0.0\n\n"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
printf "\nBUILD START ...\n\n"
|
printf "\nBUILD START ...\n\n"
|
||||||
|
|
||||||
IMAGE_VERSION=$1
|
IMAGE_VERSION=$1
|
||||||
|
COMPOSE_FILE="docker-compose-swarm.yml"
|
||||||
|
|
||||||
echo "Deploying $STACK_NAME with image version: $IMAGE_VERSION"
|
echo "Deploying with image version: $IMAGE_VERSION"
|
||||||
|
|
||||||
# Pass IMAGE_VERSION env var for compose variable substitution
|
# Pass IMAGE_VERSION env var for compose variable substitution
|
||||||
IMAGE_VERSION="$IMAGE_VERSION" docker stack deploy \
|
IMAGE_VERSION="$IMAGE_VERSION" docker stack deploy \
|
||||||
-c docker-compose-deploy.yml \
|
-c "$COMPOSE_FILE" \
|
||||||
utility-bills-tracker
|
utility-bills-tracker
|
||||||
15
deploy.sh
15
deploy.sh
@@ -1,15 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
if [ "$1" == "" ] ; then
|
|
||||||
printf "\nNisi zadao verziju Docker image-a koji treba deployati"
|
|
||||||
printf "\n\nSintaksa:\n\n deploy.sh 1.0.0\n\n"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
printf "\nBUILD START ...\n\n"
|
|
||||||
|
|
||||||
IMAGE_VERSION=$1
|
|
||||||
|
|
||||||
echo "Deploying $STACK_NAME with image version: $IMAGE_VERSION"
|
|
||||||
|
|
||||||
# Pass IMAGE_VERSION env var for compose variable substitution
|
|
||||||
IMAGE_VERSION="$IMAGE_VERSION" docker compose up -d
|
|
||||||
@@ -1,77 +0,0 @@
|
|||||||
# this compose file runs Postgres db and exposes it's port to the host machine
|
|
||||||
version: "3.7"
|
|
||||||
|
|
||||||
networks:
|
|
||||||
traefik-network:
|
|
||||||
name: "traefik-network"
|
|
||||||
external: true
|
|
||||||
util-bills-mongo-network:
|
|
||||||
name: "util-bills-mongo-network"
|
|
||||||
attachable: false
|
|
||||||
external: false
|
|
||||||
internal: true
|
|
||||||
|
|
||||||
services:
|
|
||||||
app:
|
|
||||||
image: utility-bills-tracker:${IMAGE_VERSION}
|
|
||||||
networks:
|
|
||||||
- traefik-network
|
|
||||||
- util-bills-mongo-network
|
|
||||||
volumes:
|
|
||||||
- ./etc/hosts/:/etc/hosts
|
|
||||||
environment:
|
|
||||||
MONGODB_URI: mongodb://rezije.app:w4z4piJBgCdAm4tpawqB@mongo:27017/utility-bills
|
|
||||||
GOOGLE_ID: 355397364527-adjrokm6hromcaaar0qfhk050mfr35ou.apps.googleusercontent.com
|
|
||||||
GOOGLE_SECRET: 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
|
|
||||||
AUTH_SECRET: Gh0jQ35oq6DR8HkLR3heA8EaEDtxYN/xkP6blvukZ0w=
|
|
||||||
LINKEDIN_ID: 776qlcsykl1rag
|
|
||||||
LINKEDIN_SECRET: ugf61aJ2iyErLK40
|
|
||||||
HOSTNAME: rezije.app # IP address at which the server will be listening (0.0.0.0 = listen on all addresses)
|
|
||||||
NEXTAUTH_URL: https://rezije.app # URL next-auth will use while redirecting user during authentication (if not set - will use HOSTNAME)
|
|
||||||
PORT: ${PORT:-80}
|
|
||||||
deploy:
|
|
||||||
# u slucaju rušenja kontejnera čekamo 5s i dižemo novi kontejner => ako se i on sruši opet ceka 5s i pokusava ponovno (tako 5 puta)
|
|
||||||
restart_policy:
|
|
||||||
condition: any
|
|
||||||
delay: 5s
|
|
||||||
max_attempts: 0 # u slučaju rušenja containera pokušavaj ga pokrenuti dok ne uspije = BESKONAČNO
|
|
||||||
labels:
|
|
||||||
- traefik.enable=true
|
|
||||||
- traefik.docker.network=traefik-network # mreže preko koje ide komunikacija sa Traefikom
|
|
||||||
- traefik.http.services.web-app.loadbalancer.server.port=80
|
|
||||||
- traefik.http.routers.web-app.entrypoints=http
|
|
||||||
- traefik.http.routers.web-app.rule=Host(`${FQDN:-rezije.app}`)
|
|
||||||
mongo:
|
|
||||||
image: mongo:4.4.27
|
|
||||||
ulimits:
|
|
||||||
nofile:
|
|
||||||
soft: 64000
|
|
||||||
hard: 64000
|
|
||||||
environment:
|
|
||||||
MONGO_INITDB_ROOT_USERNAME: root
|
|
||||||
MONGO_INITDB_ROOT_PASSWORD: example
|
|
||||||
volumes:
|
|
||||||
- ./mongo-volume:/data/db
|
|
||||||
networks:
|
|
||||||
- util-bills-mongo-network
|
|
||||||
mongo-express:
|
|
||||||
image: mongo-express
|
|
||||||
environment:
|
|
||||||
ME_CONFIG_MONGODB_ADMINUSERNAME: root
|
|
||||||
ME_CONFIG_MONGODB_ADMINPASSWORD: HjktJCPWMBtM1ACrDaw7
|
|
||||||
ME_CONFIG_MONGODB_URL: mongodb://root:HjktJCPWMBtM1ACrDaw7@mongo:27017/
|
|
||||||
networks:
|
|
||||||
- traefik-network
|
|
||||||
- util-bills-mongo-network
|
|
||||||
deploy:
|
|
||||||
# u slucaju rušenja kontejnera čekamo 5s i dižemo novi kontejner => ako se i on sruši opet ceka 5s i pokusava ponovno (tako 5 puta)
|
|
||||||
restart_policy:
|
|
||||||
condition: any
|
|
||||||
delay: 5s
|
|
||||||
max_attempts: 0 # u slučaju rušenja containera pokušavaj ga pokrenuti dok ne uspije = BESKONAČNO
|
|
||||||
labels:
|
|
||||||
- traefik.enable=true
|
|
||||||
- traefik.docker.network=traefik-network # mreže preko koje ide komunikacija sa Traefikom
|
|
||||||
- traefik.http.services.mongo-express.loadbalancer.server.port=8081
|
|
||||||
- traefik.http.routers.mongo-express.entrypoints=http
|
|
||||||
- traefik.http.routers.mongo-express.rule=Host(`mongo.rezije.app`)
|
|
||||||
@@ -6,19 +6,17 @@ networks:
|
|||||||
name: traefik-network
|
name: traefik-network
|
||||||
external: true
|
external: true
|
||||||
util-bills-mongo-network:
|
util-bills-mongo-network:
|
||||||
name: util-bills-mongo-network
|
name: "util-bills-mongo-network"
|
||||||
internal: true # bridge network, isolated from host and other networks
|
attachable: false
|
||||||
|
external: false
|
||||||
|
internal: true # bridge network, isolated from host and other networks
|
||||||
|
|
||||||
services:
|
services:
|
||||||
web-app:
|
web-app:
|
||||||
image: utility-bills-tracker:${IMAGE_VERSION}
|
image: utility-bills-tracker:${IMAGE_VERSION}
|
||||||
container_name: evidencija-rezija__web-app
|
|
||||||
restart: unless-stopped # u slučaju rušenja containera pokušavaj ga pokrenuti dok ne uspije = BESKONAČNO
|
|
||||||
networks:
|
networks:
|
||||||
- traefik-network
|
- traefik-network
|
||||||
- util-bills-mongo-network
|
- util-bills-mongo-network
|
||||||
depends_on:
|
|
||||||
- mongo
|
|
||||||
volumes:
|
volumes:
|
||||||
- ./etc/hosts/:/etc/hosts
|
- ./etc/hosts/:/etc/hosts
|
||||||
environment:
|
environment:
|
||||||
@@ -28,9 +26,13 @@ services:
|
|||||||
AUTH_SECRET: Gh0jQ35oq6DR8HkLR3heA8EaEDtxYN/xkP6blvukZ0w=
|
AUTH_SECRET: Gh0jQ35oq6DR8HkLR3heA8EaEDtxYN/xkP6blvukZ0w=
|
||||||
LINKEDIN_ID: 776qlcsykl1rag
|
LINKEDIN_ID: 776qlcsykl1rag
|
||||||
LINKEDIN_SECRET: ugf61aJ2iyErLK40
|
LINKEDIN_SECRET: ugf61aJ2iyErLK40
|
||||||
HOSTNAME: rezije.app # IP address at which the server will be listening (0.0.0.0 = listen on all addresses)
|
HOSTNAME: rezije.app # IP address at which the server will be listening (0.0.0.0 = listen on all addresses)
|
||||||
NEXTAUTH_URL: https://rezije.app # URL next-auth will use while redirecting user during authentication (if not set - will use HOSTNAME)
|
NEXTAUTH_URL: https://rezije.app # URL next-auth will use while redirecting user during authentication (if not set - will use HOSTNAME)
|
||||||
PORT: ${PORT:-80}
|
PORT: ${PORT:-80}
|
||||||
|
container_name: evidencija-rezija__web-app
|
||||||
|
restart: unless-stopped # u slučaju rušenja containera pokušavaj ga pokrenuti dok ne uspije = BESKONAČNO
|
||||||
|
depends_on:
|
||||||
|
- mongo
|
||||||
labels:
|
labels:
|
||||||
- traefik.enable=true
|
- traefik.enable=true
|
||||||
- traefik.docker.network=traefik-network # mreže preko koje ide komunikacija sa Traefikom
|
- traefik.docker.network=traefik-network # mreže preko koje ide komunikacija sa Traefikom
|
||||||
@@ -49,20 +51,19 @@ services:
|
|||||||
- ./mongo-volume:/data/db
|
- ./mongo-volume:/data/db
|
||||||
networks:
|
networks:
|
||||||
- util-bills-mongo-network
|
- util-bills-mongo-network
|
||||||
|
|
||||||
mongo-express:
|
mongo-express:
|
||||||
image: mongo-express
|
image: mongo-express
|
||||||
container_name: evidencija-rezija__mongo-express
|
|
||||||
restart: unless-stopped
|
|
||||||
networks:
|
|
||||||
- traefik-network
|
|
||||||
- util-bills-mongo-network
|
|
||||||
depends_on:
|
|
||||||
- mongo
|
|
||||||
environment:
|
environment:
|
||||||
ME_CONFIG_MONGODB_ADMINUSERNAME: root
|
ME_CONFIG_MONGODB_ADMINUSERNAME: root
|
||||||
ME_CONFIG_MONGODB_ADMINPASSWORD: HjktJCPWMBtM1ACrDaw7
|
ME_CONFIG_MONGODB_ADMINPASSWORD: HjktJCPWMBtM1ACrDaw7
|
||||||
ME_CONFIG_MONGODB_URL: mongodb://root:HjktJCPWMBtM1ACrDaw7@mongo:27017/
|
ME_CONFIG_MONGODB_URL: mongodb://root:HjktJCPWMBtM1ACrDaw7@mongo:27017/
|
||||||
|
networks:
|
||||||
|
- traefik-network
|
||||||
|
- util-bills-mongo-network
|
||||||
|
container_name: evidencija-rezija__mongo-express
|
||||||
|
restart: unless-stopped
|
||||||
|
depends_on:
|
||||||
|
- mongo
|
||||||
labels:
|
labels:
|
||||||
- traefik.enable=true
|
- traefik.enable=true
|
||||||
- traefik.docker.network=traefik-network # mreže preko koje ide komunikacija sa Traefikom
|
- traefik.docker.network=traefik-network # mreže preko koje ide komunikacija sa Traefikom
|
||||||
@@ -5,22 +5,22 @@ networks:
|
|||||||
traefik-network:
|
traefik-network:
|
||||||
name: "traefik-network"
|
name: "traefik-network"
|
||||||
external: true
|
external: true
|
||||||
mongo-network:
|
util-bills-mongo-network:
|
||||||
name: "mongo-network"
|
name: "util-bills-mongo-network"
|
||||||
attachable: false
|
attachable: false
|
||||||
external: false
|
external: false
|
||||||
internal: true
|
internal: true # bridge network, isolated from host and other networks
|
||||||
|
|
||||||
services:
|
services:
|
||||||
web-app:
|
web-app:
|
||||||
image: utility-bills-tracker:${IMAGE_VERSION}
|
image: utility-bills-tracker:${IMAGE_VERSION}
|
||||||
networks:
|
networks:
|
||||||
- traefik-network
|
- traefik-network
|
||||||
- mongo-network
|
- util-bills-mongo-network
|
||||||
volumes:
|
volumes:
|
||||||
- ./etc/hosts/:/etc/hosts
|
- ./etc/hosts/:/etc/hosts
|
||||||
environment:
|
environment:
|
||||||
MONGODB_URI: mongodb://root:example@mongo:27017/
|
MONGODB_URI: mongodb://rezije.app:w4z4piJBgCdAm4tpawqB@mongo:27017/utility-bills
|
||||||
GOOGLE_ID: 355397364527-adjrokm6hromcaaar0qfhk050mfr35ou.apps.googleusercontent.com
|
GOOGLE_ID: 355397364527-adjrokm6hromcaaar0qfhk050mfr35ou.apps.googleusercontent.com
|
||||||
GOOGLE_SECRET: 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
|
GOOGLE_SECRET: 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
|
||||||
AUTH_SECRET: Gh0jQ35oq6DR8HkLR3heA8EaEDtxYN/xkP6blvukZ0w=
|
AUTH_SECRET: Gh0jQ35oq6DR8HkLR3heA8EaEDtxYN/xkP6blvukZ0w=
|
||||||
@@ -49,16 +49,16 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- ./mongo-volume:/data/db
|
- ./mongo-volume:/data/db
|
||||||
networks:
|
networks:
|
||||||
- mongo-network
|
- util-bills-mongo-network
|
||||||
mongo-express:
|
mongo-express:
|
||||||
image: mongo-express
|
image: mongo-express
|
||||||
environment:
|
environment:
|
||||||
ME_CONFIG_MONGODB_ADMINUSERNAME: root
|
ME_CONFIG_MONGODB_ADMINUSERNAME: root
|
||||||
ME_CONFIG_MONGODB_ADMINPASSWORD: example
|
ME_CONFIG_MONGODB_ADMINPASSWORD: HjktJCPWMBtM1ACrDaw7
|
||||||
ME_CONFIG_MONGODB_URL: mongodb://root:example@mongo:27017/
|
ME_CONFIG_MONGODB_URL: mongodb://root:HjktJCPWMBtM1ACrDaw7@mongo:27017/
|
||||||
networks:
|
networks:
|
||||||
- traefik-network
|
- traefik-network
|
||||||
- mongo-network
|
- util-bills-mongo-network
|
||||||
deploy:
|
deploy:
|
||||||
# u slucaju rušenja kontejnera čekamo 5s i dižemo novi kontejner => ako se i on sruši opet ceka 5s i pokusava ponovno (tako 5 puta)
|
# u slucaju rušenja kontejnera čekamo 5s i dižemo novi kontejner => ako se i on sruši opet ceka 5s i pokusava ponovno (tako 5 puta)
|
||||||
restart_policy:
|
restart_policy:
|
||||||
@@ -71,3 +71,4 @@ services:
|
|||||||
- traefik.http.services.mongo-express.loadbalancer.server.port=8081
|
- traefik.http.services.mongo-express.loadbalancer.server.port=8081
|
||||||
- traefik.http.routers.mongo-express.entrypoints=http
|
- traefik.http.routers.mongo-express.entrypoints=http
|
||||||
- traefik.http.routers.mongo-express.rule=Host(`mongo.rezije.app`)
|
- traefik.http.routers.mongo-express.rule=Host(`mongo.rezije.app`)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user