Compare commits

...

No commits in common. "main" and "compose" have entirely different histories.

27 changed files with 612 additions and 488 deletions

1
.gitignore vendored
View file

@ -1 +0,0 @@
*/secrets/*

View file

@ -1,3 +1,5 @@
# Server Configuration for Adam Home Suite of Applications
# Public Server Setup
This repo is the basic setup of the [adamhome.io](adamhome.io) domain
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.

60
create_reverse_proxy.sh Executable file
View file

@ -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

View file

@ -1,52 +0,0 @@
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
deploy:
resources:
limits:
memory: 1000M
healthcheck:
test: command
depends_on:
- db
db:
image: image:1.0.0
container_name: image-db
restart: always
environment:
- STATUS=running
volumes:
- ./mysql:/var/lib/mysql
networks:
- stuff
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:

View file

@ -1,96 +0,0 @@
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]

View file

@ -1,53 +0,0 @@
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

34
gitlab/docker-compose.yml Normal file
View file

@ -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

60
gitlab/gitlab_install.sh Executable file
View file

@ -0,0 +1,60 @@
#!/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 GitLab ..."
GITLAB_HOME=${ZFS_DIR}/gitlab
GITLAB_ADDRESS=gitlab.adamhome.dev
GITLAB_EXTERN_HTTPS=14443
GITLAB_EXTERN_HTTP=14080
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 \
--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"

View file

@ -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

View file

@ -1,25 +0,0 @@
# 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

View file

@ -1,82 +0,0 @@
#
# 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:

79
jupyter/jupyterhub_install.sh Executable file
View file

@ -0,0 +1,79 @@
#!/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
## 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
echo "Installing JupyterHub ..."
# 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 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
## Add conda to sudo path
# sudo nano /etc/sudoers # append to secure_path (without variables) ${TLJH_INSTALL_PREFIX}/user/bin
echo "Successfully installed JupyterHub"

View file

@ -1,82 +0,0 @@
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

View file

@ -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

28
minecraft/mineos_install.sh Executable file
View file

@ -0,0 +1,28 @@
#!/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 ${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"

View file

@ -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

View file

@ -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"

View file

@ -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

58
nextcloud/nextcloud_install.sh Executable file
View file

@ -0,0 +1,58 @@
#!/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 [ -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
let "SYS_MEM = $SYS_MEM / 2"
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 -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
# --publish ${NEXTCLD_EXTERN_HTTP}:80 \
# --publish ${NEXTCLD_EXTERN_HTTPS}:8443 \
echo "Successfully installed Nextcloud AIO"

View file

@ -1,49 +0,0 @@
services:
nginx:
image: 'jc21/nginx-proxy-manager:2.11.3'
container_name: nginx-proxy
restart: unless-stopped
ports:
# These ports are in format <host-port>:<container-port>
- '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

27
plex/docker-compose.yml Normal file
View file

@ -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

30
plex/plex_install.sh Normal file
View file

@ -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"

View file

@ -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

24
pre_setup.sh Normal file
View file

@ -0,0 +1,24 @@
#!/bin/bash
apt update
## Setup ZFS
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
apt update
apt install dpkg-dev linux-headers-generic linux-image-generic
apt install zfs-dkms zfsutils-linux zfs-auto-snapshot
## Create ZFS Pool
mkdir -p ${ZFS_DIR}
zpool create -m ${ZFS_DIR} tank raidz <disk1> <disk2> <disk3> ...
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

3
reverse_proxy.sh Executable file
View file

@ -0,0 +1,3 @@
#!/bin/bash
deb http://nginx.org/packages/mainline/ubuntu/ CODENAME nginx

View file

@ -1,46 +0,0 @@
#!/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!"
exit 1
fi
if [ -d "nginx" ]; then
cd nginx
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
if [ -d "forgejo" ]; then
cd forgejo
echo "Attempting to start forgejo container ..."
$PROG compose -f docker-compose.yml up -d
cd ..
fi
if [ -d "immich" ]; then
cd immich
echo "Attempting to start immich container ..."
$PROG compose -f docker-compose.yml up -d
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!"

82
setup_server.sh Executable file
View file

@ -0,0 +1,82 @@
#!/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
./gitlab_install.sh
./jupyterhub_install.sh
./mineos_install.sh
./netbootxyz_install.sh
./nextcloud_install.sh
./plex_install.sh
echo "Setup Complete!"
###########################################