Compare commits

...

46 Commits

Author SHA1 Message Date
57b2a1c986 Rename PhotoPrism example files and move resource limits to env file for project consistency. 2025-10-30 07:40:31 -07:00
c2bb70ee23 Rename files for project consistency. 2025-10-30 07:39:44 -07:00
5f1db78b25 Rename files to example. 2025-10-30 07:35:19 -07:00
89d166f0cc Resource variables do not need set in environment area. 2025-10-30 07:34:35 -07:00
05374bf501 Move resources to env file. 2025-10-30 07:29:20 -07:00
945039bd8a Update resources to be consistent with how other projects are being done, matching CPU and MEM. 2025-10-30 07:19:52 -07:00
46e786b219 Update readme for Markdown best practices. 2025-10-30 07:18:45 -07:00
f2604ff1fd Combine example files into one by moving resources to an env file. 2025-10-30 07:18:25 -07:00
f12f945a04 Finish fixing comment styling. 2025-10-30 07:06:06 -07:00
12bf792e65 Move performance resources to env file. 2025-10-30 07:05:31 -07:00
c607fe1968 Rename file so that syntax highlighting works by default. 2025-10-30 06:09:58 -07:00
50a975b8ec Begin testing Trixie. 2025-10-30 06:09:27 -07:00
40268e40b0 Add auto-generation of enabled general and server configs. 2025-10-25 15:13:31 -07:00
d92a1f1205 Remove commented branches. 2025-10-25 14:55:57 -07:00
b4b366a857 Announce the variables in a better way. 2025-10-25 14:47:52 -07:00
87048191ce Mention which branch we are using to ensure the variables are passed properly. 2025-10-25 14:46:28 -07:00
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
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
31 changed files with 457 additions and 173 deletions

12
.gitignore vendored
View File

@@ -25,9 +25,11 @@ Config/DNS/config/*
# Ignore anything in disabled folders.
disabled
*.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
@@ -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

@@ -0,0 +1,34 @@
# 2024-12-30 Hyperling
# Gitea self-hosted git server!
# https://hub.docker.com/r/gitea/gitea
# https://docs.gitea.com/installation/install-with-docker
# Takes nearly double the resources of Gogs.
# Has a nicer UI and more features. Can anyone say, "Dark Theme"? ;D
services:
app:
## Database ##
# SQL Lite
## App ##
container_name: gitea-app
image: gitea/gitea:latest
restart: always
ports:
- "3001:3000"
- "2201:22"
volumes:
- ../../Volumes/Gitea/gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
environment:
- USER_UID=1000
- USER_GID=1000
deploy:
mode: global
resources:
limits:
cpus: $CPU
memory: $MEM

View File

@@ -1,71 +0,0 @@
# 2024-12-30 Hyperling
# Gitea self-hosted git server!
# https://hub.docker.com/r/gitea/gitea
# https://docs.gitea.com/installation/install-with-docker
# Takes nearly double the resources of Gogs.
# Has a nicer UI and more features. Can anyone say, "Dark Theme"? ;D
services:
app:
## Database ##
# SQL Lite
## App ##
container_name: gitea-app
image: gitea/gitea:latest
restart: always
ports:
- "3001:3000"
- "2201:22"
volumes:
- ../../Volumes/Gitea/gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
environment:
- USER_UID=1000
- USER_GID=1000
#networks:
# - gitea
deploy:
mode: global
resources:
limits:
# Minimum requirements for processes to start properly.
# Takes a while to start up and migrate projects, but does work.
###cpus: '0.05'
###memory: 64M
# Production-quality performance.
###cpus: '0.10'
###memory: 128M
# Extra! Idles around 120M but exceeds 170M sometimes after busy.
###cpus: '0.25'
###memory: 192M
# Final thoughts after tests.
cpus: '0.50'
memory: 192M
## Test Results ##
# 0.05 CPU, 64MB RAM
# - Migrate https://github.com/hyperling/ansible
# - Page: 10512ms Template: 2111ms
# - Migrate https://github.com/hyperling/website
# - Page: 6514ms Template: 807ms
# - Migrate https://github.com/hyperling/docker
# - Page: 8105ms Template: 1201ms
# 0.10 CPU, 128MB RAM
# - Migrate https://github.com/hyperling/ansible
# - Page: 2501ms Template: 294ms
# - Migrate https://github.com/hyperling/website
# - Page: 786ms Template: 194ms
# - Migrate https://github.com/hyperling/docker
# - Page: 1283ms Template: 87ms
# 0.25 CPU, 192MB RAM
# - Migrate https://github.com/hyperling/ansible
# - Page: 439ms Template: 101ms
# - Migrate https://github.com/hyperling/website
# - Page: 541ms Template: 2ms
# - Migrate https://github.com/hyperling/docker
# - Page: 254ms Template: 86ms
## ##

45
Config/Gitea/example.env Normal file
View File

@@ -0,0 +1,45 @@
# This file should be copied as `.env`.
## Docker ##
COMPOSE_BAKE=true
## Performance ##
# Micro Server
CPU=0.20
MEM=0.20G
# Standard Server
#CPU=1.00
#MEM=1.00G
## Test Results
# 0.05 CPU, 64MB RAM
# : Minimum requirements for processes to start properly.
# : Takes a while to start up and migrate projects, but does work.
# - Migrate https://github.com/hyperling/ansible
# - Page: 10512ms Template: 2111ms
# - Migrate https://github.com/hyperling/website
# - Page: 6514ms Template: 807ms
# - Migrate https://github.com/hyperling/docker
# - Page: 8105ms Template: 1201ms
# 0.10 CPU, 128MB RAM
# : Production-quality performance.
# - Migrate https://github.com/hyperling/ansible
# - Page: 2501ms Template: 294ms
# - Migrate https://github.com/hyperling/website
# - Page: 786ms Template: 194ms
# - Migrate https://github.com/hyperling/docker
# - Page: 1283ms Template: 87ms
# 0.25 CPU, 192MB RAM
# : Extra! Idles around 120M but exceeds 170M sometimes after busy.
# - Migrate https://github.com/hyperling/ansible
# - Page: 439ms Template: 101ms
# - Migrate https://github.com/hyperling/website
# - Page: 541ms Template: 2ms
# - Migrate https://github.com/hyperling/docker
# - Page: 254ms Template: 86ms
# 0.50 CPU, 192MB RAM
# : Final thoughts after more production usage.
##

View File

@@ -1,7 +1,7 @@
# 2025-08-13 Hyperling
## Image ##
FROM debian:bookworm-slim
FROM debian:trixie-slim
## Setup ##
# System Dependencies

View File

@@ -26,5 +26,5 @@ services:
mode: global
resources:
limits:
cpus: '0.10'
memory: 64M
cpus: $CPU
memory: $MEM

View File

@@ -6,13 +6,13 @@
COMPOSE_BAKE=true
#
## Git Website Repository
## Git Website Repository ##
#
REPO=https://git.hyperling.com/me/hugo-jackanope
BRANCH=main
BRANCH=prod
#
## Web Environments
## Web Environments ##
# Please use values YES/TRUE and NO/FALSE.
# Whether to start NGINX
@@ -20,3 +20,9 @@ PROD=YES
# Whether to start Hugo Server
DEV=NO
#
## Resources ##
#
CPU=0.10
MEM=0.10G

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

@@ -12,8 +12,6 @@ services:
- 8317:8080
environment:
- BRANCH=$BRANCH
- CPU=$CPU
- MEM=$MEM
volumes:
- ./files:/var/www/api/files
deploy:

View File

@@ -121,8 +121,8 @@ services:
mode: global
resources:
limits:
cpus: '2.00'
memory: 2G
cpus: $CPU
memory: $MEM
## Database Server (recommended)
## see https://docs.photoprism.app/getting-started/faq/#should-i-use-sqlite-mariadb-or-mysql
@@ -152,8 +152,8 @@ services:
mode: global
resources:
limits:
cpus: '0.50'
memory: 512M
cpus: $CPU_DB
memory: $MEM_DB
# Configured but not using this, would prefer to update manually, and the
# volume needs also seem sort of odd. Do not want it to harm other projects.

View File

@@ -1,3 +1,10 @@
# This file will need to be copied as `.env`.
##
# Docker
##
COMPOSE_BAKE=true
##
# PhotoPrism
@@ -38,3 +45,12 @@ MARIADB_DATABASE = "photoprism"
MARIADB_USER = "photoprism"
MARIADB_PASSWORD = "PleaseChangeMe"
MARIADB_ROOT_PASSWORD = "PleaseChangeMe"
##
# Performance
##
CPU=2.00
MEM=2.00G
CPU_DB=0.50
MEM_DB=0.50G

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

@@ -1,3 +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

@@ -1,11 +1,13 @@
#!/usr/bin/env bash
sh -c "rm -rfv prov-test"
echo "Downloading Repo '$REPO' : Branch '$BRANCH'"
git clone $REPO --branch=$BRANCH prov-test
cd prov-test
echo "Starting Executable Script"
echo "Starting Executable Script '$EXEC'"
tail -F /var/mail/mail &
tail -F /var/mail/ansible &

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"
@@ -20,5 +19,5 @@ EXTRA_UBUNTU=""
## Script
REPO=https://git.hyperling.com/me/env-ansible
BRANCH=dev
EXEC="./setup.sh -l"
BRANCH=stage
EXEC="./setup.sh -l -g -s"

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

@@ -1,5 +1,7 @@
# Initial Setup Instructions
How to first begin using this subproject.
1. Move to the directory of this README.
```
$ cd $DOCKER_HOME/Config/ReverseProxy
@@ -10,6 +12,7 @@ How to first begin using this subproject.
# ./create_placeholder_certs.sh
```
1. Make any personal changes to `./config/nginx.conf`.
1. Copy the example files as `docker-compose.yml` and `.env`.
1. Build the project.
```
# docker compose build
@@ -20,8 +23,8 @@ How to first begin using this subproject.
```
1. Verify it started correctly, no configuration file errors.
```
# docker logs reverseproxy-app-1
# docker logs reverseproxy-certbot-1
# docker logs rp-app
# docker logs rp-certbot
```
1. Create the real certificates.
```
@@ -34,6 +37,7 @@ How to first begin using this subproject.
```
## DO NOT
* Edit any configurations or website data inside the container. It is destroyed on each build.
* Instead, modify the files in `./config/` then use the Update Config commands below.
* Install any additional software inside of the container. It will not persist a down and up.
@@ -41,17 +45,22 @@ How to first begin using this subproject.
* Alternatively write a script such as `../Nextcloud/fixes.ksh` which is run after every upgrade.
# Other Commands
Tasks which will also likely come up while using this subproject.
## Stop
If the proxy needs turned off either stop or down may be used.
```
# docker compose stop
# docker compose down
```
## Upgrade
Upgrading the containers should be as easy as this:
```
# docker compose down
# docker compose pull
@@ -60,15 +69,19 @@ Upgrading the containers should be as easy as this:
```
## Update Config
Replace the configuration based on any new, updated, or removed files.
This may be possible to do when the system is up, but the best results have come from going down and back up.
This is essentially an upgrade but there is no pull.
```
# docker compose down
# docker compose build
# docker compose up -d
```
If wanted as a one-line command:
```
# docker compose down && docker compose build && docker compose up -d
```

View File

@@ -24,8 +24,8 @@ services:
mode: global
resources:
limits:
cpus: '0.20'
memory: 64M
cpus: $CPU
memory: $MEM
certbot:
container_name: rp-certbot
@@ -39,5 +39,5 @@ services:
mode: global
resources:
limits:
cpus: '0.10'
memory: 32M
cpus: $CPU_LE
memory: $MEM_LE

View File

@@ -1,49 +0,0 @@
# 2022-10-05 Hyperling
# Reverse Proxy with LetsEncrypt Certbot.
# This is a revised version of these works:
# https://phoenixnap.com/kb/docker-nginx-reverse-proxy
# https://www.docker.com/blog/how-to-use-the-official-nginx-docker-image/
# https://pentacent.medium.com/nginx-and-lets-encrypt-with-docker-in-less-than-5-minutes-b4b8a60d3a71
services:
app:
container_name: rp-app
build:
context: ./
network: host
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ../../Volumes/ReverseProxy/letsencrypt:/etc/nginx/letsencrypt
- ../../Volumes/ReverseProxy/letsencrypt-certs:/etc/nginx/certs
command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"
deploy:
mode: global
resources:
limits:
cpus: '1.00'
memory: 512M
reservations:
cpus: '0.25'
memory: 128M
certbot:
container_name: rp-certbot
image: certbot/certbot
restart: always
volumes:
- ../../Volumes/ReverseProxy/letsencrypt:/etc/letsencrypt
- ../../Volumes/ReverseProxy/letsencrypt-certs:/etc/letsencrypt/nginx
entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; cp -rL /etc/letsencrypt/live/* /etc/letsencrypt/nginx/; sleep 12h & wait $${!}; done;'"
deploy:
mode: global
resources:
limits:
cpus: '0.50'
memory: 256M
reservations:
cpus: '0.25'
memory: 128M

View File

@@ -0,0 +1,19 @@
# This file will need copied as `.env` and adjusted as necessary.
## Docker ##
COMPOSE_BAKE=true
## Performance ##
# Micro Server
CPU=0.10
MEM=0.10G
CPU_LE=0.05
MEM_LE=0.05G
# Capable Server
#CPU=0.50
#MEM=0.50G
#CPU_LE=0.25
#MEM_LE=0.25G

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

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 ##
@@ -16,6 +16,39 @@ 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.
@@ -30,24 +63,34 @@ 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` - 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."
manage.sh -u
else
echo -e "\n`date` - Skipping restoring services."
fi
## Finish ##