Compare commits

..

47 Commits

Author SHA1 Message Date
0371059706 Match tag exactly for deletion by only checking what's between the periods. 2025-11-28 15:05:35 -07:00
1796a21579 Change is working great! env-docker became the tag. 2025-11-28 14:56:28 -07:00
8bfe49c947 Add note as to what's about to change with backup script. 2025-11-28 14:55:05 -07:00
361c29cf25 Add a note not to edit files in the LetsEncrypt folders. 2025-11-28 14:31:53 -07:00
921c450f03 Remove TBD's in FDroid env file. 2025-11-21 18:03:23 -07:00
933d307254 Create a share directory for FDroid Server so that items can be copied in and out for testing. 2025-11-21 17:57:55 -07:00
6a2dcba0f9 Move guide URL for FDroid Server to README. 2025-11-21 17:57:19 -07:00
2d565c94f0 Run pull and build before taking the container down. 2025-11-21 08:29:22 -07:00
b490c84b37 Add note for removing FDroid repo config lines if they already exist. 2025-11-17 14:04:05 -07:00
fa25327462 Reorder the FDroid build file so that the base image settings are separate from the advanced configuration. 2025-11-17 14:02:55 -07:00
9ab6335a3c Pull and the build the container while it's still up, reducing downtime. 2025-11-16 07:00:45 -07:00
0eb2ecf033 Changes to compose and env files to get FDroid build working successfully. 2025-11-11 20:12:33 -07:00
a233f32751 Run script is no longer needed to keep the container running, build file uses nginx as the command which also provides the web log. 2025-11-11 20:10:42 -07:00
99afb5ac50 Container is now working!! Apps do not register though, likely since they are missing metadata. 2025-11-11 20:09:15 -07:00
f16b44a5b6 Start the container in root's home, not /. 2025-11-11 20:08:13 -07:00
87a571c89a Create super simple container for playing around in. 2025-11-11 15:51:00 -07:00
52d108fa75 Get the FDroid project to the point where it starts and runs. Not creating the actual repo under the webserver yet though. Does not seem to be keeping the APKs the Dockerfile downloads. 2025-11-11 15:14:57 -07:00
df3a4cb354 Update wording for the website's files directory README. 2025-11-11 12:03:34 -07:00
44f4aa55c6 Prep file does not need to source the master env file. 2025-11-10 14:14:08 -07:00
7199a88627 Move the REPO and WEBROOT vars to the Dockerfile since that's the only place they're needed. Dir is getting created successfully now. 2025-11-01 13:16:31 -07:00
bf2499e6ce F-Droid: Fix variable error; MEM not RAM. 2025-11-01 12:59:42 -07:00
e8e4b69ed6 Resource parameters are not needed in the env section. Change the order of the app and db. 2025-11-01 12:02:41 -07:00
9bc7988b81 More work on the F-Droid Repo setup. 2025-11-01 11:54:34 -07:00
0ed000cd20 Automatically run the prep, maintenance, and purge scripts. begin adding explicit double quotes. 2025-11-01 11:54:14 -07:00
4264e47577 Wordpress config: Differentiate the service name from the container name. 2025-11-01 11:53:27 -07:00
1bcf5f3e7b Create untested configuration for hosting an F-Droid repository. 2025-11-01 04:28:27 -07:00
221a446996 Add other cases of prod, dev, and stage. 2025-10-30 08:05:25 -07:00
2e4520d6ae Eliminate the word should for will and need. 2025-10-30 07:58:56 -07:00
7dd2ef5e75 Standardize the DNS setup. 2025-10-30 07:48:36 -07:00
ffabb62f94 Standardize the Gogs setup. 2025-10-30 07:46:42 -07:00
b76898d146 Rename LibreTranslate files for project consistency. 2025-10-30 07:41:59 -07:00
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
51 changed files with 666 additions and 320 deletions

12
.gitignore vendored
View File

@@ -39,7 +39,11 @@ Config/Hyperling.com/files/*
# Ignore things like "Config/Hyperling.com-Stage/"
*-Stage
*-stage
*-STAGE
Stage-*
stage-*
STAGE-*
# Ignore copies of the Hugo configuration, such as "Config/Hugo-MyWebsite".
Hugo-*
@@ -47,6 +51,14 @@ Hugo-*
# Ignore Prod and Dev copies as well.
*-Prod
*-prod
*-PROD
Prod-*
prod-*
PROD-*
*-Dev
*-dev
*-DEV
Dev-*
dev-*
DEV-*

View File

@@ -1,5 +1,5 @@
# Local DNS
Host a local DNS server in case your router/gateway is not cutting it. Allows
the ability to use simple names across the network witrhout editing `/etc/hosts`
on each machine. The IP of this server should be added to the router/gateway's
on each machine. The IP of this server will be added to the router/gateway's
settings so that all machines on the network know to use it and can benefit.

View File

@@ -19,8 +19,5 @@ services:
mode: global
resources:
limits:
cpus: '0.50'
memory: 512M
reservations:
cpus: '0.25'
memory: 128M
cpus: $CPU
memory: $MEM

12
Config/DNS/example.env Normal file
View File

@@ -0,0 +1,12 @@
# This file will need copied as `.env`.
## Docker ##
CMPOSE_BAKE=true
## Performance ##
# Standard Server
CPU=0.50
MEM=0.50G

View File

@@ -46,8 +46,8 @@ fi
echo "nameserver 1.1.1.1" > /etc/resolv.conf
echo -e "\n*** Start the docker container ***"
docker compose down
docker compose build
docker compose down
docker compose up -d
echo -e "\n*** Now use the local process for DNS ***\n/etc/resolv.conf:"

View File

@@ -42,7 +42,7 @@ function usage {
}
function check {
# Accepts parameter of status and whether the program should quit.
# Accepts parameter of status and whether the program is needs to quit.
status=$1
quit=$2
if [[ $status != 0 ]]; then

View File

@@ -0,0 +1,118 @@
# Build a container which hosts Android apps through an F-Droid repository.
# Base Image #
FROM debian:trixie-slim
# variables #
ENV WEBROOT="/var/www/html"
ENV FDROID="/root/fdroid"
ENV REPO="$FDROID/repo"
# Install Packages#
# https://f-droid.org/en/docs/Installing_the_Server_and_Repo_Tools/#debianubuntumintetc
RUN apt-get update && apt-get install -y sudo bash curl git vim nginx
COPY files/debian-backports.sources /etc/apt/sources.list.d/
RUN apt-get update && apt-get install -y -t trixie-backports fdroidserver
# Generate F-Droid Repo #
USER root
RUN mkdir -pv "$FDROID"
WORKDIR "$FDROID"
RUN fdroid init
# Start Command #
CMD nginx -g "daemon off;"
# This is where the image would get published. #
# Configure F-Droid Repo #
ARG REPO_DOMAIN
ENV REPO_DOMAIN="$REPO_DOMAIN"
ARG REPO_NAME
ENV REPO_NAME="$REPO_NAME"
# TBD/TODO: Add commands to remove repo_url and repo_name if they already exist.
RUN sed -i "$ a repo_url: $REPO_DOMAIN/fdroid/repo" "$FDROID/config.yml"
RUN sed -i "$ a repo_name: $REPO_NAME" "$FDROID/config.yml"
RUN fdroid update
# Advanced Variables #
ARG FILE00
ENV FILE00="$FILE00"
ARG FILE01
ENV FILE01="$FILE01"
ARG FILE02
ENV FILE02="$FILE02"
ARG FILE03
ENV FILE03="$FILE03"
ARG FILE04
ENV FILE04="$FILE04"
ARG FILE05
ENV FILE05="$FILE05"
ARG FILE06
ENV FILE06="$FILE06"
ARG FILE07
ENV FILE07="$FILE07"
ARG FILE08
ENV FILE08="$FILE08"
ARG FILE09
ENV FILE09="$FILE09"
ARG FILE10
ENV FILE10="$FILE10"
ARG FILE11
ENV FILE11="$FILE11"
ARG FILE12
ENV FILE12="$FILE12"
ARG FILE13
ENV FILE13="$FILE13"
ARG FILE14
ENV FILE14="$FILE14"
ARG FILE15
ENV FILE15="$FILE15"
ARG FILE16
ENV FILE16="$FILE16"
ARG FILE17
ENV FILE17="$FILE17"
ARG FILE18
ENV FILE18="$FILE18"
ARG FILE19
ENV FILE19="$FILE19"
# Download Remote Files #
RUN mkdir -pv /root/fdroid/repo
RUN bash -c 'if [[ -n "$FILE00" ]]; then wget -P "$REPO" "$FILE00"; fi'
RUN bash -c 'if [[ -n "$FILE01" ]]; then wget -P "$REPO" "$FILE01"; fi'
RUN bash -c 'if [[ -n "$FILE02" ]]; then wget -P "$REPO" "$FILE02"; fi'
RUN bash -c 'if [[ -n "$FILE03" ]]; then wget -P "$REPO" "$FILE03"; fi'
RUN bash -c 'if [[ -n "$FILE04" ]]; then wget -P "$REPO" "$FILE04"; fi'
RUN bash -c 'if [[ -n "$FILE05" ]]; then wget -P "$REPO" "$FILE05"; fi'
RUN bash -c 'if [[ -n "$FILE06" ]]; then wget -P "$REPO" "$FILE06"; fi'
RUN bash -c 'if [[ -n "$FILE07" ]]; then wget -P "$REPO" "$FILE07"; fi'
RUN bash -c 'if [[ -n "$FILE08" ]]; then wget -P "$REPO" "$FILE08"; fi'
RUN bash -c 'if [[ -n "$FILE09" ]]; then wget -P "$REPO" "$FILE09"; fi'
RUN bash -c 'if [[ -n "$FILE10" ]]; then wget -P "$REPO" "$FILE10"; fi'
RUN bash -c 'if [[ -n "$FILE11" ]]; then wget -P "$REPO" "$FILE11"; fi'
RUN bash -c 'if [[ -n "$FILE12" ]]; then wget -P "$REPO" "$FILE12"; fi'
RUN bash -c 'if [[ -n "$FILE13" ]]; then wget -P "$REPO" "$FILE13"; fi'
RUN bash -c 'if [[ -n "$FILE14" ]]; then wget -P "$REPO" "$FILE14"; fi'
RUN bash -c 'if [[ -n "$FILE15" ]]; then wget -P "$REPO" "$FILE15"; fi'
RUN bash -c 'if [[ -n "$FILE16" ]]; then wget -P "$REPO" "$FILE16"; fi'
RUN bash -c 'if [[ -n "$FILE17" ]]; then wget -P "$REPO" "$FILE17"; fi'
RUN bash -c 'if [[ -n "$FILE18" ]]; then wget -P "$REPO" "$FILE18"; fi'
RUN bash -c 'if [[ -n "$FILE19" ]]; then wget -P "$REPO" "$FILE19"; fi'
RUN fdroid update -c
# Publish Repo Contents to Web Root #
RUN cp -r "$REPO/"* "$WEBROOT/"

View File

@@ -0,0 +1,23 @@
# F-Droid Repo
Simple container to create a 3rd party repository to be imported into F-Droid.
Downloads all the APKs during the build process and loads them automatically,
does not need any interaction other than modifying the `.env` with the URLs
of the apps you would like to be present.
If any apps get updated, rebuilding the container should pull any changes.
``` shell
docker compose build
docker compose down
docker compose up -d
```
## Guide followed to create this Container
https://f-droid.org/en/docs/Setup_an_F-Droid_App_Repo/
## App Metadata
TBD

View File

@@ -0,0 +1,70 @@
# 2025-11-01 Hyperling
# Create a 3rd party F-Droid repository for providing app updates.
services:
app:
container_name: fd-app
build:
context: ./
network: host
args:
#WEBROOT: ${WEBROOT}
#REPO: ${REPO}
REPO_DOMAIN: ${REPO_DOMAIN}
REPO_NAME: ${REPO_NAME}
FILE00: ${FILE00}
FILE01: ${FILE01}
FILE02: ${FILE02}
FILE03: ${FILE03}
FILE04: ${FILE04}
FILE05: ${FILE05}
FILE06: ${FILE06}
FILE07: ${FILE07}
FILE08: ${FILE08}
FILE09: ${FILE09}
FILE10: ${FILE10}
FILE11: ${FILE11}
FILE12: ${FILE12}
FILE13: ${FILE13}
FILE14: ${FILE14}
FILE15: ${FILE15}
FILE16: ${FILE16}
FILE17: ${FILE17}
FILE18: ${FILE18}
FILE19: ${FILE19}
restart: always
ports:
- "8015:80"
environment:
#- WEBROOT=$WEBROOT
#- REPO=$REPO
- REPO_DOMAIN=$REPO_DOMAIN
- REPO_NAME=$REPO_NAME
- FILE00=$FILE00
- FILE01=$FILE01
- FILE02=$FILE02
- FILE03=$FILE03
- FILE04=$FILE04
- FILE05=$FILE05
- FILE06=$FILE06
- FILE07=$FILE07
- FILE08=$FILE08
- FILE09=$FILE09
- FILE10=$FILE10
- FILE11=$FILE11
- FILE12=$FILE12
- FILE13=$FILE13
- FILE14=$FILE14
- FILE15=$FILE15
- FILE16=$FILE16
- FILE17=$FILE17
- FILE18=$FILE18
- FILE19=$FILE19
volumes:
- ../../Volumes/F-DroidRepo/share:/root/share
deploy:
mode: global
resources:
limits:
cpus: $CPU
memory: $MEM

View File

@@ -0,0 +1,44 @@
# This file will need copied as `.env` and to have its values changed.
## Docker ##
COMPOSE_BAKE=true
## Performance ##
CPU=0.25
MEM=0.25G
## Repo Settings ##
#WEBROOT="/var/www/html"
#REPO="/root/fdroid"
REPO_DOMAIN="https://fdroid.hyperling.com"
REPO_NAME="Hyperling's Apps"
## Files ##
# Should be provided as URLs directly to the APK files.
# TBD: Eventually change APKs to not have version number in them.
# - Currently being done because Obtainium does not read the Gitea release/tag.
FILE00="https://git.hyperling.com/me/android-carb-up/releases/download/latest/CarbUp_v1.0.1.apk"
FILE01="https://git.hyperling.com/me/flutter-expense-tracker/releases/download/latest/ExpenseTracker_v0.1.3.apk"
FILE02="https://git.hyperling.com/me/android-infinite-timer/releases/download/latest/InfiniteTimer_v1.1.1.apk"
FILE03="https://git.hyperling.com/me/android-45-minute-rule/releases/download/latest/The45MinuteRule_v1.0.7.apk"
FILE04="https://git.hyperling.com/me/android-tictactoe/releases/download/latest/TicTacToe_v1.1.0.apk"
FILE05="https://git.hyperling.com/me/android-hypergames/releases/download/latest/HyperGames_v0.0.11.apk"
FILE06=""
FILE07=""
FILE08=""
FILE09=""
FILE10="https://git.hyperling.com/me/ebook-freedom-flyer/releases/download/latest/VoluntarySovereignty.pdf"
FILE11="https://git.hyperling.com/me/ebook-health-protocol/releases/download/latest/HyperlingsHealthProtocol.pdf"
FILE12=""
FILE13=""
FILE14=""
FILE15=""
FILE16=""
FILE17=""
FILE18=""
FILE19=""

View File

@@ -0,0 +1,6 @@
Types: deb deb-src
URIs: http://deb.debian.org/debian
Suites: trixie-backports
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg
Enabled: yes

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 wll need 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

@@ -0,0 +1,33 @@
# 2024-12-30 Hyperling
# Gogs self-hosted git server!
# https://hub.docker.com/r/gogs/gogs
# https://gist.github.com/ahromis/4ce4a58623847ca82cb1b745c2f83c82
# Takes nearly half the resources of Gitea.
# Has a more basic UI and may be lacking features. So slim though!!
services:
app:
## Database ##
# SQL Lite
## App ##
container_name: gogs-app
image: gogs/gogs:latest
restart: always
ports:
- "3000:3000"
- "2202:22"
volumes:
- ../../Volumes/Gogs/gogs:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
environment:
- "RUN_CROND=true"
deploy:
mode: global
resources:
limits:
cpus: $CPU
memory: $MEM

View File

@@ -1,70 +0,0 @@
# 2024-12-30 Hyperling
# Gogs self-hosted git server!
# https://hub.docker.com/r/gogs/gogs
# https://gist.github.com/ahromis/4ce4a58623847ca82cb1b745c2f83c82
# Takes nearly half the resources of Gitea.
# Has a more basic UI and may be lacking features. So slim though!!
services:
app:
## Database ##
# SQL Lite
## App ##
container_name: gogs-app
image: gogs/gogs:latest
restart: always
ports:
- "3000:3000"
- "2202:22"
volumes:
- ../../Volumes/Gogs/gogs:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
environment:
- "RUN_CROND=true"
#networks:
# - gogs
deploy:
mode: global
resources:
limits:
# Minimum requirements for processes to start properly.
# Works pretty well! Takes a little to migrate, otherwise snappy!
###cpus: '0.02'
###memory: 32M
# Seamless performance.
###cpus: '0.05'
###memory: 64M
# Extra! Idles at 50M, will probably never use all this for 1 user.
###cpus: '0.25'
###memory: 192M
# Final thoughts after tests.
cpus: '0.50'
memory: 96M
## Test Results ##
# 0.02 CPU, 32MB RAM
# - Migrate https://github.com/hyperling/ansible
# - Page: 20684ms Template: 3001ms, Page: 16503ms Template: 492ms
# - Migrate https://github.com/hyperling/website
# - Page: 12495ms Template: 800ms
# - Migrate https://github.com/hyperling/docker
# - Page: 9591ms Template: 591ms
# 0.05 CPU, 64MB RAM
# - Migrate https://github.com/hyperling/ansible
# - Page: 4602ms Template: 2ms
# - Migrate https://github.com/hyperling/website
# - Page: 3269ms Template: 1ms
# - Migrate https://github.com/hyperling/docker
# - Page: 2481ms Template: 1ms
# 0.25 CPU, 192MB RAM
# - Migrate https://github.com/hyperling/ansible
# - Page: 575ms Template: 2ms
# - Migrate https://github.com/hyperling/website
# - Page: 131ms Template: 4ms
# - Migrate https://github.com/hyperling/docker
# - Page: 350ms Template: 1ms
## ##

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

@@ -0,0 +1,45 @@
# This file will need to be renamed as `.env`.
## Docker ##
COMPOSE_BAKE=true
## Performance ##
# Micro Server
CPU=0.10
MEM=0.10G
# Standard Server
#CPU=0.50
#MEM=0.50G
## Test Results
# 0.02 CPU, 32MB RAM
# : Minimum requirements for processes to start properly.
# : Works pretty well! Takes a little to migrate, otherwise snappy!
# - Migrate https://github.com/hyperling/ansible
# - Page: 20684ms Template: 3001ms, Page: 16503ms Template: 492ms
# - Migrate https://github.com/hyperling/website
# - Page: 12495ms Template: 800ms
# - Migrate https://github.com/hyperling/docker
# - Page: 9591ms Template: 591ms
# 0.05 CPU, 64MB RAM
# : Seamless performance.
# - Migrate https://github.com/hyperling/ansible
# - Page: 4602ms Template: 2ms
# - Migrate https://github.com/hyperling/website
# - Page: 3269ms Template: 1ms
# - Migrate https://github.com/hyperling/docker
# - Page: 2481ms Template: 1ms
# 0.25 CPU, 192MB RAM
# : Extra! Idles at 50M, will probably never use all this for 1 user.
# - Migrate https://github.com/hyperling/ansible
# - Page: 575ms Template: 2ms
# - Migrate https://github.com/hyperling/website
# - Page: 131ms Template: 4ms
# - Migrate https://github.com/hyperling/docker
# - Page: 350ms Template: 1ms
# 0.50 CPU, 96MB RAM
# : Final thoughts after tests.
##

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

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

View File

@@ -1,4 +1,4 @@
# This file should be renamed '.env' and have any private values modified.
# This file will need renamed '.env' and have any private values modified.
## 2025-06-16
## Performance Notes for Enabling BAKE
@@ -10,7 +10,7 @@ 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.
# Needs to be in the full "--branch my-branch" syntax.
BRANCH=
#BRANCH="--branch dev"

View File

@@ -1,5 +1,5 @@
# Hyperling.com - files/
This is copied to the container's www/files/ folder for hosting static content.
This is a volume for the container's /var/www/files/ which hosts static content.
TBD: Make this a volume, rather than copying with `Dockerfile`.
TBD: Move this to Volumes?

View File

@@ -1,4 +1,4 @@
# This file should be renamed '.env' and have any private values modified.
# This file will need renamed '.env' and have any private values modified.
COMPOSE_BAKE=true

View File

@@ -1,7 +1,7 @@
#!/bin/bash
# 2023-08-25 Hyperling
# Put the cron command in a script as well as other automation.
# This should be added to root's crontab with the full path, such as:
# This will need added to root's crontab with the full path, such as:
# */5 * * * * /opt/Docker/Config/Nextcloud/cron.ksh
DIR="$(dirname -- "${BASH_SOURCE[0]}")"

View File

@@ -1,4 +1,4 @@
# Example environment file for Nextcloud stack, should be copied as `.env`.
# Example environment file for Nextcloud stack, needs copied as `.env`.
# The variables here only apply to the compose file. If you need it passed to a
# container then it also needs specified in its `environment:` operator.
@@ -32,7 +32,7 @@ PHP_UPLOAD_LIMIT=32M
#
## MariaDB ##
#
# Should load automatically the first run. Then config.php is the source of
# Will load automatically the first run. Then config.php is the source of
# truth for these values. So, if something like the DB password is changed,
# updating it here will have no effect. This is only used for the install.
@@ -53,7 +53,7 @@ REDIS_HOST_PASSWORD=someredispassword
###
#### OnlyOffice ##
###
### How Nextcloud's ONLYOFFICE Admin Settings should be set up:
### How Nextcloud's ONLYOFFICE Admin Settings needs set up:
### OO Address: https://FQDN-For-Reverse-Proxied-OO-Server
### OO Secret: Contents-Of-$JWT_SECRET
### OO Header:

View File

@@ -1,4 +1,4 @@
# Example environment file for Nextcloud stack, should be copied as `.env`.
# Example environment file for Nextcloud stack, needs copied as `.env`.
# The variables here only apply to the compose file. If you need it passed to a
# container then it also needs specified in its `environment:` operator.
@@ -32,7 +32,7 @@ PHP_UPLOAD_LIMIT=5G
#
## MariaDB ##
#
# Should load automatically the first run. Then config.php is the source of
# Will load automatically the first run. Then config.php is the source of
# truth for these values. So, if something like the DB password is changed,
# updating it here will have no effect. This is only used for the install.
@@ -53,7 +53,7 @@ REDIS_HOST_PASSWORD=someredispassword
#
## OnlyOffice ##
#
# How Nextcloud's ONLYOFFICE Admin Settings should be set up:
# How Nextcloud's ONLYOFFICE Admin Settings needs set up:
# OO Address: https://FQDN-For-Reverse-Proxied-OO-Server
# OO Secret: Contents-Of-$JWT_SECRET
# OO Header:

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
@@ -8,7 +15,7 @@ PHOTOPRISM_ADMIN_USER = "admin" # admin login username
PHOTOPRISM_ADMIN_PASSWORD = "PleaseChangeMe" # initial admin password (8-72 characters)
# External FQDN
# Should be in the format "http(s)://domain.name(:port)/(path)".
# In the format "http(s)://domain.name(:port)/(path)".
# Seems to work best if you leave off the s if behind a revese proxy,
# such as: PHOTOPRISM_SITE_URL = "http://photoprism.example.com"
PHOTOPRISM_SITE_URL = "http://localhost:2342"
@@ -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

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

@@ -1,4 +1,4 @@
# This file should be renamed '.env' and have any private values modified.
# This file will need renamed '.env' and have any private values modified.
COMPOSE_BAKE=true
@@ -19,7 +19,5 @@ EXTRA_UBUNTU=""
## Script
REPO=https://git.hyperling.com/me/env-ansible
#BRANCH=dev
BRANCH=stage
#BRANCH=prod
EXEC="./setup.sh -l"
EXEC="./setup.sh -l -g -s"

View File

@@ -4,7 +4,6 @@
DIR="$(dirname -- "${BASH_SOURCE[0]}")"
source $DIR/.env
source ../../source.env
## Main ##

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,36 +45,45 @@ 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:
Upgrading the containers is as easy as this:
```
# docker compose down
# docker compose pull
# docker compose build
# docker compose down
# docker compose up -d
```
## 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 down
# docker compose up -d
```
If wanted as a one-line command:
```
# docker compose down && docker compose build && docker compose up -d
# docker compose build && docker compose down && docker compose up -d
```
## Add New Config
@@ -80,4 +93,4 @@ If wanted as a one-line command:
1. Restart the project based on Update Config above.
1. (Optional) Now you may run the letsencrypt script for a real certificate.
1. (Optional) Run another Update Config to make sure the certs are loaded.
1. Done! If set up correctly the site should be live.
1. Done! If set up correctly the site will be live.

View File

@@ -1,6 +1,6 @@
# 2024-12-31 Hyperling
# A dummy test file since true scripts are being kept private.
# This should help anyone understand how the project is being used.
# This will help anyone understand how the project is being used.
## Instructions ##
# Add this without the comment to your /etc/hosts to test that it is working,
@@ -11,9 +11,9 @@
# cd $DOCKER_HOME/Config/ReverseProxy && docker compose build && docker compose up -d
# Then from the system with the modified /etc/hosts,
# curl --insecure git.example.com
# You should see activity in the container log as well as the contents of the
# You will see activity in the container log as well as the contents of the
# proxied website in the terminal, NOT git.example.com. If using a browser then you
# should notice that the URL is still git.example.com but the website is correct.
# will notice that the URL is still git.example.com but the website is correct.
# Force HTTPS
server {

View File

@@ -1,6 +1,6 @@
# 2023-07-08 Hyperling
# A dummy test file since true scripts are being kept private.
# This should help anyone understand how the project is being used.
# This will help anyone understand how the project is being used.
## Instructions ##
# Add this without the comment to your /etc/hosts to test that it is working,
@@ -11,9 +11,9 @@
# cd $DOCKER_HOME/Config/ReverseProxy && docker compose build && docker compose up -d
# Then from the system with the modified /etc/hosts,
# curl --insecure html.example.com
# You should see activity in the container log as well as the contents of the
# proxied website in the terminal, NOT html.example.com. If using a browser then you
# should notice that the URL is still html.example.com but the website is correct.
# You will see activity in the container log as well as the contents of the
# proxied website in the terminal, NOT git.example.com. If using a browser then you
# will notice that the URL is still git.example.com but the website is correct.
# Force HTTPS
server {

View File

@@ -1,6 +1,6 @@
# 2025-01-02 Hyperling
# A dummy test file since true scripts are being kept private.
# This should help others understand how to get Nextcloud working.
# This will help others understand how to get Nextcloud working.
## Instructions ##
# Add this without the comment to your /etc/hosts to test that it is working,
@@ -11,9 +11,9 @@
# cd $DOCKER_HOME/Config/ReverseProxy && docker compose build && docker compose up -d
# Then from the system with the modified /etc/hosts,
# curl --insecure cloud.example.com
# You should see activity in the container log as well as the contents of the
# proxied website in the terminal, NOT cloud.example.com. If using a browser then you
# should notice that the URL is still cloud.example.com but the website is correct.
# You will see activity in the container log as well as the contents of the
# proxied website in the terminal, NOT git.example.com. If using a browser then you
# will notice that the URL is still git.example.com but the website is correct.
server {
listen 80;

View File

@@ -1,6 +1,6 @@
# 2022-10-05 Hyperling
# A dummy test file since true scripts are being kept private.
# This should help anyone understand how the project is being used.
# This will help anyone understand how the project is being used.
## Instructions ##
# Add this without the comment to your /etc/hosts to test that it is working,
@@ -11,9 +11,9 @@
# cd $DOCKER_HOME/Config/ReverseProxy && docker compose build && docker compose up -d
# Then from the system with the modified /etc/hosts,
# curl --insecure proxy.example.com
# You should see activity in the container log as well as the contents of the
# You will see activity in the container log as well as the contents of the
# proxied website in the terminal, NOT proxy.example.com. If using a browser then you
# should notice that the URL is still proxy.example.com but the website is correct.
# will notice that the URL is still proxy.example.com but the website is correct.
# Force HTTPS
server {
@@ -67,7 +67,7 @@ server {
# Or alternatively, do it like the force of HTTPS if not your server.
#return 301 https://website.name/$request_uri;
# This should forward you from 'proxy.example.com' to a real site:
# This will forward you from 'proxy.example.com' to a real site:
proxy_pass https://hyperling.com;
}

View File

@@ -2,5 +2,5 @@
If the reverse proxy also serves static HTML sites, the root directories of each
can be placed here. Then in `../conf.d` add a file which points the domain to
the HTML web root, such as `/etc/nginx/html/www.website.name`. An example for
this exists called `html.example.com`. It should be fairly easy to recreate for
this exists called `html.example.com`. It is fairly easy to recreate for
another website.

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,11 @@
# 2025-11-11 Hyperling
# Basic container for testing commands in a blank slate environment.
services:
app:
container_name: sandbox
image: debian:trixie-slim
command: "tail -F /var/mail/*"
working_dir: /root
volumes:
- ../../Volumes/Sandbox/root-shared:/root/shared

View File

@@ -1,7 +1,7 @@
# 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`.
# This file needs copied to `docker-compose.yml`.
# Most configration changes can be done in the env file rather than here.
## TBDs ##
@@ -17,7 +17,39 @@
services:
wp-db:
app:
container_name: wp-app
image: wordpress:latest
restart: always
ports:
- 8080:80
depends_on:
db:
condition: service_healthy
links:
- 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
deploy:
mode: global
resources:
limits:
cpus: $WP_CPU
memory: $WP_MEM
db:
container_name: wp-db
image: mariadb:lts
restart: always
@@ -36,45 +68,9 @@ services:
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,4 +1,4 @@
# This file should be copied to `.env` and have its values changes as needed.
# This file needs copied to `.env` and have its values changes as needed.
## Docker ##

View File

@@ -1,18 +1,22 @@
# My Docker Setup
Scripting my way into the Docker world. I was unable to find a good tutorial on
using and managing containers so this is what made sense to me based on practice
with `docker-compose`. Also has some usages of `Dockerfile` to build some apps.
## Disclaimer
Currently the project only focuses on `apt` based operating systems, and is
being used in production by the latest Debian release.
## Other README's
Each `Config/PROJECT/` folder also contains its own README file with specific
information to running that sub project. This file's job is to cover the general
Docker installation. The others then contain details on their program setup.
## How To Use
Most of these commands benefit from being root. Something like a `sudo su -` if
you feel comfortable with it. Otherwise be aware that using sudo may cause file
permission conflicts when interacting with the configuration files and folders.
@@ -70,17 +74,20 @@ Cross your fingers and hope to succeed!
## Folders
### Config
Compose projects are set up here. Each folder should have a `docker-compose.yml`
file set up unless it is for utility such as DynamicDNS, which is used in CRON.
Compose projects are set up here. Each folder needs `docker-compose.yml` and `.env`
files set up unless it is for utility such as DynamicDNS, which is used in CRON.
### Volumes
The data of the files go here if the Config is done correctly. I think this
should be easier to remember than `/var/lib/docker/volumes` when it comes time
will be easier to remember than `/var/lib/docker/volumes` when it comes time
for migrations. Hopefully all that'd be needed is to rsync `/opt/Docker` and run
`install.sh` and then `start.sh` on the new server. You are welcome to use a
directory other than `/opt/Docker`, this project is location agnostic.
### bin
Scripts to help make life easier. Some are pretty basic, but others do nice
things like handle the container IDs.
- `create.sh`
@@ -94,4 +101,4 @@ things like handle the container IDs.
- Start, stop, update, rebuild, etc all compose containers.
- `uninstall.sh`
- If something goes wrong and you'd like to start from scratch without
provisioning a new server then this should do the job.
provisioning a new server then this will do the job.

View File

@@ -0,0 +1,10 @@
# DO NOT EDIT
Manual modifications in these directories is not recommended.
Changes should be done via the `certbot` command in the `rp-certbot` container.
```
manage -i rp-certbot
```
Example commands would be `certbot renew` and `certbot delete`.

View File

@@ -9,7 +9,7 @@ source "$DIR/../source.env"
## Variables ##
TAG="Docker"
TAG="${DIR##*/}"
DATE="`date "+%Y%m%d-%H%M%S"`"
BACKUP_DIR="/srv/backup"
BASENAME="Backup"
@@ -60,7 +60,7 @@ chown -Rv root:root "$BACKUP_DIR"
# Remove the last backup.
echo "`date` - Removing existing files."
cd "$BACKUP_DIR"
mv -v "$BASENAME"*"$TAG"* TRASH/
mv -v "$BASENAME."*".$TAG."* TRASH/
rm -v TRASH/*
if [[ "$down" == "TRUE" ]]; then

View File

@@ -16,7 +16,7 @@ function usage() {
# 1) The exit code used when leaving.
exit_code=$1
echo ""
echo -n "Usage: $PROG [-A ( -u | -d | -b | -p | -c | -s )] " 1>&2
echo -n "Usage: $PROG [-A ( -u | -d | -b | -p | -c | -m | -s )] " 1>&2
echo "[-i CONTAINER] [-l CONTAINER] [-h]" 1>&2
cat <<- EOF
@@ -26,7 +26,7 @@ function usage() {
Parameters - Standalone:
(ALL)
-A : Equivalent of specifying '-udbpcs' for a full upgrade service.
-A : Equivalent of specifying '-udbpcms' for a full upgrade service.
(UP)
-u : Start all containers with 'up -d'.
@@ -43,6 +43,9 @@ function usage() {
(CLEAN)
-c : Remove any abandoned Docker objects using the 'prune' commands.
(MAINTENANCE)
-m : Run any maintenance and/or purge scripts for each subproject.
(STATS)
-s : Tune in to the 'stats' of how each container is running.
@@ -86,7 +89,7 @@ function check_container() {
## Parameters ##
while getopts ':Audbpcsi:l:h' opt; do
while getopts ':Audbpcsi:l:mh' opt; do
case $opt in
A) all="Y" ;;
u) up="Y" ;;
@@ -97,30 +100,31 @@ while getopts ':Audbpcsi:l:h' opt; do
s) stats="Y" ;;
i) interact="$OPTARG" ;;
l) logs="$OPTARG" ;;
m) maintenance="Y" ;;
h) usage 0 ;;
*) echo "ERROR: Parameter '$OPTARG' not recognized." 1>&2 && usage 1 ;;
esac
done
# This is done outside the getopts for readability.
if [[ -n $all ]]; then
up="Y"; down="Y"; build="Y"; pull="Y"; clean="Y"; stats="Y"
if [[ -n "$all" && "$all" == "Y" ]]; then
up="Y"; down="Y"; build="Y"; pull="Y"; clean="Y"; stats="Y"; maintenance="Y"
fi
## Validations ##
# Script will behave poorly if not run with admin privileges.
if [[ $LOGNAME != "root" ]]; then
if [[ "$LOGNAME" != "root" ]]; then
echo "*************************************************************"
echo "WARNING: Script is intended for root. Please su or sudo/doas."
echo "*************************************************************"
fi
# Options which only work if the container exists or is going to be started.
if [[ -n $interact ]]; then
if [[ -n "$interact" ]]; then
check_container $interact interaction
fi
if [[ -n $logs ]]; then
if [[ -n "$logs" ]]; then
check_container $logs logs
fi
@@ -128,14 +132,14 @@ fi
# If no parameters are passed, list all the containers which are running.
if [[ -z $up && -z $down && -z $build && -z $pull && -z $clean
&& -z $interact && -z $logs && -z $stats
&& -z $interact && -z $logs && -z $stats && -z $maintenance
]]; then
docker ps --size
exit 0
fi
# Otherwise, loop through all the subproject configurations.
if [[ -n $up || -n $down || -n $build || -n $pull ]]; then
if [[ -n $up || -n $down || -n $build || -n $pull || -n $maintenance ]]; then
cd $DOCKER_HOME/Config
for dir in `ls`; do
# If this is a directory, enter it, otherwise skip to the next listing.
@@ -143,10 +147,10 @@ if [[ -n $up || -n $down || -n $build || -n $pull ]]; then
echo ""
pwd
# Ensure .env files exist so that all compose variables are populated.
if [[ -e ./env.standard && ! -e ./.env ]]; then
echo "WARNING: .env file was not found, copying standard as placeholder."
cp -v env.standard .env
# Ensure env file exists so that all compose variables are populated.
if [[ -e ./example.env && ! -e ./.env ]]; then
echo "WARNING: .env file was not found, copying example as placeholder."
cp -v example.env .env
fi
# Ensure all configuration files have been created.
@@ -160,9 +164,19 @@ if [[ -n $up || -n $down || -n $build || -n $pull ]]; then
done
fi
# Shut off container.
if [[ $down == "Y" ]]; then
[ -e docker-compose.yml ] && docker compose down
# Run the prep script to create any necessary volumes.
if [[ -f prep.sh ]]; then
./prep.sh
fi
# Run any maintenance scripts associate with the container.
if [[ "$maintenance" == "Y" ]]; then
if [[ -f "maintenance.sh" ]]; then
./maintenance.sh
fi
if [[ -f "purge.sh" ]]; then
./purge.sh
fi
fi
# Update container from remote source such as Docker Hub.
@@ -175,6 +189,11 @@ if [[ -n $up || -n $down || -n $build || -n $pull ]]; then
[ -e Dockerfile ] && docker compose build
fi
# Shut off container.
if [[ $down == "Y" ]]; then
[ -e docker-compose.yml ] && docker compose down
fi
# Run the container as a daemon.
if [[ $up == "Y" ]]; then
[ -e docker-compose.yml ] && docker compose up -d
@@ -200,6 +219,9 @@ if [[ -n $clean ]]; then
docker network prune
docker builder prune -a
docker system df
echo "Syncing."
sync
sleep 5
fi
# Follow the logs of a container.

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash
# 2024-01-29 Hyperling
# Example of how to pull the polled Backip.zip file. This would be placed on
# the machine holding the backups in the directory that it should land.
# the machine holding the backups in the directory that it needs to land.
DIR="$(dirname -- "${BASH_SOURCE[0]}")"
PROG="$(basename -- "${BASH_SOURCE[0]}")"

View File

@@ -1,4 +1,4 @@
# The entries below should be added to the root crontab, taking into account
# The entries below need to be added to the root crontab, taking into account
# where you have placed your Docker Home. This assumes `/opt/Docker`.
## Dynamic DNS ##