Compare commits
59 Commits
4acbd47388
...
dev
| Author | SHA1 | Date | |
|---|---|---|---|
| 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 | |||
| e0f846164e | |||
| 9314bb8bb4 | |||
| b9d9771523 | |||
| d2aa3c195b | |||
| dd60d5a721 | |||
| c04eb08f78 | |||
| 418983c490 | |||
| 95060838e2 | |||
| 6973640b4e | |||
| a49d0129e7 | |||
| 394acfa06d | |||
| 04089744e6 | |||
| 75711c6c20 | |||
| c4032b5b94 | |||
| d7820ed373 | |||
| d9f8318e66 | |||
| a5a80276ac | |||
| c070d7cb92 | |||
| c138fe67d6 | |||
| 2697645abe | |||
| ce111d01f3 | |||
| 7abe909cdf | |||
| f57a0d322d | |||
| 9381d61d99 | |||
| bde78a1489 |
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-*
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -10,11 +10,15 @@ services:
|
|||||||
restart: always
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
- 8317:8080
|
- 8317:8080
|
||||||
|
environment:
|
||||||
|
- BRANCH=$BRANCH
|
||||||
|
- CPU=$CPU
|
||||||
|
- MEM=$MEM
|
||||||
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
|
||||||
@@ -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
|
|
||||||
@@ -7,3 +7,18 @@
|
|||||||
# Subsequent builds consistently take less than 2 seconds.
|
# Subsequent builds consistently take less than 2 seconds.
|
||||||
# Testing was done on the micro server, not a workstation.
|
# Testing was done on the micro server, not a workstation.
|
||||||
COMPOSE_BAKE=true
|
COMPOSE_BAKE=true
|
||||||
|
|
||||||
|
## Branch ##
|
||||||
|
# Allow choosing the branch. By leaving it blank, the main branch will be used.
|
||||||
|
# Should be in the full "--branch my-branch" syntax.
|
||||||
|
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
|
||||||
@@ -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
|
||||||
|
|||||||
21
Config/ProvisionTests/Dockerfiles/arch
Normal file
21
Config/ProvisionTests/Dockerfiles/arch
Normal 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
|
||||||
20
Config/ProvisionTests/Dockerfiles/debian
Normal file
20
Config/ProvisionTests/Dockerfiles/debian
Normal 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
|
||||||
20
Config/ProvisionTests/Dockerfiles/fedora
Normal file
20
Config/ProvisionTests/Dockerfiles/fedora
Normal 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
|
||||||
20
Config/ProvisionTests/Dockerfiles/opensuse
Normal file
20
Config/ProvisionTests/Dockerfiles/opensuse
Normal 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
|
||||||
20
Config/ProvisionTests/Dockerfiles/ubuntu
Normal file
20
Config/ProvisionTests/Dockerfiles/ubuntu
Normal 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
|
||||||
7
Config/ProvisionTests/README.md
Normal file
7
Config/ProvisionTests/README.md
Normal 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.
|
||||||
23
Config/ProvisionTests/bin/main.sh
Normal file
23
Config/ProvisionTests/bin/main.sh
Normal 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 $?
|
||||||
157
Config/ProvisionTests/docker-compose.example.yml
Normal file
157
Config/ProvisionTests/docker-compose.example.yml
Normal 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
|
||||||
23
Config/ProvisionTests/example.env
Normal file
23
Config/ProvisionTests/example.env
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
# This file should be 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
19
Config/ProvisionTests/prep.sh
Executable 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
|
||||||
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,42 +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 ##
|
||||||
|
|
||||||
TAG="Docker"
|
TAG="Docker"
|
||||||
DATE="`date "+%Y%m%d-%H%M%S"`"
|
DATE="`date "+%Y%m%d-%H%M%S"`"
|
||||||
BASENAME="/tmp/Backup"
|
BACKUP_DIR="/srv/backup"
|
||||||
file="$BASENAME.$DATE.$HOSTNAME.$TAG.zip"
|
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 ##
|
||||||
|
|
||||||
|
# Ensure backup directory exists with correct permissions.
|
||||||
|
mkdir -pv "$BACKUP_DIR"
|
||||||
|
mkdir -pv "$BACKUP_DIR/TRASH"
|
||||||
|
chmod -Rv 775 "$BACKUP_DIR"
|
||||||
|
chown -Rv root:root "$BACKUP_DIR"
|
||||||
|
|
||||||
# Remove the last backup.
|
# Remove the last backup.
|
||||||
if [[ -e $file ]]; then
|
echo "`date` - Removing existing files."
|
||||||
echo "`date` - Removing existing file."
|
cd "$BACKUP_DIR"
|
||||||
rm -fv "$BASENAME"*"$TAG"*
|
mv -v "$BASENAME"*"$TAG"* TRASH/
|
||||||
|
rm -v TRASH/*
|
||||||
|
|
||||||
|
if [[ "$down" == "TRUE" ]]; then
|
||||||
|
echo -e "\n`date` - Take down services for a cold backup."
|
||||||
|
manage.sh -d
|
||||||
|
else
|
||||||
|
echo -e "\n`date` - Skipping take down."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo -e "\n`date` - Take down services for a cold backup."
|
|
||||||
manage.sh -d
|
|
||||||
|
|
||||||
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"
|
||||||
|
|
||||||
echo -e "\n`date` - Bring services back up."
|
if [[ "$up" == "TRUE" ]]; then
|
||||||
manage.sh -u
|
echo -e "\n`date` - Bring services back up."
|
||||||
|
manage.sh -u
|
||||||
|
else
|
||||||
|
echo -e "\n`date` - Skipping restoring services."
|
||||||
|
fi
|
||||||
|
|
||||||
## Finish ##
|
## Finish ##
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user