From 421651ab4b3d607b45ecb6e40ab7e1d61ff2e165 Mon Sep 17 00:00:00 2001 From: Adam Parler Date: Sun, 9 Jul 2023 22:56:24 +0000 Subject: [PATCH 01/27] Initial commit. Added README --- README.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..c365481 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +# Public Server Setup + +This repository contains a set of scripts to setup and configure +a set of services to reclaim your internet independence and remove +your data from the clutches of large corporations. From 8af4dd434e9f0b1d99f671807dfb5f47a14936f6 Mon Sep 17 00:00:00 2001 From: Adam Parler Date: Sun, 9 Jul 2023 16:04:35 -0700 Subject: [PATCH 02/27] Created ZFS install/config script --- pre_setup.sh | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 pre_setup.sh diff --git a/pre_setup.sh b/pre_setup.sh new file mode 100644 index 0000000..9fbb8e0 --- /dev/null +++ b/pre_setup.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +apt update + +## Setup ZFS +ZFS_ROOT=/data + +## Debian Setup +codename=$(lsb_release -cs);echo "deb http://deb.debian.org/debian $codename-backports main contrib non-free"|sudo tee -a /etc/apt/sources.list +apt update +apt install dpkg-dev linux-headers-generic linux-image-generic +apt install zfs-dkms zfsutils-linux + +## Create ZFS Pool +mkdir -p ${ZFS_ROOT} +zpool create -m ${ZFS_ROOT} tank raidz ... + +zfs create tank/gitlab +zfs create tank/home +zfs create tank/jupyter +zfs create tank/mineos +zfs create tank/nextcloud \ No newline at end of file From 48f4353ac49eea1bd49597a940d2b64e7a98b599 Mon Sep 17 00:00:00 2001 From: Adam Parler Date: Sun, 9 Jul 2023 16:05:54 -0700 Subject: [PATCH 03/27] Created JupyterHub install and config script --- jupyterhub_install.sh | 68 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100755 jupyterhub_install.sh diff --git a/jupyterhub_install.sh b/jupyterhub_install.sh new file mode 100755 index 0000000..87ba08d --- /dev/null +++ b/jupyterhub_install.sh @@ -0,0 +1,68 @@ +#!/bin/bash + +## Define admin user account +export ADMIN_ACCOUNT=sys-admin + +## Define bulk storage location +if [ -z "$ZFS_DIR" ] +then + ZFS_DIR=/data +fi + +## Ensure HOME directories are stored in ${ZFS_DIR}/home +awk '{sub("#HOME=/home","HOME=/home")} {print}' /etc/default/useradd > /tmp/temp.txt && mv /tmp/temp.txt /etc/default/useradd +awk '{sub("# HOME=/home","HOME=/home")} {print}' /etc/default/useradd > /tmp/temp.txt && mv /tmp/temp.txt /etc/default/useradd +awk -v dir=${ZFS_DIR}/home '{sub("HOME=/home","HOME="dir)} {print}' /etc/default/useradd > /tmp/temp.txt && mv /tmp/temp.txt /etc/default/useradd + +# export TLJH_INSTALL_PREFIX=${ZFS_DIR}/tljh +export TLJH_INSTALL_PREFIX=${ZFS_DIR}/jupyter + +sudo ln -s ${TLJH_INSTALL_PREFIX} /opt/tljh + +SYS_MEM=$(grep MemTotal /proc/meminfo | awk '{print $2}') +SYS_CPU=$(grep -c ^processor /proc/cpuinfo) + +JUPYTER_EXTERN_HTTP=15080 +JUPYTER_EXTERN_HTTPS=15443 + +if [ $SYS_MEM -gt 2097152 ] +then + let "SYS_MEM = $SYS_MEM - 1048576" +else + let "SYS_MEM = $SYS_MEM / 2" +fi + +if [ $SYS_CPU -gt 1 ] +then + let "SYS_CPU = $SYS_CPU - 1" +fi + +cat << EOT >> /tmp/requirements.txt +numpy +scipy +matplotlib +pandas +tensorflow +tensorrt +pytorch +torchvision +torchaudio +EOT + +sudo apt install python3 python3-dev git curl +curl -L https://tljh.jupyter.org/bootstrap.py | \ +sudo -E python3 - \ +--show-progress-page \ +--admin ${ADMIN_ACCOUNT}:systemPassword \ +--user-requirements-txt-url /tmp/requirements.txt + +## Edit Jupyter Environment +sudo tljh-config set http.port ${JUPYTER_EXTERN_HTTP} +sudo tljh-config set https.port ${JUPYTER_EXTERN_HTTPS} +sudo tljh-config set limits.memory ${SYS_MEM}K +sudo tljh-config set limits.cpu ${SYS_CPU} +# sudo tljh-config set user_environment.default_app jupyterlab +sudo tljh-config reload proxy +sudo tljh-config reload + + From 9bca074990ff1d219237bbe7cd93b38e6a04d63c Mon Sep 17 00:00:00 2001 From: Adam Parler Date: Sun, 9 Jul 2023 16:06:26 -0700 Subject: [PATCH 04/27] Created MineOS (Minecraft) installation script --- mineos_install.sh | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100755 mineos_install.sh diff --git a/mineos_install.sh b/mineos_install.sh new file mode 100755 index 0000000..d35aa3d --- /dev/null +++ b/mineos_install.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +if [ -z "$ZFS_DIR" ] +then + ZFS_DIR=/data +fi + +USER_NAME=mcadmin +USER_PASSWORD=rootWord + +sudo docker run -td \ +--name=mineos \ +-p 13443:8443 \ +-p 25565:25565 \ +-e USER_PASSWORD=${USER_PASSWORD} \ +-e USER_NAME=${USER_NAME} \ +-v ${ZFS_DIR}/minecraft:/var/games/minecraft \ +--restart=unless-stopped \ +hexparrot/mineos:latest + + + + From d91bf0e581fa073f5c5980c7d3d25be8be77a00a Mon Sep 17 00:00:00 2001 From: Adam Parler Date: Sun, 9 Jul 2023 16:07:02 -0700 Subject: [PATCH 05/27] Created gitlab installation script --- gitlab_install.sh | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100755 gitlab_install.sh diff --git a/gitlab_install.sh b/gitlab_install.sh new file mode 100755 index 0000000..d90fa85 --- /dev/null +++ b/gitlab_install.sh @@ -0,0 +1,46 @@ +#!/bin/bash + +if [ -z "$ZFS_DIR" ] +then + ZFS_DIR=/data +fi + +if [ -z "$ADMIN_ACCOUNT"] +then + ADMIN_ACCOUNT=root +fi +su ${ADMIN_ACCOUNT} + +GITLAB_HOME=${ZFS_DIR}/gitlab + +GITLAB_ADDRESS=gitlab.adamhome.dev +GITLAB_EXTERN_HTTPS=14443 +GITLAB_EXTERN_HTTP=14080 +GITLAB_EXTERN_SSH=14022 + +sudo docker run --detach \ + --hostname ${GITLAB_ADDRESS} \ + --publish ${GITLAB_EXTERN_HTTPS}:443 --publish ${GITLAB_EXTERN_HTTP}:80 --publish ${GITLAB_EXTERN_SSH}:22 \ + --name gitlab \ + --restart always \ + --volume ${GITLAB_HOME}/config:/etc/gitlab \ + --volume ${GITLAB_HOME}/logs:/var/log/gitlab \ + --volume ${GITLAB_HOME}/data:/var/opt/gitlab \ + --shm-size 512m \ + gitlab/gitlab-ce:latest + +## Uncomment if you want to monitor boot-up +# sudo docker logs -f gitlab + +# sudo docker exec -it gitlab /bin/bash +# edit /etc/gitlab/gitlab.rb so that gitlab_rails['gitlab_shell_ssh_port'] = ${GITLAB_EXTERN_SSH} +# while still in gitlab env, run gitlab-ctl reconfigure + +sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password + + + + + + + From a42690c99bf7279388747faea0e6261b9b3aba77 Mon Sep 17 00:00:00 2001 From: Adam Parler Date: Sun, 9 Jul 2023 16:08:17 -0700 Subject: [PATCH 06/27] Created Nextcloud installation script. Could not test because I could not set up reverse proxy correctly. --- nextcloud_install.sh | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100755 nextcloud_install.sh diff --git a/nextcloud_install.sh b/nextcloud_install.sh new file mode 100755 index 0000000..173a0ab --- /dev/null +++ b/nextcloud_install.sh @@ -0,0 +1,39 @@ +#!/bin/bash + +if [ -z "$ZFS_DIR" ] +then + ZFS_DIR=/data +fi + +if [ -z "$APACHE_COMM" ] +then + ./create_reverse_proxy.sh +fi + +if [ SYS_MEM -gt 2097152 ] +then + let "SYS_MEM = $SYS_MEM - 1048576" +else + let "SYS_MEM = $SYS_MEM / 2" +fi + +echo "Installing Nextcloud AIO ..." +let "AIO_MEM = $SYS_MEM / 1024" + +sudo docker run \ +--sig-proxy=false \ +--name nextcloud-aio-mastercontainer \ +--restart always \ +--publish 11080:80 \ +--publish 8080:8080 \ +--publish 11443:8443 \ +--env NEXTCLOUD_DATADIR=${ZFS_DIR}/nextcloud/data \ +--env NEXTCLOUD_MOUNT=${ZFS_DIR}/nextcloud \ +--env APACHE_PORT=${APACHE_PORT} \ +--env APACHE_IP_BINDING=${APACHE_COMM} \ +--env NEXTCLOUD_MEMORY_LIMIT=${AIO_MEM}M \ +--volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \ +--volume /var/run/docker.sock:/var/run/docker.sock:ro \ +nextcloud/all-in-one:latest + +echo "Successfully installed Nextcloud AIO" From 7d38d85f6883724d43d4b45f5a115cfdcb1ae745 Mon Sep 17 00:00:00 2001 From: Adam Parler Date: Sun, 9 Jul 2023 16:09:38 -0700 Subject: [PATCH 07/27] Created script to configure ZFS and admin accounts and then install services --- setup_server.sh | 206 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 206 insertions(+) create mode 100755 setup_server.sh diff --git a/setup_server.sh b/setup_server.sh new file mode 100755 index 0000000..8e0956d --- /dev/null +++ b/setup_server.sh @@ -0,0 +1,206 @@ +#!/bin/bash + +## Define admin user account +export ADMIN_ACCOUNT=sys-admin + +## Define bulk storage location +export ZFS_DIR=/data + +## Check if user is root +if [ 'whoami' != 'root' ];then + su - +fi + +## Ensure HOME directories are stored in ${ZFS_DIR}/home +awk '{sub("#HOME=/home","HOME=/home")} {print}' /etc/default/useradd > /tmp/temp.txt && mv /tmp/temp.txt /etc/default/useradd +awk '{sub("# HOME=/home","HOME=/home")} {print}' /etc/default/useradd > /tmp/temp.txt && mv /tmp/temp.txt /etc/default/useradd +awk -v dir=${ZFS_DIR}/home '{sub("HOME=/home","HOME="dir)} {print}' /etc/default/useradd > /tmp/temp.txt && mv /tmp/temp.txt /etc/default/useradd + +## Install a few helpful packages +apt update +apt install -y cockpit +apt update +apt install -y htop nano rsync wget tree + +## Check if administrator account exists +if id ${ADMIN_ACCOUNT} &>/dev/null; then + echo 'Admin User account found' +else + ## Create and su into sys-admin + echo 'Creating Admin User account ...' + useradd -m -d ${ZFS_DIR}/home/${ADMIN_ACCOUNT} -G sudo ${ADMIN_ACCOUNT} + passwd ${ADMIN_ACCOUNT} + # adduser ${ADMIN_ACCOUNT} + echo "User account created" +fi + +su - ${ADMIN_ACCOUNT} + +echo "Setting up Docker ..." + +## Uninstall old versions +sudo apt remove docker docker-engine docker.io containerd runc + +## Set up repository +# sudo apt-get remove docker docker-engine docker.io containerd runc +sudo apt update +sudo apt install -y ca-certificates curl gnupg +sudo install -m 0755 -d /etc/apt/keyrings +curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg +sudo chmod a+r /etc/apt/keyrings/docker.gpg +echo \ + "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \ + "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \ + sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + +## Install Docker Engine +sudo apt update +sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin + +## Installation of GitLab +echo "Installing GitLab ..." +GITLAB_HOME=${ZFS_DIR}/gitlab + +GITLAB_ADDRESS=gitlab.adamhome.dev +GITLAB_EXTERN_HTTPS=14443 +GITLAB_EXTERN_HTTP=14080 +GITLAB_EXTERN_SSH=14022 + +sudo docker run --detach \ + --hostname ${GITLAB_ADDRESS} \ + --publish ${GITLAB_EXTERN_HTTPS}:443 --publish ${GITLAB_EXTERN_HTTP}:80 --publish ${GITLAB_EXTERN_SSH}:22 \ + --name gitlab \ + --restart always \ + --volume ${GITLAB_HOME}/config:/etc/gitlab \ + --volume ${GITLAB_HOME}/logs:/var/log/gitlab \ + --volume ${GITLAB_HOME}/data:/var/opt/gitlab \ + --shm-size 512m \ + gitlab/gitlab-ce:latest + +## Uncomment if you want to monitor boot-up +# sudo docker logs -f gitlab + +# sudo docker exec -it gitlab /bin/bash +# edit /etc/gitlab/gitlab.rb so that gitlab_rails['gitlab_shell_ssh_port'] = ${GITLAB_EXTERN_SSH} +# while still in gitlab env, run gitlab-ctl reconfigure + +sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password + +echo "Successfully installed GitLab" + +## Installation of MineOS +echo "Installing MineOS ..." +USER_NAME=mcadmin +USER_PASSWORD=rootWord + +MINEOS_EXTERN_HTTP=13443 + +sudo docker run -td \ +--name=mineos \ +-p ${MINEOS_EXTERN_HTTP}:8443 \ +-p 25565:25565 \ +-e USER_PASSWORD=${USER_PASSWORD} \ +-e USER_NAME=${USER_NAME} \ +-v ${ZFS_DIR}/minecraft:/var/games/minecraft \ +--restart=unless-stopped \ +hexparrot/mineos:latest + +echo "Successfully installed MineOS" + +## Installation of JupyterHub +echo "Installing JupyterHub ..." +export TLJH_INSTALL_PREFIX=${ZFS_DIR}/jupyter + +sudo ln -s ${TLJH_INSTALL_PREFIX} /opt/tljh + +SYS_MEM=$(grep MemTotal /proc/meminfo | awk '{print $2}') +SYS_CPU=$(grep -c ^processor /proc/cpuinfo) + +JUPYTER_EXTERN_HTTP=15080 +JUPYTER_EXTERN_HTTPS=15443 + +if [ $SYS_MEM -gt 2097152 ] +then + let "SYS_MEM = $SYS_MEM - 1048576" +else + let "SYS_MEM = $SYS_MEM / 2" +fi + +if [ $SYS_CPU -gt 1 ] +then + let "SYS_CPU = $SYS_CPU - 1" +fi + +cat << EOT >> /tmp/requirements.txt +numpy +scipy +matplotlib +pandas +tensorflow +tensorrt +torch +torchvision +torchaudio +EOT + +sudo apt install python3 python3-dev git curl +curl -L https://tljh.jupyter.org/bootstrap.py | \ +sudo -E python3 - \ +--show-progress-page \ +--admin ${ADMIN_ACCOUNT}:systemPassword \ +--user-requirements-txt-url /tmp/requirements.txt + +## Edit Jupyter Environment +sudo tljh-config set http.port ${JUPYTER_EXTERN_HTTP} +sudo tljh-config set https.port ${JUPYTER_EXTERN_HTTPS} +sudo tljh-config set limits.memory ${SYS_MEM}K +sudo tljh-config set limits.cpu ${SYS_CPU} +# sudo tljh-config set user_environment.default_app jupyterlab +sudo tljh-config reload proxy +sudo tljh-config reload + +echo "Successfully installed JupyterHub" + +## Installation of Nextcloud AIO +echo "Installing Nextcloud AIO ..." +let "AIO_MEM = $SYS_MEM / 1024" + +sudo docker run \ +--sig-proxy=false \ +--name nextcloud-aio-mastercontainer \ +--restart always \ +--publish 11080:80 \ +--publish 8080:8080 \ +--publish 11443:8443 \ +--env NEXTCLOUD_DATADIR=${ZFS_DIR}/nextcloud/data \ +--env NEXTCLOUD_MOUNT=${ZFS_DIR}/nextcloud \ +--env APACHE_PORT=11000 \ +--env APACHE_IP_BINDING=127.0.0.1 \ +--env NEXTCLOUD_MEMORY_LIMIT=${AIO_MEM}M \ +--volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \ +--volume /var/run/docker.sock:/var/run/docker.sock:ro \ +nextcloud/all-in-one:latest + +echo "Successfully installed Nextcloud AIO" + +# ./gitlab_install.sh +# ./nextcloud_install.sh +# ./jupyterhub_install.sh +# ./mineos_install.sh + +echo "Setup Complete!" + + + + + + + + + +########################################### + + + + + From 89731fc1e532e6d6edea4501b1409bdd06866559 Mon Sep 17 00:00:00 2001 From: Adam Parler Date: Sat, 22 Jul 2023 00:08:11 -0700 Subject: [PATCH 08/27] Added some reverse proxy scripts --- create_reverse_proxy.sh | 60 +++++++++++++++++++++++++++++++++++++++++ reverse_proxy.sh | 3 +++ 2 files changed, 63 insertions(+) create mode 100755 create_reverse_proxy.sh create mode 100755 reverse_proxy.sh diff --git a/create_reverse_proxy.sh b/create_reverse_proxy.sh new file mode 100755 index 0000000..ae39fd6 --- /dev/null +++ b/create_reverse_proxy.sh @@ -0,0 +1,60 @@ +#!/bin/bash + +export NEXTCLOUD_URL=nextcloud.adamhome.dev +export APACHE_PORT=11000 +export APACHE_COMM=127.0.0.1 + +###### FOR NGINX + +cat << EOT >> /tmp/nginx_nextcloud.txt +map $http_upgrade $connection_upgrade { + default upgrade; + '' close; +} + +server { + listen 80; + listen [::]:80; # comment to disable IPv6 + + if ($scheme = "http") { + return 301 https://$host$request_uri; + } + + listen 443 ssl http2; + listen [::]:443 ssl http2; # comment to disable IPv6 + + server_name ${NEXTCLOUD_URL}; + + location / { + proxy_pass http://127.0.0.1:11000$request_uri; + + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Port $server_port; + proxy_set_header X-Forwarded-Scheme $scheme; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Accept-Encoding ""; + proxy_set_header Host $host; + + client_body_buffer_size 512k; + proxy_read_timeout 86400s; + client_max_body_size 0; + + # Websocket + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + } + + ssl_certificate /etc/letsencrypt/live/${NEXTCLOUD_URL}/fullchain.pem; # managed by certbot on host machine + ssl_certificate_key /etc/letsencrypt/live/${NEXTCLOUD_URL}/privkey.pem; # managed by certbot on host machine + + ssl_session_timeout 1d; + ssl_session_cache shared:MozSSL:10m; # about 40000 sessions + ssl_session_tickets off; + + ssl_protocols TLSv1.2 TLSv1.3; + ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; + ssl_prefer_server_ciphers off; +} +EOT \ No newline at end of file diff --git a/reverse_proxy.sh b/reverse_proxy.sh new file mode 100755 index 0000000..248fb04 --- /dev/null +++ b/reverse_proxy.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +deb http://nginx.org/packages/mainline/ubuntu/ CODENAME nginx From 2f0cfc006156bbe51b823a4254db50b38561d0df Mon Sep 17 00:00:00 2001 From: Adam Parler Date: Sat, 22 Jul 2023 00:09:42 -0700 Subject: [PATCH 09/27] Modified MineOS script to not hard code Docker port --- mineos_install.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/mineos_install.sh b/mineos_install.sh index d35aa3d..3e2dd5e 100755 --- a/mineos_install.sh +++ b/mineos_install.sh @@ -1,16 +1,20 @@ #!/bin/bash +## Define bulk storage location if [ -z "$ZFS_DIR" ] then ZFS_DIR=/data fi +echo "Installing MineOS ..." USER_NAME=mcadmin USER_PASSWORD=rootWord +MINEOS_EXTERN_HTTP=13443 + sudo docker run -td \ --name=mineos \ --p 13443:8443 \ +-p ${MINEOS_EXTERN_HTTP}:8443 \ -p 25565:25565 \ -e USER_PASSWORD=${USER_PASSWORD} \ -e USER_NAME=${USER_NAME} \ @@ -18,6 +22,7 @@ sudo docker run -td \ --restart=unless-stopped \ hexparrot/mineos:latest +echo "Successfully installed MineOS" From 8cf5193388a5e9812621d24610e7bd0252812aff Mon Sep 17 00:00:00 2001 From: Adam Parler Date: Sat, 22 Jul 2023 00:12:38 -0700 Subject: [PATCH 10/27] Moved execution from base script to each individual --- setup_server.sh | 134 ++---------------------------------------------- 1 file changed, 4 insertions(+), 130 deletions(-) diff --git a/setup_server.sh b/setup_server.sh index 8e0956d..c4d0087 100755 --- a/setup_server.sh +++ b/setup_server.sh @@ -57,136 +57,10 @@ echo \ sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -## Installation of GitLab -echo "Installing GitLab ..." -GITLAB_HOME=${ZFS_DIR}/gitlab - -GITLAB_ADDRESS=gitlab.adamhome.dev -GITLAB_EXTERN_HTTPS=14443 -GITLAB_EXTERN_HTTP=14080 -GITLAB_EXTERN_SSH=14022 - -sudo docker run --detach \ - --hostname ${GITLAB_ADDRESS} \ - --publish ${GITLAB_EXTERN_HTTPS}:443 --publish ${GITLAB_EXTERN_HTTP}:80 --publish ${GITLAB_EXTERN_SSH}:22 \ - --name gitlab \ - --restart always \ - --volume ${GITLAB_HOME}/config:/etc/gitlab \ - --volume ${GITLAB_HOME}/logs:/var/log/gitlab \ - --volume ${GITLAB_HOME}/data:/var/opt/gitlab \ - --shm-size 512m \ - gitlab/gitlab-ce:latest - -## Uncomment if you want to monitor boot-up -# sudo docker logs -f gitlab - -# sudo docker exec -it gitlab /bin/bash -# edit /etc/gitlab/gitlab.rb so that gitlab_rails['gitlab_shell_ssh_port'] = ${GITLAB_EXTERN_SSH} -# while still in gitlab env, run gitlab-ctl reconfigure - -sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password - -echo "Successfully installed GitLab" - -## Installation of MineOS -echo "Installing MineOS ..." -USER_NAME=mcadmin -USER_PASSWORD=rootWord - -MINEOS_EXTERN_HTTP=13443 - -sudo docker run -td \ ---name=mineos \ --p ${MINEOS_EXTERN_HTTP}:8443 \ --p 25565:25565 \ --e USER_PASSWORD=${USER_PASSWORD} \ --e USER_NAME=${USER_NAME} \ --v ${ZFS_DIR}/minecraft:/var/games/minecraft \ ---restart=unless-stopped \ -hexparrot/mineos:latest - -echo "Successfully installed MineOS" - -## Installation of JupyterHub -echo "Installing JupyterHub ..." -export TLJH_INSTALL_PREFIX=${ZFS_DIR}/jupyter - -sudo ln -s ${TLJH_INSTALL_PREFIX} /opt/tljh - -SYS_MEM=$(grep MemTotal /proc/meminfo | awk '{print $2}') -SYS_CPU=$(grep -c ^processor /proc/cpuinfo) - -JUPYTER_EXTERN_HTTP=15080 -JUPYTER_EXTERN_HTTPS=15443 - -if [ $SYS_MEM -gt 2097152 ] -then - let "SYS_MEM = $SYS_MEM - 1048576" -else - let "SYS_MEM = $SYS_MEM / 2" -fi - -if [ $SYS_CPU -gt 1 ] -then - let "SYS_CPU = $SYS_CPU - 1" -fi - -cat << EOT >> /tmp/requirements.txt -numpy -scipy -matplotlib -pandas -tensorflow -tensorrt -torch -torchvision -torchaudio -EOT - -sudo apt install python3 python3-dev git curl -curl -L https://tljh.jupyter.org/bootstrap.py | \ -sudo -E python3 - \ ---show-progress-page \ ---admin ${ADMIN_ACCOUNT}:systemPassword \ ---user-requirements-txt-url /tmp/requirements.txt - -## Edit Jupyter Environment -sudo tljh-config set http.port ${JUPYTER_EXTERN_HTTP} -sudo tljh-config set https.port ${JUPYTER_EXTERN_HTTPS} -sudo tljh-config set limits.memory ${SYS_MEM}K -sudo tljh-config set limits.cpu ${SYS_CPU} -# sudo tljh-config set user_environment.default_app jupyterlab -sudo tljh-config reload proxy -sudo tljh-config reload - -echo "Successfully installed JupyterHub" - -## Installation of Nextcloud AIO -echo "Installing Nextcloud AIO ..." -let "AIO_MEM = $SYS_MEM / 1024" - -sudo docker run \ ---sig-proxy=false \ ---name nextcloud-aio-mastercontainer \ ---restart always \ ---publish 11080:80 \ ---publish 8080:8080 \ ---publish 11443:8443 \ ---env NEXTCLOUD_DATADIR=${ZFS_DIR}/nextcloud/data \ ---env NEXTCLOUD_MOUNT=${ZFS_DIR}/nextcloud \ ---env APACHE_PORT=11000 \ ---env APACHE_IP_BINDING=127.0.0.1 \ ---env NEXTCLOUD_MEMORY_LIMIT=${AIO_MEM}M \ ---volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \ ---volume /var/run/docker.sock:/var/run/docker.sock:ro \ -nextcloud/all-in-one:latest - -echo "Successfully installed Nextcloud AIO" - -# ./gitlab_install.sh -# ./nextcloud_install.sh -# ./jupyterhub_install.sh -# ./mineos_install.sh +./gitlab_install.sh +./nextcloud_install.sh +./jupyterhub_install.sh +./mineos_install.sh echo "Setup Complete!" From 653991b616a455114f2c7542979231ca7a71e85a Mon Sep 17 00:00:00 2001 From: Adam Parler Date: Sat, 22 Jul 2023 00:16:12 -0700 Subject: [PATCH 11/27] Updated scripts with learning from install --- gitlab_install.sh | 33 +++++++++++++++++++++-------- jupyterhub_install.sh | 12 +++++++++-- nextcloud_install.sh | 49 +++++++++++++++++++++++++++++-------------- pre_setup.sh | 6 +++--- 4 files changed, 70 insertions(+), 30 deletions(-) diff --git a/gitlab_install.sh b/gitlab_install.sh index d90fa85..4a50831 100755 --- a/gitlab_install.sh +++ b/gitlab_install.sh @@ -1,26 +1,39 @@ #!/bin/bash +## Define admin user account +if [ -z "$ADMIN_ACCOUNT"] +then + ADMIN_ACCOUNT=root +fi +su - ${ADMIN_ACCOUNT} + +## Define bulk storage location if [ -z "$ZFS_DIR" ] then ZFS_DIR=/data fi -if [ -z "$ADMIN_ACCOUNT"] -then - ADMIN_ACCOUNT=root -fi -su ${ADMIN_ACCOUNT} - +echo "Installing GitLab ..." GITLAB_HOME=${ZFS_DIR}/gitlab -GITLAB_ADDRESS=gitlab.adamhome.dev +GITLAB_ADDRESS=https://gitlab.adamhome.dev GITLAB_EXTERN_HTTPS=14443 GITLAB_EXTERN_HTTP=14080 -GITLAB_EXTERN_SSH=14022 +GITLAB_EXTERN_SSH=22 + +if [ "${GITLAB_EXTERN_SSH}" -eq 22 ] +then + awk '{sub("#PORT=22","PORT=22")} {print}' /etc/ssh/sshd_config > /tmp/temp.txt && mv /tmp/temp.txt /etc/ssh/sshd_config + awk '{sub("# PORT=22","PORT=22")} {print}' /etc/ssh/sshd_config > /tmp/temp.txt && mv /tmp/temp.txt /etc/ssh/sshd_config + awk -v port=2222 '{sub("PORT=22","PORT="2222)} {print}' /etc/ssh/sshd_config > /tmp/temp.txt && mv /tmp/temp.txt /etc/ssh/sshd_config + sudo systemctl reload sshd +fi sudo docker run --detach \ --hostname ${GITLAB_ADDRESS} \ - --publish ${GITLAB_EXTERN_HTTPS}:443 --publish ${GITLAB_EXTERN_HTTP}:80 --publish ${GITLAB_EXTERN_SSH}:22 \ + --publish ${GITLAB_EXTERN_HTTPS}:443 \ + --publish ${GITLAB_EXTERN_HTTP}:80 \ + --publish ${GITLAB_EXTERN_SSH}:22 \ --name gitlab \ --restart always \ --volume ${GITLAB_HOME}/config:/etc/gitlab \ @@ -34,10 +47,12 @@ sudo docker run --detach \ # sudo docker exec -it gitlab /bin/bash # edit /etc/gitlab/gitlab.rb so that gitlab_rails['gitlab_shell_ssh_port'] = ${GITLAB_EXTERN_SSH} +# edit /etc/gitlab/gitlab.rb extern_url "https://${GITLAB_ADDRESS}" # while still in gitlab env, run gitlab-ctl reconfigure sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password +echo "Successfully installed GitLab" diff --git a/jupyterhub_install.sh b/jupyterhub_install.sh index 87ba08d..c05176f 100755 --- a/jupyterhub_install.sh +++ b/jupyterhub_install.sh @@ -1,7 +1,11 @@ #!/bin/bash ## Define admin user account -export ADMIN_ACCOUNT=sys-admin +if [ -z "$ADMIN_ACCOUNT"] +then + ADMIN_ACCOUNT=root +fi +su - ${ADMIN_ACCOUNT} ## Define bulk storage location if [ -z "$ZFS_DIR" ] @@ -14,6 +18,7 @@ awk '{sub("#HOME=/home","HOME=/home")} {print}' /etc/default/useradd > /tmp/temp awk '{sub("# HOME=/home","HOME=/home")} {print}' /etc/default/useradd > /tmp/temp.txt && mv /tmp/temp.txt /etc/default/useradd awk -v dir=${ZFS_DIR}/home '{sub("HOME=/home","HOME="dir)} {print}' /etc/default/useradd > /tmp/temp.txt && mv /tmp/temp.txt /etc/default/useradd +echo "Installing JupyterHub ..." # export TLJH_INSTALL_PREFIX=${ZFS_DIR}/tljh export TLJH_INSTALL_PREFIX=${ZFS_DIR}/jupyter @@ -59,10 +64,13 @@ sudo -E python3 - \ ## Edit Jupyter Environment sudo tljh-config set http.port ${JUPYTER_EXTERN_HTTP} sudo tljh-config set https.port ${JUPYTER_EXTERN_HTTPS} +sudo tljh-config set https.enabled true +sudo tljh-config set https.tls.key /etc/letsencrypt/live/jupyter.adamhome.dev/privkey.pem +sudo tljh-config set https.tls.cert /etc/letsencrypt/live/jupyter.adamhome.dev/fullchain.pem sudo tljh-config set limits.memory ${SYS_MEM}K sudo tljh-config set limits.cpu ${SYS_CPU} # sudo tljh-config set user_environment.default_app jupyterlab sudo tljh-config reload proxy sudo tljh-config reload - +echo "Successfully installed JupyterHub" \ No newline at end of file diff --git a/nextcloud_install.sh b/nextcloud_install.sh index 173a0ab..8e4a729 100755 --- a/nextcloud_install.sh +++ b/nextcloud_install.sh @@ -1,16 +1,31 @@ #!/bin/bash +## Define admin user account +if [ -z "$ADMIN_ACCOUNT"] +then + ADMIN_ACCOUNT=root +fi +su - ${ADMIN_ACCOUNT} + +## Define bulk storage location if [ -z "$ZFS_DIR" ] then ZFS_DIR=/data fi +echo "Installing Nextcloud AIO ..." + if [ -z "$APACHE_COMM" ] then ./create_reverse_proxy.sh fi -if [ SYS_MEM -gt 2097152 ] +if [ -z "$SYS_MEM" ] +then + SYS_MEM=$(grep MemTotal /proc/meminfo | awk '{print $2}') +fi + +if [ $SYS_MEM -gt 2097152 ] then let "SYS_MEM = $SYS_MEM - 1048576" else @@ -19,21 +34,23 @@ fi echo "Installing Nextcloud AIO ..." let "AIO_MEM = $SYS_MEM / 1024" +NEXTCLD_EXTERN_HTTP=12080 +NEXTCLD_EXTERN_HTTPS=12443 +APACHE_COMM=127.0.0.1 +APACHE_PORT=${NEXTCLD_EXTERN_HTTPS} -sudo docker run \ ---sig-proxy=false \ ---name nextcloud-aio-mastercontainer \ ---restart always \ ---publish 11080:80 \ ---publish 8080:8080 \ ---publish 11443:8443 \ ---env NEXTCLOUD_DATADIR=${ZFS_DIR}/nextcloud/data \ ---env NEXTCLOUD_MOUNT=${ZFS_DIR}/nextcloud \ ---env APACHE_PORT=${APACHE_PORT} \ ---env APACHE_IP_BINDING=${APACHE_COMM} \ ---env NEXTCLOUD_MEMORY_LIMIT=${AIO_MEM}M \ ---volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \ ---volume /var/run/docker.sock:/var/run/docker.sock:ro \ -nextcloud/all-in-one:latest +sudo docker run -d \ + --sig-proxy=false \ + --name nextcloud-aio-mastercontainer \ + --restart always \ + --publish 8080:8080 \ + --env NEXTCLOUD_DATADIR=${ZFS_DIR}/nextcloud/data \ + --env NEXTCLOUD_MOUNT=${ZFS_DIR}/nextcloud \ + --env APACHE_PORT=${APACHE_PORT} \ + --env APACHE_IP_BINDING=${APACHE_COMM} \ + --env NEXTCLOUD_MEMORY_LIMIT=${AIO_MEM}M \ + --volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \ + --volume /var/run/docker.sock:/var/run/docker.sock:ro \ + nextcloud/all-in-one:latest echo "Successfully installed Nextcloud AIO" diff --git a/pre_setup.sh b/pre_setup.sh index 9fbb8e0..a7b7fbe 100644 --- a/pre_setup.sh +++ b/pre_setup.sh @@ -3,7 +3,7 @@ apt update ## Setup ZFS -ZFS_ROOT=/data +ZFS_DIR=/data ## Debian Setup codename=$(lsb_release -cs);echo "deb http://deb.debian.org/debian $codename-backports main contrib non-free"|sudo tee -a /etc/apt/sources.list @@ -12,8 +12,8 @@ apt install dpkg-dev linux-headers-generic linux-image-generic apt install zfs-dkms zfsutils-linux ## Create ZFS Pool -mkdir -p ${ZFS_ROOT} -zpool create -m ${ZFS_ROOT} tank raidz ... +mkdir -p ${ZFS_DIR} +zpool create -m ${ZFS_DIR} tank raidz ... zfs create tank/gitlab zfs create tank/home From 5d4bf8c2be40535a90e22bdd490f51eae7041fd5 Mon Sep 17 00:00:00 2001 From: Adam Parler Date: Mon, 14 Aug 2023 20:27:44 -0700 Subject: [PATCH 12/27] A few more updates discovered. QOL for building system --- gitlab_install.sh | 3 +-- nextcloud_install.sh | 2 ++ pre_setup.sh | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/gitlab_install.sh b/gitlab_install.sh index 4a50831..29c6c54 100755 --- a/gitlab_install.sh +++ b/gitlab_install.sh @@ -16,7 +16,7 @@ fi echo "Installing GitLab ..." GITLAB_HOME=${ZFS_DIR}/gitlab -GITLAB_ADDRESS=https://gitlab.adamhome.dev +GITLAB_ADDRESS=gitlab.adamhome.dev GITLAB_EXTERN_HTTPS=14443 GITLAB_EXTERN_HTTP=14080 GITLAB_EXTERN_SSH=22 @@ -47,7 +47,6 @@ sudo docker run --detach \ # sudo docker exec -it gitlab /bin/bash # edit /etc/gitlab/gitlab.rb so that gitlab_rails['gitlab_shell_ssh_port'] = ${GITLAB_EXTERN_SSH} -# edit /etc/gitlab/gitlab.rb extern_url "https://${GITLAB_ADDRESS}" # while still in gitlab env, run gitlab-ctl reconfigure sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password diff --git a/nextcloud_install.sh b/nextcloud_install.sh index 8e4a729..8d9b2b7 100755 --- a/nextcloud_install.sh +++ b/nextcloud_install.sh @@ -52,5 +52,7 @@ sudo docker run -d \ --volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \ --volume /var/run/docker.sock:/var/run/docker.sock:ro \ nextcloud/all-in-one:latest +# --publish ${NEXTCLD_EXTERN_HTTP}:80 \ +# --publish ${NEXTCLD_EXTERN_HTTPS}:8443 \ echo "Successfully installed Nextcloud AIO" diff --git a/pre_setup.sh b/pre_setup.sh index a7b7fbe..3998189 100644 --- a/pre_setup.sh +++ b/pre_setup.sh @@ -9,7 +9,7 @@ ZFS_DIR=/data codename=$(lsb_release -cs);echo "deb http://deb.debian.org/debian $codename-backports main contrib non-free"|sudo tee -a /etc/apt/sources.list apt update apt install dpkg-dev linux-headers-generic linux-image-generic -apt install zfs-dkms zfsutils-linux +apt install zfs-dkms zfsutils-linux zfs-auto-snapshot ## Create ZFS Pool mkdir -p ${ZFS_DIR} From cccdc82127242223fcfa86ab156e8b0111ea16e5 Mon Sep 17 00:00:00 2001 From: Adam Parler Date: Sat, 19 Aug 2023 13:55:18 -0700 Subject: [PATCH 13/27] Realized that 'conda' is not available in sudoer space. Added comment about how to get that set up. --- jupyterhub_install.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/jupyterhub_install.sh b/jupyterhub_install.sh index c05176f..a90717e 100755 --- a/jupyterhub_install.sh +++ b/jupyterhub_install.sh @@ -73,4 +73,7 @@ sudo tljh-config set limits.cpu ${SYS_CPU} sudo tljh-config reload proxy sudo tljh-config reload +## Add conda to sudo path +# sudo nano /etc/sudoers # append to secure_path (without variables) ${TLJH_INSTALL_PREFIX}/user/bin + echo "Successfully installed JupyterHub" \ No newline at end of file From 386bb4d7e67a9771ba9ac7a5182a41085430f9a1 Mon Sep 17 00:00:00 2001 From: Adam Parler Date: Mon, 25 Dec 2023 11:46:53 -0800 Subject: [PATCH 14/27] Added setup for PLEX server --- plex_install.sh | 30 ++++++++++++++++++++++++++++++ pre_setup.sh | 3 ++- setup_server.sh | 3 ++- 3 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 plex_install.sh diff --git a/plex_install.sh b/plex_install.sh new file mode 100644 index 0000000..4cbe197 --- /dev/null +++ b/plex_install.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +## Define admin user account +if [ -z "$ADMIN_ACCOUNT"] +then + ADMIN_ACCOUNT=root +fi +su - ${ADMIN_ACCOUNT} + +## Define bulk storage location +if [ -z "$ZFS_DIR" ] +then + ZFS_DIR=/data +fi + +echo "Installing Plex ..." +PLEX_HOME=${ZFS_DIR}/plex + +sudo docker run --detach \ + --name plex \ + --network=host \ + --env TZ="America/Los_Angles" \ + --env PLEX_CLAIM="claim-Gh-Gk8R11eNyq7kg4Jxx" \ + --volume ${PLEX_HOME}/config:/config \ + --volume ${PLEX_HOME}/transcode:/transcode \ + --volume ${PLEX_HOME}/data:/data \ + --restart unless-stopped \ + plexinc/pms-docker + +echo "Successfully installed Plex" \ No newline at end of file diff --git a/pre_setup.sh b/pre_setup.sh index 3998189..dc0ae46 100644 --- a/pre_setup.sh +++ b/pre_setup.sh @@ -19,4 +19,5 @@ zfs create tank/gitlab zfs create tank/home zfs create tank/jupyter zfs create tank/mineos -zfs create tank/nextcloud \ No newline at end of file +zfs create tank/nextcloud +zfs create tank/plex \ No newline at end of file diff --git a/setup_server.sh b/setup_server.sh index c4d0087..1826ddf 100755 --- a/setup_server.sh +++ b/setup_server.sh @@ -58,9 +58,10 @@ sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin ./gitlab_install.sh -./nextcloud_install.sh ./jupyterhub_install.sh ./mineos_install.sh +./nextcloud_install.sh +./plex_install.sh echo "Setup Complete!" From 859d1e792038314355e118ba688d02181ada8def Mon Sep 17 00:00:00 2001 From: Adam Parler Date: Mon, 25 Dec 2023 11:48:26 -0800 Subject: [PATCH 15/27] Created a PXE server with NetBoot --- netbootxyz_install.sh | 37 +++++++++++++++++++++++++++++++++++++ pre_setup.sh | 1 + setup_server.sh | 1 + 3 files changed, 39 insertions(+) create mode 100644 netbootxyz_install.sh diff --git a/netbootxyz_install.sh b/netbootxyz_install.sh new file mode 100644 index 0000000..d43eb0e --- /dev/null +++ b/netbootxyz_install.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +## Define admin user account +if [ -z "$ADMIN_ACCOUNT"] +then + ADMIN_ACCOUNT=root +fi +su - ${ADMIN_ACCOUNT} + +## Define bulk storage location +if [ -z "$ZFS_DIR" ] +then + ZFS_DIR=/data +fi + +echo "Installing Netboot-xyz ..." +NETBOOTXYZ_HOME=${ZFS_DIR}/netboot_xyz + +NETBOOT_EXTERN_HTTP=11080 + +sudo docker run -d \ + --name netbootxyz \ + -p 3000:3000 \ + -p 69:69/udp \ + --publish ${NETBOOT_EXTERN_HTTP}:80 \ + --env PUID=1000 \ + --env PGID=1000 \ + --env TZ=America/Los_Angeles \ + --env MENU_VERSION=1.9.9 \ + --env PORT_RANGE=30000-30010 \ + --env SUBFOLDER=/ \ + --volume ${NETBOOTXYZ_HOME}/config:/config \ + --volume ${NETBOOTXYZ_HOME}/assets:/assets \ + --restart unless-stopped \ + lscr.io/linuxserver/netbootxyz:latest + +echo "Successfully installed Netboot-xyz" \ No newline at end of file diff --git a/pre_setup.sh b/pre_setup.sh index dc0ae46..39d55ad 100644 --- a/pre_setup.sh +++ b/pre_setup.sh @@ -19,5 +19,6 @@ zfs create tank/gitlab zfs create tank/home zfs create tank/jupyter zfs create tank/mineos +zfs create tank/netbootxyz zfs create tank/nextcloud zfs create tank/plex \ No newline at end of file diff --git a/setup_server.sh b/setup_server.sh index 1826ddf..3e03306 100755 --- a/setup_server.sh +++ b/setup_server.sh @@ -60,6 +60,7 @@ sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin dock ./gitlab_install.sh ./jupyterhub_install.sh ./mineos_install.sh +./netbootxyz_install.sh ./nextcloud_install.sh ./plex_install.sh From 9f78abfd9de07874fa3bee84a48b8426da857b60 Mon Sep 17 00:00:00 2001 From: Adam Parler Date: Mon, 25 Dec 2023 13:06:33 -0800 Subject: [PATCH 16/27] Moved commands to docker-compose and created base directories for each service --- gitlab/docker-compose.yml | 34 +++++++++++++++++++ gitlab_install.sh => gitlab/gitlab_install.sh | 0 .../jupyterhub_install.sh | 0 minecraft/docker-compose.yml | 15 ++++++++ .../mineos_install.sh | 0 netboot_xyz/docker-compose.yml | 20 +++++++++++ .../netbootxyz_install.sh | 0 nextcloud/docker-compose.yml | 19 +++++++++++ .../nextcloud_install.sh | 0 plex/docker-compose.yml | 27 +++++++++++++++ plex_install.sh => plex/plex_install.sh | 0 portainer/docker-compose.yml | 15 ++++++++ 12 files changed, 130 insertions(+) create mode 100644 gitlab/docker-compose.yml rename gitlab_install.sh => gitlab/gitlab_install.sh (100%) rename jupyterhub_install.sh => jupyter/jupyterhub_install.sh (100%) create mode 100644 minecraft/docker-compose.yml rename mineos_install.sh => minecraft/mineos_install.sh (100%) create mode 100644 netboot_xyz/docker-compose.yml rename netbootxyz_install.sh => netboot_xyz/netbootxyz_install.sh (100%) create mode 100644 nextcloud/docker-compose.yml rename nextcloud_install.sh => nextcloud/nextcloud_install.sh (100%) create mode 100644 plex/docker-compose.yml rename plex_install.sh => plex/plex_install.sh (100%) create mode 100644 portainer/docker-compose.yml diff --git a/gitlab/docker-compose.yml b/gitlab/docker-compose.yml new file mode 100644 index 0000000..9e27471 --- /dev/null +++ b/gitlab/docker-compose.yml @@ -0,0 +1,34 @@ +version: '3.6' +services: + web: + image: 'gitlab/gitlab-ce:latest' + hostname: ${GITLAB_ADDRESS} + container_name: gitlab + environment: + TZ: 'America/Los_Angeles' + GITLAB_OMNIBUS_CONFIG: | + external_url ${GITLAB_ADDRESS} + gitlab_rails['lfs_enabled'] = true + gitlab_rails['gitlab_shell_ssh_port'] = 2222 + # gitlab_rails['gitlab_email_enabled'] = true + # gitlab_rails['gitlab_email_from'] = 'help@adamhome.dev' + # gitlab_rails['gitlab_email_display_name'] = 'GitLab Help' + # gitlab_rails['gitlab_email_reply_to'] = 'help@adamhome.dev' + # gitlab_rails['smtp_enable'] = true + # gitlab_rails['smtp_address'] = 'smtp.gmail.com' + # gitlab_rails['smtp_port'] = 587 + # gitlab_rails['smtp_user_name'] = '' + # gitlab_rails['smtp_password'] = '' + # gitlab_rails['smtp_domain'] = 'smtp.gmail.com' + # gitlab_rails['smtp_authentication'] = 'login' + # gitlab_rails['smtp_enable_starttls_auto'] = true + ports: + - ${GITLAB_EXTERN_HTTPS}':443' + - ${GITLAB_EXTERN_HTTP}':80' + - ${GITLAB_EXTERN_SSH}':22' + volumes: + - $GITLAB_HOME/config:/etc/gitlab + - $GITLAB_HOME/logs:/var/log/gitlab + - $GITLAB_HOME/data:/var/opt/gitlab + shm_size: '256m' + restart: always \ No newline at end of file diff --git a/gitlab_install.sh b/gitlab/gitlab_install.sh similarity index 100% rename from gitlab_install.sh rename to gitlab/gitlab_install.sh diff --git a/jupyterhub_install.sh b/jupyter/jupyterhub_install.sh similarity index 100% rename from jupyterhub_install.sh rename to jupyter/jupyterhub_install.sh diff --git a/minecraft/docker-compose.yml b/minecraft/docker-compose.yml new file mode 100644 index 0000000..5fb502f --- /dev/null +++ b/minecraft/docker-compose.yml @@ -0,0 +1,15 @@ +version: '3.6' +services: + mineos: + image: hexparrot/mineos:latest + container_name: mineos + ports: + - ${MINEOS_EXTERN_HTTP}':8443' + - '25565:25565' + environment: + - USER_NAME=${USER_NAME} + - USER_PASSWORD=${USER_PASSWORD} + - TZ=America/Los_Angeles + volumes: + - ${ZFS_DIR}/minecraft:/var/games/minecraft + restart: unless-stopped \ No newline at end of file diff --git a/mineos_install.sh b/minecraft/mineos_install.sh similarity index 100% rename from mineos_install.sh rename to minecraft/mineos_install.sh diff --git a/netboot_xyz/docker-compose.yml b/netboot_xyz/docker-compose.yml new file mode 100644 index 0000000..c53ba02 --- /dev/null +++ b/netboot_xyz/docker-compose.yml @@ -0,0 +1,20 @@ +version: '2.1' +services: + netbootxyz: + image: lscr.io/linuxserver/netbootxyz:latest + container_name: netbootxyz + environment: + - PUID=1000 + - PGID=1000 + - TZ=America/Los_Angeles + - MENU_VERSION=1.9.9 + - PORT_RANGE=30000:30010 + - SUBFOLDER=/ + volumes: + - ${NETBOOTXYZ_HOME}/config:/config + - ${NETBOOTXYZ_HOME}/assets:/assets + ports: + - 3000:3000 + - 69:69/udp + - 8080:80 + restart: unless-stopped \ No newline at end of file diff --git a/netbootxyz_install.sh b/netboot_xyz/netbootxyz_install.sh similarity index 100% rename from netbootxyz_install.sh rename to netboot_xyz/netbootxyz_install.sh diff --git a/nextcloud/docker-compose.yml b/nextcloud/docker-compose.yml new file mode 100644 index 0000000..f52947a --- /dev/null +++ b/nextcloud/docker-compose.yml @@ -0,0 +1,19 @@ +version: '3' +services: + nextcloud: + sig-proxy: false + image: nextcloud/all-in-one:latest + container_name: nextcloud-aio-mastercontainer + ports: + - 8080:8080 + environment: + - TZ=America/Los_Angeles + - NEXTCLOUD_DATADIR=${ZFS_DIR}/nextcloud/data + - NEXTCLOUD_MOUNT=${ZFS_DIR}/nextcloud + - APACHE_PORT=${APACHE_PORT} + - APACHE_IP_BINDING=${APACHE_COMM} + - NEXTCLOUD_MEMORY_LIMIT=${AIO_MEM}M + volumes: + - nextcloud_aio_mastercontainer:/mnt/docker-aio-config + - /var/run/docker.sock:/var/run/docker.sock:ro + restart: unless-stopped \ No newline at end of file diff --git a/nextcloud_install.sh b/nextcloud/nextcloud_install.sh similarity index 100% rename from nextcloud_install.sh rename to nextcloud/nextcloud_install.sh diff --git a/plex/docker-compose.yml b/plex/docker-compose.yml new file mode 100644 index 0000000..8ac58ac --- /dev/null +++ b/plex/docker-compose.yml @@ -0,0 +1,27 @@ +version: "2.1" +services: + plex: + image: plexinc/pms-docker:latest + container_name: plex + network_mode: host + environment: + - PUID=1000 + - PGID=1000 + - TZ=America/Los_Angeles + - VERSION=docker + - PLEX_CLAIM=claim-Gh-Gk8R11eNyq7kg4Jxx + volumes: + - ${PLEX_HOME}/config:/config + - ${PLEX_HOME}/transcode:/transcode + - ${PLEX_HOME}/data:/data + ports: + - 32400:32400 + - 3005:3005 + - 8324:8324 + - 32469:32469 + - 1900:1900 + - 32410:32410 + - 32412:32412 + - 32413:32413 + - 32414:32414 + restart: unless-stopped \ No newline at end of file diff --git a/plex_install.sh b/plex/plex_install.sh similarity index 100% rename from plex_install.sh rename to plex/plex_install.sh diff --git a/portainer/docker-compose.yml b/portainer/docker-compose.yml new file mode 100644 index 0000000..857587b --- /dev/null +++ b/portainer/docker-compose.yml @@ -0,0 +1,15 @@ +version: '3.6' +services: + portainer: + image: portainer/portainer-ce:latest + container_name: portainer + environment: + - PUID=1000 + - PGID=1000 + - TZ=America/Los_Angeles + volumes: + - /data/portainer/config:/config + - /var/run/docker.sock:/var/run/docker.sock + ports: + - 9000:9000 + restart: unless-stopped \ No newline at end of file From f8787f64b74996f9bd05859eeecc284bc36fb2ec Mon Sep 17 00:00:00 2001 From: Adam Parler Date: Fri, 25 Apr 2025 19:20:08 +0000 Subject: [PATCH 17/27] Add new directory --- handbrake/.gitkeep | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 handbrake/.gitkeep diff --git a/handbrake/.gitkeep b/handbrake/.gitkeep new file mode 100644 index 0000000..e69de29 From 6f6ded9eeef14c7172445ed56ac6840d097b2049 Mon Sep 17 00:00:00 2001 From: Adam Parler Date: Fri, 25 Apr 2025 19:22:12 +0000 Subject: [PATCH 18/27] Created new Docker profile for HandBrake --- handbrake/docker-compose.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 handbrake/docker-compose.yml diff --git a/handbrake/docker-compose.yml b/handbrake/docker-compose.yml new file mode 100644 index 0000000..821a742 --- /dev/null +++ b/handbrake/docker-compose.yml @@ -0,0 +1,17 @@ +version: '3' +services: + handbrake: + container_name: handbrake + ports: + - 5800:5800 + volumes: + - ${ZFS_DIR}/handbrake/config:/config:rw + - ${ZFS_DIR}/handbrake/data:/storage:ro + - ${ZFS_DIR}/handbrake/watch:/watch:rw + - ${ZFS_DIR}/handbrake/output:/output:rw + image: jlesage/handbrake + restart: unless-stopped + + + + From 39a244efb9e4bf81c16fbac2755c48452d9a0862 Mon Sep 17 00:00:00 2001 From: Adam Parler Date: Fri, 25 Apr 2025 19:22:31 +0000 Subject: [PATCH 19/27] Delete .gitkeep --- handbrake/.gitkeep | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 handbrake/.gitkeep diff --git a/handbrake/.gitkeep b/handbrake/.gitkeep deleted file mode 100644 index e69de29..0000000 From 6d9e1db2cfa7540672163eae7abb1a951423b559 Mon Sep 17 00:00:00 2001 From: Adam Parler Date: Mon, 18 May 2026 12:33:41 -0400 Subject: [PATCH 20/27] Initial commit --- README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..ad9a87b --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# Server Configuration for Adam Home Suite of Applications + +This repo is the basic setup of the [adamhome.io](adamhome.io) domain \ No newline at end of file From 950825186522628d0a8953e4647fe70600e5e603 Mon Sep 17 00:00:00 2001 From: Adam Parler Date: Mon, 18 May 2026 13:17:09 -0400 Subject: [PATCH 21/27] Added a template Docker Compose file to standardize layout --- docker-compose.template | 46 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 docker-compose.template diff --git a/docker-compose.template b/docker-compose.template new file mode 100644 index 0000000..9b8476c --- /dev/null +++ b/docker-compose.template @@ -0,0 +1,46 @@ +services: + server: + image: image/image:1.0.0 + container_name: image + restart: always + ports: + - '3000:3000' + environment: + - VARIABLE=value + volumes: + - ./data:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + networks: + - stuff + secrets: + - db_password + depends_on: + - db + + db: + image: image:1.0.0 + container_name: image-db + restart: always + environment: + - STATUS=running + networks: + - stuff + volumes: + - ./mysql:/var/lib/mysql + secrets: + - db_root_password + - db_password + +secrets: + db_password: + file: secrets/db_password.txt + db_root_password: + file: secrets/db_root_password.txt + +networks: + stuff: + external: false + +volumes: + db-data: \ No newline at end of file From 6e66ba22ce30f2575b10d7217eada218c3f73725 Mon Sep 17 00:00:00 2001 From: Adam Parler Date: Mon, 18 May 2026 13:20:30 -0400 Subject: [PATCH 22/27] Added Forgejo configuration --- .gitignore | 1 + forgejo/data/gitea/conf/app.ini | 96 +++++++++++++++++++++++++++++++++ forgejo/docker-compose.yml | 53 ++++++++++++++++++ setup.sh | 19 +++++++ 4 files changed, 169 insertions(+) create mode 100644 .gitignore create mode 100644 forgejo/data/gitea/conf/app.ini create mode 100644 forgejo/docker-compose.yml create mode 100755 setup.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..46ed454 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*/secrets/* \ No newline at end of file diff --git a/forgejo/data/gitea/conf/app.ini b/forgejo/data/gitea/conf/app.ini new file mode 100644 index 0000000..433178f --- /dev/null +++ b/forgejo/data/gitea/conf/app.ini @@ -0,0 +1,96 @@ +APP_NAME = Forgejo +RUN_MODE = prod +APP_SLOGAN = Beyond coding. We Forge. +RUN_USER = git +WORK_PATH = /data/gitea + +[repository] +ROOT = /data/git/repositories + +[repository.local] +LOCAL_COPY_PATH = /data/gitea/tmp/local-repo + +[repository.upload] +TEMP_PATH = /data/gitea/uploads + +[server] +APP_DATA_PATH = /data/gitea +DOMAIN = 10.0.1.2 +SSH_DOMAIN = 10.0.1.2 +HTTP_PORT = 3000 +ROOT_URL = https://forgejo.adamhome.io/ +DISABLE_SSH = false +SSH_PORT = 22 +SSH_LISTEN_PORT = 22 +LFS_START_SERVER = true +OFFLINE_MODE = true + +[database] +PATH = /data/gitea/gitea.db +DB_TYPE = mysql +HOST = db:3306 +NAME = forgejo +USER = forgejo +LOG_SQL = false +SCHEMA = +SSL_MODE = disable + +[indexer] +ISSUE_INDEXER_PATH = /data/gitea/indexers/issues.bleve + +[session] +PROVIDER_CONFIG = /data/gitea/sessions +PROVIDER = file + +[picture] +AVATAR_UPLOAD_PATH = /data/gitea/avatars +REPOSITORY_AVATAR_UPLOAD_PATH = /data/gitea/repo-avatars + +[attachment] +PATH = /data/gitea/attachments + +[log] +MODE = console +LEVEL = info +ROOT_PATH = /data/gitea/log + +[security] +INSTALL_LOCK = true +SECRET_KEY = +REVERSE_PROXY_LIMIT = 1 +REVERSE_PROXY_TRUSTED_PROXIES = * +PASSWORD_HASH_ALGO = pbkdf2_hi + +[service] +DISABLE_REGISTRATION = false +REGISTER_MANUAL_CONFIRM = true +REQUIRE_SIGNIN_VIEW = false +REGISTER_EMAIL_CONFIRM = false +ENABLE_NOTIFY_MAIL = false +ALLOW_ONLY_EXTERNAL_REGISTRATION = false +ENABLE_CAPTCHA = false +DEFAULT_KEEP_EMAIL_PRIVATE = false +DEFAULT_ALLOW_CREATE_ORGANIZATION = true +DEFAULT_ENABLE_TIMETRACKING = true +NO_REPLY_ADDRESS = noreply.adamhome.io + +[lfs] +PATH = /data/git/lfs + +[mailer] +ENABLED = false + +[openid] +ENABLE_OPENID_SIGNIN = true +ENABLE_OPENID_SIGNUP = true + +[cron.update_checker] +ENABLED = true + +[repository.pull-request] +DEFAULT_MERGE_STYLE = merge + +[repository.signing] +DEFAULT_TRUST_MODEL = committer + +[oauth2] diff --git a/forgejo/docker-compose.yml b/forgejo/docker-compose.yml new file mode 100644 index 0000000..0cb7ee7 --- /dev/null +++ b/forgejo/docker-compose.yml @@ -0,0 +1,53 @@ +services: + forgejo: + image: codeberg.org/forgejo/forgejo:11.0.14 + container_name: forgejo + restart: always + ports: + - '3000:3000' + - '222:22' + environment: + - USER_UID=1000 + - USER_GID=1000 + - FORGEJO__database__DB_TYPE=mysql + - FORGEJO__database__HOST=db:3306 + - FORGEJO__database__NAME=forgejo + - FORGEJO__database__USER=forgejo + - FORGEJO__database__PASSWD_FILE=/run/secrets/db_password + volumes: + - ./data:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + networks: + - forgejo + secrets: + - db_password + depends_on: + - db + + db: + image: mysql:8.4.9 + container_name: forgejo-db + restart: always + environment: + - MYSQL_ROOT_PASSWORD_FILE=/run/secrets/db_root_password + - MYSQL_USER=forgejo + - MYSQL_PASSWORD_FILE=/run/secrets/db_password + - MYSQL_DATABASE=forgejo + volumes: + - ./mysql:/var/lib/mysql + networks: + - forgejo + secrets: + - db_root_password + - db_password + +secrets: + db_password: + file: secrets/db_password.txt + db_root_password: + file: secrets/db_root_password.txt + +networks: + forgejo: + external: false diff --git a/setup.sh b/setup.sh new file mode 100755 index 0000000..5c29263 --- /dev/null +++ b/setup.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +if command -v podman &> /dev/null; then + PROG="podman" + echo "Podman command exists" +elif command -v docker &> /dev/null; then + PROG="docker" + echo "Docker command exists" +else + echo "Container command (Docker/Podman) could not be found!" +fi + +# Check if folder exists +if [ -d "forgejo" ]; then + cd forgejo + echo "Attempting to start forgejo container ..." + $PROG compose -f docker-compose.yml up -d +fi + From 1d2b26712791feec5815fa013f6203562bd8d158 Mon Sep 17 00:00:00 2001 From: Adam Parler Date: Mon, 18 May 2026 13:31:45 -0400 Subject: [PATCH 23/27] Added Nginx Proxy Manager configuration --- nginx/docker-compose.yml | 49 ++++++++++++++++++++++++++++++++++++++++ setup.sh | 9 ++++++++ 2 files changed, 58 insertions(+) create mode 100644 nginx/docker-compose.yml diff --git a/nginx/docker-compose.yml b/nginx/docker-compose.yml new file mode 100644 index 0000000..27c7edc --- /dev/null +++ b/nginx/docker-compose.yml @@ -0,0 +1,49 @@ +services: + nginx: + image: 'jc21/nginx-proxy-manager:2.11.3' + container_name: nginx-proxy + restart: unless-stopped + ports: + # These ports are in format : + - '80:80' # Public HTTP Port + - '443:443' # Public HTTPS Port + - '81:81' # Admin Web Port + # Add any other Stream port you want to expose + # - '21:21' # FTP + environment: + TZ: "America/New_York" + # Mysql/Maria connection parameters: + DB_MYSQL_HOST: "db" + DB_MYSQL_PORT: 3306 + DB_MYSQL_USER: "npm" + DB_MYSQL_PASSWORD_FILE: "/run/secrets/db_password" + DB_MYSQL_NAME: "npm" + volumes: + - ./data:/data + - ./letsencrypt:/etc/letsencrypt + secrets: + - db_password + depends_on: + - db + + db: + image: 'jc21/mariadb-aria:10.11.5' + container_name: nginx-db + restart: always + environment: + MYSQL_ROOT_PASSWORD_FILE: "/run/secrets/db_root_password" + MYSQL_DATABASE: "npm" + MYSQL_USER: "npm" + MYSQL_PASSWORD_FILE: "/run/secrets/db_password" + MARIADB_AUTO_UPGRADE: '1' + volumes: + - ./mysql:/var/lib/mysql + secrets: + - db_root_password + - db_password + +secrets: + db_password: + file: secrets/db_password.txt + db_root_password: + file: secrets/db_root_password.txt \ No newline at end of file diff --git a/setup.sh b/setup.sh index 5c29263..dc0c6ec 100755 --- a/setup.sh +++ b/setup.sh @@ -10,10 +10,19 @@ else echo "Container command (Docker/Podman) could not be found!" fi +if [ -d "nginx" ]; then + cd nginx + echo "Attempting to start nginx container ..." + $PROG compose -f docker-compose.yml up -d + cd .. +fi + # Check if folder exists if [ -d "forgejo" ]; then cd forgejo echo "Attempting to start forgejo container ..." $PROG compose -f docker-compose.yml up -d + cd .. fi +echo "Program finished successfully!" \ No newline at end of file From d77ef207182dfddea7f0a27a30ea481ed6e9e16f Mon Sep 17 00:00:00 2001 From: Adam Parler Date: Mon, 18 May 2026 15:33:02 -0400 Subject: [PATCH 24/27] Added exit on failure --- setup.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/setup.sh b/setup.sh index dc0c6ec..ba7dd94 100755 --- a/setup.sh +++ b/setup.sh @@ -8,6 +8,7 @@ elif command -v docker &> /dev/null; then echo "Docker command exists" else echo "Container command (Docker/Podman) could not be found!" + exit 1 fi if [ -d "nginx" ]; then @@ -15,6 +16,9 @@ if [ -d "nginx" ]; then echo "Attempting to start nginx container ..." $PROG compose -f docker-compose.yml up -d cd .. +else + echo "Nginx folder does not exist. You must have an Nginx Proxy Manager instance to continue." + exit 1 fi # Check if folder exists From 621e86af7e1ef14a12247356f1ec5e62f73b0602 Mon Sep 17 00:00:00 2001 From: Adam Parler Date: Mon, 18 May 2026 15:34:31 -0400 Subject: [PATCH 25/27] Added Immich configs --- immich/.env | 25 ++++++++++++ immich/docker-compose.yml | 82 +++++++++++++++++++++++++++++++++++++++ setup.sh | 7 ++++ 3 files changed, 114 insertions(+) create mode 100644 immich/.env create mode 100644 immich/docker-compose.yml diff --git a/immich/.env b/immich/.env new file mode 100644 index 0000000..5147887 --- /dev/null +++ b/immich/.env @@ -0,0 +1,25 @@ +# You can find documentation for all the supported env variables at https://docs.immich.app/install/environment-variables + +# The location where your uploaded files are stored +UPLOAD_LOCATION=./library + +# The location where your database files are stored. Network shares are not supported for the database +DB_DATA_LOCATION=./postgres + +# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List +TZ=America/New_York + +# The Immich version to use. You can pin this to a specific version like "v2.1.0" +IMMICH_VERSION=v2.7.5 + +# Prometheus metrics are disabled by default. To enable them, uncomment the next line +IMMICH_TELEMETRY_INCLUDE=all + +# Connection secret for postgres. You should change it to a random password +# Please use only the characters `A-Za-z0-9`, without special characters or spaces +DB_PASSWORD=/run/secrets/db_password + +# The values below this line do not need to be changed +################################################################################### +DB_USERNAME=postgres +DB_DATABASE_NAME=immich diff --git a/immich/docker-compose.yml b/immich/docker-compose.yml new file mode 100644 index 0000000..1ccf6c8 --- /dev/null +++ b/immich/docker-compose.yml @@ -0,0 +1,82 @@ +# +# WARNING: To install Immich, follow our guide: https://docs.immich.app/install/docker-compose +# +# Make sure to use the docker-compose.yml of the current release: +# +# https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml +# +# The compose file on main may not be compatible with the latest release. + +name: immich + +services: + immich-server: + container_name: immich-server + image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release} + # extends: + # file: hwaccel.transcoding.yml + # service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding + volumes: + # Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file + - ${UPLOAD_LOCATION}:/data + - /etc/localtime:/etc/localtime:ro + env_file: + - .env + ports: + - '2283:2283' + depends_on: + - redis + - database + restart: always + healthcheck: + disable: false + + immich-machine-learning: + container_name: immich-machine-learning + # For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag. + # Example tag: ${IMMICH_VERSION:-release}-cuda + image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release} + # extends: # uncomment this section for hardware acceleration - see https://docs.immich.app/features/ml-hardware-acceleration + # file: hwaccel.ml.yml + # service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the `-wsl` version for WSL2 where applicable + volumes: + - model-cache:/cache + env_file: + - .env + restart: always + healthcheck: + disable: false + + redis: + container_name: immich-redis + image: docker.io/valkey/valkey:9@sha256:3b55fbaa0cd93cf0d9d961f405e4dfcc70efe325e2d84da207a0a8e6d8fde4f9 + healthcheck: + test: redis-cli ping || exit 1 + restart: always + + database: + container_name: immich-postgres + image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:bcf63357191b76a916ae5eb93464d65c07511da41e3bf7a8416db519b40b1c23 + environment: + POSTGRES_PASSWORD: ${DB_PASSWORD} + POSTGRES_USER: ${DB_USERNAME} + POSTGRES_DB: ${DB_DATABASE_NAME} + POSTGRES_INITDB_ARGS: '--data-checksums' + # Uncomment the DB_STORAGE_TYPE: 'HDD' var if your database isn't stored on SSDs + # DB_STORAGE_TYPE: 'HDD' + volumes: + # Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file + - ${DB_DATA_LOCATION}:/var/lib/postgresql/data + shm_size: 128mb + restart: always + secrets: + - db_password + healthcheck: + disable: false + +secrets: + db_password: + file: ./secrets/postgres_password.txt + +volumes: + model-cache: diff --git a/setup.sh b/setup.sh index ba7dd94..e28e137 100755 --- a/setup.sh +++ b/setup.sh @@ -29,4 +29,11 @@ if [ -d "forgejo" ]; then cd .. fi +if [ -d "immich" ]; then + cd immich + echo "Attempting to start immich container ..." + $PROG compose -f docker-compose.yml up -d + cd .. +fi + echo "Program finished successfully!" \ No newline at end of file From 2cee1b9d7cc917cabd2fa70c7b1755d3e2337ea2 Mon Sep 17 00:00:00 2001 From: Adam Parler Date: Mon, 18 May 2026 18:02:47 -0400 Subject: [PATCH 26/27] Added resources and health check sections to Docker template --- docker-compose.template | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/docker-compose.template b/docker-compose.template index 9b8476c..38dabaa 100644 --- a/docker-compose.template +++ b/docker-compose.template @@ -15,6 +15,12 @@ services: - stuff secrets: - db_password + deploy: + resources: + limits: + memory: 1000M + healthcheck: + test: command depends_on: - db @@ -24,10 +30,10 @@ services: restart: always environment: - STATUS=running - networks: - - stuff volumes: - ./mysql:/var/lib/mysql + networks: + - stuff secrets: - db_root_password - db_password From 43accc34c053f74b2293908bacdcf5653cd426e5 Mon Sep 17 00:00:00 2001 From: Adam Parler Date: Mon, 18 May 2026 22:47:10 -0400 Subject: [PATCH 27/27] Created Mealie config files --- mealie/docker-compose.yml | 82 +++++++++++++++++++++++++++++++++++++++ setup.sh | 7 ++++ 2 files changed, 89 insertions(+) create mode 100644 mealie/docker-compose.yml diff --git a/mealie/docker-compose.yml b/mealie/docker-compose.yml new file mode 100644 index 0000000..634629b --- /dev/null +++ b/mealie/docker-compose.yml @@ -0,0 +1,82 @@ +services: + mealie: + image: ghcr.io/mealie-recipes/mealie:v3.9.2 + container_name: mealie + restart: always + ports: + - "9925:9000" + environment: + # Set Backend ENV Variables Here + ALLOW_SIGNUP: "false" + PUID: 1000 + PGID: 1000 + TZ: America/New_York + SMTP_HOST: smtp.gmail.com + SMTP_PORT: 587 + SMTP_FROM_NAME: Mealie Help + SMTP_AUTH_STRATEGY: TLS + SMTP_FROM_EMAIL: help@adamhome.io + SMTP_USER_FILE: /run/secrets/smtp-user + SMTP_PASSWORD_FILE: /run/secrets/smtp-password + BASE_URL: https://recipes.adamhome.io + # Database Settings + DB_ENGINE: postgres + POSTGRES_USER_FILE: /run/secrets/db_user + POSTGRES_PASSWORD_FILE: /run/secrets/db_password + POSTGRES_SERVER_FILE: /run/secrets/server + POSTGRES_PORT_FILE: /run/secrets/port + POSTGRES_DB_FILE: /run/secrets/db_name + volumes: + - ./data:/app/data/ + secrets: + - db_name + - db_password + - db_user + - port + - server + - smtp-password + - smtp-user + deploy: + resources: + limits: + memory: 1000M + depends_on: + postgres: + condition: service_healthy + + postgres: + container_name: mealie-postgres + image: docker.io/postgres:17.10 + restart: always + environment: + POSTGRES_PASSWORD_FILE: /run/secrets/db_password + POSTGRES_USER_FILE: /run/secrets/db_user + PGUSER_FILE: /run/secrets/db_user + POSTGRES_DB_FILE: /run/secrets/db_name + volumes: + - ./postgres:/var/lib/postgresql/data + secrets: + - db_name + - db_password + - db_user + healthcheck: + test: ["CMD", "pg_isready"] + interval: 30s + timeout: 20s + retries: 3 + +secrets: + db_name: + file: secrets/db_name.txt + db_password: + file: secrets/db_password.txt + db_user: + file: secrets/db_user.txt + port: + file: secrets/port.txt + server: + file: secrets/server.txt + smtp-password: + file: ./secrets/smtp_password.txt + smtp-user: + file: ./secrets/smtp_user.txt diff --git a/setup.sh b/setup.sh index e28e137..8f70f22 100755 --- a/setup.sh +++ b/setup.sh @@ -36,4 +36,11 @@ if [ -d "immich" ]; then cd .. fi +if [ -d "mealie" ]; then + cd mealie + echo "Attempting to start mealie container ..." + $PROG compose -f docker-compose.yml up -d + cd .. +fi + echo "Program finished successfully!" \ No newline at end of file