From 2bd83096a85158189984f6d55645c13be54e91e6 Mon Sep 17 00:00:00 2001 From: Nick Yeoman Date: Sun, 21 Jul 2024 17:52:33 -0700 Subject: [PATCH] docker extend build bash script working --- _helper/debug.sh | 7 ++ _helper/dirs.sh | 34 +++++++++ _helper/dockercompose.sh | 30 ++++++++ _helper/env.sh | 102 +++++++++++++++++++++++++ _helper/footer.sh | 9 +++ _helper/gitignore.sh | 22 ++++++ _helper/header.sh | 7 ++ _helper/precheck.sh | 25 ++++++ _helper/project-create.sh | 43 +++++++++++ _helper/project-name.sh | 13 ++++ _helper/project-path.sh | 19 +++++ _helper/readme.sh | 50 ++++++++++++ _helper/select-containers.sh | 21 +++++ helper.bash | 84 ++++++++++++++++++++ nginx-proxy-manager/README.md | 13 ++-- nginx-proxy-manager/docker-compose.yml | 4 +- nginx-proxy-manager/sample-extends.yml | 9 +++ nginx-proxy-manager/sample.env | 5 ++ phpcontainer/docker-compose.yml | 2 +- portainer/README.md | 7 +- portainer/env-sample | 7 -- portainer/sample-extends.yml | 20 +++++ portainer/sample.env | 6 ++ stashapp/README.md | 10 +-- stashapp/sample-extends.yml | 11 +++ stashapp/sample.env | 13 ++++ streama/Dockerfile | 15 ---- streama/docker-compose.yml | 31 -------- streama/env-sample | 8 -- streama/nginx/Dockerfile | 3 - streama/nginx/nginx.conf | 35 --------- traefik/docker-compose.yml | 58 -------------- traefik/env-sample | 13 ---- 33 files changed, 547 insertions(+), 189 deletions(-) create mode 100644 _helper/debug.sh create mode 100644 _helper/dirs.sh create mode 100644 _helper/dockercompose.sh create mode 100644 _helper/env.sh create mode 100644 _helper/footer.sh create mode 100644 _helper/gitignore.sh create mode 100644 _helper/header.sh create mode 100644 _helper/precheck.sh create mode 100644 _helper/project-create.sh create mode 100644 _helper/project-name.sh create mode 100644 _helper/project-path.sh create mode 100644 _helper/readme.sh create mode 100644 _helper/select-containers.sh create mode 100644 helper.bash create mode 100644 nginx-proxy-manager/sample-extends.yml create mode 100644 nginx-proxy-manager/sample.env delete mode 100644 portainer/env-sample create mode 100644 portainer/sample-extends.yml create mode 100644 portainer/sample.env create mode 100644 stashapp/sample-extends.yml create mode 100644 stashapp/sample.env delete mode 100644 streama/Dockerfile delete mode 100644 streama/docker-compose.yml delete mode 100644 streama/env-sample delete mode 100644 streama/nginx/Dockerfile delete mode 100644 streama/nginx/nginx.conf delete mode 100644 traefik/docker-compose.yml delete mode 100644 traefik/env-sample diff --git a/_helper/debug.sh b/_helper/debug.sh new file mode 100644 index 0000000..c539f05 --- /dev/null +++ b/_helper/debug.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +debug_print_helper_variables() { + for var in $(compgen -v | grep '^HLPR_'); do + echo "$var=${!var}" + done +} \ No newline at end of file diff --git a/_helper/dirs.sh b/_helper/dirs.sh new file mode 100644 index 0000000..d7596ab --- /dev/null +++ b/_helper/dirs.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +# Function to create directories based on volumes in docker-compose files +create_dirs() { + local project_path="$1" + local selected_dirs="$2" + local cookbook_dir="$3" + + local data_dir="$project_path/data" + + # Loop through selected directories + for dir in $selected_dirs; do + local compose_file="$cookbook_dir/$dir/docker-compose.yml" + + # Check if the docker-compose file exists + if [ -f "$compose_file" ]; then + # Loop through each line in the file + while IFS= read -r line; do + trimmed_line=$(echo "$line" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//') + # Check if the line starts with a dash + if [[ $trimmed_line =~ ^- ]]; then + if [[ $trimmed_line =~ VOL_PATH ]]; then + extracted=$(echo "$trimmed_line" | sed -n 's/.*\${VOL_PATH:-[^}]*}\([^:]*\):.*/\1/p' | sed 's/^\/\+//') + # Echo the line if it starts with a dash + mkdir -p $project_path/data/${extracted} + fi + fi + done < "$compose_file" + + else + echo "Warning: No docker-compose.yml found in $dir" + fi + done +} diff --git a/_helper/dockercompose.sh b/_helper/dockercompose.sh new file mode 100644 index 0000000..8d900d6 --- /dev/null +++ b/_helper/dockercompose.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +# Function to create a new docker-compose file using extends +create_dockercompose() { + local project_path="$1" + local selected_dirs="$2" + local script_dir="$3" # Directory where helper.bash is located + + # Initialize the new docker-compose file + local new_compose_file="$project_path/docker-compose.yml" + + # Write the initial part of the docker-compose file + echo "version: '3.4'" > "$new_compose_file" + echo "" >> "$new_compose_file" + echo "services:" >> "$new_compose_file" + + # Loop through selected directories + for dir in $selected_dirs; do + local sample_file="$script_dir/$dir/sample-extends.yml" + + if [ -f "$sample_file" ]; then + # Extract services section from the sample file and append it + awk '/^services:/{flag=1; next}/^$/{flag=0}flag' "$sample_file" >> "$new_compose_file" + echo "" >> "$new_compose_file" # Add a newline after each file's content + else + echo "Warning: Create an issue: No sample-extends.yml found in $dir" + cp $script_dir/$dir/docker-compose.yml $new_compose_file + fi + done +} diff --git a/_helper/env.sh b/_helper/env.sh new file mode 100644 index 0000000..ccb50dd --- /dev/null +++ b/_helper/env.sh @@ -0,0 +1,102 @@ +#!/bin/bash + +process_help_comments() { + local input_file="$1" + local output_file="$2" + local project_path="$3" + local cookbook_dir="$4" + + local temp_file=$(mktemp) + + while IFS= read -r line; do + # Handle headings (keep headings and process below lines) + if [[ "$line" =~ ^# ]]; then + echo "$line" >> "$temp_file" + elif [[ "$line" =~ ^([^=]+)= ]]; then + local var_name="${BASH_REMATCH[1]}" + local var_value="${line#*=}" + var_value=$(echo "$var_value" | sed 's/\s*#HELP:.*$//') + + # Process #HELP comments + if [[ "$line" =~ \#HELP:\ project_path ]]; then + var_value="$HLPR_PROJECTPATH" + elif [[ "$line" =~ \#HELP:\ volpath ]]; then + var_value="$HLPR_PROJECTPATH/data" + elif [[ "$line" =~ \#HELP:\ cookbooks ]]; then + var_value="$HLPR_COOKBOOKDIR" + elif [[ "$line" =~ \#HELP:\ gen32 ]]; then + var_value=$(pwgen -cnsB1v 32) + fi + + # Add the processed variable to the temp file + echo "${var_name}=${var_value}" >> "$temp_file" + else + # If the line doesn't match a variable, just echo it + echo "$line" >> "$temp_file" + fi + done < "$input_file" + + # Call remove_duplicate_variables to process temp_file and write to output_file + cat "$temp_file" >> $output_file + rm "$temp_file" +} + +remove_duplicate_variables() { + local input_file="$1" + local temp_file=$(mktemp) + declare -A seen_keys + + while IFS= read -r line; do + + # Skip lines that start with # or are blank + if [[ ! $line =~ ^# ]] && [[ -n $line ]]; then + # Extract the part before the equals sign + key=$(echo "$line" | awk -F '=' '{print $1}') + + # Check if the key has already been seen + if [[ -z "${seen_keys[$key]}" ]]; then + # Mark the key as seen + seen_keys[$key]=1 + # Output the key + echo "$line" >> "$temp_file" + fi + else + echo "$line" >> "$temp_file" + fi + done < "$input_file" + + # Replace the original file with the deduplicated version + mv "$temp_file" "$input_file" +} + +# Function to create .env file +create_env() { + local project_path="$1" + local selected_dirs="$2" + local cookbook_dir="$3" + local new_env_file="$project_path/.env" + local current_date=$(date) + local git_user=$(git config --get user.name) + if [[ -z "$git_user" ]]; then + local git_user=$USER + fi + + # Create the file + touch $new_env_file + echo "# Auto Generated env file on $current_date by $git_user" >> "$new_env_file" + + # Loop through selected directories and process sample.env files + for dir in $selected_dirs; do + local sample_file="$cookbook_dir/$dir/sample.env" + + if [ -f "$sample_file" ]; then + process_help_comments "$sample_file" "$new_env_file" "$project_path" "$cookbook_dir" + else + echo "Warning: Create an issue: No sample.env found in $dir" >&2 + echo "#No Sample File found, raise a bug" >> "$new_env_file" + fi + done + + remove_duplicate_variables "$new_env_file" + +} diff --git a/_helper/footer.sh b/_helper/footer.sh new file mode 100644 index 0000000..150e28e --- /dev/null +++ b/_helper/footer.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +function display_footer() { + echo "======================================" + echo "All Done" + echo "Created Project: $HLPR_PROJECTNAME in $HLPR_PROJECTDIR" + echo "With the following containers:" + echo $HLPR_CONTAINERS +} \ No newline at end of file diff --git a/_helper/gitignore.sh b/_helper/gitignore.sh new file mode 100644 index 0000000..b3cb27a --- /dev/null +++ b/_helper/gitignore.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +# Function to create a .gitignore file with standard ignores +create_gitignore() { + local project_path="$1" + local gitignore_path="$project_path/.gitignore" + + # Create the .gitignore file + cat < "$gitignore_path" +data/ +logs/ +*.log +.vscode/ +.idea/ +*.suo +*.ntvs* +*.njsproj +*.sln +.DS_Store +Thumbs.db +EOL +} diff --git a/_helper/header.sh b/_helper/header.sh new file mode 100644 index 0000000..c4200b9 --- /dev/null +++ b/_helper/header.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +function display_header() { + echo "======================================" + echo " Docker Compose Project Setup Wizard" + echo "======================================" +} diff --git a/_helper/precheck.sh b/_helper/precheck.sh new file mode 100644 index 0000000..9cc67de --- /dev/null +++ b/_helper/precheck.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +# Function to check if fzf is installed and provide installation instructions if not +check_fzf() { + if ! command -v fzf &> /dev/null; then + echo "fzf is not installed." + echo "To install fzf:" + echo " - Fedora: sudo dnf install fzf" + echo " - Arch: sudo pacman -S fzf" + echo " - Debian: sudo apt install fzf" + exit 1 + fi +} + +# Function to check if pwgen is installed and provide installation instructions if not +check_pwgen() { + if ! command -v pwgen &> /dev/null; then + echo "pwgen is not installed." + echo "To install pwgen:" + echo " - Fedora: sudo dnf install pwgen" + echo " - Arch: sudo pacman -S pwgen" + echo " - Debian: sudo apt install pwgen" + exit 1 + fi +} \ No newline at end of file diff --git a/_helper/project-create.sh b/_helper/project-create.sh new file mode 100644 index 0000000..0502791 --- /dev/null +++ b/_helper/project-create.sh @@ -0,0 +1,43 @@ +#!/bin/bash + +# Function to check if the project directory already exists +check_project() { + local path="$1" + if [ -d "$path" ]; then + echo "Error: Directory '$path' already exists." + return 1 + fi + return 0 +} + +# Function to create the project directory +create_project() { + local path="$1" + mkdir -p "$path" + if [ $? -ne 0 ]; then + echo "Error: Failed to create directory '$path'. Exiting." + exit 1 + fi +} + +# Function to handle the project directory creation process +handle_project_creation() { + local project_path="$1" + local project_name="$2" + + while true; do + check_project "$HLPR_PROJECTDIR" + if [ $? -eq 0 ]; then + create_project "$HLPR_PROJECTDIR" + break + else + read -p "Please enter a new directory path (must not exist): " new_project_path + if [ -z "$new_project_path" ]; then + echo "Error: Path cannot be empty. Exiting." + exit 1 + fi + project_path="$new_project_path" + HLPR_PROJECTDIR="$project_path/$project_name" + fi + done +} diff --git a/_helper/project-name.sh b/_helper/project-name.sh new file mode 100644 index 0000000..923fc14 --- /dev/null +++ b/_helper/project-name.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +# Function to get user input for project name +get_project_name() { + while true; do + read -p "Enter project name (usually the domain name, like www-example-com): " HLPR_PROJECTNAME + if [[ "$HLPR_PROJECTNAME" =~ ^[a-zA-Z0-9-]+$ ]]; then + break + else + echo "Invalid project name. Please use only letters, numbers, and dashes. No spaces allowed." + fi + done +} diff --git a/_helper/project-path.sh b/_helper/project-path.sh new file mode 100644 index 0000000..4fd45b1 --- /dev/null +++ b/_helper/project-path.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# Function to display directories using fzf with enhanced parameters +select_directory_with_fzf() { + # Find all directories under the user's home directory, excluding dot directories and suppressing permission errors + local fzf_input=$(find "$HOME" -type d -not -path '*/\.*' 2>/dev/null | while read -r dir; do [ -r "$dir" ] && echo "$dir"; done) + + # Use fzf with enhanced parameters for better usability + selected_path=$(echo "$fzf_input" | fzf --height 40% --layout=reverse --border --preview 'echo {} | xargs -I % du -sh % 2>/dev/null' --preview-window=up:30% --prompt="Select a directory: ") + + # Handle the case where no directory was selected + if [ -z "$selected_path" ]; then + echo "No directory selected. Exiting." + exit 1 + fi + + # Output the selected path + HLPR_PROJECTPATH="$selected_path" +} diff --git a/_helper/readme.sh b/_helper/readme.sh new file mode 100644 index 0000000..3e9c61f --- /dev/null +++ b/_helper/readme.sh @@ -0,0 +1,50 @@ +#!/bin/bash + +# Function to create a README.md file +create_readme() { + local project_path="$1" + local project_name="$2" + local selected_dirs="$3" + local readme_path="$project_path/README.md" + local current_date=$(date +"%Y-%m-%d") + + # Retrieve the full name from the global Git config + local git_name=$(git config --global user.name) + if [ -z "$git_name" ]; then + echo 'WARNING: Set your git username: git config --global user.name "Your Name"' + git_name="$USER" + fi + + # Create the README.md file + cat < "$readme_path" +# $project_name + +Project created on $current_date by $git_name + +## Description + +A brief description of your project goes here. + +## Project Structure + +This project includes the following containers: + +EOL + + # Add the selected directories to the README + if [ -n "$selected_dirs" ]; then + echo "$selected_dirs" | while read -r dir; do + echo "- $(basename "$dir")" >> "$readme_path" + done + else + echo "No containers selected." >> "$readme_path" + fi + + cat <> "$readme_path" + +## Usage + +podman-compose up -d + +EOL +} diff --git a/_helper/select-containers.sh b/_helper/select-containers.sh new file mode 100644 index 0000000..0145ed7 --- /dev/null +++ b/_helper/select-containers.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +# Function to list all directories in the same directory as the helper script and allow the user to select multiple directories +select_directories() { + # Get the directory where this script is located + local script_dir=$(dirname "$(realpath "$0")") + + # Find all directories in the same directory as the helper script and get their basenames, excluding those starting with an underscore + local dir_list=$(find "$script_dir" -maxdepth 1 -type d -not -path '*/\.*' -not -path "$script_dir" -not -name '_*' | xargs -I {} basename {}) + + # Use fzf to allow the user to select multiple directories with checkboxes + local selected_dirs=$(echo "$dir_list" | fzf --multi --height 40% --layout=reverse --border --prompt="Select directories (TAB to toggle, ENTER to confirm): " --bind 'tab:toggle+down') + + # Handle the case where no directory was selected + if [ -z "$selected_dirs" ]; then + echo "No directories selected. Exiting." + exit 1 + fi + + HLPR_CONTAINERS="$selected_dirs" +} \ No newline at end of file diff --git a/helper.bash b/helper.bash new file mode 100644 index 0000000..455b0dc --- /dev/null +++ b/helper.bash @@ -0,0 +1,84 @@ +#!/bin/bash + +HLPR_COOKBOOKDIR="$(dirname "$(realpath "$BASH_SOURCE")")" +HLPR_PROJECTNAME='NEW_PROJECT' +HLPR_PROJECTPATH=$HOME +HLPR_PROJECTDIR="$HLPR_PROJECTPATH/$HLPR_PROJECTNAME" +HLPR_CONTAINERS='' + +#source ./_helper/debug.sh +# debug_print_helper_variables + +################################################ +# Pre Check +################################################ +source ./_helper/precheck.sh +check_fzf +check_pwgen + +################################################ +# Display Header +################################################ +source ./_helper/header.sh +display_header + +################################################ +# Get Project Name +################################################ +source ./_helper/project-name.sh +get_project_name + +################################################ +# Get Project Path +################################################ +source ./_helper/project-path.sh +select_directory_with_fzf +HLPR_PROJECTDIR="$HLPR_PROJECTPATH/$HLPR_PROJECTNAME" + +################################################ +# Select containers +################################################ +source ./_helper/select-containers.sh +select_directories + +################################################ +# Create Project Directory +################################################ +source ./_helper/project-create.sh +handle_project_creation "$HLPR_PROJECTPATH" "$HLPR_PROJECTNAME" + +################################################ +# Create a .gitignore +################################################ +source ./_helper/gitignore.sh +create_gitignore "$HLPR_PROJECTDIR" + +################################################ +# Create a README.md +################################################ +source ./_helper/readme.sh +create_readme "$HLPR_PROJECTDIR" "$HLPR_PROJECTNAME" "$HLPR_CONTAINERS" + +################################################ +# Create docker-compose +################################################ +source ./_helper/dockercompose.sh +create_dockercompose "$HLPR_PROJECTDIR" "$HLPR_CONTAINERS" "$HLPR_COOKBOOKDIR" + +################################################ +# Create env +################################################ +source ./_helper/env.sh +create_env "$HLPR_PROJECTDIR" "$HLPR_CONTAINERS" "$HLPR_COOKBOOKDIR" + +################################################ +# Create directories +################################################ +source ./_helper/dirs.sh +create_dirs "$HLPR_PROJECTDIR" "$HLPR_CONTAINERS" "$HLPR_COOKBOOKDIR" + +################################################ +# Display Footer +################################################ +source ./_helper/footer.sh +display_footer \ No newline at end of file diff --git a/nginx-proxy-manager/README.md b/nginx-proxy-manager/README.md index 7ba1d8a..8445af2 100644 --- a/nginx-proxy-manager/README.md +++ b/nginx-proxy-manager/README.md @@ -21,14 +21,7 @@ docker network create proxy ## Project Setup -```yaml -proxy: - extends: - file: ${COOKBOOK}/nginx-proxy-manager/docker-compose.yml - service: proxy - env_file: - - .env -``` +See sample-extends.yml ### Create volumes ```bash @@ -38,6 +31,10 @@ mkdir -p data/proxy data/proxy-letsencrypt ### env file ```text +# Nginx Proxy Manager +PRODDIR=/var/www/stashdomain-com/ #HELP: project_path +VOL_PATH=/docker/vol/portainer-data #HELP: volpath +COOKBOOK=/home/user/git/docker-compose-cookbooks #HELP: cookbooks PROXY_IMAGE=jc21/nginx-proxy-manager:2.11.3 ``` diff --git a/nginx-proxy-manager/docker-compose.yml b/nginx-proxy-manager/docker-compose.yml index d2bf0d2..e3d84f4 100644 --- a/nginx-proxy-manager/docker-compose.yml +++ b/nginx-proxy-manager/docker-compose.yml @@ -12,7 +12,7 @@ services: - "81:81" - "443:443" volumes: - - "./data/proxy:/data" - - "./data/proxy-letsencrypt:/etc/letsencrypt" + - "${VOL_PATH:-./data/proxy}/proxy-data:/data" + - "${VOL_PATH:-./data/proxy-letsencrypt}/proxy-letsencrypt:/etc/letsencrypt" networks: - proxy diff --git a/nginx-proxy-manager/sample-extends.yml b/nginx-proxy-manager/sample-extends.yml new file mode 100644 index 0000000..cbb79a8 --- /dev/null +++ b/nginx-proxy-manager/sample-extends.yml @@ -0,0 +1,9 @@ +version: '3.4' + +services: + proxy: + extends: + file: ${COOKBOOK}/nginx-proxy-manager/docker-compose.yml + service: proxy + env_file: + - .env \ No newline at end of file diff --git a/nginx-proxy-manager/sample.env b/nginx-proxy-manager/sample.env new file mode 100644 index 0000000..6acd0ba --- /dev/null +++ b/nginx-proxy-manager/sample.env @@ -0,0 +1,5 @@ +# Nginx Proxy Manager +PRODDIR=/var/www/stashdomain-com/ #HELP: project_path +VOL_PATH=/docker/vol/portainer-data #HELP: volpath +COOKBOOK=/home/user/git/docker-compose-cookbooks #HELP: cookbooks +PROXY_IMAGE=jc21/nginx-proxy-manager:2.11.3 \ No newline at end of file diff --git a/phpcontainer/docker-compose.yml b/phpcontainer/docker-compose.yml index 0ec632b..a42b893 100644 --- a/phpcontainer/docker-compose.yml +++ b/phpcontainer/docker-compose.yml @@ -8,4 +8,4 @@ services: restart: always volumes: - "${VOL_PATH:-./data}/website:/data" - - "${VOL_PATH:-./config}/php.ini:/usr/local/etc/php/php.ini" + - "./config/php.ini:/usr/local/etc/php/php.ini" diff --git a/portainer/README.md b/portainer/README.md index 7da2319..18ed6dc 100644 --- a/portainer/README.md +++ b/portainer/README.md @@ -14,11 +14,12 @@ Create a private network for portainer: ```sudo podman network create portainer- You must set an agent secret ```openssl rand -base64 32``` ``` +# Portainer PORTAINER_IMAGE=portainer/portainer-ce:latest PORTAINER_AGENT_IMAGE=portainer/agent:latest -AGENT_SECRET=01234567890132456789012345678912 -VOL_PATH=/docker/vol/portainer-data -COOKBOOK=/home/user/git/docker-compose-cookbooks +AGENT_SECRET=01234567890132456789012345678912 #HELP: gen32 +VOL_PATH=/docker/vol/portainer-data #HELP: volpath +COOKBOOK=/home/user/git/docker-compose-cookbooks #HELP: cookbooks ``` ### Docker Compose Extend diff --git a/portainer/env-sample b/portainer/env-sample deleted file mode 100644 index 0cb175d..0000000 --- a/portainer/env-sample +++ /dev/null @@ -1,7 +0,0 @@ -# Domains & Project -PORTAINER_DOMAIN_NAME=portainer.nickyeoman.com - -# Software versions - -# https://hub.docker.com/r/portainer/portainer -PORTAINER_V=1.24.0 diff --git a/portainer/sample-extends.yml b/portainer/sample-extends.yml new file mode 100644 index 0000000..11db530 --- /dev/null +++ b/portainer/sample-extends.yml @@ -0,0 +1,20 @@ +version: '3.4' + +networks: + portainer-net: + external: true + +services: + portainer-agent: + extends: + file: ${COOKBOOK}/portainer/docker-compose.yml + service: portainer-agent + env_file: + - .env + + portainer: + extends: + file: ${COOKBOOK}/portainer/docker-compose.yml + service: portainer + env_file: + - .env \ No newline at end of file diff --git a/portainer/sample.env b/portainer/sample.env new file mode 100644 index 0000000..28740be --- /dev/null +++ b/portainer/sample.env @@ -0,0 +1,6 @@ +# Portainer +PORTAINER_IMAGE=portainer/portainer-ce:latest +PORTAINER_AGENT_IMAGE=portainer/agent:latest +AGENT_SECRET=01234567890132456789012345678912 #HELP: gen32 +VOL_PATH=/docker/vol/portainer-data #HELP: volpath +COOKBOOK=/home/user/git/docker-compose-cookbooks #HELP: cookbooks \ No newline at end of file diff --git a/stashapp/README.md b/stashapp/README.md index b24fd95..e1d2489 100644 --- a/stashapp/README.md +++ b/stashapp/README.md @@ -22,14 +22,14 @@ Note this setup is meant to be used between two directories, COOKBOOK and PROJEC In your PROJECT directory set the following env file: ```text -# Local +# Stash App PROD=prod.domain.com -PRODDIR=/var/www/stashdomain-com/ -COOKBOOK=/home/user/git/docker-compose-cookbooks -VOL_PATH=/project-dir/project-name/data +PRODDIR=/var/www/stashdomain-com/ #HELP: project_path +COOKBOOK=/home/user/git/docker-compose-cookbooks #HELP: cookbooks +VOL_PATH=/project-dir/project-name/data #HELP: volpath STASH_IMAGE=stashapp/stash:v0.26.2 -# Container +# Stash Container STASH_DOMAIN_NAME=stash.4lt.ca MAX_SIZE=200m STASH_STASH=/data/ diff --git a/stashapp/sample-extends.yml b/stashapp/sample-extends.yml new file mode 100644 index 0000000..894516d --- /dev/null +++ b/stashapp/sample-extends.yml @@ -0,0 +1,11 @@ +version: '3.4' + +services: + stash: + extends: + file: ${COOKBOOK}/stashapp/docker-compose.yml + service: stash + env_file: + - .env + ports: + - "9999:9999" \ No newline at end of file diff --git a/stashapp/sample.env b/stashapp/sample.env new file mode 100644 index 0000000..79b27db --- /dev/null +++ b/stashapp/sample.env @@ -0,0 +1,13 @@ +# Stash App +PROD=prod.domain.com +PRODDIR=/var/www/stashdomain-com/ #HELP: project_path +COOKBOOK=/home/user/git/docker-compose-cookbooks #HELP: cookbooks +VOL_PATH=/project-dir/project-name/data #HELP: volpath +STASH_IMAGE=stashapp/stash:v0.26.2 +# Stash Container +STASH_DOMAIN_NAME=stash.4lt.ca +MAX_SIZE=200m +STASH_STASH=/data/ +STASH_GENERATED=/generated/ +STASH_METADATA=/metadata/ +STASH_CACHE=/cache/ \ No newline at end of file diff --git a/streama/Dockerfile b/streama/Dockerfile deleted file mode 100644 index b29d74d..0000000 --- a/streama/Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -FROM openjdk:8-jre-slim - -WORKDIR /app/streama - -RUN apt-get -y update && \ - apt-get -y install curl && \ - apt-get -y clean && \ - apt-get -y autoremove && \ - URL_DOWNLOAD_LATEST_RELEASE=$(curl -L https://api.github.com/repos/streamaserver/streama/releases | grep -i browser_download_url | head -n 1 | cut -d '"' -f 4) && \ - curl -o streama.jar -L $URL_DOWNLOAD_LATEST_RELEASE && \ - chmod u+x streama.jar - -EXPOSE 8080 - -ENTRYPOINT [ "java", "-jar", "streama.jar" ] diff --git a/streama/docker-compose.yml b/streama/docker-compose.yml deleted file mode 100644 index 2a8a317..0000000 --- a/streama/docker-compose.yml +++ /dev/null @@ -1,31 +0,0 @@ ---- -version: "2" - -services: - streama-db: - image: mariadb:${DB_V} - restart: always - volumes: - - streama-db:/var/lib/mysql - environment: - MYSQL_ROOT_PASSWORD: ${STREAMA_MYSQL_ROOT_PASSWORD} - MYSQL_PASSWORD: ${STREAMA_MYSQL_PASSWORD} - MYSQL_DATABASE: streama - MYSQL_USER: streama - - streama: - image: streama - build: . - restart: always - depends_on: - - streama-db - volumes: - - streama-movies:/data/streama # Change to your video folder - - streama-appdata:/app/streama - environment: - ACTIVE_PROFILE: mysql - MYSQL_HOST: ${PREFIX}_streama-db_1 - MYSQL_PORT: 3306 - MYSQL_DB: streama - MYSQL_USER: streama - MYSQL_PASSWORD: ${STREAMA_MYSQL_PASSWORD} diff --git a/streama/env-sample b/streama/env-sample deleted file mode 100644 index 64ce6c0..0000000 --- a/streama/env-sample +++ /dev/null @@ -1,8 +0,0 @@ -# Domains & Project -PREFIX=p1 -STREAMA_MYSQL_ROOT_PASSWORD= -STREAMA_MYSQL_PASSWORD= -STREAMA_DOMAIN_NAME=sample.example.com - -# Software versions -DB_V=10.4.11 diff --git a/streama/nginx/Dockerfile b/streama/nginx/Dockerfile deleted file mode 100644 index 9e620af..0000000 --- a/streama/nginx/Dockerfile +++ /dev/null @@ -1,3 +0,0 @@ -FROM nginx:alpine - -COPY nginx.conf /etc/nginx/nginx.conf diff --git a/streama/nginx/nginx.conf b/streama/nginx/nginx.conf deleted file mode 100644 index b1e0143..0000000 --- a/streama/nginx/nginx.conf +++ /dev/null @@ -1,35 +0,0 @@ -user nginx; -worker_processes auto; - -error_log /var/log/nginx/error.log warn; -pid /var/run/nginx.pid; - -events { worker_connections 512; } - -http { - - sendfile on; - - server { - listen 80; - listen [::]:80; - - client_max_body_size 128g; # allows larger files (like videos) to be uploaded. - - location / { - proxy_set_header Host $host; - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header X-Forwarded-Port $server_port; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - - #WebSocket Support - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection $http_connection; - - proxy_pass http://streama:8080; - } - } - -} diff --git a/traefik/docker-compose.yml b/traefik/docker-compose.yml deleted file mode 100644 index 9470d91..0000000 --- a/traefik/docker-compose.yml +++ /dev/null @@ -1,58 +0,0 @@ -############################################################################### -# Traefik -# -# Should only need one instance of this. -# Make sure the .env file is updated -# docker-compose up -d -############################################################################### -version: '2' - -networks: - web: - driver: bridge - -volumes: - traefik: - -services: - - traefik: - # https://hub.docker.com/_/traefik - image: "traefik:${TRAEFIK_V}" - restart: unless-stopped - command: - - --entrypoints.web.address=:80 - - --entrypoints.websecure.address=:443 - - --api - - "--log.level=DEBUG" - - "--api.dashboard=true" - - "--providers.docker=true" - - "--providers.docker.exposedbydefault=false" - - "--certificatesresolvers.letsencrypt.acme.httpchallenge=true" - - "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web" - - "--certificatesresolvers.letsencrypt.acme.email=${TRAEFIK_LE_EMAIL}" - - "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json" - ports: - - "80:80" - - "443:443" - volumes: - - "/var/run/docker.sock:/var/run/docker.sock:ro" - - traefik:/letsencrypt - networks: - - web - labels: - # Dashboard - - "traefik.http.routers.traefik.rule=Host(`${TRAEFIK_DOMAIN_NAME}`)" - - "traefik.http.routers.traefik.service=api@internal" - - "traefik.http.routers.traefik.tls.certresolver=letsencrypt" - - "traefik.http.routers.traefik.entrypoints=websecure" - - "traefik.http.routers.traefik.middlewares=dashboardauth" - - "traefik.http.routers.traefik.middlewares=authtraefik" - - "traefik.http.middlewares.authtraefik.basicauth.users=:" - # global redirect to https - - "traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`)" - - "traefik.http.routers.http-catchall.entrypoints=web" - - "traefik.http.routers.http-catchall.middlewares=redirect-to-https@docker" - # middleware redirect - - "traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https" - - "traefik.enable=true" diff --git a/traefik/env-sample b/traefik/env-sample deleted file mode 100644 index b678388..0000000 --- a/traefik/env-sample +++ /dev/null @@ -1,13 +0,0 @@ -# Domains & Project -PREFIX=p1 -TRAEFIK_DOMAIN_NAME=traefik.nickyeoman.com -TRAEFIK_LE_EMAIL=email@domain.com -# Passwords -# https://medium.com/@techupbusiness/add-basic-authentication-in-docker-compose-files-with-traefik-34c781234970 -# echo $(htpasswd -nbB "") | sed -e s/\\$/\\$\\$/g -TRAEFIK_USER=username -TRAEFIK_PASS=M@keASecureOne - -# Software versions -# https://hub.docker.com/_/traefik -TRAEFIK_V=2.2.0