Merge branch 'main' into reverseproxy
This commit is contained in:
commit
9de4ff19d2
3
.gitignore
vendored
3
.gitignore
vendored
@ -10,3 +10,6 @@ logs/*
|
|||||||
# Ignore private reverse proxy configurations.
|
# Ignore private reverse proxy configurations.
|
||||||
Config/ReverseProxy/config/conf.d/*.*
|
Config/ReverseProxy/config/conf.d/*.*
|
||||||
Config/ReverseProxy/config/html/*.*
|
Config/ReverseProxy/config/html/*.*
|
||||||
|
|
||||||
|
# Ignore MailServer Files
|
||||||
|
Config/MailServer/setup.sh
|
||||||
|
15
Config/Hyperling.com/Dockerfile
Normal file
15
Config/Hyperling.com/Dockerfile
Normal 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
|
12
Config/Hyperling.com/docker-compose.yml
Normal file
12
Config/Hyperling.com/docker-compose.yml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# 2022-10-29
|
||||||
|
# Hyperling.com configuration.
|
||||||
|
|
||||||
|
version: '2'
|
||||||
|
|
||||||
|
services:
|
||||||
|
app:
|
||||||
|
image: node
|
||||||
|
restart: always
|
||||||
|
build: ./
|
||||||
|
ports:
|
||||||
|
- 8317:8080
|
@ -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 "${@}"
|
|
@ -3,7 +3,29 @@
|
|||||||
# Put fixes in a file so they do not need remembered.
|
# 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 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
|
exit 0
|
||||||
|
|
||||||
|
55
README.md
55
README.md
@ -1,20 +1,51 @@
|
|||||||
# My Docker Setup
|
# My Docker Setup
|
||||||
Scripting my way into the Docker world.
|
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 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 very new to Docker and am likely to make mistakes, but you're welcome to learn with me. ;)
|
I am still new to Docker and am likely to make mistakes, but you're welcome to learn with me. ;)
|
||||||
|
|
||||||
## Disclaimer
|
## Disclaimer
|
||||||
Currently the project only focuses on `apt` based operating systems.
|
Currently the project only focuses on `apt` based operating systems.
|
||||||
|
|
||||||
## How To Use
|
## How To Use
|
||||||
`apt install git bash`
|
Most of these commands benefit from being root. Something like a `sudo su -` if you feel comfortable with it.
|
||||||
`git clone https://github.com/hyperling/docker /opt/Docker`
|
Otherwise be aware that using sudo may cause file permission conflicts when interacting with the configuration files and folders.
|
||||||
`source /opt/Docker/source.env`
|
|
||||||
`install.sh`
|
Install the project dependencies.
|
||||||
`create.sh PROJECT_NAME`
|
```
|
||||||
`vi /opt/Docker/Config/PROJECT_NAME/docker-compose.yml`
|
apt install git bash
|
||||||
`start.sh`
|
```
|
||||||
Cross your fingers and hope to profit.
|
|
||||||
|
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
|
## Folders
|
||||||
|
|
||||||
@ -24,8 +55,8 @@ Compose projects are set up here. Each folder should have a `docker-compose.yml`
|
|||||||
### Volumes
|
### Volumes
|
||||||
The data of the files go here if the Config is done correctly.
|
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.
|
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.
|
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 can use `/var/`.
|
That's my opinion though, if someone else uses this then they are welcome to place it where they'd like.
|
||||||
|
|
||||||
### bin
|
### bin
|
||||||
Scripts to help make life easier. Some are pretty basic, but others do nice things like handle the container IDs.
|
Scripts to help make life easier. Some are pretty basic, but others do nice things like handle the container IDs.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user