Compare commits

..

18 Commits

Author SHA1 Message Date
564dec0b63 Add new IGNORED folder to backup's exclusion list. Add quotes to all instances of variables. 2025-10-23 13:26:49 -07:00
427471d825 Change the project to use the new IGNORED folder in the Volumes folder. 2025-10-23 13:23:23 -07:00
165c2aa64c Add the IGNORED folder explicitly by creating a README under it. 2025-10-23 13:22:41 -07:00
4772826d4a Remove old comment from copied file. 2025-10-23 13:10:04 -07:00
052b28e265 Add reference to update note. 2025-10-22 21:42:42 -07:00
4cc229a66d Go back to preferring the smallest Arch image. 2025-10-22 21:39:18 -07:00
978a9778a5 Change to use base-devel tag on Arch and also update the system since it is a rolling distro. 2025-10-22 21:35:33 -07:00
e5c68aa12e Specify a tag for OpenSUSE. 2025-10-22 21:34:49 -07:00
b16bf3cf07 Use latest for Debian so that newer versions get tested when they come out. 2025-10-22 21:34:39 -07:00
50b7629860 Remove htop text in extra fields. 2025-10-22 21:01:03 -07:00
91dfbca76e Mention why the upgrade commands are commented. 2025-10-22 20:58:54 -07:00
c0a220cebe Fix build process not being able to see packages. 2025-10-22 20:51:57 -07:00
369728b7ef Rename the example files for Provision Tests. 2025-10-22 19:36:23 -07:00
31dda9d64f Rename the WordPress example files. 2025-10-22 18:15:37 -07:00
0e87eb3515 Only ignore files explicitly named .env. 2025-10-22 18:15:18 -07:00
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
16 changed files with 234 additions and 117 deletions

2
.gitignore vendored
View File

@@ -29,7 +29,7 @@ disabled
disabled.*
# Ignore any .env files which are not explicitly committed to the project.
*.env
.env
# 2024-01-23 Ignore true docker-compose files, only show examples from now on.
docker-compose.yml

View File

@@ -2,7 +2,16 @@
FROM archlinux:base
RUN pacman -Syu --noconfirm && pacman -Sy --noconfirm $PACKAGES $EXTRA_ARCH
ARG PACKAGES
ENV PACKAGES="$PACKAGES"
ARG EXTRA_ARCH
ENV EXTRA_ARCH="$EXTRA_ARCH"
# Arch is rolling, and therefore recommends updating the container immediately.
# https://hub.docker.com/_/archlinux#updating
RUN pacman -Syyu --noconfirm
RUN pacman -Syy --noconfirm $PACKAGES $EXTRA_ARCH
COPY bin/main.sh /root/main.sh
RUN chmod +x /root/main.sh

View File

@@ -1,8 +1,16 @@
# Create a VM for testing Ansible provisioning.
FROM debian:trixie
FROM debian:latest
RUN apt update && apt dist-upgrade -y && apt install -y $PACKAGES $EXTRA_DEBIAN
ARG PACKAGES
ENV PACKAGES="$PACKAGES"
ARG EXTRA_DEBIAN
ENV EXTRA_DEBIAN="$EXTRA_DEBIAN"
# Use the image as it comes, do not upgrade it, so that it stays reproducible.
#RUN apt update && apt dist-upgrade -y
RUN apt update && apt install -y $PACKAGES $EXTRA_DEBIAN
COPY bin/main.sh /root/main.sh
RUN chmod +x /root/main.sh

View File

@@ -2,7 +2,15 @@
FROM fedora:latest
RUN dnf upgrade --refresh -y && dnf install -y $PACKAGES $EXTRA_FEDORA
ARG PACKAGES
ENV PACKAGES="$PACKAGES"
ARG EXTRA_FEDORA
ENV EXTRA_FEDORA="$EXTRA_FEDORA"
# Use the image as it comes, do not upgrade it, so that it stays reproducible.
#RUN dnf upgrade --refresh -y
RUN dnf install --refresh -y $PACKAGES $EXTRA_FEDORA
COPY bin/main.sh /root/main.sh
RUN chmod +x /root/main.sh

View File

@@ -1,10 +1,16 @@
# Create a VM for testing Ansible provisioning.
FROM opensuse/tumbleweed
FROM opensuse/tumbleweed:latest
RUN zypper -n refresh \
&& zypper -n dist-upgrade -y \
&& zypper -n install -y $PACKAGES $EXTRA_OPENSUSE
ARG PACKAGES
ENV PACKAGES="$PACKAGES"
ARG EXTRA_OPENSUSE
ENV EXTRA_OPENSUSE="$EXTRA_OPENSUSE"
# Use the image as it comes, do not upgrade it, so that it stays reproducible.
#RUN zypper -n refresh && zypper -n dist-upgrade -y
RUN zypper -n refresh && zypper -n install -y $PACKAGES $EXTRA_OPENSUSE
COPY bin/main.sh /root/main.sh
RUN chmod +x /root/main.sh

View File

@@ -2,7 +2,15 @@
FROM ubuntu:rolling
RUN apt update && apt dist-upgrade -y && apt install -y $PACKAGES $EXTRA_UBUNTU
ARG PACKAGES
ENV PACKAGES="$PACKAGES"
ARG EXTRA_UBUNTU
ENV EXTRA_UBUNTU="$EXTRA_UBUNTU"
# Use the image as it comes, do not upgrade it, so that it stays reproducible.
#RUN apt update && apt dist-upgrade -y
RUN apt update && apt install -y $PACKAGES $EXTRA_UBUNTU
COPY bin/main.sh /root/main.sh
RUN chmod +x /root/main.sh

View File

@@ -17,6 +17,9 @@ services:
context: ./
dockerfile: Dockerfiles/arch
network: host
args:
PACKAGES: ${PACKAGES}
EXTRA_ARCH: ${EXTRA_ARCH}
restart: no
environment:
- PACKAGES=$PACKAGES
@@ -43,6 +46,9 @@ services:
context: ./
dockerfile: Dockerfiles/debian
network: host
args:
PACKAGES: ${PACKAGES}
EXTRA_DEBIAN: ${EXTRA_DEBIAN}
restart: no
environment:
- PACKAGES=$PACKAGES
@@ -69,6 +75,9 @@ services:
context: ./
dockerfile: Dockerfiles/fedora
network: host
args:
PACKAGES: ${PACKAGES}
EXTRA_FEDORA: ${EXTRA_FEDORA}
restart: no
environment:
- PACKAGES=$PACKAGES
@@ -95,6 +104,9 @@ services:
context: ./
dockerfile: Dockerfiles/opensuse
network: host
args:
PACKAGES: ${PACKAGES}
EXTRA_OPENSUSE: ${EXTRA_OPENSUSE}
restart: no
environment:
- PACKAGES=$PACKAGES
@@ -121,6 +133,9 @@ services:
context: ./
dockerfile: Dockerfiles/ubuntu
network: host
args:
PACKAGES: ${PACKAGES}
EXTRA_UBUNTU: ${EXTRA_UBUNTU}
restart: no
environment:
- PACKAGES=$PACKAGES

View File

@@ -7,8 +7,7 @@ CPU=0.2
RAM=0.2G
## Storage
#STORAGE_DIR=../../Volumes/ProvisionTests
PT_STORAGE_DIR=/tmp/ProvisionTests
PT_STORAGE_DIR=../../Volumes/IGNORED/ProvisionTests
## Packages
PACKAGES="git bash curl sudo which"

View File

@@ -1,7 +1,4 @@
#!/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 ##
@@ -12,7 +9,6 @@ source ../../source.env
## Main ##
# Create folders.
mkdir -pv "$PT_STORAGE_DIR/arch"
mkdir -pv "$PT_STORAGE_DIR/debian"
mkdir -pv "$PT_STORAGE_DIR/fedora"

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

@@ -1,58 +0,0 @@
# 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-app:
image: wordpress
restart: always
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: wp-db
WORDPRESS_DB_USER: $WORDPRESS_DB_USER
WORDPRESS_DB_PASSWORD: $WORDPRESS_DB_PASSWORD
WORDPRESS_DB_NAME: $WORDPRESS_DB_NAME
WP_CPU: $WP_CPU
WP_MEM: $WP_MEM
volumes:
- wordpress:/var/www/html
deploy:
mode: global
resources:
limits:
cpus: $WP_CPU
memory: $WP_MEM
wp-db:
image: mysql:8.0
restart: always
environment:
MYSQL_DATABASE: $WORDPRESS_DB_NAME
MYSQL_USER: $WORDPRESS_DB_USER
MYSQL_PASSWORD: WORDPRESS_DB_PASSWORD
MYSQL_RANDOM_ROOT_PASSWORD: '1'
WP_CPU_DB: $WP_CPU_DB
WP_MEM_DB: $WP_MEM_DB
volumes:
- db:/var/lib/mysql
deploy:
mode: global
resources:
limits:
cpus: $WP_CPU_DB
memory: $WP_MEM_DB

View File

@@ -1,35 +0,0 @@
# This file should be copied to `.env` and have its values changes as needed.
COMPOSE_BAKE=true
## Database ##
WORDPRESS_DB_HOST=db
WORDPRESS_DB_USER=exampleuser
WORDPRESS_DB_PASSWORD=examplepass
WORDPRESS_DB_NAME=exampledb
MYSQL_RANDOM_ROOT_PASSWORD=1
## 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.50
#WP_MEM=0.50G
#WP_CPU_DB=0.10
#WP_MEM_DB=0.10G
# Tested Recommended
#WP_CPU=1.00
#WP_MEM=1.00G
#WP_CPU_DB=0.25
#WP_MEM_DB=0.25G

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 ##

16
Volumes/IGNORED/README.md Normal file
View File

@@ -0,0 +1,16 @@
# Volumes/IGNORED/README.md
Docker volumes which do not need included in backups and are safe to delete
during downtime without harming the integrity of the application they support
can be directed here.
Examples could be:
- LibreTranslate's models
- These can be downloaded at any time and do not need recovered.
- Provision Tests
- These are test VMs which ensure privisionin scrips work proeprly.
They are meant to be disposed of frequently and recrated from scratch.
If working on test VMs, such as a dev or stage Nextcloud that shouldn't be
taking up backup space, this would also be a good place for them.

View File

@@ -5,7 +5,7 @@
DIR="$(dirname -- "${BASH_SOURCE[0]}")"
PROG="$(basename -- "${BASH_SOURCE[0]}")"
echo "$DIR/$PROG"
source $DIR/../source.env
source "$DIR/../source.env"
## Variables ##
@@ -71,17 +71,19 @@ else
fi
echo -e "\n`date` - Create the backup for '$DOCKER_HOME'."
$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
$time zip -r "$file.tmp" \
"$DOCKER_HOME" \
/etc/crontab /etc/cron.d \
/var/spool/cron /var/{log,mail} \
--exclude "$DOCKER_HOME/Volumes/IGNORED/*" \
1>/dev/null
mv -v "$file.tmp" "$file"
echo -e "\n`date` - Done with zipping, check size."
ls -sh $file
ls -sh "$file"
echo -e "\n`date` - Ensure other users can access the file."
chmod -v 755 $file
chmod -v 755 "$file"
if [[ "$up" == "TRUE" ]]; then
echo -e "\n`date` - Bring services back up."