Compare commits
93 Commits
385a07b8c0
...
prod
| Author | SHA1 | Date | |
|---|---|---|---|
| 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 | |||
| 4acbd47388 | |||
| 51d6d32790 | |||
| 1e665a40b7 | |||
| 675ac90c31 | |||
| f0679bd05f | |||
| 897493dd1f | |||
| 5a5035fd33 | |||
| e178141357 | |||
| 6062818475 | |||
| f77557151a | |||
| fb7e31ed69 | |||
| 0478e8e108 | |||
| 2663bb5351 | |||
| 4aa7fa4b00 | |||
| d7a1e6f58a | |||
| f622cba366 | |||
| e86660d34e | |||
| cfb07a6e93 | |||
| 4dd0661e1e | |||
| d6e1186d86 | |||
| 57ade9f67d | |||
| ddeadcf723 | |||
| dbb54b6f81 | |||
| 5afc3bfaee | |||
| 5323b6647f | |||
| 6dac535211 | |||
| d035f9d8e7 | |||
| dfb9a306c5 | |||
| 1ba2739665 | |||
| 0ca793423b | |||
| 1284fc3946 | |||
| a3d6cdcee1 | |||
| a868f874d7 | |||
| 7046699ed6 | |||
| eb2dda9d66 | |||
| 15f01061ba | |||
| 4aebf1e21d | |||
| 5af5c13f43 | |||
| 27689e25d8 | |||
| 29d1affcd8 | |||
| 43ee8de7ef | |||
| 83fdb54768 | |||
| 16df857f08 | |||
| 620f3f81b2 | |||
| 593b1fbaf2 | |||
| e661b67b57 | |||
| 8aaa8e97b9 | |||
| 8c6b258f48 | |||
| 8b7f94d51f | |||
| ac60f54142 | |||
| 7265823f58 | |||
| 811442cd94 | |||
| a90bf8bf28 | |||
| 82547068e3 | |||
| 167d813599 | |||
| 494d0c04bd | |||
| 4469754097 | |||
| 4ca8a8ae02 | |||
| a3ce3a7ee1 | |||
| 0e761c5112 | |||
| cf1e23e91c | |||
| 93be789790 | |||
| 6611665770 | |||
| f8d4c4654e | |||
| 2e7efbc6eb |
15
.gitignore
vendored
15
.gitignore
vendored
@@ -25,6 +25,8 @@ 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
|
||||||
@@ -35,5 +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-*
|
||||||
|
|
||||||
|
# Ignore copies of the Hugo configuration, such as "Config/Hugo-MyWebsite".
|
||||||
|
Hugo-*
|
||||||
|
*-Hugo
|
||||||
|
|
||||||
|
# Ignore Prod and Dev copies as well.
|
||||||
|
*-Prod
|
||||||
|
Prod-*
|
||||||
|
*-Dev
|
||||||
|
Dev-*
|
||||||
|
|||||||
35
Config/HugoExample/Dockerfile
Normal file
35
Config/HugoExample/Dockerfile
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
# 2025-08-13 Hyperling
|
||||||
|
|
||||||
|
## Image ##
|
||||||
|
FROM debian:bookworm-slim
|
||||||
|
|
||||||
|
## Setup ##
|
||||||
|
# System Dependencies
|
||||||
|
RUN apt-get update && apt-get install -y git hugo nginx cron curl bash sudo htop
|
||||||
|
|
||||||
|
# User and Group
|
||||||
|
#RUN groupadd -r hugo && useradd -r -g hugo hugo
|
||||||
|
|
||||||
|
# Hugo Directory Tree
|
||||||
|
RUN mkdir -pv /var/www/hugo/
|
||||||
|
|
||||||
|
# NGINX Directory Tree
|
||||||
|
RUN mkdir -pv /var/www/html/
|
||||||
|
|
||||||
|
# Copy Cron Job to Update Git Repo
|
||||||
|
COPY files/crontab /etc/crontab
|
||||||
|
COPY files/cronjob.sh /var/www/hugo/cronjob.sh
|
||||||
|
|
||||||
|
# Hugo User Permissions
|
||||||
|
RUN chown -Rv www-data:www-data /var/www/
|
||||||
|
RUN chmod +x /var/www/hugo/cronjob.sh
|
||||||
|
|
||||||
|
# Copy Start Script
|
||||||
|
COPY files/main.sh /root/main.sh
|
||||||
|
RUN chmod +x /root/main.sh
|
||||||
|
|
||||||
|
## Main ##
|
||||||
|
# Install + Run Website
|
||||||
|
WORKDIR /var/www/
|
||||||
|
USER root
|
||||||
|
CMD /root/main.sh "$REPO" "$BRANCH" "$PROD" "$DEV"
|
||||||
30
Config/HugoExample/docker-compose.example.yml
Normal file
30
Config/HugoExample/docker-compose.example.yml
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
# 2025-08-13
|
||||||
|
# Configuration for running a Hugo website pulled from Git.
|
||||||
|
|
||||||
|
services:
|
||||||
|
app:
|
||||||
|
container_name: hugo
|
||||||
|
build:
|
||||||
|
context: ./
|
||||||
|
network: host
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- 8013:80 # Production minified files served using NGINX.
|
||||||
|
- 1380:1380 # Development files with drafts served by Hugo Server.
|
||||||
|
environment:
|
||||||
|
- REPO=$REPO
|
||||||
|
- BRANCH=$BRANCH
|
||||||
|
- PROD=$PROD
|
||||||
|
- DEV=$DEV
|
||||||
|
healthcheck:
|
||||||
|
test: curl -sS http://localhost:80 || curl -sS http://localhost:1380 || exit 1
|
||||||
|
interval: 1m
|
||||||
|
timeout: 10s
|
||||||
|
retries: 2
|
||||||
|
start_period: 30s
|
||||||
|
deploy:
|
||||||
|
mode: global
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: '0.10'
|
||||||
|
memory: 64M
|
||||||
22
Config/HugoExample/env.example
Normal file
22
Config/HugoExample/env.example
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
# 2025-08-13 Hyperling
|
||||||
|
|
||||||
|
#
|
||||||
|
## Docker ##
|
||||||
|
#
|
||||||
|
COMPOSE_BAKE=true
|
||||||
|
|
||||||
|
#
|
||||||
|
## Git Website Repository
|
||||||
|
#
|
||||||
|
REPO=https://git.hyperling.com/me/hugo-jackanope
|
||||||
|
BRANCH=main
|
||||||
|
|
||||||
|
#
|
||||||
|
## Web Environments
|
||||||
|
# Please use values YES/TRUE and NO/FALSE.
|
||||||
|
|
||||||
|
# Whether to start NGINX
|
||||||
|
PROD=YES
|
||||||
|
|
||||||
|
# Whether to start Hugo Server
|
||||||
|
DEV=NO
|
||||||
26
Config/HugoExample/files/cronjob.sh
Normal file
26
Config/HugoExample/files/cronjob.sh
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
cd /var/www/hugo/site
|
||||||
|
|
||||||
|
echo "*** Running cronjob @ `date` ***"
|
||||||
|
|
||||||
|
# Pull any updates, and if the project is already up to date, exit successfully.
|
||||||
|
git pull | grep -v "up to date"
|
||||||
|
status="$?"
|
||||||
|
echo "* Pull status is '$status'."
|
||||||
|
if [[ $status != 0 && -e /var/www/html/index.html ]]; then
|
||||||
|
echo "* Site is already up to date and copied, exiting."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If the project was not already up to date, build the new files for NGINX.
|
||||||
|
hugo --gc --minify
|
||||||
|
status="$?"
|
||||||
|
echo "* Hugo status is '$status'."
|
||||||
|
if [[ $status == 0 && -e public/index.html ]]; then
|
||||||
|
echo "* Copying files..."
|
||||||
|
rm -rfv /var/www/html/*
|
||||||
|
mv -v public/* /var/www/html/
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
1
Config/HugoExample/files/crontab
Normal file
1
Config/HugoExample/files/crontab
Normal file
@@ -0,0 +1 @@
|
|||||||
|
* * * * * www-data /var/www/hugo/cronjob.sh
|
||||||
92
Config/HugoExample/files/main.sh
Normal file
92
Config/HugoExample/files/main.sh
Normal file
@@ -0,0 +1,92 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
REPO="$1"
|
||||||
|
echo "REPO='$REPO'"
|
||||||
|
|
||||||
|
BRANCH="$2"
|
||||||
|
if [[ -n $BRANCH ]]; then
|
||||||
|
BRANCH="--branch $BRANCH"
|
||||||
|
fi
|
||||||
|
echo "BRANCH='$BRANCH'"
|
||||||
|
|
||||||
|
PROD="$3"
|
||||||
|
typeset -u PROD
|
||||||
|
echo "PROD='$PROD'"
|
||||||
|
|
||||||
|
DEV="$4"
|
||||||
|
typeset -u DEV
|
||||||
|
echo "DEV='$DEV'"
|
||||||
|
|
||||||
|
SITE="/var/www/hugo/site"
|
||||||
|
|
||||||
|
echo "*** Creating Git Repo ***"
|
||||||
|
if [[ -d $SITE ]]; then
|
||||||
|
rm -rfv $SITE
|
||||||
|
fi
|
||||||
|
sudo -u www-data git clone --recurse-submodules $BRANCH $REPO $SITE
|
||||||
|
status="$?"
|
||||||
|
|
||||||
|
echo "*** Validating Git Repo ***"
|
||||||
|
if [[ $status != 0 || ! -d $SITE/.git ]]; then
|
||||||
|
echo "ERROR: Hugo project may not have cloned correctly. status='$status'"
|
||||||
|
echo "Aborting."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo "* Site exists!"
|
||||||
|
|
||||||
|
echo "*** Copying Static Files to NGINX ***"
|
||||||
|
rm -rfv /var/www/html/*
|
||||||
|
sudo -u www-data /var/www/hugo/cronjob.sh
|
||||||
|
|
||||||
|
echo "*** Starting Cron ***"
|
||||||
|
service cron start
|
||||||
|
service cron status
|
||||||
|
|
||||||
|
if [[ "$PROD" == "Y"* || "$PROD" == "T"* ]]; then
|
||||||
|
echo "*** Starting Production Server Loop ***"
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
http_code="`curl -sS http://localhost:80 -o /dev/null -w "%{http_code}"`"
|
||||||
|
if [[ $http_code != 200 ]]; then
|
||||||
|
echo "* Prod server not detected, starting..."
|
||||||
|
service nginx status
|
||||||
|
service nginx start
|
||||||
|
service nginx status
|
||||||
|
fi
|
||||||
|
sleep 15
|
||||||
|
done &
|
||||||
|
|
||||||
|
cd /var/log/nginx
|
||||||
|
tail -f access.log error.log &
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$DEV" == "Y"* || "$DEV" == "T"* ]]; then
|
||||||
|
echo "*** Starting Development Server Loop ***"
|
||||||
|
|
||||||
|
while true; do
|
||||||
|
http_code="`curl -sS http://localhost:1380 -o /dev/null -w "%{http_code}"`"
|
||||||
|
if [[ $http_code != 200 ]]; then
|
||||||
|
echo "* Dev server not detected, starting..."
|
||||||
|
cd $SITE
|
||||||
|
killall hugo 2>/dev/null
|
||||||
|
sudo -u www-data hugo server -D --noBuildLock --bind 0.0.0.0 -p 1380 &
|
||||||
|
fi
|
||||||
|
sleep 30
|
||||||
|
done &
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "*** Following Mail Files ***"
|
||||||
|
cd /var/mail
|
||||||
|
touch mail www-data
|
||||||
|
chown -v mail:mail mail
|
||||||
|
chown -v www-data:mail www-data
|
||||||
|
chmod -v 660 mail www-data
|
||||||
|
tail -f mail www-data &
|
||||||
|
|
||||||
|
cd
|
||||||
|
|
||||||
|
echo "*** Finished $0 @ `date` ***"
|
||||||
|
|
||||||
|
wait -n
|
||||||
|
|
||||||
|
exit $?
|
||||||
@@ -6,20 +6,28 @@
|
|||||||
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
|
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
|
||||||
WORKDIR /var/www/api
|
WORKDIR /var/www/api
|
||||||
RUN echo '{ "dependencies": { "express": "" } }' > package.json
|
RUN echo '{ "dependencies": { "express": ">=4.18.1 < 5.0.0" } }' > package.json
|
||||||
RUN npm install
|
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" && \
|
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
|
|
||||||
24
Config/Hyperling.com/env.example
Normal file
24
Config/Hyperling.com/env.example
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# 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
|
||||||
|
|
||||||
|
## 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
|
||||||
3
Config/LibreTranslate/Dockerfile
Normal file
3
Config/LibreTranslate/Dockerfile
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Install and run LibreTranslate
|
||||||
|
|
||||||
|
FROM libretranslate/libretranslate:latest
|
||||||
31
Config/LibreTranslate/README.md
Normal file
31
Config/LibreTranslate/README.md
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
# LibreTranslate Configuration
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
1. Copy `env.example` to `.env` and adjust the values as necessary.
|
||||||
|
|
||||||
|
```
|
||||||
|
cd $DOCKER_HOME/Config/LibreTranslate
|
||||||
|
cp env.example .env
|
||||||
|
vi .env
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Run the `prep.sh` file to create the volume mounts.
|
||||||
|
|
||||||
|
```
|
||||||
|
./prep.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
3. If using a temporary location for `models/` such as `/tmp/`, ensure
|
||||||
|
that the reboot script is in `root`'s crontab to set the folders back up.
|
||||||
|
|
||||||
|
```
|
||||||
|
@reboot /opt/Docker/Config/LibreTranslate/cron-reboot.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Start the container up as normal.
|
||||||
|
|
||||||
|
```
|
||||||
|
cp docker-compose.main.yml docker-compose.yml
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
23
Config/LibreTranslate/cron-reboot.sh
Executable file
23
Config/LibreTranslate/cron-reboot.sh
Executable file
@@ -0,0 +1,23 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# 2025-07-26 Hyperling
|
||||||
|
# Ensure the LibreTranslate container starts correctly after a reboot, especially if placing models/ under /tmp/.
|
||||||
|
|
||||||
|
## Setup ##
|
||||||
|
|
||||||
|
DIR="$(dirname -- "${BASH_SOURCE[0]}")"
|
||||||
|
cd $DIR
|
||||||
|
source ./.env
|
||||||
|
|
||||||
|
## Main ##
|
||||||
|
|
||||||
|
# Shutdown the container.
|
||||||
|
docker compose down
|
||||||
|
|
||||||
|
# Create folders.
|
||||||
|
./prep.sh
|
||||||
|
|
||||||
|
# Start the container.
|
||||||
|
docker compose up -d
|
||||||
|
|
||||||
|
# Finish successfully.
|
||||||
|
exit 0
|
||||||
55
Config/LibreTranslate/docker-compose.main.yml
Normal file
55
Config/LibreTranslate/docker-compose.main.yml
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
# LibreTranslate configuration.
|
||||||
|
# Example docker-compose.yml:
|
||||||
|
# https://github.com/LibreTranslate/LibreTranslate/blob/main/docker-compose.yml
|
||||||
|
|
||||||
|
# Named volumes ensure that the container user gets the correct permissions.
|
||||||
|
volumes:
|
||||||
|
|
||||||
|
libretranslate_api_keys:
|
||||||
|
driver: local
|
||||||
|
driver_opts:
|
||||||
|
type: none
|
||||||
|
device: $API_KEYS_DIR
|
||||||
|
o: bind
|
||||||
|
|
||||||
|
libretranslate_models:
|
||||||
|
driver: local
|
||||||
|
driver_opts:
|
||||||
|
type: none
|
||||||
|
device: $MODELS_DIR
|
||||||
|
o: bind
|
||||||
|
|
||||||
|
services:
|
||||||
|
|
||||||
|
## Main ##
|
||||||
|
lt-app:
|
||||||
|
container_name: lt-app
|
||||||
|
build:
|
||||||
|
context: ./
|
||||||
|
network: host
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- "5000:5000"
|
||||||
|
# Uncomment this for logging in docker compose logs
|
||||||
|
tty: true
|
||||||
|
healthcheck:
|
||||||
|
test: ['CMD-SHELL', './venv/bin/python scripts/healthcheck.py']
|
||||||
|
command: --req-limit $REQUESTS --char-limit $CHARACTERS
|
||||||
|
environment:
|
||||||
|
# Allow the saving of API Keys. Requires volume libretranslate_api_keys.
|
||||||
|
- LT_API_KEYS=true
|
||||||
|
- LT_API_KEYS_DB_PATH=/app/db/api_keys.db
|
||||||
|
# Optimize loading time. Requires volume libretranslate_models.
|
||||||
|
- LT_UPDATE_MODELS=$UPDATE_MODELS
|
||||||
|
- $LANGUAGES
|
||||||
|
volumes:
|
||||||
|
# Store the API keys.
|
||||||
|
- libretranslate_api_keys:/app/db
|
||||||
|
# Avoid re-downloading language models every reboot.
|
||||||
|
- libretranslate_models:/home/libretranslate/.local:rw
|
||||||
|
deploy:
|
||||||
|
mode: global
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: $CPU
|
||||||
|
memory: $RAM
|
||||||
53
Config/LibreTranslate/env.example
Normal file
53
Config/LibreTranslate/env.example
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
# This file should be renamed '.env' and have any private values modified.
|
||||||
|
|
||||||
|
COMPOSE_BAKE=true
|
||||||
|
|
||||||
|
### Container Specs ###
|
||||||
|
|
||||||
|
## For a small-scale server (such as 1 CPU, 1GB RAM).
|
||||||
|
# CPU=0.25
|
||||||
|
# RAM=640M
|
||||||
|
|
||||||
|
## For a fully capable server.
|
||||||
|
CPU=2.00
|
||||||
|
RAM=4.0G
|
||||||
|
|
||||||
|
# How much the users are able to utilize the server.
|
||||||
|
REQUESTS=100
|
||||||
|
CHARACTERS=2000
|
||||||
|
|
||||||
|
### Languages ###
|
||||||
|
|
||||||
|
## Check for language model updates on each run.
|
||||||
|
UPDATE_MODELS=true
|
||||||
|
|
||||||
|
## Use default behavior of downloading all models.
|
||||||
|
# LANGUAGES=ALL
|
||||||
|
|
||||||
|
## Otherwise set to a comma-separated list to enable only the desired models.
|
||||||
|
LANGUAGES='LT_LOAD_ONLY=en,es,fr,de'
|
||||||
|
|
||||||
|
### API Keys ###
|
||||||
|
|
||||||
|
API_KEYS=true
|
||||||
|
API_KEYS_DB_PATH=/app/db/api_keys.db
|
||||||
|
API_KEYS_DIR=../../Volumes/LibreTranslate/api_keys
|
||||||
|
|
||||||
|
### Models ###
|
||||||
|
|
||||||
|
## Storing models prevents them from needing downloaded each run.
|
||||||
|
## Placing them under Volumes means they will increase backup sizes.
|
||||||
|
|
||||||
|
MODELS_DIR=../../Volumes/LibreTranslate/models
|
||||||
|
|
||||||
|
## Not providing any location puts them in the default Docker /var/ location.
|
||||||
|
# MODELS_DIR=
|
||||||
|
|
||||||
|
## Storing them in /tmp/ will cause them to get reset after reboots, but hides
|
||||||
|
## them from backup type locations such as Volumes/LibreTranslate/ and /var/.
|
||||||
|
## Please see the README for the CRON command related to this setting.
|
||||||
|
# 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
|
||||||
25
Config/LibreTranslate/prep.sh
Executable file
25
Config/LibreTranslate/prep.sh
Executable file
@@ -0,0 +1,25 @@
|
|||||||
|
#!/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 ##
|
||||||
|
|
||||||
|
DIR="$(dirname -- "${BASH_SOURCE[0]}")"
|
||||||
|
source $DIR/.env
|
||||||
|
|
||||||
|
## Main ##
|
||||||
|
|
||||||
|
# Create folders.
|
||||||
|
if [[ $API_KEYS_DIR == "../*" ]]; then
|
||||||
|
API_KEYS_DIR="$DIR/$API_KEYS_DIR"
|
||||||
|
fi
|
||||||
|
mkdir -pv $API_KEYS_DIR
|
||||||
|
|
||||||
|
if [[ $MODELS_DIR == "../*" ]]; then
|
||||||
|
MODELS_DIR="$DIR/$MODELS_DIR"
|
||||||
|
fi
|
||||||
|
mkdir -pv $MODELS_DIR
|
||||||
|
|
||||||
|
# Finish successfully.
|
||||||
|
exit 0
|
||||||
11
Config/Nextcloud/Dockerfile
Normal file
11
Config/Nextcloud/Dockerfile
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
# 2025-06-16 Hyperling
|
||||||
|
# Tired of running fixes.sh to install extra packages. Bake them in!
|
||||||
|
|
||||||
|
FROM nextcloud:stable
|
||||||
|
|
||||||
|
# Cache System Dependencies
|
||||||
|
RUN apt-get update && apt-get install -y sudo libmagickcore-7.q16-10-extra htop \
|
||||||
|
iputils-ping dnsutils vim bzip2 libbz2-dev
|
||||||
|
|
||||||
|
# Configure PHP Dependency
|
||||||
|
RUN docker-php-ext-install bz2
|
||||||
@@ -4,19 +4,64 @@
|
|||||||
# This should be added to root's crontab with the full path, such as:
|
# This should be 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
|
||||||
|
|
||||||
# Check if a job is already going.
|
DIR="$(dirname -- "${BASH_SOURCE[0]}")"
|
||||||
PROG="$(basename -- "${BASH_SOURCE[0]}")"
|
PROG="$(basename -- "${BASH_SOURCE[0]}")"
|
||||||
|
|
||||||
|
# Check if a job is already going.
|
||||||
RUNNING=`ps -ef | grep $PROG | grep -v grep | grep -v $$ | grep -v "sh -c" | wc -l`
|
RUNNING=`ps -ef | grep $PROG | grep -v grep | grep -v $$ | grep -v "sh -c" | wc -l`
|
||||||
if (( $RUNNING > 0 )); then
|
if (( $RUNNING > 0 )); then
|
||||||
exit $RUNNING
|
exit $RUNNING
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 2023-08-25 From crontab.
|
# Usage function for when -h or bad parameters are passed.
|
||||||
sh -c "docker exec -u www-data nc-app php cron.php --define apc.enable_cli=1"
|
function usage() {
|
||||||
|
cat <<- EOF
|
||||||
|
Script to help with scheduling Nextcloud's cron requirements.
|
||||||
|
Usage: $PROG [-h|-v]
|
||||||
|
-h ) Display the usage and help text.
|
||||||
|
| --help
|
||||||
|
-v) Pass a verbose request to cron.php.
|
||||||
|
| --verbose
|
||||||
|
EOF
|
||||||
|
exit $1
|
||||||
|
}
|
||||||
|
|
||||||
# 2023-08-25 From fixes.sh, keep ownership correct and apps up to date.
|
# Check for any parameters.
|
||||||
sh -c "docker exec -it nc-app chown -Rc www-data:www-data ."
|
verbose=""
|
||||||
|
case "$1" in
|
||||||
|
"") ;;
|
||||||
|
"-h"|"--help")
|
||||||
|
usage 0
|
||||||
|
;;
|
||||||
|
"-v"|"--verbose")
|
||||||
|
verbose="-v"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo -e "ERROR: Unknown parameter '$1'. Exiting.\n"
|
||||||
|
usage 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# Keep ownership correct and apps up to date. Also exists in fixes.sh.
|
||||||
|
sh -c "docker exec -i nc-app chown -Rc www-data:www-data ."
|
||||||
# No longer update apps in advance of NC updates, allow the upgrade process to do it.
|
# No longer update apps in advance of NC updates, allow the upgrade process to do it.
|
||||||
#sh -c "docker exec -itu www-data nc-app ./occ app:update --all"
|
#sh -c "docker exec -itu www-data nc-app ./occ app:update --all"
|
||||||
|
|
||||||
|
# Prepare the variables being passed to the execution command.
|
||||||
|
if [[ -f $DIR/.env ]]; then
|
||||||
|
source $DIR/.env
|
||||||
|
else
|
||||||
|
PHP_MEMORY_LIMIT=256M
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Main part of what would go in the crontab.
|
||||||
|
sh -c "
|
||||||
|
docker exec nc-app \
|
||||||
|
sudo -u www-data \
|
||||||
|
php \
|
||||||
|
-d apc.enable_cli=1 \
|
||||||
|
-d memory_limit=$PHP_MEMORY_LIMIT \
|
||||||
|
-f cron.php $verbose \
|
||||||
|
"
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
|||||||
@@ -72,7 +72,8 @@ services:
|
|||||||
## Nextcloud ##
|
## Nextcloud ##
|
||||||
nc-app:
|
nc-app:
|
||||||
container_name: nc-app
|
container_name: nc-app
|
||||||
image: nextcloud:stable
|
build:
|
||||||
|
context: ./
|
||||||
restart: always
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
- 8080:80
|
- 8080:80
|
||||||
|
|||||||
@@ -73,7 +73,8 @@ services:
|
|||||||
## Nextcloud ##
|
## Nextcloud ##
|
||||||
nc-app:
|
nc-app:
|
||||||
container_name: nc-app
|
container_name: nc-app
|
||||||
image: nextcloud:stable
|
build:
|
||||||
|
context: ./
|
||||||
restart: always
|
restart: always
|
||||||
ports:
|
ports:
|
||||||
- 8080:80
|
- 8080:80
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
# Example environment file for Nextcloud stack, should be copied as `.env`. The
|
# Example environment file for Nextcloud stack, should be copied as `.env`.
|
||||||
# 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.
|
||||||
#
|
#
|
||||||
# ** All usernames and passwords need changed before running in production! **
|
# ** All usernames and passwords need changed before running in production! **
|
||||||
@@ -7,6 +8,17 @@
|
|||||||
# Full guide on the Nextcloud parameters which may be supplied:
|
# Full guide on the Nextcloud parameters which may be supplied:
|
||||||
# https://github.com/docker-library/docs/blob/master/nextcloud/README.md#auto-configuration-via-environment-variables
|
# https://github.com/docker-library/docs/blob/master/nextcloud/README.md#auto-configuration-via-environment-variables
|
||||||
|
|
||||||
|
#
|
||||||
|
## Docker ##
|
||||||
|
#
|
||||||
|
|
||||||
|
# 20250616 - Performance testing was done on an old workstation.
|
||||||
|
# Only Compose: 3.8, 2.5, 1.8, 1.8, 2.1, 2.0, 1.7 seconds
|
||||||
|
# Compose Bake: 3.7, 0.9, 2.3, 2.0, 3.1, 2.1, 1.8 seconds
|
||||||
|
# Not really needed but also not harmful and will eliminate the warning.
|
||||||
|
# Timings do not include the initial pull for either method.
|
||||||
|
COMPOSE_BAKE=true
|
||||||
|
|
||||||
#
|
#
|
||||||
## Nextcloud ##
|
## Nextcloud ##
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
# Example environment file for Nextcloud stack, should be copied as `.env`. The
|
# Example environment file for Nextcloud stack, should be copied as `.env`.
|
||||||
# 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.
|
||||||
#
|
#
|
||||||
# ** All usernames and passwords need changed before running in production! **
|
# ** All usernames and passwords need changed before running in production! **
|
||||||
@@ -7,6 +8,17 @@
|
|||||||
# Full guide on the Nextcloud parameters which may be supplied:
|
# Full guide on the Nextcloud parameters which may be supplied:
|
||||||
# https://github.com/docker-library/docs/blob/master/nextcloud/README.md#auto-configuration-via-environment-variables
|
# https://github.com/docker-library/docs/blob/master/nextcloud/README.md#auto-configuration-via-environment-variables
|
||||||
|
|
||||||
|
#
|
||||||
|
## Docker ##
|
||||||
|
#
|
||||||
|
|
||||||
|
# 20250616 - Performance testing was done on an old workstation.
|
||||||
|
# Only Compose: 3.8, 2.5, 1.8, 1.8, 2.1, 2.0, 1.7 seconds
|
||||||
|
# Compose Bake: 3.7, 0.9, 2.3, 2.0, 3.1, 2.1, 1.8 seconds
|
||||||
|
# Not really needed but also not harmful and will eliminate the warning.
|
||||||
|
# Timings do not include the initial pull for either method.
|
||||||
|
COMPOSE_BAKE=true
|
||||||
|
|
||||||
#
|
#
|
||||||
## Nextcloud ##
|
## Nextcloud ##
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# 2022-09-25 Hyperling
|
# 2022-09-25 Hyperling
|
||||||
# Put fixes in a file so they do not need remembered.
|
# Put maintenance needs into a file so the commands do not need remembered.
|
||||||
|
|
||||||
## Setup ##
|
## Setup ##
|
||||||
|
|
||||||
@@ -11,19 +11,20 @@ source $DIR/../../source.env
|
|||||||
|
|
||||||
## Main ##
|
## Main ##
|
||||||
|
|
||||||
echo -e "\n*** APT ***"
|
##### 20250616 - Apt and PHP commands now baked into the Dockerfile!! :D #####
|
||||||
|
###echo -e "\n*** APT ***"
|
||||||
echo -e "\n`date` - Update Apt Cache"
|
###
|
||||||
docker exec -it nc-app apt update -y
|
###echo -e "\n`date` - Update Apt Cache"
|
||||||
|
###docker exec -it nc-app apt update -y
|
||||||
echo -e "\n`date` - Install Additional Software"
|
###
|
||||||
docker exec -it nc-app apt install -y sudo libmagickcore-6.q16-6-extra htop \
|
###echo -e "\n`date` - Install Additional Software"
|
||||||
iputils-ping dnsutils vim bzip2 libbz2-dev # php-bz2
|
###docker exec -it nc-app apt install -y sudo libmagickcore-6.q16-6-extra htop \
|
||||||
|
### iputils-ping dnsutils vim bzip2 libbz2-dev # php-bz2
|
||||||
# 20240130
|
###
|
||||||
# https://help.nextcloud.com/t/docker-image-setup-warning-missing-bz2-after-update-to-nc-28-0-0/176605
|
#### 20240130
|
||||||
echo -e "\n`date` - Compile PHP Modules"
|
#### https://help.nextcloud.com/t/docker-image-setup-warning-missing-bz2-after-update-to-nc-28-0-0/176605
|
||||||
docker exec -it nc-app docker-php-ext-install bz2
|
###echo -e "\n`date` - Compile PHP Modules"
|
||||||
|
###docker exec -it nc-app docker-php-ext-install bz2
|
||||||
|
|
||||||
# 2023-12-04 Make sure cron and chmod commands get run.
|
# 2023-12-04 Make sure cron and chmod commands get run.
|
||||||
echo -e "\n*** CRON ***"
|
echo -e "\n*** CRON ***"
|
||||||
@@ -34,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"
|
||||||
@@ -69,7 +85,7 @@ docker exec -itu www-data nc-app ./occ files:scan-app-data
|
|||||||
echo -e "\n`date` - Theme Update"
|
echo -e "\n`date` - Theme Update"
|
||||||
docker exec -itu www-data nc-app ./occ maintenance:theme:update
|
docker exec -itu www-data nc-app ./occ maintenance:theme:update
|
||||||
echo -e "\n`date` - Repair"
|
echo -e "\n`date` - Repair"
|
||||||
docker exec -itu www-data nc-app ./occ maintenance:repair
|
docker exec -itu www-data nc-app ./occ maintenance:repair --include-expensive
|
||||||
|
|
||||||
# May also be useful but do not have much experience with them.
|
# May also be useful but do not have much experience with them.
|
||||||
echo -e "\n`date` - Clean Versions"
|
echo -e "\n`date` - Clean Versions"
|
||||||
12
Config/ProvisionTests/Dockerfiles/arch
Normal file
12
Config/ProvisionTests/Dockerfiles/arch
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# Create a VM for testing Ansible provisioning.
|
||||||
|
|
||||||
|
FROM archlinux:base
|
||||||
|
|
||||||
|
RUN pacman -Syu --noconfirm && pacman -Sy --noconfirm $PACKAGES $EXTRA_ARCH
|
||||||
|
|
||||||
|
COPY bin/main.sh /root/main.sh
|
||||||
|
RUN chmod +x /root/main.sh
|
||||||
|
|
||||||
|
WORKDIR /root/
|
||||||
|
USER root
|
||||||
|
CMD ./main.sh
|
||||||
12
Config/ProvisionTests/Dockerfiles/debian
Normal file
12
Config/ProvisionTests/Dockerfiles/debian
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# Create a VM for testing Ansible provisioning.
|
||||||
|
|
||||||
|
FROM debian:trixie
|
||||||
|
|
||||||
|
RUN apt update && apt dist-upgrade -y && 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
|
||||||
12
Config/ProvisionTests/Dockerfiles/fedora
Normal file
12
Config/ProvisionTests/Dockerfiles/fedora
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# Create a VM for testing Ansible provisioning.
|
||||||
|
|
||||||
|
FROM fedora:latest
|
||||||
|
|
||||||
|
RUN dnf upgrade --refresh -y && dnf install -y $PACKAGES $EXTRA_FEDORA
|
||||||
|
|
||||||
|
COPY bin/main.sh /root/main.sh
|
||||||
|
RUN chmod +x /root/main.sh
|
||||||
|
|
||||||
|
WORKDIR /root/
|
||||||
|
USER root
|
||||||
|
CMD ./main.sh
|
||||||
14
Config/ProvisionTests/Dockerfiles/opensuse
Normal file
14
Config/ProvisionTests/Dockerfiles/opensuse
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
# Create a VM for testing Ansible provisioning.
|
||||||
|
|
||||||
|
FROM opensuse/tumbleweed
|
||||||
|
|
||||||
|
RUN zypper -n refresh \
|
||||||
|
&& zypper -n dist-upgrade -y \
|
||||||
|
&& 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
|
||||||
12
Config/ProvisionTests/Dockerfiles/ubuntu
Normal file
12
Config/ProvisionTests/Dockerfiles/ubuntu
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# Create a VM for testing Ansible provisioning.
|
||||||
|
|
||||||
|
FROM ubuntu:rolling
|
||||||
|
|
||||||
|
RUN apt update && apt dist-upgrade -y && 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
|
||||||
3
Config/ProvisionTests/README.md
Normal file
3
Config/ProvisionTests/README.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# Provision Test Images
|
||||||
|
|
||||||
|
Create containers of popular Linux distributions in order to test Ansible.
|
||||||
21
Config/ProvisionTests/bin/main.sh
Normal file
21
Config/ProvisionTests/bin/main.sh
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
sh -c "rm -rfv prov-test"
|
||||||
|
git clone $REPO --branch=$BRANCH prov-test
|
||||||
|
|
||||||
|
cd prov-test
|
||||||
|
|
||||||
|
echo "Starting Executable Script"
|
||||||
|
|
||||||
|
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 $?
|
||||||
142
Config/ProvisionTests/docker-compose.standard.yml
Normal file
142
Config/ProvisionTests/docker-compose.standard.yml
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
# 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
|
||||||
|
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
|
||||||
|
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
|
||||||
|
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
|
||||||
|
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
|
||||||
|
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
|
||||||
24
Config/ProvisionTests/env.standard
Normal file
24
Config/ProvisionTests/env.standard
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# This file should be renamed '.env' and have any private values modified.
|
||||||
|
|
||||||
|
COMPOSE_BAKE=true
|
||||||
|
|
||||||
|
## Performance
|
||||||
|
CPU=0.2
|
||||||
|
RAM=0.2G
|
||||||
|
|
||||||
|
## Storage
|
||||||
|
#STORAGE_DIR=../../Volumes/ProvisionTests
|
||||||
|
PT_STORAGE_DIR=/tmp/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=dev
|
||||||
|
EXEC="./setup.sh -l"
|
||||||
23
Config/ProvisionTests/prep.sh
Executable file
23
Config/ProvisionTests/prep.sh
Executable file
@@ -0,0 +1,23 @@
|
|||||||
|
#!/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 ##
|
||||||
|
|
||||||
|
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
|
||||||
@@ -9,23 +9,35 @@ source $DIR/../source.env
|
|||||||
|
|
||||||
## Variables ##
|
## Variables ##
|
||||||
|
|
||||||
file="/tmp/Backup.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`"
|
||||||
|
|
||||||
## 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 $file
|
mv -v "$BASENAME"*"$TAG"* TRASH/
|
||||||
fi
|
rm -v TRASH/*
|
||||||
|
|
||||||
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
|
||||||
|
|
||||||
echo -e "\n`date` - Create the backup for '$DOCKER_HOME'."
|
echo -e "\n`date` - Create the backup for '$DOCKER_HOME'."
|
||||||
cd $DOCKER_HOME
|
$time zip -r $file.tmp \
|
||||||
$time zip -r $file.tmp . 1>/dev/null
|
$DOCKER_HOME \
|
||||||
|
/etc/crontab /etc/cron.d /var/spool/cron \
|
||||||
|
/var/{log,mail} 1>/dev/null
|
||||||
mv -v $file.tmp $file
|
mv -v $file.tmp $file
|
||||||
|
|
||||||
echo -e "\n`date` - Done with zipping, check size."
|
echo -e "\n`date` - Done with zipping, check size."
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ fi
|
|||||||
if [[ -z $up && -z $down && -z $build && -z $pull && -z $clean
|
if [[ -z $up && -z $down && -z $build && -z $pull && -z $clean
|
||||||
&& -z $interact && -z $logs && -z $stats
|
&& -z $interact && -z $logs && -z $stats
|
||||||
]]; then
|
]]; then
|
||||||
docker ps
|
docker ps --size
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user