From 933b6b67f521c8c529ff5cb2ca744520150a4e4a Mon Sep 17 00:00:00 2001 From: Matthew Momjian <50788000+mmomjian@users.noreply.github.com> Date: Mon, 8 Apr 2024 19:01:57 -0400 Subject: [PATCH] feat: Improve error handling for Install Script (#8422) * Update install.sh * Update install.sh * Update install.sh * Update install.sh * Update install.sh * Update install.sh * Update install.sh * Update install.sh * Update install.sh * Update docs immich-app vs immich-data We do not actually touch the .env file * Remove docker-compose Docker-compose is no longer supported by Immich * Update remote-machine-learning.md * Update install.sh * Update install.sh * Update requirements.md * Update requirements.md --- docs/docs/guides/remote-machine-learning.md | 2 +- docs/docs/install/requirements.md | 4 ++ docs/docs/install/script.md | 5 +- install.sh | 80 ++++++++++++--------- 4 files changed, 55 insertions(+), 36 deletions(-) diff --git a/docs/docs/guides/remote-machine-learning.md b/docs/docs/guides/remote-machine-learning.md index 087f9aab7..a5dbf5498 100644 --- a/docs/docs/guides/remote-machine-learning.md +++ b/docs/docs/guides/remote-machine-learning.md @@ -4,7 +4,7 @@ To alleviate [performance issues on low-memory systems](/docs/FAQ.mdx#why-is-imm - Set the URL in Machine Learning Settings on the Admin Settings page to point to the designated ML system, e.g. `http://workstation:3003`. - Copy the following `docker-compose.yml` to your ML system. -- Start the container by running `docker-compose up -d` or `docker compose up -d` (depending on your Docker version). +- Start the container by running `docker compose up -d`. :::note Info Starting with version v1.93.0 face detection work and face recognize were split. From now on face detection is done in the immich_machine_learning service, but facial recognition is done in the immich_microservices service. diff --git a/docs/docs/install/requirements.md b/docs/docs/install/requirements.md index f56e5c10b..b611d04f2 100644 --- a/docs/docs/install/requirements.md +++ b/docs/docs/install/requirements.md @@ -11,6 +11,10 @@ Hardware and software requirements for Immich - [Docker](https://docs.docker.com/get-docker/) - [Docker Compose](https://docs.docker.com/compose/install/) +:::note +Immich requires the command `docker compose` - the similarly named `docker-compose` is [deprecated](https://docs.docker.com/compose/migrate/) and is no longer compatible with Immich. +::: + :::info Podman You can also use Podman to run the application. However, additional configuration might be required. ::: diff --git a/docs/docs/install/script.md b/docs/docs/install/script.md index 0b097e4c7..3c3060e4d 100644 --- a/docs/docs/install/script.md +++ b/docs/docs/install/script.md @@ -17,12 +17,11 @@ curl -o- https://raw.githubusercontent.com/immich-app/immich/main/install.sh | b The script will perform the following actions: 1. Download [docker-compose.yml](https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml), and the [.env](https://github.com/immich-app/immich/releases/latest/download/example.env) file from the main branch of the [repository](https://github.com/immich-app/immich). -2. Populate the `.env` file with necessary information based on the current directory path. -3. Start the containers. +2. Start the containers. The web application will be available at `http://:2283`, and the server URL for the mobile app will be `http://:2283/api` -The directory which is used to store the library files is `./immich-data` relative to the current directory. +The directory which is used to store the library files is `./immich-app` relative to the current directory. :::tip For common next steps, see [Post Install Steps](/docs/install/post-install.mdx). diff --git a/install.sh b/install.sh index 232ee1597..92d9c1b8b 100755 --- a/install.sh +++ b/install.sh @@ -1,62 +1,78 @@ #!/usr/bin/env bash +set -o nounset +set -o pipefail -echo "Starting Immich installation..." - -ip_address=$(hostname -I | awk '{print $1}') - -create_immich_directory() { +create_immich_directory() { local -r Tgt='./immich-app' echo "Creating Immich directory..." - mkdir -p ./immich-app - cd ./immich-app || exit + if [[ -e $Tgt ]]; then + echo "Found existing directory $Tgt, will overwrite YAML files" + else + mkdir "$Tgt" || return + fi + cd "$Tgt" || return } download_docker_compose_file() { echo "Downloading docker-compose.yml..." - curl -L https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml -o ./docker-compose.yml >/dev/null 2>&1 + "${Curl[@]}" "$RepoUrl"/docker-compose.yml -o ./docker-compose.yml } download_dot_env_file() { echo "Downloading .env file..." - curl -L https://github.com/immich-app/immich/releases/latest/download/example.env -o ./.env >/dev/null 2>&1 + "${Curl[@]}" "$RepoUrl"/example.env -o ./.env } start_docker_compose() { echo "Starting Immich's docker containers" - if docker compose >/dev/null 2>&1; then - docker_bin="docker compose" - elif docker-compose >/dev/null 2>&1; then - docker_bin="docker-compose" - else - echo "Cannot find \`docker compose\` or \`docker-compose\`." - exit 1 + if ! docker compose >/dev/null 2>&1; then + echo "failed to find 'docker compose'" + return 1 fi - if $docker_bin up --remove-orphans -d; then - show_friendly_message - exit 0 - else + if ! docker compose up --remove-orphans -d; then echo "Could not start. Check for errors above." - exit 1 + return 1 fi + show_friendly_message } show_friendly_message() { - echo "Successfully deployed Immich!" - echo "You can access the website at http://$ip_address:2283 and the server URL for the mobile app is http://$ip_address:2283/api" - echo "---------------------------------------------------" - echo "If you want to configure custom information of the server, including the database, Redis information, or the backup (or upload) location, etc. + local ip_address + ip_address=$(hostname -I | awk '{print $1}') + cat << EOF +Successfully deployed Immich! +You can access the website at http://$ip_address:2283 and the server URL for the mobile app is http://$ip_address:2283/api +--------------------------------------------------- +If you want to configure custom information of the server, including the database, Redis information, or the backup (or upload) location, etc. - 1. First bring down the containers with the command 'docker-compose down' in the immich-app directory, + 1. First bring down the containers with the command 'docker compose down' in the immich-app directory, 2. Then change the information that fits your needs in the '.env' file, - 3. Finally, bring the containers back up with the command 'docker-compose up --remove-orphans -d' in the immich-app directory" - + 3. Finally, bring the containers back up with the command 'docker compose up --remove-orphans -d' in the immich-app directory +EOF } # MAIN -create_immich_directory -download_docker_compose_file -download_dot_env_file -start_docker_compose +main() { + echo "Starting Immich installation..." + local -r RepoUrl='https://github.com/immich-app/immich/releases/latest/download' + local -a Curl + if command -v curl >/dev/null; then + Curl=(curl -fsSL) + else + echo 'no curl binary found; please install curl and try again' + return 14 + fi + + create_immich_directory || { echo 'error creating Immich directory'; return 10; } + download_docker_compose_file || { echo 'error downloading Docker Compose file'; return 11; } + download_dot_env_file || { echo 'error downloading .env'; return 12; } + start_docker_compose || { echo 'error starting Docker'; return 13; } + return 0; } + +main +Exit=$? +[[ $Exit == 0 ]] || echo "There was an error installing Immich. Exit code: $Exit. Please provide these logs when asking for assistance." +exit "$Exit"