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
|
||||
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"
|
||||
printf "\nDocker image-a version param missing"
|
||||
printf "\n\nSyntax:\n\n deploy-swarm.sh 1.0.0\n\n"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
printf "\nBUILD START ...\n\n"
|
||||
|
||||
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
|
||||
IMAGE_VERSION="$IMAGE_VERSION" docker stack deploy \
|
||||
-c docker-compose-deploy.yml \
|
||||
-c "$COMPOSE_FILE" \
|
||||
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
|
||||
external: true
|
||||
util-bills-mongo-network:
|
||||
name: util-bills-mongo-network
|
||||
name: "util-bills-mongo-network"
|
||||
attachable: false
|
||||
external: false
|
||||
internal: true # bridge network, isolated from host and other networks
|
||||
|
||||
services:
|
||||
web-app:
|
||||
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:
|
||||
- traefik-network
|
||||
- util-bills-mongo-network
|
||||
depends_on:
|
||||
- mongo
|
||||
volumes:
|
||||
- ./etc/hosts/:/etc/hosts
|
||||
environment:
|
||||
@@ -31,6 +29,10 @@ services:
|
||||
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}
|
||||
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:
|
||||
- traefik.enable=true
|
||||
- traefik.docker.network=traefik-network # mreže preko koje ide komunikacija sa Traefikom
|
||||
@@ -49,20 +51,19 @@ services:
|
||||
- ./mongo-volume:/data/db
|
||||
networks:
|
||||
- util-bills-mongo-network
|
||||
|
||||
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:
|
||||
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
|
||||
container_name: evidencija-rezija__mongo-express
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- mongo
|
||||
labels:
|
||||
- traefik.enable=true
|
||||
- traefik.docker.network=traefik-network # mreže preko koje ide komunikacija sa Traefikom
|
||||
@@ -5,22 +5,22 @@ networks:
|
||||
traefik-network:
|
||||
name: "traefik-network"
|
||||
external: true
|
||||
mongo-network:
|
||||
name: "mongo-network"
|
||||
util-bills-mongo-network:
|
||||
name: "util-bills-mongo-network"
|
||||
attachable: false
|
||||
external: false
|
||||
internal: true
|
||||
internal: true # bridge network, isolated from host and other networks
|
||||
|
||||
services:
|
||||
web-app:
|
||||
image: utility-bills-tracker:${IMAGE_VERSION}
|
||||
networks:
|
||||
- traefik-network
|
||||
- mongo-network
|
||||
- util-bills-mongo-network
|
||||
volumes:
|
||||
- ./etc/hosts/:/etc/hosts
|
||||
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_SECRET: 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
|
||||
AUTH_SECRET: Gh0jQ35oq6DR8HkLR3heA8EaEDtxYN/xkP6blvukZ0w=
|
||||
@@ -49,16 +49,16 @@ services:
|
||||
volumes:
|
||||
- ./mongo-volume:/data/db
|
||||
networks:
|
||||
- mongo-network
|
||||
- util-bills-mongo-network
|
||||
mongo-express:
|
||||
image: mongo-express
|
||||
environment:
|
||||
ME_CONFIG_MONGODB_ADMINUSERNAME: root
|
||||
ME_CONFIG_MONGODB_ADMINPASSWORD: example
|
||||
ME_CONFIG_MONGODB_URL: mongodb://root:example@mongo:27017/
|
||||
ME_CONFIG_MONGODB_ADMINPASSWORD: HjktJCPWMBtM1ACrDaw7
|
||||
ME_CONFIG_MONGODB_URL: mongodb://root:HjktJCPWMBtM1ACrDaw7@mongo:27017/
|
||||
networks:
|
||||
- traefik-network
|
||||
- mongo-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:
|
||||
@@ -71,3 +71,4 @@ services:
|
||||
- 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`)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user