diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..f6e7939 --- /dev/null +++ b/install.sh @@ -0,0 +1,194 @@ +#!/bin/bash +# Prompt the user for custom fields + +read -p "Enter your domain for Traefik: " TRAEFIK_DOMAIN +read -p "Enter your email for ACME: " ACME_MAIL + +# Get the list of valid timezones +valid_timezones=$(timedatectl list-timezones) + +# Prompt the user to enter the timezone +read -p "Enter your timezone (e.g. America/Denver): " TZ + +# Check if the entered timezone is valid +while ! echo "$valid_timezones" | grep -q "^$TZ$"; do + echo "Invalid timezone entered." + read -p "Would you like to view the list of valid timezones? (yes/no): " view_list + if [ "$view_list" == "yes" ]; then + echo -e "\n$valid_timezones\n" + fi + read -p "Please enter a valid timezone: " TZ +done + +read -p "Enter HTTP username: " HTTP_USER +echo "Note: Password input will be hidden for security reasons." +read -s -p "Enter HTTP password: " HTTP_PASSWORD +echo + +# Ask user if they want to set unique passwords for each service +read -p "Would you like to set unique passwords for each service? (yes/no): " unique_passwords +echo + +if [ "$unique_passwords" == "yes" ]; then + read -s -p "Enter MySQL root password: " MYSQL_ROOT_PASSWORD + echo + read -p "Enter MySQL database name (e.g. nextcloud): " MYSQL_DATABASE + read -p "Enter MySQL user: " MYSQL_USER + read -s -p "Enter MySQL password: " MYSQL_PASSWORD + echo + read -p "Enter Nextcloud admin user: " NEXTCLOUD_ADMIN_USER + read -s -p "Enter Nextcloud admin password: " NEXTCLOUD_ADMIN_PASSWORD + echo + read -s -p "Enter Portainer admin password: " PORTAINER_ADMIN_PASSWORD + echo + read -s -p "Enter Flood password for Deluge RPC daemon: " FLOOD_PASSWORD + echo + read -s -p "Enter Calibre password: " CALIBRE_PASSWORD + echo + +else + read -s -p "Enter a common password for all services: " common_password + echo + MYSQL_ROOT_PASSWORD=$common_password + MYSQL_DATABASE="nextcloud" + MYSQL_USER="nextcloud" + MYSQL_PASSWORD=$common_password + NEXTCLOUD_ADMIN_USER="admin" + NEXTCLOUD_ADMIN_PASSWORD=$common_password + PORTAINER_ADMIN_PASSWORD=$common_password + FLOOD_PASSWORD=$common_password + CALIBRE_PASSWORD=$common_password +fi + +# Warning for WireGuard setup +echo "Warning: If you would like to set up WireGuard, please ensure you have your private and public keys available." + +read -p "Enter WireGuard endpoint: " WIREGUARD_ENDPOINT +read -p "Enter WireGuard port: " WIREGUARD_PORT +read -p "Enter WireGuard public key: " WIREGUARD_PUBLIC_KEY +read -s -p "Enter WireGuard private key: " WIREGUARD_PRIVATE_KEY +echo + +# Define the content of the .env file using the user's input +env_content=" +CHECK_FOR_OUTDATED_CONFIG=true +DOCKER_COMPOSE_BINARY=\"docker compose\" +TRAEFIK_DOMAIN=${TRAEFIK_DOMAIN} +ACME_MAIL=${ACME_MAIL} +TZ=\"${TZ}\" +HTTP_USER=${HTTP_USER} +HTTP_PASSWORD='${HTTP_PASSWORD}' +HOST_CONFIG_PATH=\"/data/config\" +HOST_MEDIA_PATH=\"/data/torrents\" +DOWNLOAD_SUBFOLDER=\"deluge\" +PGID=1000 +PUID=1000 +MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} +MYSQL_DATABASE=${MYSQL_DATABASE} +MYSQL_USER=${MYSQL_USER} +MYSQL_PASSWORD=${MYSQL_PASSWORD} +NEXTCLOUD_ADMIN_USER=${NEXTCLOUD_ADMIN_USER} +NEXTCLOUD_ADMIN_PASSWORD=${NEXTCLOUD_ADMIN_PASSWORD} +PORTAINER_ADMIN_PASSWORD=${PORTAINER_ADMIN_PASSWORD} +FLOOD_PASSWORD=${FLOOD_PASSWORD} +FLOOD_AUTOCREATE_USER_IN_DELUGE_DAEMON=false +CALIBRE_PASSWORD=${CALIBRE_PASSWORD} +WIREGUARD_ENDPOINT=${WIREGUARD_ENDPOINT} +WIREGUARD_PORT=${WIREGUARD_PORT} +WIREGUARD_PUBLIC_KEY=${WIREGUARD_PUBLIC_KEY} +WIREGUARD_PRIVATE_KEY=${WIREGUARD_PRIVATE_KEY} +WIREGUARD_ADDRESS=10.0.0.1/24 +" + +# Write the content to the .env file in the current directory +echo "$env_content" > .env + +# Output a message indicating that the .env file has been created +echo "The .env file has been created with the specified content." + +# Update the package list and install dependencies +sudo apt update +sudo apt install -y curl jq apt-transport-https ca-certificates curl software-properties-common + +# Install Docker +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - +sudo add-apt-repository -y "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" +sudo apt update +sudo apt install -y docker-ce docker-ce-cli containerd.io + +# Add current user to docker group +sudo usermod -aG docker $USER +echo "User added to docker group. Please log out and log back in for the changes to take effect." + +# Install Docker Compose +COMPOSE_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | jq -r '.tag_name') +if [ -z "$COMPOSE_VERSION" ]; then + echo "Failed to get the latest Docker Compose version. Exiting." + exit 1 +fi + +COMPOSE_URL="https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" +echo "Downloading Docker Compose from $COMPOSE_URL" + +# Download Docker Compose binary and make it executable +sudo curl -L "$COMPOSE_URL" -o /usr/local/bin/docker-compose +if [ $? -ne 0 ]; then + echo "Failed to download Docker Compose. Exiting." + exit 1 +fi + +# Print debug information about the downloaded file +echo "Debug Information:" +ls -l /usr/local/bin/docker-compose +file /usr/local/bin/docker-compose + +# Check if the downloaded file has a non-zero size +if [ ! -s /usr/local/bin/docker-compose ]; then + echo "The downloaded file is empty. Exiting." + sudo rm /usr/local/bin/docker-compose + exit 1 +fi + +# Check if the downloaded file is a binary +if ! file /usr/local/bin/docker-compose | grep -q "executable"; then + echo "The downloaded file is not a valid binary. Exiting." + sudo rm /usr/local/bin/docker-compose + exit 1 +fi + +sudo chmod +x /usr/local/bin/docker-compose +if [ $? -ne 0 ]; then + echo "Failed to make Docker Compose executable. Exiting." + exit 1 +fi + +# Verify the installation +docker-compose --version +if [ $? -ne 0 ]; then + echo "Docker Compose is not correctly installed. Exiting." + exit 1 +fi + +# Install yq using the latest version URL +sudo wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O /usr/bin/yq && sudo chmod +x /usr/bin/yq + +# Download and run the local-persist installation script +LOCAL_PERSIST_INSTALL_SCRIPT_URL="https://raw.githubusercontent.com/MatchbookLab/local-persist/v1.3.0/scripts/install.sh" +curl -fsSL "$LOCAL_PERSIST_INSTALL_SCRIPT_URL" -o local-persist-install.sh +chmod +x local-persist-install.sh +sudo ./local-persist-install.sh + +# Remove the installation script after running it +rm local-persist-install.sh + +# Create necessary directories +sudo mkdir -p /data/config /data/torrents + +# Get the absolute path to the seedbox directory +SEEDBOX_DIR=$(pwd) + +# Run init.sh from the current directory with sudo +sudo bash init.sh + +# Make run-seedbox.sh executable and run it +sudo bash run-seedbox.sh \ No newline at end of file