run docker dev nextcloud
- missing clone info - missing setup of certificates (mkcert and so one ... )
This commit is contained in:
@@ -63,3 +63,33 @@ utiliser la base de donnee postgres et non le SQLLite ?
|
||||
|
||||
./migrate_db_sqlite2postgres.sh
|
||||
|
||||
|
||||
# NEW PLAIN nextcloud dev
|
||||
|
||||
setup
|
||||
|
||||
```
|
||||
git clone git@github.com:juliusknorr/nextcloud-docker-dev.git
|
||||
git git@github.com:nextcloud/server.git
|
||||
```
|
||||
|
||||
check nextcloud-docker-dev.env then
|
||||
|
||||
```
|
||||
cp nextcloud-docker-dev.env nextcloud-docker-dev.git/.env
|
||||
```
|
||||
|
||||
https setup, local private PKI.
|
||||
|
||||
missing setup cert and setupcert host ... mkcert compilation + install
|
||||
|
||||
update-certs update-hosts
|
||||
|
||||
https://nextcloud-dev.l0g.eu
|
||||
|
||||
|
||||
then will be done as sudo ( RootLess or podman limitation ? )
|
||||
|
||||
```
|
||||
./runit.sh
|
||||
```
|
||||
|
||||
@@ -1,30 +1,72 @@
|
||||
#!/bin/bash
|
||||
|
||||
# SPDX-FileCopyrightText: 2025 artlog@l0g.eu
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
#
|
||||
# metascript to include
|
||||
#
|
||||
# usual way if no parameters used by outer script :
|
||||
#
|
||||
# source $(dirname "$0")/metascript.sh
|
||||
#
|
||||
# defaultmetainit $@
|
||||
# to generate file header for caller script do :
|
||||
# bash <relative_path_to>/metascript.sh header
|
||||
# ex:
|
||||
# bash lib/metascript.sh header
|
||||
|
||||
# if called directly
|
||||
if [[ "$0" =~ ^(.*)/metascript.sh$ ]]
|
||||
then
|
||||
prefix=${BASH_REMATCH[1]}
|
||||
if [[ $1 == header ]]
|
||||
then
|
||||
cat <<EOF
|
||||
#!/bin/bash
|
||||
# SPDX-FileCopyrightText: 2025 artlog@l0g.eu
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
#
|
||||
# sample to include this script.
|
||||
toolsdir=$prefix
|
||||
pushd \$toolsdir >/dev/null
|
||||
toolsdir=\$(pwd)
|
||||
source metascript.sh
|
||||
popd >/dev/null
|
||||
|
||||
while [[ \$# > 0 ]]
|
||||
do
|
||||
case "\$1" in
|
||||
*)
|
||||
parsemetaarg "\$1"
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
exit 0
|
||||
EOF
|
||||
else
|
||||
echo "[WARNING] only header argument is supported. (prefix=$prefix)" >&2
|
||||
fi
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [[ "$metascript_included" == "yes" ]]
|
||||
then
|
||||
log_warn "metascript already included ($0)"
|
||||
else
|
||||
|
||||
metascript_included=yes
|
||||
|
||||
|
||||
# assume all tools are in lib/
|
||||
toolsdir=$(dirname $(readlink -f $0))/lib
|
||||
# all tools resources are relative to this directory
|
||||
# at this step $(pwd) should be this of metascript.sh
|
||||
# while $0 is this of caller script using metascript
|
||||
|
||||
# project directory
|
||||
# relative
|
||||
# toolsparentdir=$(realpath --relative-to "$(pwd)" $(readlink -f $0))/
|
||||
# absolute
|
||||
toolsparentdir=$(realpath $(readlink -f $0))/
|
||||
if [[ -z $toolsdir ]]
|
||||
then
|
||||
# assume all tools are in lib/
|
||||
toolsdir=$(dirname $(readlink -f $0))/lib
|
||||
# all tools resources are relative to this directory
|
||||
fi
|
||||
|
||||
if [[ -z $log_functions ]]
|
||||
then
|
||||
log_functions=$toolsdir/log_functions.sh
|
||||
[[ -f $log_functions ]] || { echo "[FATAL] Missing $log_functions" >&2 ; exit 1 ;}
|
||||
[[ -f $log_functions ]] || { echo "[FATAL] Missing $log_functions , toolsdir=$toolsdir script=$0" >&2 ; exit 1 ;}
|
||||
source $log_functions
|
||||
fi
|
||||
|
||||
@@ -36,7 +78,7 @@ metascript commands :
|
||||
help|usage help or usage of this {$0} tool
|
||||
dryrun|show|showdoc display what should/will be done
|
||||
|
||||
defersource= script file defining defer() non sandard function
|
||||
defersource= script file defining defer() non standard function
|
||||
defer= defer function to use, default is showdoc
|
||||
toolsresourcesdir= where to pick resource
|
||||
default to parent of script $toolsresourcesdir
|
||||
@@ -54,7 +96,12 @@ usage()
|
||||
|
||||
showinfo()
|
||||
{
|
||||
echo $@
|
||||
echo "$@"
|
||||
}
|
||||
|
||||
metarun()
|
||||
{
|
||||
$defer $metasudo "$@"
|
||||
}
|
||||
|
||||
showdoc()
|
||||
@@ -62,10 +109,10 @@ showdoc()
|
||||
if [[ $1 =~ ^tools/ ]]
|
||||
then
|
||||
# assumes it handles ENV_METASCRIPT_DEFER
|
||||
$@
|
||||
"$@"
|
||||
else
|
||||
echo '```'
|
||||
autoquoteargs $@
|
||||
autoquoteargs "$@"
|
||||
echo
|
||||
echo '```'
|
||||
fi
|
||||
@@ -92,11 +139,11 @@ execredirectfrom()
|
||||
if [[ -n $defer ]]
|
||||
then
|
||||
echo '```'
|
||||
autoquoteargs $@
|
||||
autoquoteargs "$@"
|
||||
echo ' < '"$tofile"
|
||||
echo '```'
|
||||
else
|
||||
$@ < $tofile
|
||||
"$@" < $tofile
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -107,7 +154,7 @@ execredirectto()
|
||||
if [[ -n $defer ]]
|
||||
then
|
||||
echo '```'
|
||||
autoquoteargs $@
|
||||
autoquoteargs "$@"
|
||||
echo ' > '"$tofile"
|
||||
echo '```'
|
||||
else
|
||||
@@ -115,19 +162,34 @@ execredirectto()
|
||||
fi
|
||||
}
|
||||
|
||||
execredirecttoroot()
|
||||
{
|
||||
tofile=$1
|
||||
shift
|
||||
if [[ -n $defer ]]
|
||||
then
|
||||
echo '```'
|
||||
autoquoteargs "$@"
|
||||
echo ' | sudo tee '"$tofile"
|
||||
echo '```'
|
||||
else
|
||||
"$@" | sudo tee $tofile
|
||||
fi
|
||||
}
|
||||
|
||||
pipeto()
|
||||
{
|
||||
if [[ -n $defer ]]
|
||||
then
|
||||
echo '```'
|
||||
echo -n 'cat << EOF| '
|
||||
autoquoteargs $@
|
||||
autoquoteargs "$@"
|
||||
echo
|
||||
cat
|
||||
echo "EOF"
|
||||
echo '```'
|
||||
else
|
||||
cat | $@
|
||||
cat | "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -355,6 +417,9 @@ parsemetaarg()
|
||||
dryrun|show|showdoc)
|
||||
defer=showdoc
|
||||
;;
|
||||
metasudo=*)
|
||||
metasudo=${1/metasudo=}
|
||||
;;
|
||||
help|usage)
|
||||
usage
|
||||
;;
|
||||
@@ -528,7 +593,7 @@ check_variable_in()
|
||||
shift 2
|
||||
|
||||
local value=""
|
||||
local values=$@
|
||||
local values="$@"
|
||||
|
||||
eval value='$'"$var"
|
||||
|
||||
@@ -570,17 +635,148 @@ get_timestamp_second()
|
||||
echo "$(date +"%Y%m%d%H%M%S")"
|
||||
}
|
||||
|
||||
if [[ -z $ENV_METASCRIPT_RESOURCESDIR ]]
|
||||
todo()
|
||||
{
|
||||
log_any TODO "$@"
|
||||
}
|
||||
|
||||
get_resource_var() {
|
||||
local varname="$1"
|
||||
local default_value="$2"
|
||||
|
||||
eval value='$'"$varname"
|
||||
if [[ -z $value ]]
|
||||
then
|
||||
echo "# ($0:metascript.sh:$LINENO) $(date)" >>$collect_context
|
||||
if [[ -z $default_value ]]
|
||||
then
|
||||
log_error "resource $varname does not exists and no non empty default provided"
|
||||
echo "# $varname=<MISSING>" >>$collect_context
|
||||
exit 1
|
||||
fi
|
||||
log_warn "($0) Using default value '$varname'='$default_value' HARDCODED in script : should be fixed with proper default file .resources.var, see traces in $collect_context"
|
||||
read "$varname" <<<"$default_value"
|
||||
echo "$varname=$default_value" >>$collect_context
|
||||
fi
|
||||
}
|
||||
|
||||
setup_resources_var()
|
||||
{
|
||||
local resource_var="$1"
|
||||
enforcefile "$resource_var" exists
|
||||
while read line
|
||||
do
|
||||
if [[ $line =~ ^([a-zA-Z0-9_]+)=(.+)$ ]]
|
||||
then
|
||||
varname=${BASH_REMATCH[1]}
|
||||
value=${BASH_REMATCH[2]}
|
||||
read "$varname" <<<"$value"
|
||||
elif [[ $line =~ ^# ]]
|
||||
then
|
||||
echo "$line"
|
||||
else
|
||||
log_warn "Invalid syntax in $resource_var '$line' does not match any expected expression"
|
||||
fi
|
||||
done <"$resource_var"
|
||||
}
|
||||
|
||||
# allow to check mounted points
|
||||
mountpoint_get_device()
|
||||
{
|
||||
local mount_point="$1"
|
||||
$defer awk "{ if (\$2 == \""$mount_point"\") print \$1 ;}" /proc/mounts
|
||||
}
|
||||
|
||||
device_get_mountpoints()
|
||||
{
|
||||
local device="$1"
|
||||
$defer awk "{ if (\$1 == \""$device"\") print \$2 ;}" /proc/mounts
|
||||
}
|
||||
|
||||
mount_if_needed()
|
||||
{
|
||||
local mountpoint="$1"
|
||||
local mountdevice="$2"
|
||||
local param="$3"
|
||||
device=$(mountpoint_get_device "$mountpoint")
|
||||
|
||||
enforcedir "$mountpoint" exists
|
||||
# device is a device ...
|
||||
# enforcefile "$mountdevice" exists
|
||||
|
||||
if [[ -z $device ]]
|
||||
then
|
||||
$metarun mount $param "$mountdevice" "$device"
|
||||
elif [[ "$device" == "$mountdevice" ]]
|
||||
then
|
||||
log_info "$device already mounted on $mountdevice"
|
||||
else
|
||||
log_warn "Another device $device is mounted on $mountdevice, not $mountdevice"
|
||||
fi
|
||||
}
|
||||
|
||||
umount_if_needed()
|
||||
{
|
||||
local mountpoint="$1"
|
||||
local mountdevice="$2"
|
||||
device=$(mountpoint_get_device "$mountpoint")
|
||||
if [[ -n "$device" ]]
|
||||
then
|
||||
if [[ "$device" == "$mountpoint" ]]
|
||||
then
|
||||
$metarun umount "$mountpoint"
|
||||
else
|
||||
log_warn "Another device $device is mounted on $mountdevice, not $mountdevice"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# collect all hardcoded values.
|
||||
mkdir -p ~/.artlog
|
||||
collect_context=~/.artlog/collect_context.var
|
||||
|
||||
if [[ -z $toolsresourcesdir ]]
|
||||
then
|
||||
toolsresourcesdir=$toolsparentdir
|
||||
else
|
||||
toolsresourcesdir=$ENV_METASCRIPT_RESOURCESDIR
|
||||
# project directory
|
||||
|
||||
# from current $(pwd) will follow parent dir hierarchy to find .resources.var
|
||||
dir="$(pwd)"
|
||||
while [[ -n $dir ]] && [[ -d $dir ]] && [[ ! -f $dir/.resources.var ]]
|
||||
do
|
||||
new_dir=$(dirname "$dir")
|
||||
if [[ $new_dir == $dir ]]
|
||||
then
|
||||
# protect against infinite loop
|
||||
break
|
||||
fi
|
||||
dir="$new_dir"
|
||||
done
|
||||
if [[ -f $dir/.resources.var ]]
|
||||
then
|
||||
toolsresourcesdir=$dir
|
||||
else
|
||||
if [[ -z $ENV_METASCRIPT_RESOURCESDIR ]]
|
||||
then
|
||||
toolsresourcesdir=$toolsparentdir
|
||||
else
|
||||
toolsresourcesdir=$ENV_METASCRIPT_RESOURCESDIR
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
# quick way to give scl patches to fill scl_arg array
|
||||
if [[ -f $toolsparentdir/.scl_env ]]
|
||||
resources_var=$toolsresourcesdir/.resources.var
|
||||
if [[ -f $resources_var ]]
|
||||
then
|
||||
source $toolsparentdir/.scl_env
|
||||
setup_resources_var "$resources_var"
|
||||
else
|
||||
log_warn "No $resources_var found"
|
||||
fi
|
||||
|
||||
|
||||
# quick way to give scl patches to fill scl_arg array
|
||||
if [[ -f $toolsresourcesdir/.scl_env ]]
|
||||
then
|
||||
source $toolsresourcesdir/.scl_env
|
||||
fi
|
||||
|
||||
# empty defer means doit
|
||||
@@ -588,6 +784,11 @@ defer=$ENV_METASCRIPT_DEFER
|
||||
|
||||
showinfo=showinfo
|
||||
|
||||
allparms=$@
|
||||
allparms="$@"
|
||||
|
||||
applymetaargs=applymetaargs
|
||||
|
||||
metarun=$defer
|
||||
|
||||
# metascript included
|
||||
fi
|
||||
|
||||
72
nextcloud_devenv/nextcloud-docker-dev.env
Normal file
72
nextcloud_devenv/nextcloud-docker-dev.env
Normal file
@@ -0,0 +1,72 @@
|
||||
COMPOSE_PROJECT_NAME=master
|
||||
|
||||
# Default protocol to use for Nextcloud and other containers
|
||||
# check the readme for details how to setup https
|
||||
PROTOCOL=https
|
||||
|
||||
# Paths
|
||||
REPO_PATH_SERVER=/home/plhardy/clients/astrolabe/nextcloud/poll/jugement_majoritaire/nextcloud_devenv/server
|
||||
|
||||
# Specify a path to apps which will be shared between all containers. Useful for apps that support multiple nextcloud versions
|
||||
# ADDITIONAL_APPS_PATH=/home/alice/nextcloud-docker-dev/workspace/server/apps-shared
|
||||
|
||||
# Stable releases root directory
|
||||
# STABLE_ROOT_PATH=/home/alice/nextcloud-docker-dev/workspace
|
||||
|
||||
# Install Nextcloud apps per default
|
||||
# NEXTCLOUD_AUTOINSTALL_APPS="viewer activity"
|
||||
# Retry enabling apps for a provided amount of time (can be useful when using the containers in CI)
|
||||
# NEXTCLOUD_AUTOINSTALL_APPS_WAIT_TIME=0
|
||||
|
||||
# Blackfire configuration
|
||||
# BLACKFIRE_CLIENT_ID=
|
||||
# BLACKFIRE_CLIENT_TOKEN=
|
||||
# BLACKFIRE_SERVER_ID=
|
||||
# BLACKFIRE_SERVER_TOKEN=
|
||||
|
||||
# By default the published ports are only accessible at 127.0.0.1 (your localhost).
|
||||
# Set this to '0.0.0.0' to make them accessible from your whole local network.
|
||||
# IP_BIND=127.0.0.1
|
||||
|
||||
# can be used to run separate setups besides each other
|
||||
# DOCKER_SUBNET=192.168.15.0/24
|
||||
# PORTBASE=815
|
||||
|
||||
|
||||
# Main dns names for ssl proxy
|
||||
# This can be used to append a custom domain name to the container names
|
||||
DOMAIN_SUFFIX=-dev.l0g.eu
|
||||
|
||||
# May be used to set the PHP version. Defaults to 7.2.
|
||||
# PHP_VERSION=71
|
||||
# PHP_VERSION=72
|
||||
# PHP_VERSION=73
|
||||
# PHP_VERSION=74
|
||||
# PHP_VERSION=80
|
||||
PHP_VERSION=81
|
||||
|
||||
# May be used to choose database (sqlite, pgsql, mysql)
|
||||
SQL=mysql
|
||||
|
||||
# The mode of the xdebuger extention. This can be a comma separated list of
|
||||
# the entries none, develop, debug, trace, and profile.
|
||||
PHP_XDEBUG_MODE=develop
|
||||
|
||||
# Docker socket location, use it when you run rootless Docker
|
||||
# Replace "1000" with the uid used by your Docker engine (default $(id -u))
|
||||
# DOCKER_SOCKET=/run/user/1000/docker.sock
|
||||
DOCKER_SOCKET=/var/run/podman/podman.sock
|
||||
|
||||
# Nextcloud AppAPI Docker Socket Proxy
|
||||
# ------------------------------------
|
||||
# NC_HAPROXY_PASSWORD=some_secure_password
|
||||
# BIND_ADDRESS=172.17.0.1
|
||||
# CERT_PATH=./data/ssl/app_api/app_api.pem
|
||||
# NETWORK_MODE=host
|
||||
# HAPROXY_PORT=2375
|
||||
# TIMEOUT_CONNECT=10s
|
||||
# TIMEOUT_CLIENT=30s
|
||||
# TIMEOUT_SERVER=30s
|
||||
# EX_APPS_NET=ipv4@localhost
|
||||
# EX_APPS_COUNT=50
|
||||
# ------------------------------------
|
||||
43
nextcloud_devenv/runit.sh
Executable file
43
nextcloud_devenv/runit.sh
Executable file
@@ -0,0 +1,43 @@
|
||||
#!/bin/bash
|
||||
# SPDX-FileCopyrightText: 2025 artlog@l0g.eu
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
#
|
||||
toolsdir=lib
|
||||
pushd $toolsdir >/dev/null
|
||||
toolsdir=$(pwd)
|
||||
source metascript.sh
|
||||
popd >/dev/null
|
||||
|
||||
while [[ $# > 0 ]]
|
||||
do
|
||||
case "$1" in
|
||||
up|down)
|
||||
action=$1
|
||||
;;
|
||||
*)
|
||||
parsemetaarg "$1"
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
metarun=metarun
|
||||
metasudo=sudo
|
||||
|
||||
enforcedir nextcloud-docker-dev exists
|
||||
|
||||
pushd nextcloud-docker-dev
|
||||
|
||||
if [[ $action = down ]]
|
||||
then
|
||||
$metarun podman-compose down
|
||||
fi
|
||||
|
||||
services=(nextcloud proxy database-mysql)
|
||||
|
||||
if [[ $action == up ]]
|
||||
then
|
||||
$metarun podman-compose --env-file $(pwd)/.env $action "${services[@]}"
|
||||
fi
|
||||
|
||||
popd
|
||||
Reference in New Issue
Block a user