Merge branch 'main' into reverseproxy

This commit is contained in:
Hyperling 2023-07-09 06:40:59 -07:00 committed by GitHub
commit 9de4ff19d2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 96 additions and 253 deletions

3
.gitignore vendored
View File

@ -10,3 +10,6 @@ logs/*
# Ignore private reverse proxy configurations.
Config/ReverseProxy/config/conf.d/*.*
Config/ReverseProxy/config/html/*.*
# Ignore MailServer Files
Config/MailServer/setup.sh

View File

@ -0,0 +1,15 @@
# 2022-10-29 Hyperling
# Create website in node container and run it.
# Using Debian testing so that we use PHP >8. otherwise the shebangs from
# the include files (#!/usr/bin/php) show up on the website.
FROM debian:testing
# Install Dependencies
RUN apt update && apt install -y sudo php-fpm nodejs npm
# Run Website
CMD rm -rfv www && \
git clone https://github.com/Hyperling/www www && \
cd www && \
./run.sh

View File

@ -0,0 +1,12 @@
# 2022-10-29
# Hyperling.com configuration.
version: '2'
services:
app:
image: node
restart: always
build: ./
ports:
- 8317:8080

View File

@ -1,240 +0,0 @@
#! /bin/bash
# version v1.0.0
# executed manually / via Make
# task wrapper for various setup scripts
CONFIG_PATH=
CONTAINER_NAME=
CRI=
DEFAULT_CONFIG_PATH=
DESIRED_CONFIG_PATH=
DIR=$(pwd)
DMS_CONFIG='/tmp/docker-mailserver'
IMAGE_NAME=
DEFAULT_IMAGE_NAME='docker.io/mailserver/docker-mailserver:latest'
INFO=
PODMAN_ROOTLESS=false
USE_SELINUX=
USE_TTY=
VOLUME=
RED=$(echo -ne '\e[31m\e[1m')
WHITE=$(echo -ne '\e[37m')
ORANGE=$(echo -ne '\e[38;5;214m')
LBLUE=$(echo -ne '\e[94m')
RESET=$(echo -ne '\e[0m')
set -euEo pipefail
shopt -s inherit_errexit 2>/dev/null || true
trap '__err "${BASH_SOURCE}" "${FUNCNAME[0]:-?}" "${BASH_COMMAND:-?}" "${LINENO:-?}" "${?:-?}"' ERR
function __err
{
[[ ${5} -gt 1 ]] && exit 1
local ERR_MSG="\n--- ${RED}UNCHECKED ERROR${RESET}"
ERR_MSG+="\n - script = ${1}"
ERR_MSG+="\n - function = ${2}"
ERR_MSG+="\n - command = ${3}"
ERR_MSG+="\n - line = ${4}"
ERR_MSG+="\n - exit code = ${5}"
ERR_MSG+='\n\nThis should not have happened. Please file a bug report.\n'
echo -e "${ERR_MSG}"
}
function _show_local_usage
{
# shellcheck disable=SC2059
printf '%s' "${ORANGE}OPTIONS${RESET}
${LBLUE}Config path, container or image adjustments${RESET}
-i IMAGE_NAME
Provides the name of the 'docker-mailserver' image. The default value is
'${WHITE}${DEFAULT_IMAGE_NAME}${RESET}'
-c CONTAINER_NAME
Provides the name of the running container.
-p PATH
Provides the local path of the config folder to the temporary container instance.
Does not work if an existing a 'docker-mailserver' container is already running.
${LBLUE}SELinux${RESET}
-z
Allows container access to the bind mount content that is shared among
multiple containers on a SELinux-enabled host.
-Z
Allows container access to the bind mount content that is private and
unshared with other containers on a SELinux-enabled host.
${LBLUE}Podman${RESET}
-R
Accept running in Podman rootless mode. Ignored when using Docker / Docker Compose.
"
[[ ${1:-} == 'no-exit' ]] && return 0
# shellcheck disable=SC2059
printf '%s' "${ORANGE}EXIT STATUS${RESET}
Exit status is 0 if the command was successful. If there was an unexpected error, an error
message is shown describing the error. In case of an error, the script will exit with exit
status 1.
"
}
function _get_absolute_script_directory
{
if dirname "$(readlink -f "${0}")" &>/dev/null
then
DIR=$(dirname "$(readlink -f "${0}")")
elif realpath -e -L "${0}" &>/dev/null
then
DIR=$(realpath -e -L "${0}")
DIR="${DIR%/setup.sh}"
fi
}
function _set_default_config_path
{
if [[ -d "${DIR}/config" ]]
then
# legacy path (pre v10.2.0)
DEFAULT_CONFIG_PATH="${DIR}/config"
else
DEFAULT_CONFIG_PATH="${DIR}/docker-data/dms/config"
fi
}
function _handle_config_path
{
if [[ -z ${DESIRED_CONFIG_PATH} ]]
then
# no desired config path
if [[ -n ${CONTAINER_NAME} ]]
then
VOLUME=$(${CRI} inspect "${CONTAINER_NAME}" \
--format="{{range .Mounts}}{{ println .Source .Destination}}{{end}}" | \
grep "${DMS_CONFIG}$" 2>/dev/null || :)
fi
if [[ -n ${VOLUME} ]]
then
CONFIG_PATH=$(echo "${VOLUME}" | awk '{print $1}')
fi
if [[ -z ${CONFIG_PATH} ]]
then
CONFIG_PATH=${DEFAULT_CONFIG_PATH}
fi
else
CONFIG_PATH=${DESIRED_CONFIG_PATH}
fi
}
function _run_in_new_container
{
# start temporary container with specified image
if ! ${CRI} history -q "${IMAGE_NAME}" &>/dev/null
then
echo "Image '${IMAGE_NAME}' not found. Pulling ..."
${CRI} pull "${IMAGE_NAME}"
fi
${CRI} run --rm "${USE_TTY}" \
-v "${CONFIG_PATH}:${DMS_CONFIG}${USE_SELINUX}" \
"${IMAGE_NAME}" "${@}"
}
function _main
{
_get_absolute_script_directory
_set_default_config_path
local OPTIND
while getopts ":c:i:p:zZR" OPT
do
case ${OPT} in
( i ) IMAGE_NAME="${OPTARG}" ;;
( z | Z ) USE_SELINUX=":${OPT}" ;;
( c ) CONTAINER_NAME="${OPTARG}" ;;
( R ) PODMAN_ROOTLESS=true ;;
( p )
case "${OPTARG}" in
( /* ) DESIRED_CONFIG_PATH="${OPTARG}" ;;
( * ) DESIRED_CONFIG_PATH="${DIR}/${OPTARG}" ;;
esac
if [[ ! -d ${DESIRED_CONFIG_PATH} ]]
then
echo "Specified directory '${DESIRED_CONFIG_PATH}' doesn't exist" >&2
exit 1
fi
;;
( * )
echo "Invalid option: '-${OPTARG}'" >&2
echo -e "Use './setup.sh help' to get a complete overview.\n" >&2
_show_local_usage 'no-exit'
exit 1
;;
esac
done
shift $(( OPTIND - 1 ))
if command -v docker &>/dev/null
then
CRI=docker
elif command -v podman &>/dev/null
then
CRI=podman
if ! ${PODMAN_ROOTLESS} && [[ ${EUID} -ne 0 ]]
then
read -r -p "You are running Podman in rootless mode. Continue? [Y/n] "
[[ -n ${REPLY} ]] && [[ ${REPLY} =~ (n|N) ]] && exit 0
fi
else
echo 'No supported Container Runtime Interface detected.'
exit 1
fi
INFO=$(${CRI} ps --no-trunc --format "{{.Image}};{{.Names}}" --filter \
label=org.opencontainers.image.title="docker-mailserver" | tail -1)
[[ -z ${CONTAINER_NAME} ]] && CONTAINER_NAME=${INFO#*;}
[[ -z ${IMAGE_NAME} ]] && IMAGE_NAME=${INFO%;*}
if [[ -z ${IMAGE_NAME} ]]
then
IMAGE_NAME=${NAME:-${DEFAULT_IMAGE_NAME}}
fi
if test -t 0
then
USE_TTY="-it"
else
# GitHub Actions will fail (or really anything else
# lacking an interactive tty) if we don't set a
# value here; "-t" alone works for these cases.
USE_TTY="-t"
fi
_handle_config_path
if [[ -n ${CONTAINER_NAME} ]]
then
${CRI} exec "${USE_TTY}" "${CONTAINER_NAME}" setup "${@}"
else
_run_in_new_container setup "${@}"
fi
[[ ${1:-} == 'help' ]] && _show_local_usage
return 0
}
[[ -z ${1:-} ]] && set 'help'
_main "${@}"

View File

@ -3,7 +3,29 @@
# Put fixes in a file so they do not need remembered.
docker exec -it nextcloud-app-1 apt update -y
docker exec -it nextcloud-app-1 apt install -y libmagickcore-6.q16-6-extra
docker exec -it nextcloud-app-1 apt install -y sudo libmagickcore-6.q16-6-extra
# 2022-10-30 More additions after moving to Nextcloud version 25.
docker exec -itu www-data nextcloud-app-1 ./occ db:add-missing-columns
docker exec -itu www-data nextcloud-app-1 ./occ db:add-missing-indices
docker exec -itu www-data nextcloud-app-1 ./occ db:add-missing-primary-keys
docker exec -itu www-data nextcloud-app-1 ./occ db:convert-filecache-bigint
docker exec -it nextcloud-app-1 chown -Rc www-data:www-data .
# 2023-02-12 Just for good measure.
docker exec -itu www-data nextcloud-app-1 ./occ app:update --all
# 2023-07-02
# This maybe used to exist, but make sure that Files app is correct.
docker exec -itu www-data nextcloud-app-1 ./occ files:scan --all
# This one takes a while.
docker exec -itu www-data nextcloud-app-1 ./occ files:scan-app-data
# Extras? Have used the commands in the past and may help in the future.
docker exec -itu www-data nextcloud-app-1 ./occ maintenance:theme:update
docker exec -itu www-data nextcloud-app-1 ./occ maintenance:repair
# May alsp be useful but do not have much experience with them.
docker exec -itu www-data nextcloud-app-1 ./occ versions:cleanup
docker exec -itu www-data nextcloud-app-1 ./occ files:cleanup
exit 0

View File

@ -1,20 +1,51 @@
# My Docker Setup
Scripting my way into the Docker world.
Was unable to find a good tutorial on using and managing containers so this is what made sense to me based on practicing with `docker-compose`.
I am still very new to Docker and am likely to make mistakes, but you're welcome to learn with me. ;)
I was unable to find a good tutorial on using and managing containers so this is what made sense to me based on practice with `docker-compose`.
I am still new to Docker and am likely to make mistakes, but you're welcome to learn with me. ;)
## Disclaimer
Currently the project only focuses on `apt` based operating systems.
## How To Use
`apt install git bash`
`git clone https://github.com/hyperling/docker /opt/Docker`
`source /opt/Docker/source.env`
`install.sh`
`create.sh PROJECT_NAME`
`vi /opt/Docker/Config/PROJECT_NAME/docker-compose.yml`
`start.sh`
Cross your fingers and hope to profit.
Most of these commands benefit from being root. Something like a `sudo su -` if you feel comfortable with it.
Otherwise be aware that using sudo may cause file permission conflicts when interacting with the configuration files and folders.
Install the project dependencies.
```
apt install git bash
```
Clone the project.
```
git clone https://github.com/hyperling/docker /opt/Docker
```
Load the environment variables.
```
source /opt/Docker/source.env
```
Install docker to the system.
```
install.sh
```
Create an area to add a new product.
```
create.sh PROJECT_NAME
```
Edit the project's details.
```
vi /opt/Docker/Config/PROJECT_NAME/docker-compose.yml
```
Start all of the docker projects.
```
start.sh
```
Cross your fingers and hope to profit!
## Folders
@ -24,8 +55,8 @@ Compose projects are set up here. Each folder should have a `docker-compose.yml`
### Volumes
The data of the files go here if the Config is done correctly.
I think this should be easier to remember than `/var/lib/docker/volumes` when it comes time for migrations.
Hopefully all that's needed is to rsync `/opt/Docker` and run start.sh on the new server.
That's my opinion though, if someone else uses this then they can use `/var/`.
Hopefully all that'd be needed is to rsync `/opt/Docker` and run `install.sh` and then `start.sh` on the new server.
That's my opinion though, if someone else uses this then they are welcome to place it where they'd like.
### bin
Scripts to help make life easier. Some are pretty basic, but others do nice things like handle the container IDs.