Compare commits

..

82 Commits

Author SHA1 Message Date
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
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
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
56 changed files with 941 additions and 311 deletions

24
.gitignore vendored
View File

@@ -25,9 +25,11 @@ Config/DNS/config/*
# Ignore anything in disabled folders. # Ignore anything in disabled folders.
disabled disabled
*.disabled
disabled.*
# Ignore any .env files which are not explicitly committed to the project. # 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. # 2024-01-23 Ignore true docker-compose files, only show examples from now on.
docker-compose.yml docker-compose.yml
@@ -35,10 +37,28 @@ docker-compose.yml
# 2024-01-24 Hide static files for Hyperling.com. # 2024-01-24 Hide static files for Hyperling.com.
Config/Hyperling.com/files/* Config/Hyperling.com/files/*
# Ignore things like "Config/Hyperling.com-Stage/"" # Ignore things like "Config/Hyperling.com-Stage/"
*-Stage *-Stage
*-stage
*-STAGE
Stage-* Stage-*
stage-*
STAGE-*
# Ignore copies of the Hugo configuration, such as "Config/Hugo-MyWebsite". # Ignore copies of the Hugo configuration, such as "Config/Hugo-MyWebsite".
Hugo-* Hugo-*
*-Hugo *-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 # Local DNS
Host a local DNS server in case your router/gateway is not cutting it. Allows 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` 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. settings so that all machines on the network know to use it and can benefit.

View File

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

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

@@ -42,7 +42,7 @@ function usage {
} }
function check { 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 status=$1
quit=$2 quit=$2
if [[ $status != 0 ]]; then if [[ $status != 0 ]]; then

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 # 2025-08-13 Hyperling
## Image ## ## Image ##
FROM debian:bookworm-slim FROM debian:trixie-slim
## Setup ## ## Setup ##
# System Dependencies # System Dependencies

View File

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

View File

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

View File

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

View File

@@ -6,7 +6,7 @@
FROM node:lts-slim FROM node:lts-slim
# Cache System Dependencies # 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 # Cache Node Dependencies
RUN mkdir -p /var/www/api RUN mkdir -p /var/www/api
@@ -16,10 +16,18 @@ RUN npm install
# Install + Run Website # Install + Run Website
CMD cd /var/www/api && \ CMD cd /var/www/api && \
rm -rfv pages main.js run.sh && \ echo "Dockerfile: Ensure symlink is properly deleted if it exists..." && \
git clone https://git.hyperling.com/me/nodejs-website website && \ ls -l website/files; rm -v website/files; sleep 0 && \
rm -rfv website/files && \ echo "Dockerfile: Clone the website's Git repo..." && \
mv -v website/* ./ && \
rm -rfv website && \ 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 ./run.sh

View File

@@ -10,11 +10,13 @@ services:
restart: always restart: always
ports: ports:
- 8317:8080 - 8317:8080
environment:
- BRANCH=$BRANCH
volumes: volumes:
- ./files:/var/www/api/files - ./files:/var/www/api/files
deploy: deploy:
mode: global mode: global
resources: resources:
limits: limits:
cpus: '0.25' cpus: $CPU
memory: 256M 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

@@ -1,9 +0,0 @@
# This file should be renamed '.env' and have any private values modified.
## 2025-06-16
## Performance Notes for Enabling BAKE
# Compose by itself takes about 35s to build this project.
# Enabling this setting first cause the build to take 80s.
# Subsequent builds consistently take less than 2 seconds.
# Testing was done on the micro server, not a workstation.
COMPOSE_BAKE=true

View File

@@ -0,0 +1,24 @@
# This file will need renamed '.env' and have any private values modified.
## 2025-06-16
## Performance Notes for Enabling BAKE
# Compose by itself takes about 35s to build this project.
# Enabling this setting first cause the build to take 80s.
# 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.
# Needs to 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

@@ -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 COMPOSE_BAKE=true
@@ -47,3 +47,7 @@ MODELS_DIR=../../Volumes/LibreTranslate/models
## them from backup type locations such as Volumes/LibreTranslate/ and /var/. ## them from backup type locations such as Volumes/LibreTranslate/ and /var/.
## Please see the README for the CRON command related to this setting. ## Please see the README for the CRON command related to this setting.
# MODELS_DIR=/tmp/LibreTranslate/models # 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 FROM nextcloud:stable
# Cache System Dependencies # 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 iputils-ping dnsutils vim bzip2 libbz2-dev
# Configure PHP Dependency # Configure PHP Dependency

View File

@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
# 2023-08-25 Hyperling # 2023-08-25 Hyperling
# Put the cron command in a script as well as other automation. # 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 # */5 * * * * /opt/Docker/Config/Nextcloud/cron.ksh
DIR="$(dirname -- "${BASH_SOURCE[0]}")" 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 # 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. # container then it also needs specified in its `environment:` operator.
@@ -32,7 +32,7 @@ PHP_UPLOAD_LIMIT=32M
# #
## MariaDB ## ## 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, # 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. # updating it here will have no effect. This is only used for the install.
@@ -53,7 +53,7 @@ REDIS_HOST_PASSWORD=someredispassword
### ###
#### OnlyOffice ## #### 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 Address: https://FQDN-For-Reverse-Proxied-OO-Server
### OO Secret: Contents-Of-$JWT_SECRET ### OO Secret: Contents-Of-$JWT_SECRET
### OO Header: ### 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 # 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. # container then it also needs specified in its `environment:` operator.
@@ -32,7 +32,7 @@ PHP_UPLOAD_LIMIT=5G
# #
## MariaDB ## ## 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, # 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. # updating it here will have no effect. This is only used for the install.
@@ -53,7 +53,7 @@ REDIS_HOST_PASSWORD=someredispassword
# #
## OnlyOffice ## ## 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 Address: https://FQDN-For-Reverse-Proxied-OO-Server
# OO Secret: Contents-Of-$JWT_SECRET # OO Secret: Contents-Of-$JWT_SECRET
# OO Header: # OO Header:

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. # 2022-10-30 More additions after moving to Nextcloud version 25.
echo -e "\n*** DATABASE ***" 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. # Clear DB errors by allowing the DB to perform any incremental upgrades.
# https://jira.mariadb.org/browse/MDEV-26342 # https://jira.mariadb.org/browse/MDEV-26342
echo -e "\n`date` - mysql_upgrade" #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 \
time docker exec -it nc-db mysql_upgrade \ # -user="root" --password="$MYSQL_ROOT_PASSWORD"
-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 docker exec -itu www-data nc-app ./occ maintenance:mode --off
echo -e "\n`date` - Add Missing Columns" echo -e "\n`date` - Add Missing Columns"

View File

@@ -121,8 +121,8 @@ services:
mode: global mode: global
resources: resources:
limits: limits:
cpus: '2.00' cpus: $CPU
memory: 2G memory: $MEM
## Database Server (recommended) ## Database Server (recommended)
## see https://docs.photoprism.app/getting-started/faq/#should-i-use-sqlite-mariadb-or-mysql ## see https://docs.photoprism.app/getting-started/faq/#should-i-use-sqlite-mariadb-or-mysql
@@ -152,8 +152,8 @@ services:
mode: global mode: global
resources: resources:
limits: limits:
cpus: '0.50' cpus: $CPU_DB
memory: 512M memory: $MEM_DB
# Configured but not using this, would prefer to update manually, and the # 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. # 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 # PhotoPrism
@@ -8,7 +15,7 @@ PHOTOPRISM_ADMIN_USER = "admin" # admin login username
PHOTOPRISM_ADMIN_PASSWORD = "PleaseChangeMe" # initial admin password (8-72 characters) PHOTOPRISM_ADMIN_PASSWORD = "PleaseChangeMe" # initial admin password (8-72 characters)
# External FQDN # 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, # Seems to work best if you leave off the s if behind a revese proxy,
# such as: PHOTOPRISM_SITE_URL = "http://photoprism.example.com" # such as: PHOTOPRISM_SITE_URL = "http://photoprism.example.com"
PHOTOPRISM_SITE_URL = "http://localhost:2342" PHOTOPRISM_SITE_URL = "http://localhost:2342"
@@ -38,3 +45,12 @@ MARIADB_DATABASE = "photoprism"
MARIADB_USER = "photoprism" MARIADB_USER = "photoprism"
MARIADB_PASSWORD = "PleaseChangeMe" MARIADB_PASSWORD = "PleaseChangeMe"
MARIADB_ROOT_PASSWORD = "PleaseChangeMe" MARIADB_ROOT_PASSWORD = "PleaseChangeMe"
##
# Performance
##
CPU=2.00
MEM=2.00G
CPU_DB=0.50
MEM_DB=0.50G

View File

@@ -0,0 +1,21 @@
# Create a VM for testing Ansible provisioning.
FROM archlinux:base
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
WORKDIR /root/
USER root
CMD ./main.sh

View File

@@ -0,0 +1,20 @@
# Create a VM for testing Ansible provisioning.
FROM debian:latest
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
WORKDIR /root/
USER root
CMD ./main.sh

View File

@@ -0,0 +1,20 @@
# Create a VM for testing Ansible provisioning.
FROM fedora:latest
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
WORKDIR /root/
USER root
CMD ./main.sh

View File

@@ -0,0 +1,20 @@
# Create a VM for testing Ansible provisioning.
FROM opensuse/tumbleweed:latest
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
WORKDIR /root/
USER root
CMD ./main.sh

View File

@@ -0,0 +1,20 @@
# Create a VM for testing Ansible provisioning.
FROM ubuntu:rolling
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
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,23 @@
#!/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 '$EXEC'"
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,157 @@
# 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
args:
PACKAGES: ${PACKAGES}
EXTRA_ARCH: ${EXTRA_ARCH}
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
args:
PACKAGES: ${PACKAGES}
EXTRA_DEBIAN: ${EXTRA_DEBIAN}
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
args:
PACKAGES: ${PACKAGES}
EXTRA_FEDORA: ${EXTRA_FEDORA}
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
args:
PACKAGES: ${PACKAGES}
EXTRA_OPENSUSE: ${EXTRA_OPENSUSE}
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
args:
PACKAGES: ${PACKAGES}
EXTRA_UBUNTU: ${EXTRA_UBUNTU}
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,23 @@
# This file will need renamed '.env' and have any private values modified.
COMPOSE_BAKE=true
## Performance
CPU=0.2
RAM=0.2G
## Storage
PT_STORAGE_DIR=../../Volumes/IGNORED/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=stage
EXEC="./setup.sh -l -g -s"

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

@@ -0,0 +1,19 @@
#!/usr/bin/env bash
## 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

@@ -1,5 +1,7 @@
# Initial Setup Instructions # Initial Setup Instructions
How to first begin using this subproject. How to first begin using this subproject.
1. Move to the directory of this README. 1. Move to the directory of this README.
``` ```
$ cd $DOCKER_HOME/Config/ReverseProxy $ cd $DOCKER_HOME/Config/ReverseProxy
@@ -10,6 +12,7 @@ How to first begin using this subproject.
# ./create_placeholder_certs.sh # ./create_placeholder_certs.sh
``` ```
1. Make any personal changes to `./config/nginx.conf`. 1. Make any personal changes to `./config/nginx.conf`.
1. Copy the example files as `docker-compose.yml` and `.env`.
1. Build the project. 1. Build the project.
``` ```
# docker compose build # docker compose build
@@ -20,8 +23,8 @@ How to first begin using this subproject.
``` ```
1. Verify it started correctly, no configuration file errors. 1. Verify it started correctly, no configuration file errors.
``` ```
# docker logs reverseproxy-app-1 # docker logs rp-app
# docker logs reverseproxy-certbot-1 # docker logs rp-certbot
``` ```
1. Create the real certificates. 1. Create the real certificates.
``` ```
@@ -34,6 +37,7 @@ How to first begin using this subproject.
``` ```
## DO NOT ## DO NOT
* Edit any configurations or website data inside the container. It is destroyed on each build. * 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. * 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. * 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. * Alternatively write a script such as `../Nextcloud/fixes.ksh` which is run after every upgrade.
# Other Commands # Other Commands
Tasks which will also likely come up while using this subproject. Tasks which will also likely come up while using this subproject.
## Stop ## Stop
If the proxy needs turned off either stop or down may be used. If the proxy needs turned off either stop or down may be used.
``` ```
# docker compose stop # docker compose stop
# docker compose down # docker compose down
``` ```
## Upgrade ## Upgrade
Upgrading the containers should be as easy as this:
Upgrading the containers is as easy as this:
``` ```
# docker compose down # docker compose down
# docker compose pull # docker compose pull
@@ -60,15 +69,19 @@ Upgrading the containers should be as easy as this:
``` ```
## Update Config ## Update Config
Replace the configuration based on any new, updated, or removed files. 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 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. This is essentially an upgrade but there is no pull.
``` ```
# docker compose down # docker compose down
# docker compose build # docker compose build
# docker compose up -d # docker compose up -d
``` ```
If wanted as a one-line command: If wanted as a one-line command:
``` ```
# docker compose down && docker compose build && docker compose up -d # docker compose down && docker compose build && docker compose up -d
``` ```
@@ -80,4 +93,4 @@ If wanted as a one-line command:
1. Restart the project based on Update Config above. 1. Restart the project based on Update Config above.
1. (Optional) Now you may run the letsencrypt script for a real certificate. 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. (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 # 2024-12-31 Hyperling
# A dummy test file since true scripts are being kept private. # 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 ## ## Instructions ##
# Add this without the comment to your /etc/hosts to test that it is working, # 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 # cd $DOCKER_HOME/Config/ReverseProxy && docker compose build && docker compose up -d
# Then from the system with the modified /etc/hosts, # Then from the system with the modified /etc/hosts,
# curl --insecure git.example.com # 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 # 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 # Force HTTPS
server { server {

View File

@@ -1,6 +1,6 @@
# 2023-07-08 Hyperling # 2023-07-08 Hyperling
# A dummy test file since true scripts are being kept private. # 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 ## ## Instructions ##
# Add this without the comment to your /etc/hosts to test that it is working, # 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 # cd $DOCKER_HOME/Config/ReverseProxy && docker compose build && docker compose up -d
# Then from the system with the modified /etc/hosts, # Then from the system with the modified /etc/hosts,
# curl --insecure html.example.com # curl --insecure html.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 html.example.com. If using a browser then you # proxied website in the terminal, NOT git.example.com. If using a browser then you
# should notice that the URL is still html.example.com but the website is correct. # will notice that the URL is still git.example.com but the website is correct.
# Force HTTPS # Force HTTPS
server { server {

View File

@@ -1,6 +1,6 @@
# 2025-01-02 Hyperling # 2025-01-02 Hyperling
# A dummy test file since true scripts are being kept private. # 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 ## ## Instructions ##
# Add this without the comment to your /etc/hosts to test that it is working, # 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 # cd $DOCKER_HOME/Config/ReverseProxy && docker compose build && docker compose up -d
# Then from the system with the modified /etc/hosts, # Then from the system with the modified /etc/hosts,
# curl --insecure cloud.example.com # curl --insecure cloud.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 cloud.example.com. If using a browser then you # proxied website in the terminal, NOT git.example.com. If using a browser then you
# should notice that the URL is still cloud.example.com but the website is correct. # will notice that the URL is still git.example.com but the website is correct.
server { server {
listen 80; listen 80;

View File

@@ -1,6 +1,6 @@
# 2022-10-05 Hyperling # 2022-10-05 Hyperling
# A dummy test file since true scripts are being kept private. # 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 ## ## Instructions ##
# Add this without the comment to your /etc/hosts to test that it is working, # 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 # cd $DOCKER_HOME/Config/ReverseProxy && docker compose build && docker compose up -d
# Then from the system with the modified /etc/hosts, # Then from the system with the modified /etc/hosts,
# curl --insecure proxy.example.com # 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 # 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 # Force HTTPS
server { server {
@@ -67,7 +67,7 @@ server {
# Or alternatively, do it like the force of HTTPS if not your server. # Or alternatively, do it like the force of HTTPS if not your server.
#return 301 https://website.name/$request_uri; #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; 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 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 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 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. another website.

View File

@@ -24,8 +24,8 @@ services:
mode: global mode: global
resources: resources:
limits: limits:
cpus: '0.20' cpus: $CPU
memory: 64M memory: $MEM
certbot: certbot:
container_name: rp-certbot container_name: rp-certbot
@@ -39,5 +39,5 @@ services:
mode: global mode: global
resources: resources:
limits: limits:
cpus: '0.10' cpus: $CPU_LE
memory: 32M 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 needs 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 needs 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

@@ -1,18 +1,22 @@
# My Docker Setup # My Docker Setup
Scripting my way into the Docker world. I was unable to find a good tutorial on 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 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. with `docker-compose`. Also has some usages of `Dockerfile` to build some apps.
## Disclaimer ## Disclaimer
Currently the project only focuses on `apt` based operating systems, and is Currently the project only focuses on `apt` based operating systems, and is
being used in production by the latest Debian release. being used in production by the latest Debian release.
## Other README's ## Other README's
Each `Config/PROJECT/` folder also contains its own README file with specific 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 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. Docker installation. The others then contain details on their program setup.
## How To Use ## How To Use
Most of these commands benefit from being root. Something like a `sudo su -` if 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 you feel comfortable with it. Otherwise be aware that using sudo may cause file
permission conflicts when interacting with the configuration files and folders. permission conflicts when interacting with the configuration files and folders.
@@ -70,17 +74,20 @@ Cross your fingers and hope to succeed!
## Folders ## Folders
### Config ### 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 ### Volumes
The data of the files go here if the Config is done correctly. I think this 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 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 `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. directory other than `/opt/Docker`, this project is location agnostic.
### bin ### bin
Scripts to help make life easier. Some are pretty basic, but others do nice Scripts to help make life easier. Some are pretty basic, but others do nice
things like handle the container IDs. things like handle the container IDs.
- `create.sh` - `create.sh`
@@ -94,4 +101,4 @@ things like handle the container IDs.
- Start, stop, update, rebuild, etc all compose containers. - Start, stop, update, rebuild, etc all compose containers.
- `uninstall.sh` - `uninstall.sh`
- If something goes wrong and you'd like to start from scratch without - 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.

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,39 +5,92 @@
DIR="$(dirname -- "${BASH_SOURCE[0]}")" DIR="$(dirname -- "${BASH_SOURCE[0]}")"
PROG="$(basename -- "${BASH_SOURCE[0]}")" PROG="$(basename -- "${BASH_SOURCE[0]}")"
echo "$DIR/$PROG" echo "$DIR/$PROG"
source $DIR/../source.env source "$DIR/../source.env"
## Variables ## ## Variables ##
file="/tmp/Backup-Docker.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`" 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 ## ## Main ##
# Remove the last backup. # Ensure backup directory exists with correct permissions.
if [[ -e $file ]]; then mkdir -pv "$BACKUP_DIR"
echo "`date` - Removing existing file." mkdir -pv "$BACKUP_DIR/TRASH"
rm -fv $file chmod -Rv 775 "$BACKUP_DIR"
fi chown -Rv root:root "$BACKUP_DIR"
# Remove the last backup.
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." echo -e "\n`date` - Take down services for a cold backup."
manage.sh -d manage.sh -d
else
echo -e "\n`date` - Skipping take down."
fi
echo -e "\n`date` - Create the backup for '$DOCKER_HOME'." echo -e "\n`date` - Create the backup for '$DOCKER_HOME'."
$time zip -r $file.tmp \ $time zip -r "$file.tmp" \
$DOCKER_HOME \ "$DOCKER_HOME" \
/etc/crontab /etc/cron.d /var/spool/cron \ /etc/crontab /etc/cron.d \
/var/{log,mail} 1>/dev/null /var/spool/cron /var/{log,mail} \
mv -v $file.tmp $file --exclude "$DOCKER_HOME/Volumes/IGNORED/*" \
1>/dev/null
mv -v "$file.tmp" "$file"
echo -e "\n`date` - Done with zipping, check size." 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." 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." echo -e "\n`date` - Bring services back up."
manage.sh -u manage.sh -u
else
echo -e "\n`date` - Skipping restoring services."
fi
## Finish ## ## Finish ##

View File

@@ -1,7 +1,7 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# 2024-01-29 Hyperling # 2024-01-29 Hyperling
# Example of how to pull the polled Backip.zip file. This would be placed on # 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]}")" DIR="$(dirname -- "${BASH_SOURCE[0]}")"
PROG="$(basename -- "${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`. # where you have placed your Docker Home. This assumes `/opt/Docker`.
## Dynamic DNS ## ## Dynamic DNS ##