Compare commits

...

50 Commits

Author SHA1 Message Date
bf0497c02a Configuration for WordPress is working but still a few things to tweak, test, and enhance. 2025-10-20 19:35:59 -07:00
9079afd570 Update recommended settings. 2025-10-20 11:29:20 -07:00
93e0971050 Change filename to match compose file. 2025-10-20 11:09:21 -07:00
c19b73e3f0 Add DB system requirement research. 2025-10-20 10:57:58 -07:00
018c3c9ceb Convert Wordpress config to variables. 2025-10-20 10:46:11 -07:00
7e733dedcb Add initial environment script for Wordpress. 2025-10-20 10:45:30 -07:00
dac5c0de17 Begin adding a Wordpress example. 2025-10-17 15:31:30 -07:00
3ae7a6f8f9 Specify what is meant in the WIP README's. 2025-10-17 15:22:51 -07:00
567f1de450 Add notes to a few configs that they are still WIP. 2025-10-17 14:35:24 -07:00
3ca8b036ad Add verbiage for when the up and down are not used. 2025-10-17 14:04:20 -07:00
3897d6f3c3 Add parameters and usage function to backup script. 2025-10-17 13:50:02 -07:00
fdff4f0d27 Add referenes to other key branches. 2025-10-15 05:44:33 -07:00
7b9bbcbc26 Ignore disabled files as well. 2025-10-15 04:43:42 -07:00
cbaf052ea2 Do not track Prod and Dev copies of configurations. 2025-10-15 04:40:27 -07:00
c4c3cb6434 Put the repo location into a variable. 2025-10-14 15:28:43 -07:00
e0f846164e Merge pull request 'Nextcloud, Hyperling.com, LibreTranslate, and backup.sh Enhancements' (#11) from dev into main
Reviewed-on: #11
2025-10-14 14:58:58 -07:00
9314bb8bb4 Have the git command give us the branch instead. 2025-10-14 14:32:26 -07:00
b9d9771523 Add echo of $BRANCH contents. 2025-10-14 14:30:40 -07:00
d2aa3c195b Fix typo in variable name. 2025-10-14 14:23:40 -07:00
dd60d5a721 Fix typos and wording in comments. 2025-10-14 14:23:18 -07:00
c04eb08f78 Comment the micro server requirements. 2025-10-14 14:22:27 -07:00
418983c490 Add env variable for which branch to use. Move CPU and RAM requirements to env so that only 1 docker-compose.yml example is needed. 2025-10-14 14:21:59 -07:00
95060838e2 Remove using the dev branch on Production! Should only be on the Stage version of the Dockerfile. 2025-10-14 14:14:04 -07:00
6973640b4e Explicitly mention where the output is coming from. 2025-10-14 14:12:02 -07:00
a49d0129e7 Enhance output when starting Hyperling.com. 2025-10-14 14:10:00 -07:00
394acfa06d Critical changes for upcoming Hyperling.com 2.0! Automatic page updates after a pull request within 30 seconds, no reload necessary! 2025-10-14 14:08:13 -07:00
04089744e6 Change label for starting cronjob. 2025-10-14 12:22:41 -07:00
75711c6c20 Ensure backup's TRASH folder gets created and used properly. 2025-10-14 08:35:23 -07:00
c4032b5b94 Remove directory from basename variable. 2025-10-14 08:14:49 -07:00
d7820ed373 Add safeties to backup script. 2025-10-14 08:12:57 -07:00
d9f8318e66 Add recommendation to use /opt/ for LibreTranslate models. 2025-10-14 07:12:59 -07:00
a5a80276ac Folder name should not be plural. 2025-10-14 07:07:07 -07:00
c070d7cb92 Use a dedicated backup directory rather than /tmp. 2025-10-14 07:02:13 -07:00
c138fe67d6 No need for the if, just remove any files that match the pattern. 2025-10-14 06:55:42 -07:00
2697645abe Properly check if other backups exist. 2025-10-14 06:43:54 -07:00
ce111d01f3 Chnage order of distros to alphabetical. 2025-10-13 05:32:14 -07:00
7abe909cdf Move packages to env file and allow extras per distro. 2025-10-13 05:31:57 -07:00
f57a0d322d Add which to install commands. 2025-10-10 16:08:58 -07:00
9381d61d99 Progress on testing provisioning on multiple distros. So far Debian and Ubuntu are working. Others need packages added. 2025-10-10 16:07:17 -07:00
bde78a1489 Create files for testing Ansible script on other distros. 2025-10-10 14:28:01 -07:00
4acbd47388 Change separating symbols to match System backup formatting. 2025-10-09 07:50:08 -07:00
51d6d32790 Change order of backup wording. Add timestamp. 2025-10-09 07:47:03 -07:00
1e665a40b7 Add date and hostname to backup file. Delete previous dates. 2025-10-09 07:37:14 -07:00
675ac90c31 Stop trying the mysql_upgrade. Add changing row formats to DYNAMIC. 2025-10-04 12:51:30 -07:00
f0679bd05f Merge branch 'dev' of ssh://git.hyperling.com:13731/me/env-docker into dev
This is to bring prod into alignment with repo while working on local changes due to Trixie upgrades.
2025-10-04 14:07:28 +00:00
897493dd1f Fix version of ImageMagickCore for Trixie. 2025-10-04 14:02:17 +00:00
5a5035fd33 Add Docker to Docker backup file. 2025-10-04 06:34:11 -07:00
e178141357 Add extra backup locations. Did this a few days ago but it seems it did not get pushed and the commit disappeared. 2025-08-22 13:44:48 -07:00
6062818475 Add the version of Express as being done in package.json. 2025-08-21 13:24:53 -07:00
f77557151a Add size to container check. 2025-08-21 11:22:24 -07:00
24 changed files with 569 additions and 51 deletions

10
.gitignore vendored
View File

@@ -25,6 +25,8 @@ Config/DNS/config/*
# Ignore anything in disabled folders.
disabled
*.disabled
disabled.*
# Ignore any .env files which are not explicitly committed to the project.
*.env
@@ -35,10 +37,16 @@ docker-compose.yml
# 2024-01-24 Hide static files for Hyperling.com.
Config/Hyperling.com/files/*
# Ignore things like "Config/Hyperling.com-Stage/""
# Ignore things like "Config/Hyperling.com-Stage/"
*-Stage
Stage-*
# Ignore copies of the Hugo configuration, such as "Config/Hugo-MyWebsite".
Hugo-*
*-Hugo
# Ignore Prod and Dev copies as well.
*-Prod
Prod-*
*-Dev
Dev-*

View File

@@ -17,12 +17,17 @@ DEV="$4"
typeset -u DEV
echo "DEV='$DEV'"
SITE="/var/www/hugo/site"
echo "*** Creating Git Repo ***"
sudo -u www-data git clone --recurse-submodules $BRANCH $REPO /var/www/hugo/site
if [[ -d $SITE ]]; then
rm -rfv $SITE
fi
sudo -u www-data git clone --recurse-submodules $BRANCH $REPO $SITE
status="$?"
echo "*** Validating Git Repo ***"
if [[ $status != 0 || ! -d /var/www/hugo/site/.git ]]; then
if [[ $status != 0 || ! -d $SITE/.git ]]; then
echo "ERROR: Hugo project may not have cloned correctly. status='$status'"
echo "Aborting."
exit 1
@@ -62,7 +67,7 @@ if [[ "$DEV" == "Y"* || "$DEV" == "T"* ]]; then
http_code="`curl -sS http://localhost:1380 -o /dev/null -w "%{http_code}"`"
if [[ $http_code != 200 ]]; then
echo "* Dev server not detected, starting..."
cd /var/www/hugo/site
cd $SITE
killall hugo 2>/dev/null
sudo -u www-data hugo server -D --noBuildLock --bind 0.0.0.0 -p 1380 &
fi

View File

@@ -6,20 +6,28 @@
FROM node:lts-slim
# Cache System Dependencies
RUN apt-get update && apt-get install -y git php-cli sudo curl
RUN apt-get update && apt-get install -y git php-cli sudo curl procps
# Cache Node Dependencies
RUN mkdir -p /var/www/api
WORKDIR /var/www/api
RUN echo '{ "dependencies": { "express": "" } }' > package.json
RUN echo '{ "dependencies": { "express": ">=4.18.1 < 5.0.0" } }' > package.json
RUN npm install
# Install + Run Website
CMD cd /var/www/api && \
rm -rfv pages main.js run.sh && \
git clone https://git.hyperling.com/me/nodejs-website website && \
rm -rfv website/files && \
mv -v website/* ./ && \
echo "Dockerfile: Ensure symlink is properly deleted if it exists..." && \
ls -l website/files; rm -v website/files; sleep 0 && \
echo "Dockerfile: Clone the website's Git repo..." && \
rm -rfv website && \
echo "Starting Website's Run Script" && \
git clone https://git.hyperling.com/me/nodejs-website $BRANCH website && \
echo "Dockerfile: Remove dummy files and replace with symlink..." && \
rm -rfv website/files && \
cd website && \
echo -n "Dockerfile: Using branch " && \
git branch && \
ln -sv ../files ./files && \
echo "Dockerfile: Allow files under files/ to be ignored by Git..." && \
find ./files -exec git update-index --assume-unchanged {} \; && \
echo "Dockerfile: Start website!" && \
./run.sh

View File

@@ -10,11 +10,15 @@ services:
restart: always
ports:
- 8317:8080
environment:
- BRANCH=$BRANCH
- CPU=$CPU
- MEM=$MEM
volumes:
- ./files:/var/www/api/files
deploy:
mode: global
resources:
limits:
cpus: '0.25'
memory: 256M
cpus: $CPU
memory: $MEM

View File

@@ -1,21 +0,0 @@
# 2022-10-29
# Hyperling.com configuration.
# 2023-01-24 container needs 128M to get started fully then settles to 25M.
services:
app:
container_name: www-app
build:
context: ./
network: host
restart: always
ports:
- 8317:8080
volumes:
- ./files:/var/www/api/files
deploy:
mode: global
resources:
limits:
cpus: '0.10'
memory: 128M

View File

@@ -7,3 +7,18 @@
# Subsequent builds consistently take less than 2 seconds.
# Testing was done on the micro server, not a workstation.
COMPOSE_BAKE=true
## Branch ##
# Allow choosing the branch. By leaving it blank, the main branch will be used.
# Should be in the full "--branch my-branch" syntax.
BRANCH=
#BRANCH="--branch dev"
## Performance ##
# Standard Server
CPU=0.25
MEM=0.25G
# Micro Server
# 2023-01-24 container needs 128M to get started fully then settles to 25M.
#CPU=0.10
#MEM=128M

View File

@@ -47,3 +47,7 @@ MODELS_DIR=../../Volumes/LibreTranslate/models
## them from backup type locations such as Volumes/LibreTranslate/ and /var/.
## Please see the README for the CRON command related to this setting.
# MODELS_DIR=/tmp/LibreTranslate/models
## Can also place them under /opt/ which may be recommended by FHS standards.
## This keeps them from taking up precious RAM / swap if using tmpfs or similar.
# MODELS_DIR=/opt/LibreTranslate/models

View File

@@ -4,7 +4,7 @@
FROM nextcloud:stable
# Cache System Dependencies
RUN apt-get update && apt-get install -y sudo libmagickcore-6.q16-6-extra htop \
RUN apt-get update && apt-get install -y sudo libmagickcore-7.q16-10-extra htop \
iputils-ping dnsutils vim bzip2 libbz2-dev
# Configure PHP Dependency

View File

@@ -35,12 +35,27 @@ $DOCKER_HOME/Config/Nextcloud/cron.sh && echo "Success!"
# 2022-10-30 More additions after moving to Nextcloud version 25.
echo -e "\n*** DATABASE ***"
echo -e "\n`date` - Enable Maintenance Mode"
docker exec -itu www-data nc-app ./occ maintenance:mode --on
# 20251004: Disabled since it has not been working.
# Clear DB errors by allowing the DB to perform any incremental upgrades.
# https://jira.mariadb.org/browse/MDEV-26342
echo -e "\n`date` - mysql_upgrade"
docker exec -itu www-data nc-app ./occ maintenance:mode --on
time docker exec -it nc-db mysql_upgrade \
-user="root" --password="$MYSQL_ROOT_PASSWORD"
#echo -e "\n`date` - mysql_upgrade"
#time docker exec -it nc-db mysql_upgrade \
# -user="root" --password="$MYSQL_ROOT_PASSWORD"
echo -e "\n`date` - Enable Dynamic Row Formats"
docker exec -it nc-db mysql -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" \
-e "SELECT CONCAT('ALTER TABLE ', TABLE_NAME,' ROW_FORMAT=DYNAMIC; ') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '$MYSQL_DATABASE' AND ENGINE = 'InnoDB' AND ROW_FORMAT != 'DYNAMIC'; " \
-B -N |
while read -r sql; do
echo "SQL being executed: $sql "
docker exec nc-db mysql -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" -e "$sql" "$MYSQL_DATABASE";
echo " - Done!\ "
done
echo -e "\n`date` - Disable Maintenance Mode"
docker exec -itu www-data nc-app ./occ maintenance:mode --off
echo -e "\n`date` - Add Missing Columns"

View File

@@ -0,0 +1,12 @@
# Create a VM for testing Ansible provisioning.
FROM archlinux:base
RUN pacman -Syu --noconfirm && pacman -Sy --noconfirm $PACKAGES $EXTRA_ARCH
COPY bin/main.sh /root/main.sh
RUN chmod +x /root/main.sh
WORKDIR /root/
USER root
CMD ./main.sh

View File

@@ -0,0 +1,12 @@
# Create a VM for testing Ansible provisioning.
FROM debian:trixie
RUN apt update && apt dist-upgrade -y && apt install -y $PACKAGES $EXTRA_DEBIAN
COPY bin/main.sh /root/main.sh
RUN chmod +x /root/main.sh
WORKDIR /root/
USER root
CMD ./main.sh

View File

@@ -0,0 +1,12 @@
# Create a VM for testing Ansible provisioning.
FROM fedora:latest
RUN dnf upgrade --refresh -y && dnf install -y $PACKAGES $EXTRA_FEDORA
COPY bin/main.sh /root/main.sh
RUN chmod +x /root/main.sh
WORKDIR /root/
USER root
CMD ./main.sh

View File

@@ -0,0 +1,14 @@
# Create a VM for testing Ansible provisioning.
FROM opensuse/tumbleweed
RUN zypper -n refresh \
&& zypper -n dist-upgrade -y \
&& zypper -n install -y $PACKAGES $EXTRA_OPENSUSE
COPY bin/main.sh /root/main.sh
RUN chmod +x /root/main.sh
WORKDIR /root/
USER root
CMD ./main.sh

View File

@@ -0,0 +1,12 @@
# Create a VM for testing Ansible provisioning.
FROM ubuntu:rolling
RUN apt update && apt dist-upgrade -y && apt install -y $PACKAGES $EXTRA_UBUNTU
COPY bin/main.sh /root/main.sh
RUN chmod +x /root/main.sh
WORKDIR /root/
USER root
CMD ./main.sh

View File

@@ -0,0 +1,7 @@
# Construction Area
This configuration is still a work in progress. :)
# Provision Test Images
Create containers of popular Linux distributions in order to test Ansible.

View File

@@ -0,0 +1,21 @@
#!/usr/bin/env bash
sh -c "rm -rfv prov-test"
git clone $REPO --branch=$BRANCH prov-test
cd prov-test
echo "Starting Executable Script"
tail -F /var/mail/mail &
tail -F /var/mail/ansible &
logfile="/root/test.log"
$EXEC > $logfile &
tail -F $logfile
echo "*** Finished $0 @ `date` ***"
wait -n
exit $?

View File

@@ -0,0 +1,142 @@
# Create containers which each execute a provisioning script and exit.
volumes:
pt-storage:
driver: local
driver_opts:
type: none
device: $PT_STORAGE_DIR
o: bind
services:
pt-arch:
container_name: pt-arch
build:
context: ./
dockerfile: Dockerfiles/arch
network: host
restart: no
environment:
- PACKAGES=$PACKAGES
- EXTRA_ARCH=$EXTRA_ARCH
- REPO=$REPO
- BRANCH=$BRANCH
- EXEC=$EXEC
volumes:
- type: volume
source: pt-storage
target: /root
volume:
subpath: arch
deploy:
mode: global
resources:
limits:
cpus: $CPU
memory: $RAM
pt-debian:
container_name: pt-debian
build:
context: ./
dockerfile: Dockerfiles/debian
network: host
restart: no
environment:
- PACKAGES=$PACKAGES
- EXTRA_DEBIAN=$EXTRA_DEBIAN
- REPO=$REPO
- BRANCH=$BRANCH
- EXEC=$EXEC
volumes:
- type: volume
source: pt-storage
target: /root
volume:
subpath: debian
deploy:
mode: global
resources:
limits:
cpus: $CPU
memory: $RAM
pt-fedora:
container_name: pt-fedora
build:
context: ./
dockerfile: Dockerfiles/fedora
network: host
restart: no
environment:
- PACKAGES=$PACKAGES
- EXTRA_FEDORA=$EXTRA_FEDORA
- REPO=$REPO
- BRANCH=$BRANCH
- EXEC=$EXEC
volumes:
- type: volume
source: pt-storage
target: /root
volume:
subpath: fedora
deploy:
mode: global
resources:
limits:
cpus: $CPU
memory: $RAM
pt-opensuse:
container_name: pt-opensuse
build:
context: ./
dockerfile: Dockerfiles/opensuse
network: host
restart: no
environment:
- PACKAGES=$PACKAGES
- EXTRA_OPENSUSE=$EXTRA_OPENSUSE
- REPO=$REPO
- BRANCH=$BRANCH
- EXEC=$EXEC
volumes:
- type: volume
source: pt-storage
target: /root
volume:
subpath: opensuse
deploy:
mode: global
resources:
limits:
cpus: $CPU
memory: $RAM
pt-ubuntu:
container_name: pt-ubuntu
build:
context: ./
dockerfile: Dockerfiles/ubuntu
network: host
restart: no
environment:
- PACKAGES=$PACKAGES
- EXTRA_UBUNTU=$EXTRA_UBUNTU
- REPO=$REPO
- BRANCH=$BRANCH
- EXEC=$EXEC
volumes:
- type: volume
source: pt-storage
target: /root
volume:
subpath: ubuntu
deploy:
mode: global
resources:
limits:
cpus: $CPU
memory: $RAM

View File

@@ -0,0 +1,26 @@
# This file should be renamed '.env' and have any private values modified.
COMPOSE_BAKE=true
## Performance
CPU=0.2
RAM=0.2G
## Storage
#STORAGE_DIR=../../Volumes/ProvisionTests
PT_STORAGE_DIR=/tmp/ProvisionTests
## Packages
PACKAGES="git bash curl sudo which"
EXTRA_ARCH=""
EXTRA_DEBIAN=""
EXTRA_FEDORA=""
EXTRA_OPENSUSE=""
EXTRA_UBUNTU=""
## Script
REPO=https://git.hyperling.com/me/env-ansible
#BRANCH=dev
BRANCH=stage
#BRANCH=prod
EXEC="./setup.sh -l"

23
Config/ProvisionTests/prep.sh Executable file
View File

@@ -0,0 +1,23 @@
#!/usr/bin/env bash
# 2025-07-22 Hyperling
# Create the necessary folders for LibreTranslate's volumes to work.
# This must be run before the container will start properly.
## Setup ##
DIR="$(dirname -- "${BASH_SOURCE[0]}")"
source $DIR/.env
source ../../source.env
## Main ##
# Create folders.
mkdir -pv "$PT_STORAGE_DIR/arch"
mkdir -pv "$PT_STORAGE_DIR/debian"
mkdir -pv "$PT_STORAGE_DIR/fedora"
mkdir -pv "$PT_STORAGE_DIR/opensuse"
mkdir -pv "$PT_STORAGE_DIR/ubuntu"
# Finish successfully.
exit 0

View File

@@ -0,0 +1,3 @@
# Construction Area
This configuration is still a work in progress. :)

View File

@@ -0,0 +1,80 @@
# 2025-10-17 Hyperling
# Copied and modified from the example here:
# https://hub.docker.com/_/wordpress
# This file should be copied to `docker-compose.yml`.
# Most configration changes can be done in the env file rather than here.
## TBDs ##
# - Move env variables to env.example
# - Look through other environment variables which may be useful.
# - Add CPU and MEM section
# - Change ports
# TBD locate these at ../../Volumes and create `prep.sh` script.
#volumes:
# wordpress:
# db:
services:
wp-db:
container_name: wp-db
image: mariadb:lts
restart: always
volumes:
- ../../Volumes/WordPress/mariadb:/var/lib/mysql
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
start_period: 5s
interval: 5s
timeout: 5s
retries: 10
environment:
# https://mariadb.com/docs/server/server-management/automated-mariadb-deployment-and-administration/docker-and-mariadb/mariadb-server-docker-official-image-environment-variables
MARIADB_DATABASE: $MARIADB_DATABASE
MARIADB_USER: $MARIADB_USER
MARIADB_PASSWORD: MARIADB_PASSWORD
MARIADB_ROOT_PASSWORD: $MARIADB_ROOT_PASSWORD
MARIADB_AUTO_UPGRADE: $MARIADB_AUTO_UPGRADE
WP_CPU_DB: $WP_CPU_DB
WP_MEM_DB: $WP_MEM_DB
deploy:
mode: global
resources:
limits:
cpus: $WP_CPU_DB
memory: $WP_MEM_DB
wp-app:
container_name: wp-app
image: wordpress:latest
restart: always
ports:
- 8080:80
depends_on:
wp-db:
condition: service_healthy
links:
- wp-db
volumes:
- ../../Volumes/WordPress/wordpress:/var/www/html
environment:
WORDPRESS_ADMIN_USERNAME: $WORDPRESS_ADMIN_USERNAME
WORDPRESS_ADMIN_PASSWORD: $WORDPRESS_ADMIN_PASSWORD
WORDPRESS_DB_HOST: wp-db
WORDPRESS_DB_NAME: $MARIADB_DATABASE
# TBD/TODO: Does not work, but recommended. :(
#WORDPRESS_DB_USER: $MARIADB_USER
#WORDPRESS_DB_PASSWORD: $MARIADB_PASSWORD
# Works, but not recommended. Lol.
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: $MARIADB_ROOT_PASSWORD
WORDPRESS_DEBUG: $WORDPRESS_DEBUG
WP_CPU: $WP_CPU
WP_MEM: $WP_MEM
deploy:
mode: global
resources:
limits:
cpus: $WP_CPU
memory: $WP_MEM

View File

@@ -0,0 +1,63 @@
# This file should be copied to `.env` and have its values changes as needed.
## Docker ##
COMPOSE_BAKE=true
## End Docker ##
## WordPress ##
# TBD/TODO: These do not actually seem to work.
WORDPRESS_ADMIN_USERNAME='wp_user'
WORDPRESS_ADMIN_PASSWORD='wordpress_password'
# Uncomment this to get debug output in the log.
WORDPRESS_DEBUG=1
## End WordPress ##
## Database ##
MARIADB_DATABASE='wordpress'
MARIADB_USER='db_user'
MARIADB_PASSWORD='database_password'
MARIADB_ROOT_PASSWORD='db_root_password'
# Comment this if you do not want MariaDB to run upgrade scripts on new versions.
MARIADB_AUTO_UPGRADE=1
## End Database ##
## Performance ##
# Standard Minimum
#WP_CPU=1.00
#WP_MEM=2.00G
#WP_CPU_DB=1.00
#WP_MEM_DB=1.00G
# Standard Recommended
#WP_CPU=1.00
#WP_MEM=4.00G
#WP_CPU_DB=1.00
#WP_MEM_DB=0.50G
# Tested Minimum
#WP_CPU=0.35
#WP_MEM=0.35G
#WP_CPU_DB=0.15
#WP_MEM_DB=0.15G
# Tested Recommended
WP_CPU=0.50
WP_MEM=0.50G
WP_CPU_DB=0.25
WP_MEM_DB=0.25G
## End Performance ##

View File

@@ -9,23 +9,72 @@ source $DIR/../source.env
## Variables ##
file="/tmp/Backup.zip"
TAG="Docker"
DATE="`date "+%Y%m%d-%H%M%S"`"
BACKUP_DIR="/srv/backup"
BASENAME="Backup"
file="$BACKUP_DIR/$BASENAME.$DATE.$HOSTNAME.$TAG.zip"
time="`which time`"
## Functions ##
function usage {
cat <<- EOF
Backup script for Hyperling's self-managed Docker setup.
Usage: $PROG [-u] [-d] [-h]
-u : Bring all containers up after the backup has finished.
-d : Bring all containers down before taking the backup.
-h : Display this help text.
Example:
$PROG -ud
EOF
exit $1
}
## Parameters ##
up=FALSE
down=FALSE
while getopts ':udh' opt; do
case "$opt" in
u) up=TRUE ;;
d) down=TRUE ;;
h) usage 0 ;;
*) echo "ERROR: Option $OPTARG not recognized." >&2
usage 1 ;;
esac
done
## Main ##
# Ensure backup directory exists with correct permissions.
mkdir -pv "$BACKUP_DIR"
mkdir -pv "$BACKUP_DIR/TRASH"
chmod -Rv 775 "$BACKUP_DIR"
chown -Rv root:root "$BACKUP_DIR"
# Remove the last backup.
if [[ -e $file ]]; then
echo "`date` - Removing existing file."
rm -fv $file
echo "`date` - Removing existing files."
cd "$BACKUP_DIR"
mv -v "$BASENAME"*"$TAG"* TRASH/
rm -v TRASH/*
if [[ "$down" == "TRUE" ]]; then
echo -e "\n`date` - Take down services for a cold backup."
manage.sh -d
else
echo -e "\n`date` - Skipping take down."
fi
echo -e "\n`date` - Take down services for a cold backup."
manage.sh -d
echo -e "\n`date` - Create the backup for '$DOCKER_HOME'."
cd $DOCKER_HOME
$time zip -r $file.tmp . 1>/dev/null
$time zip -r $file.tmp \
$DOCKER_HOME \
/etc/crontab /etc/cron.d /var/spool/cron \
/var/{log,mail} 1>/dev/null
mv -v $file.tmp $file
echo -e "\n`date` - Done with zipping, check size."
@@ -34,8 +83,12 @@ ls -sh $file
echo -e "\n`date` - Ensure other users can access the file."
chmod -v 755 $file
echo -e "\n`date` - Bring services back up."
manage.sh -u
if [[ "$up" == "TRUE" ]]; then
echo -e "\n`date` - Bring services back up."
manage.sh -u
else
echo -e "\n`date` - Skipping restoring services."
fi
## Finish ##

View File

@@ -130,7 +130,7 @@ fi
if [[ -z $up && -z $down && -z $build && -z $pull && -z $clean
&& -z $interact && -z $logs && -z $stats
]]; then
docker ps
docker ps --size
exit 0
fi