diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 46ed454..0000000 --- a/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*/secrets/* \ No newline at end of file diff --git a/README.md b/README.md index ad9a87b..c365481 100644 --- a/README.md +++ b/README.md @@ -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 \ No newline at end of file +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. 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/docker-compose.template b/docker-compose.template deleted file mode 100644 index 38dabaa..0000000 --- a/docker-compose.template +++ /dev/null @@ -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: \ No newline at end of file diff --git a/forgejo/data/gitea/conf/app.ini b/forgejo/data/gitea/conf/app.ini deleted file mode 100644 index 433178f..0000000 --- a/forgejo/data/gitea/conf/app.ini +++ /dev/null @@ -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] diff --git a/forgejo/docker-compose.yml b/forgejo/docker-compose.yml deleted file mode 100644 index 0cb7ee7..0000000 --- a/forgejo/docker-compose.yml +++ /dev/null @@ -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 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/gitlab_install.sh b/gitlab/gitlab_install.sh new file mode 100755 index 0000000..29c6c54 --- /dev/null +++ b/gitlab/gitlab_install.sh @@ -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" + + + + + + 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 + + + + diff --git a/immich/.env b/immich/.env deleted file mode 100644 index 5147887..0000000 --- a/immich/.env +++ /dev/null @@ -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 diff --git a/immich/docker-compose.yml b/immich/docker-compose.yml deleted file mode 100644 index 1ccf6c8..0000000 --- a/immich/docker-compose.yml +++ /dev/null @@ -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: diff --git a/jupyter/jupyterhub_install.sh b/jupyter/jupyterhub_install.sh new file mode 100755 index 0000000..a90717e --- /dev/null +++ b/jupyter/jupyterhub_install.sh @@ -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" \ No newline at end of file diff --git a/mealie/docker-compose.yml b/mealie/docker-compose.yml deleted file mode 100644 index 634629b..0000000 --- a/mealie/docker-compose.yml +++ /dev/null @@ -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 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/minecraft/mineos_install.sh b/minecraft/mineos_install.sh new file mode 100755 index 0000000..3e2dd5e --- /dev/null +++ b/minecraft/mineos_install.sh @@ -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" + + + 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/netboot_xyz/netbootxyz_install.sh b/netboot_xyz/netbootxyz_install.sh new file mode 100644 index 0000000..d43eb0e --- /dev/null +++ b/netboot_xyz/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/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/nextcloud_install.sh b/nextcloud/nextcloud_install.sh new file mode 100755 index 0000000..8d9b2b7 --- /dev/null +++ b/nextcloud/nextcloud_install.sh @@ -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" diff --git a/nginx/docker-compose.yml b/nginx/docker-compose.yml deleted file mode 100644 index 27c7edc..0000000 --- a/nginx/docker-compose.yml +++ /dev/null @@ -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 : - - '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/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/plex_install.sh b/plex/plex_install.sh new file mode 100644 index 0000000..4cbe197 --- /dev/null +++ b/plex/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/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 diff --git a/pre_setup.sh b/pre_setup.sh new file mode 100644 index 0000000..39d55ad --- /dev/null +++ b/pre_setup.sh @@ -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 ... + +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/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 diff --git a/setup.sh b/setup.sh deleted file mode 100755 index 8f70f22..0000000 --- a/setup.sh +++ /dev/null @@ -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!" \ No newline at end of file diff --git a/setup_server.sh b/setup_server.sh new file mode 100755 index 0000000..3e03306 --- /dev/null +++ b/setup_server.sh @@ -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!" + + + + + + + + + +########################################### + + + + +