Compare commits
40 Commits
main
...
46e786b219
| Author | SHA1 | Date | |
|---|---|---|---|
| 46e786b219 | |||
| f2604ff1fd | |||
| f12f945a04 | |||
| 12bf792e65 | |||
| c607fe1968 | |||
| 50a975b8ec | |||
| 40268e40b0 | |||
| d92a1f1205 | |||
| b4b366a857 | |||
| 87048191ce | |||
| 564dec0b63 | |||
| 427471d825 | |||
| 165c2aa64c | |||
| 4772826d4a | |||
| 052b28e265 | |||
| 4cc229a66d | |||
| 978a9778a5 | |||
| e5c68aa12e | |||
| b16bf3cf07 | |||
| 50b7629860 | |||
| 91dfbca76e | |||
| c0a220cebe | |||
| 369728b7ef | |||
| 31dda9d64f | |||
| 0e87eb3515 | |||
| bf0497c02a | |||
| 9079afd570 | |||
| 93e0971050 | |||
| c19b73e3f0 | |||
| 018c3c9ceb | |||
| 7e733dedcb | |||
| dac5c0de17 | |||
| 3ae7a6f8f9 | |||
| 567f1de450 | |||
| 3ca8b036ad | |||
| 3897d6f3c3 | |||
| fdff4f0d27 | |||
| 7b9bbcbc26 | |||
| cbaf052ea2 | |||
| c4c3cb6434 |
12
.gitignore
vendored
12
.gitignore
vendored
@@ -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,16 @@ 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-*
|
||||||
|
|
||||||
# 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-*
|
||||||
|
*-Dev
|
||||||
|
Dev-*
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ services:
|
|||||||
- BRANCH=$BRANCH
|
- BRANCH=$BRANCH
|
||||||
- PROD=$PROD
|
- PROD=$PROD
|
||||||
- DEV=$DEV
|
- DEV=$DEV
|
||||||
|
- CPU=$CPU
|
||||||
|
- MEM=$MEM
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: curl -sS http://localhost:80 || curl -sS http://localhost:1380 || exit 1
|
test: curl -sS http://localhost:80 || curl -sS http://localhost:1380 || exit 1
|
||||||
interval: 1m
|
interval: 1m
|
||||||
@@ -26,5 +28,5 @@ services:
|
|||||||
mode: global
|
mode: global
|
||||||
resources:
|
resources:
|
||||||
limits:
|
limits:
|
||||||
cpus: '0.10'
|
cpus: $CPU
|
||||||
memory: 64M
|
memory: $MEM
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -2,7 +2,16 @@
|
|||||||
|
|
||||||
FROM archlinux:base
|
FROM archlinux:base
|
||||||
|
|
||||||
RUN pacman -Syu --noconfirm && pacman -Sy --noconfirm $PACKAGES $EXTRA_ARCH
|
ARG PACKAGES
|
||||||
|
ENV PACKAGES="$PACKAGES"
|
||||||
|
ARG EXTRA_ARCH
|
||||||
|
ENV EXTRA_ARCH="$EXTRA_ARCH"
|
||||||
|
|
||||||
|
# Arch is rolling, and therefore recommends updating the container immediately.
|
||||||
|
# https://hub.docker.com/_/archlinux#updating
|
||||||
|
RUN pacman -Syyu --noconfirm
|
||||||
|
|
||||||
|
RUN pacman -Syy --noconfirm $PACKAGES $EXTRA_ARCH
|
||||||
|
|
||||||
COPY bin/main.sh /root/main.sh
|
COPY bin/main.sh /root/main.sh
|
||||||
RUN chmod +x /root/main.sh
|
RUN chmod +x /root/main.sh
|
||||||
|
|||||||
@@ -1,8 +1,16 @@
|
|||||||
# Create a VM for testing Ansible provisioning.
|
# Create a VM for testing Ansible provisioning.
|
||||||
|
|
||||||
FROM debian:trixie
|
FROM debian:latest
|
||||||
|
|
||||||
RUN apt update && apt dist-upgrade -y && apt install -y $PACKAGES $EXTRA_DEBIAN
|
ARG PACKAGES
|
||||||
|
ENV PACKAGES="$PACKAGES"
|
||||||
|
ARG EXTRA_DEBIAN
|
||||||
|
ENV EXTRA_DEBIAN="$EXTRA_DEBIAN"
|
||||||
|
|
||||||
|
# Use the image as it comes, do not upgrade it, so that it stays reproducible.
|
||||||
|
#RUN apt update && apt dist-upgrade -y
|
||||||
|
|
||||||
|
RUN apt update && apt install -y $PACKAGES $EXTRA_DEBIAN
|
||||||
|
|
||||||
COPY bin/main.sh /root/main.sh
|
COPY bin/main.sh /root/main.sh
|
||||||
RUN chmod +x /root/main.sh
|
RUN chmod +x /root/main.sh
|
||||||
|
|||||||
@@ -2,7 +2,15 @@
|
|||||||
|
|
||||||
FROM fedora:latest
|
FROM fedora:latest
|
||||||
|
|
||||||
RUN dnf upgrade --refresh -y && dnf install -y $PACKAGES $EXTRA_FEDORA
|
ARG PACKAGES
|
||||||
|
ENV PACKAGES="$PACKAGES"
|
||||||
|
ARG EXTRA_FEDORA
|
||||||
|
ENV EXTRA_FEDORA="$EXTRA_FEDORA"
|
||||||
|
|
||||||
|
# Use the image as it comes, do not upgrade it, so that it stays reproducible.
|
||||||
|
#RUN dnf upgrade --refresh -y
|
||||||
|
|
||||||
|
RUN dnf install --refresh -y $PACKAGES $EXTRA_FEDORA
|
||||||
|
|
||||||
COPY bin/main.sh /root/main.sh
|
COPY bin/main.sh /root/main.sh
|
||||||
RUN chmod +x /root/main.sh
|
RUN chmod +x /root/main.sh
|
||||||
|
|||||||
@@ -1,10 +1,16 @@
|
|||||||
# Create a VM for testing Ansible provisioning.
|
# Create a VM for testing Ansible provisioning.
|
||||||
|
|
||||||
FROM opensuse/tumbleweed
|
FROM opensuse/tumbleweed:latest
|
||||||
|
|
||||||
RUN zypper -n refresh \
|
ARG PACKAGES
|
||||||
&& zypper -n dist-upgrade -y \
|
ENV PACKAGES="$PACKAGES"
|
||||||
&& zypper -n install -y $PACKAGES $EXTRA_OPENSUSE
|
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
|
COPY bin/main.sh /root/main.sh
|
||||||
RUN chmod +x /root/main.sh
|
RUN chmod +x /root/main.sh
|
||||||
|
|||||||
@@ -2,7 +2,15 @@
|
|||||||
|
|
||||||
FROM ubuntu:rolling
|
FROM ubuntu:rolling
|
||||||
|
|
||||||
RUN apt update && apt dist-upgrade -y && apt install -y $PACKAGES $EXTRA_UBUNTU
|
ARG PACKAGES
|
||||||
|
ENV PACKAGES="$PACKAGES"
|
||||||
|
ARG EXTRA_UBUNTU
|
||||||
|
ENV EXTRA_UBUNTU="$EXTRA_UBUNTU"
|
||||||
|
|
||||||
|
# Use the image as it comes, do not upgrade it, so that it stays reproducible.
|
||||||
|
#RUN apt update && apt dist-upgrade -y
|
||||||
|
|
||||||
|
RUN apt update && apt install -y $PACKAGES $EXTRA_UBUNTU
|
||||||
|
|
||||||
COPY bin/main.sh /root/main.sh
|
COPY bin/main.sh /root/main.sh
|
||||||
RUN chmod +x /root/main.sh
|
RUN chmod +x /root/main.sh
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
# Construction Area
|
||||||
|
|
||||||
|
This configuration is still a work in progress. :)
|
||||||
|
|
||||||
# Provision Test Images
|
# Provision Test Images
|
||||||
|
|
||||||
Create containers of popular Linux distributions in order to test Ansible.
|
Create containers of popular Linux distributions in order to test Ansible.
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
sh -c "rm -rfv prov-test"
|
sh -c "rm -rfv prov-test"
|
||||||
|
|
||||||
|
echo "Downloading Repo '$REPO' : Branch '$BRANCH'"
|
||||||
git clone $REPO --branch=$BRANCH prov-test
|
git clone $REPO --branch=$BRANCH prov-test
|
||||||
|
|
||||||
cd prov-test
|
cd prov-test
|
||||||
|
|
||||||
echo "Starting Executable Script"
|
echo "Starting Executable Script '$EXEC'"
|
||||||
|
|
||||||
tail -F /var/mail/mail &
|
tail -F /var/mail/mail &
|
||||||
tail -F /var/mail/ansible &
|
tail -F /var/mail/ansible &
|
||||||
|
|||||||
@@ -17,6 +17,9 @@ services:
|
|||||||
context: ./
|
context: ./
|
||||||
dockerfile: Dockerfiles/arch
|
dockerfile: Dockerfiles/arch
|
||||||
network: host
|
network: host
|
||||||
|
args:
|
||||||
|
PACKAGES: ${PACKAGES}
|
||||||
|
EXTRA_ARCH: ${EXTRA_ARCH}
|
||||||
restart: no
|
restart: no
|
||||||
environment:
|
environment:
|
||||||
- PACKAGES=$PACKAGES
|
- PACKAGES=$PACKAGES
|
||||||
@@ -43,6 +46,9 @@ services:
|
|||||||
context: ./
|
context: ./
|
||||||
dockerfile: Dockerfiles/debian
|
dockerfile: Dockerfiles/debian
|
||||||
network: host
|
network: host
|
||||||
|
args:
|
||||||
|
PACKAGES: ${PACKAGES}
|
||||||
|
EXTRA_DEBIAN: ${EXTRA_DEBIAN}
|
||||||
restart: no
|
restart: no
|
||||||
environment:
|
environment:
|
||||||
- PACKAGES=$PACKAGES
|
- PACKAGES=$PACKAGES
|
||||||
@@ -69,6 +75,9 @@ services:
|
|||||||
context: ./
|
context: ./
|
||||||
dockerfile: Dockerfiles/fedora
|
dockerfile: Dockerfiles/fedora
|
||||||
network: host
|
network: host
|
||||||
|
args:
|
||||||
|
PACKAGES: ${PACKAGES}
|
||||||
|
EXTRA_FEDORA: ${EXTRA_FEDORA}
|
||||||
restart: no
|
restart: no
|
||||||
environment:
|
environment:
|
||||||
- PACKAGES=$PACKAGES
|
- PACKAGES=$PACKAGES
|
||||||
@@ -95,6 +104,9 @@ services:
|
|||||||
context: ./
|
context: ./
|
||||||
dockerfile: Dockerfiles/opensuse
|
dockerfile: Dockerfiles/opensuse
|
||||||
network: host
|
network: host
|
||||||
|
args:
|
||||||
|
PACKAGES: ${PACKAGES}
|
||||||
|
EXTRA_OPENSUSE: ${EXTRA_OPENSUSE}
|
||||||
restart: no
|
restart: no
|
||||||
environment:
|
environment:
|
||||||
- PACKAGES=$PACKAGES
|
- PACKAGES=$PACKAGES
|
||||||
@@ -121,6 +133,9 @@ services:
|
|||||||
context: ./
|
context: ./
|
||||||
dockerfile: Dockerfiles/ubuntu
|
dockerfile: Dockerfiles/ubuntu
|
||||||
network: host
|
network: host
|
||||||
|
args:
|
||||||
|
PACKAGES: ${PACKAGES}
|
||||||
|
EXTRA_UBUNTU: ${EXTRA_UBUNTU}
|
||||||
restart: no
|
restart: no
|
||||||
environment:
|
environment:
|
||||||
- PACKAGES=$PACKAGES
|
- PACKAGES=$PACKAGES
|
||||||
@@ -7,8 +7,7 @@ CPU=0.2
|
|||||||
RAM=0.2G
|
RAM=0.2G
|
||||||
|
|
||||||
## Storage
|
## Storage
|
||||||
#STORAGE_DIR=../../Volumes/ProvisionTests
|
PT_STORAGE_DIR=../../Volumes/IGNORED/ProvisionTests
|
||||||
PT_STORAGE_DIR=/tmp/ProvisionTests
|
|
||||||
|
|
||||||
## Packages
|
## Packages
|
||||||
PACKAGES="git bash curl sudo which"
|
PACKAGES="git bash curl sudo which"
|
||||||
@@ -20,5 +19,5 @@ EXTRA_UBUNTU=""
|
|||||||
|
|
||||||
## Script
|
## Script
|
||||||
REPO=https://git.hyperling.com/me/env-ansible
|
REPO=https://git.hyperling.com/me/env-ansible
|
||||||
BRANCH=dev
|
BRANCH=stage
|
||||||
EXEC="./setup.sh -l"
|
EXEC="./setup.sh -l -g -s"
|
||||||
@@ -1,7 +1,4 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# 2025-07-22 Hyperling
|
|
||||||
# Create the necessary folders for LibreTranslate's volumes to work.
|
|
||||||
# This must be run before the container will start properly.
|
|
||||||
|
|
||||||
## Setup ##
|
## Setup ##
|
||||||
|
|
||||||
@@ -12,7 +9,6 @@ source ../../source.env
|
|||||||
## Main ##
|
## Main ##
|
||||||
|
|
||||||
# Create folders.
|
# Create folders.
|
||||||
|
|
||||||
mkdir -pv "$PT_STORAGE_DIR/arch"
|
mkdir -pv "$PT_STORAGE_DIR/arch"
|
||||||
mkdir -pv "$PT_STORAGE_DIR/debian"
|
mkdir -pv "$PT_STORAGE_DIR/debian"
|
||||||
mkdir -pv "$PT_STORAGE_DIR/fedora"
|
mkdir -pv "$PT_STORAGE_DIR/fedora"
|
||||||
|
|||||||
@@ -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 should be 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
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -16,6 +16,9 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- "80:80"
|
- "80:80"
|
||||||
- "443:443"
|
- "443:443"
|
||||||
|
environment:
|
||||||
|
- CPU=$CPU
|
||||||
|
- MEM=$MEM
|
||||||
volumes:
|
volumes:
|
||||||
- ../../Volumes/ReverseProxy/letsencrypt:/etc/nginx/letsencrypt
|
- ../../Volumes/ReverseProxy/letsencrypt:/etc/nginx/letsencrypt
|
||||||
- ../../Volumes/ReverseProxy/letsencrypt-certs:/etc/nginx/certs
|
- ../../Volumes/ReverseProxy/letsencrypt-certs:/etc/nginx/certs
|
||||||
@@ -24,13 +27,16 @@ 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
|
||||||
image: certbot/certbot
|
image: certbot/certbot
|
||||||
restart: always
|
restart: always
|
||||||
|
environment:
|
||||||
|
- CPU_LE=$CPU_LE
|
||||||
|
- MEM_LE=$MEM_LE
|
||||||
volumes:
|
volumes:
|
||||||
- ../../Volumes/ReverseProxy/letsencrypt:/etc/letsencrypt
|
- ../../Volumes/ReverseProxy/letsencrypt:/etc/letsencrypt
|
||||||
- ../../Volumes/ReverseProxy/letsencrypt-certs:/etc/letsencrypt/nginx
|
- ../../Volumes/ReverseProxy/letsencrypt-certs:/etc/letsencrypt/nginx
|
||||||
@@ -39,5 +45,5 @@ services:
|
|||||||
mode: global
|
mode: global
|
||||||
resources:
|
resources:
|
||||||
limits:
|
limits:
|
||||||
cpus: '0.10'
|
cpus: $CPU_LE
|
||||||
memory: 32M
|
memory: $MEM_LE
|
||||||
@@ -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
|
|
||||||
19
Config/ReverseProxy/example.env
Normal file
19
Config/ReverseProxy/example.env
Normal 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.20
|
||||||
|
MEM=0.10G
|
||||||
|
CPU_LE=0.10
|
||||||
|
MEM_LE=0.05G
|
||||||
|
|
||||||
|
# Capable Server
|
||||||
|
#CPU=1.00
|
||||||
|
#MEM=0.50G
|
||||||
|
#CPU_LE=0.50
|
||||||
|
#MEM_LE=0.25G
|
||||||
3
Config/WordpressExample/README.md
Normal file
3
Config/WordpressExample/README.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Construction Area
|
||||||
|
|
||||||
|
This configuration is still a work in progress. :)
|
||||||
80
Config/WordpressExample/docker-compose.example.yml
Normal file
80
Config/WordpressExample/docker-compose.example.yml
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
# 2025-10-17 Hyperling
|
||||||
|
# Copied and modified from the example here:
|
||||||
|
# https://hub.docker.com/_/wordpress
|
||||||
|
# This file should be copied to `docker-compose.yml`.
|
||||||
|
# Most configration changes can be done in the env file rather than here.
|
||||||
|
|
||||||
|
## TBDs ##
|
||||||
|
# - Move env variables to env.example
|
||||||
|
# - Look through other environment variables which may be useful.
|
||||||
|
# - Add CPU and MEM section
|
||||||
|
# - Change ports
|
||||||
|
|
||||||
|
# TBD locate these at ../../Volumes and create `prep.sh` script.
|
||||||
|
#volumes:
|
||||||
|
# wordpress:
|
||||||
|
# db:
|
||||||
|
|
||||||
|
services:
|
||||||
|
|
||||||
|
wp-db:
|
||||||
|
container_name: wp-db
|
||||||
|
image: mariadb:lts
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- ../../Volumes/WordPress/mariadb:/var/lib/mysql
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
|
||||||
|
start_period: 5s
|
||||||
|
interval: 5s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 10
|
||||||
|
environment:
|
||||||
|
# https://mariadb.com/docs/server/server-management/automated-mariadb-deployment-and-administration/docker-and-mariadb/mariadb-server-docker-official-image-environment-variables
|
||||||
|
MARIADB_DATABASE: $MARIADB_DATABASE
|
||||||
|
MARIADB_USER: $MARIADB_USER
|
||||||
|
MARIADB_PASSWORD: MARIADB_PASSWORD
|
||||||
|
MARIADB_ROOT_PASSWORD: $MARIADB_ROOT_PASSWORD
|
||||||
|
MARIADB_AUTO_UPGRADE: $MARIADB_AUTO_UPGRADE
|
||||||
|
WP_CPU_DB: $WP_CPU_DB
|
||||||
|
WP_MEM_DB: $WP_MEM_DB
|
||||||
|
deploy:
|
||||||
|
mode: global
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: $WP_CPU_DB
|
||||||
|
memory: $WP_MEM_DB
|
||||||
|
|
||||||
|
wp-app:
|
||||||
|
container_name: wp-app
|
||||||
|
image: wordpress:latest
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- 8080:80
|
||||||
|
depends_on:
|
||||||
|
wp-db:
|
||||||
|
condition: service_healthy
|
||||||
|
links:
|
||||||
|
- wp-db
|
||||||
|
volumes:
|
||||||
|
- ../../Volumes/WordPress/wordpress:/var/www/html
|
||||||
|
environment:
|
||||||
|
WORDPRESS_ADMIN_USERNAME: $WORDPRESS_ADMIN_USERNAME
|
||||||
|
WORDPRESS_ADMIN_PASSWORD: $WORDPRESS_ADMIN_PASSWORD
|
||||||
|
WORDPRESS_DB_HOST: wp-db
|
||||||
|
WORDPRESS_DB_NAME: $MARIADB_DATABASE
|
||||||
|
# TBD/TODO: Does not work, but recommended. :(
|
||||||
|
#WORDPRESS_DB_USER: $MARIADB_USER
|
||||||
|
#WORDPRESS_DB_PASSWORD: $MARIADB_PASSWORD
|
||||||
|
# Works, but not recommended. Lol.
|
||||||
|
WORDPRESS_DB_USER: root
|
||||||
|
WORDPRESS_DB_PASSWORD: $MARIADB_ROOT_PASSWORD
|
||||||
|
WORDPRESS_DEBUG: $WORDPRESS_DEBUG
|
||||||
|
WP_CPU: $WP_CPU
|
||||||
|
WP_MEM: $WP_MEM
|
||||||
|
deploy:
|
||||||
|
mode: global
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: $WP_CPU
|
||||||
|
memory: $WP_MEM
|
||||||
63
Config/WordpressExample/example.env
Normal file
63
Config/WordpressExample/example.env
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
# This file should be copied to `.env` and have its values changes as needed.
|
||||||
|
|
||||||
|
## Docker ##
|
||||||
|
|
||||||
|
COMPOSE_BAKE=true
|
||||||
|
|
||||||
|
## End Docker ##
|
||||||
|
|
||||||
|
|
||||||
|
## WordPress ##
|
||||||
|
|
||||||
|
# TBD/TODO: These do not actually seem to work.
|
||||||
|
WORDPRESS_ADMIN_USERNAME='wp_user'
|
||||||
|
WORDPRESS_ADMIN_PASSWORD='wordpress_password'
|
||||||
|
|
||||||
|
# Uncomment this to get debug output in the log.
|
||||||
|
WORDPRESS_DEBUG=1
|
||||||
|
|
||||||
|
## End WordPress ##
|
||||||
|
|
||||||
|
|
||||||
|
## Database ##
|
||||||
|
|
||||||
|
MARIADB_DATABASE='wordpress'
|
||||||
|
|
||||||
|
MARIADB_USER='db_user'
|
||||||
|
MARIADB_PASSWORD='database_password'
|
||||||
|
|
||||||
|
MARIADB_ROOT_PASSWORD='db_root_password'
|
||||||
|
|
||||||
|
# Comment this if you do not want MariaDB to run upgrade scripts on new versions.
|
||||||
|
MARIADB_AUTO_UPGRADE=1
|
||||||
|
|
||||||
|
## End Database ##
|
||||||
|
|
||||||
|
|
||||||
|
## Performance ##
|
||||||
|
|
||||||
|
# Standard Minimum
|
||||||
|
#WP_CPU=1.00
|
||||||
|
#WP_MEM=2.00G
|
||||||
|
#WP_CPU_DB=1.00
|
||||||
|
#WP_MEM_DB=1.00G
|
||||||
|
|
||||||
|
# Standard Recommended
|
||||||
|
#WP_CPU=1.00
|
||||||
|
#WP_MEM=4.00G
|
||||||
|
#WP_CPU_DB=1.00
|
||||||
|
#WP_MEM_DB=0.50G
|
||||||
|
|
||||||
|
# Tested Minimum
|
||||||
|
#WP_CPU=0.35
|
||||||
|
#WP_MEM=0.35G
|
||||||
|
#WP_CPU_DB=0.15
|
||||||
|
#WP_MEM_DB=0.15G
|
||||||
|
|
||||||
|
# Tested Recommended
|
||||||
|
WP_CPU=0.50
|
||||||
|
WP_MEM=0.50G
|
||||||
|
WP_CPU_DB=0.25
|
||||||
|
WP_MEM_DB=0.25G
|
||||||
|
|
||||||
|
## End Performance ##
|
||||||
16
Volumes/IGNORED/README.md
Normal file
16
Volumes/IGNORED/README.md
Normal 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.
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
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 ##
|
||||||
|
|
||||||
@@ -16,6 +16,39 @@ BASENAME="Backup"
|
|||||||
file="$BACKUP_DIR/$BASENAME.$DATE.$HOSTNAME.$TAG.zip"
|
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 ##
|
||||||
|
|
||||||
# Ensure backup directory exists with correct permissions.
|
# Ensure backup directory exists with correct permissions.
|
||||||
@@ -30,24 +63,34 @@ cd "$BACKUP_DIR"
|
|||||||
mv -v "$BASENAME"*"$TAG"* TRASH/
|
mv -v "$BASENAME"*"$TAG"* TRASH/
|
||||||
rm -v 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 ##
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user