Last active 1705433082

Nextcloud pod creation script

create.sh Raw
1#!/bin/bash
2
3set -e
4
5REQUIREMENTS=( curl jq podman )
6for req in ${REQUIREMENTS[@]}; do
7 if ! command -v $req > /dev/null; then
8 echo "This script requires $req to run."
9 exit 1
10 fi
11done
12
13# NEXTCLOUD_DIGEST= # NOT USED YET
14# MARIADB_DIGEST= # NOT USED YET
15#
16# MYSQL_ROOT_PASSWD=''
17# MYSQL_PASSWD='' #Used for Postgres too
18#
19# POSTGRES_USER=''
20# POSTGRES_DB=''
21#
22#
23# ADMIN_USER=''
24# ADMIN_PASSWD=''
25# NEXTCLOUD_DATA_DIR=''
26# NEXTCLOUD_DB_DIR=''
27# TRUSTED_DOMAINS=''
28#
29# CLAMAV_DB_DIR=''
30# CLAMAV_CONF_DIR=''
31
32## Place the above configurations in a file called env in the same
33## directory as this script
34##
35## A template env file is included in the repo
36[[ -f ./env ]] && . ./env || exit 1
37
38## Change this to 1 if you haven't enabled previews before
39## Or this is a fresh installation
40APPEND_PREVIEW_CONFIG=0
41
42## Just in case to avoid file permission errors
43#sudo chown "$USER": "$NEXTCLOUD_DB_DIR"
44
45## Remove old log file
46if [ "$UID" -ne 0 ]; then
47 podman unshare rm -f "$NEXTCLOUD_DATA_DIR"/data/nextcloud.log
48else
49 rm -f "$NEXTCLOUD_DATA_DIR"/data/nextcloud.log
50fi
51
52
53##
54## Create a pod for Nextcloud
55##
56
57podman pod create -p 8081:80 --hostname "$NEXTCLOUD_HOSTNAME" --name nextcloud
58
59##
60## Mariadb
61##
62#
63# podman build -f ./mariadb-nextcloud.Containerfile -t localhost/mariadb:latest
64# podman create --name nextcloud-db --pod nextcloud \
65# -e MYSQL_ROOT_PASSWORD="$MYSQL_ROOT_PASSWD" \
66# -e MYSQL_DATABASE='nextcloud' \
67# -e MYSQL_USER='nextcloud' \
68# -e MYSQL_PASSWORD="$MYSQL_PASSWD" \
69# -v "$NEXTCLOUD_DB_DIR":/var/lib/mysql:Z \
70# localhost/mariadb:latest
71
72##
73## Postgres
74##
75#
76podman create --pod nextcloud --name nextcloud-postgres \
77 -e POSTGRES_USER=nextcloud \
78 -e POSTGRES_DB=nextcloud \
79 -e POSTGRES_PASSWORD="$MYSQL_PASSWD" \
80 -v "$NEXTCLOUD_DB_DIR":/var/lib/postgresql/data:Z \
81 docker.io/postgres:alpine
82
83
84##
85## Redis
86##
87
88podman create --name nextcloud-redis --pod nextcloud docker.io/redis:alpine
89
90##
91## ClamAV
92##
93
94## No typos in the :z and :Z flags, NC data dir needs the small z
95## which means shared with another container
96
97podman create --name nextcloud-clamav --pod nextcloud \
98 -v "$CLAMAV_DB_DIR":/var/lib/clamav:Z \
99 -v "$CLAMAV_CONF_DIR":/etc/clamav:Z \
100 clamav/clamav:latest
101
102## Add the following:
103## -v $NEXTCLOUD_DATA_DIR/data:/scandir:z \
104## to clamav to use ClamAV's clamd scanning as well
105## (not tested)
106
107
108##
109## Nextcloud
110##
111
112[ -n "$NEXTCLOUD_HOSTNAME" ] && sed -i "s|^ServerName.*$|ServerName $NEXTCLOUD_HOSTNAME|" apache2.conf
113podman build -f ./nextcloud-app.Containerfile -t nextcloud:latest
114podman create --name nextcloud-app --pod nextcloud \
115 -e POSTGRES_DB='nextcloud' \
116 -e POSTGRES_USER='nextcloud' \
117 -e POSTGRES_PASSWORD="$MYSQL_PASSWD" \
118 -e POSTGRES_HOST='127.0.0.1' \
119 -e NEXTCLOUD_ADMIN_USER="$ADMIN_USER" \
120 -e NEXTCLOUD_ADMIN_PASSWORD="$ADMIN_PASSWD" \
121 -e NEXTCLOUD_TRUSTED_DOMAINS="$TRUSTED_DOMAINS" \
122 -e PHP_MEMORY_LIMIT="$NEXTCLOUD_PHP_MEMORY_LIMIT" \
123 -e PHP_UPLOAD_LIMIT='10G' \
124 -e REDIS_HOST='127.0.0.1' \
125 -e REDIS_PORT='6379' \
126 -e APACHE_DISABLE_REWRITE_IP=1 \
127 -e TRUSTED_PROXIES="$TRUSTED_PROXIES" \
128 -v "$NEXTCLOUD_DATA_DIR":/var/www/html:z \
129 localhost/nextcloud:latest
130
131# -e MYSQL_DATABASE='nextcloud' \
132# -e MYSQL_USER='nextcloud' \
133# -e MYSQL_PASSWORD="$MYSQL_PASSWD" \
134# -e MYSQL_HOST='127.0.0.1:3306' \
135
136##
137## Enable previews
138##
139
140if [[ "$APPEND_PREVIEW_CONFIG" -eq 1 ]]; then
141 sudo sed -i '/^);$/d' "$NEXTCLOUD_DATA_DIR"/config/config.php; cat previews.conf | sudo tee -a "$NEXTCLOUD_DATA_DIR"/config/config.php > /dev/null
142 podman restart nextcloud-app
143fi
144
145##
146## Generate systemd units
147##
148
149if [[ "$1" == "--generate-systemd" ]]; then
150
151 ## Added UID check in case using rootful containers (under LXC guest, for example)
152 if [ "$UID" -ne 0 ]; then
153 [[ ! -d "$HOME"/.config/systemd/user ]] && mkdir -p "$HOME"/.config/systemd/user
154 cd "$HOME"/.config/systemd/user
155 if [[ "$2" == "--new" ]]; then
156 podman generate systemd --new -n -f nextcloud
157 else
158 podman generate systemd -n -f nextcloud
159 fi
160 systemctl --user daemon-reload
161
162 systemctl --user enable --now pod-nextcloud
163 else
164 cd /etc/systemd/system
165 if [[ "$2" == "--new" ]]; then
166 podman generate systemd --new -n -f nextcloud
167 else
168 podman generate systemd -n -f nextcloud
169 fi
170 systemctl daemon-reload
171
172 systemctl enable --now pod-nextcloud
173 fi
174
175else
176 echo "Not generating systemd units. Use --generate-systemd flag to do so automatically."
177 podman pod start nextcloud
178fi
179
180echo "Waiting for nextcloud to initialize.."
181while [[ "$(curl -s localhost:8081/status.php | jq '.installed')" != "true" ]]; do
182 sleep 1
183done
184
185## Tag images
186VERSION=$(curl -s localhost:8081/status.php | jq -r '.versionstring')
187echo "Tagging current image..."
188podman tag localhost/nextcloud:latest localhost/nextcloud:"$VERSION"
189echo "localhost/nextcloud version $VERSION is up!"
190exit 0
191