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/README.md b/README.md index c365481..ad9a87b 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,3 @@ -# Public Server Setup +# Server Configuration for Adam Home Suite of Applications -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. +This repo is the basic setup of the [adamhome.io](adamhome.io) domain \ No newline at end of file diff --git a/create_reverse_proxy.sh b/create_reverse_proxy.sh deleted file mode 100755 index ae39fd6..0000000 --- a/create_reverse_proxy.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/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 new file mode 100644 index 0000000..38dabaa --- /dev/null +++ b/docker-compose.template @@ -0,0 +1,52 @@ +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 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/gitlab/docker-compose.yml b/gitlab/docker-compose.yml deleted file mode 100644 index 9e27471..0000000 --- a/gitlab/docker-compose.yml +++ /dev/null @@ -1,34 +0,0 @@ -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 deleted file mode 100755 index 29c6c54..0000000 --- a/gitlab/gitlab_install.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/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 deleted file mode 100644 index 821a742..0000000 --- a/handbrake/docker-compose.yml +++ /dev/null @@ -1,17 +0,0 @@ -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 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/jupyter/jupyterhub_install.sh b/jupyter/jupyterhub_install.sh deleted file mode 100755 index a90717e..0000000 --- a/jupyter/jupyterhub_install.sh +++ /dev/null @@ -1,79 +0,0 @@ -#!/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 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/minecraft/docker-compose.yml b/minecraft/docker-compose.yml deleted file mode 100644 index 5fb502f..0000000 --- a/minecraft/docker-compose.yml +++ /dev/null @@ -1,15 +0,0 @@ -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 deleted file mode 100755 index 3e2dd5e..0000000 --- a/minecraft/mineos_install.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/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 deleted file mode 100644 index c53ba02..0000000 --- a/netboot_xyz/docker-compose.yml +++ /dev/null @@ -1,20 +0,0 @@ -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 deleted file mode 100644 index d43eb0e..0000000 --- a/netboot_xyz/netbootxyz_install.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/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 deleted file mode 100644 index f52947a..0000000 --- a/nextcloud/docker-compose.yml +++ /dev/null @@ -1,19 +0,0 @@ -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 deleted file mode 100755 index 8d9b2b7..0000000 --- a/nextcloud/nextcloud_install.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/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 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/plex/docker-compose.yml b/plex/docker-compose.yml deleted file mode 100644 index 8ac58ac..0000000 --- a/plex/docker-compose.yml +++ /dev/null @@ -1,27 +0,0 @@ -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 deleted file mode 100644 index 4cbe197..0000000 --- a/plex/plex_install.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/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 deleted file mode 100644 index 857587b..0000000 --- a/portainer/docker-compose.yml +++ /dev/null @@ -1,15 +0,0 @@ -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 deleted file mode 100644 index 39d55ad..0000000 --- a/pre_setup.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/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 deleted file mode 100755 index 248fb04..0000000 --- a/reverse_proxy.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -deb http://nginx.org/packages/mainline/ubuntu/ CODENAME nginx diff --git a/setup.sh b/setup.sh new file mode 100755 index 0000000..8f70f22 --- /dev/null +++ b/setup.sh @@ -0,0 +1,46 @@ +#!/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 deleted file mode 100755 index 3e03306..0000000 --- a/setup_server.sh +++ /dev/null @@ -1,82 +0,0 @@ -#!/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!" - - - - - - - - - -########################################### - - - - -