Skip to content

Better Upgrade Process... #192

@notAreYouScared

Description

@notAreYouScared

Currently, we just extract the update over the existing install, bad, very bad.

The proposed solution, Below is very basic and generated with AI....

#!/bin/sh

read -p "Enter the directory for the panel location [/var/www/pelican]: " install_dir
install_dir=${install_dir:-/var/www/pelican}

if [ ! -d "$install_dir" ]; then
  echo "Directory $install_dir does not exist. Exiting..."
  exit 1
fi

env_file="$install_dir/.env"

if [ ! -f "$env_file" ]; then
  echo "File $env_file does not exist. Exiting..."
  exit 1
fi

cd "$install_dir"
php artisan down
if [ $? -ne 0 ]; then
  echo "Failed to put the panel into maintenance mode."
  exit 1
fi
echo "Panel is now in maintenance mode."

db_connection=$(grep "^DB_CONNECTION=" "$env_file" | cut -d '=' -f 2)

if [ -z "$db_connection" ]; then
  echo "DB_CONNECTION not found in $env_file."
  exit 0
else
  echo "DB_CONNECTION is set to: $db_connection"

  read -p "Do you want to create a backup? (y/n) [y]: " backup_confirm
  backup_confirm=${backup_confirm:-y}
  if [ "$backup_confirm" != "y" ]; then
    echo "Backup canceled."
    php artisan up
    echo "Panel is out of maintenance mode."
    exit 0
  fi

  backup_dir="$install_dir/backup"
  mkdir -p "$backup_dir"

  if [ "$db_connection" = "sqlite" ]; then
    db_database=$(grep "^DB_DATABASE=" "$env_file" | cut -d '=' -f 2)

    if [ -z "$db_database" ]; then
      echo "DB_DATABASE not found in $env_file."
      php artisan up
      echo "Panel is out of maintenance mode."
      exit 1
    else
      echo "DB_DATABASE is set to: $db_database"
      cp "$install_dir/database/$db_database" "$backup_dir/$db_database.backup"
    fi

  elif [ "$db_connection" = "mysql" ]; then
    read -p "NOTE: THIS WILL NOT BACKUP MySQL/MariaDB DATABASES!!! You should pause now and make your own backup!! You've been warned! Continue? (y/n) [y]: " continue_confirm
continue_confirm=${continue_confirm:-y}
if [ "$continue_confirm" != "y" ]; then
  echo "Update Canceled."
  php artisan up
  echo "Panel is out of maintenance mode."
  exit 0
fi
  fi

  cp "$env_file" "$backup_dir/.env.backup"
  echo "Backup completed successfully."
fi

read -p "Do you want to delete all files and folders in $install_dir except the backup folder? (y/n) [y]: " delete_confirm
delete_confirm=${delete_confirm:-y}
if [ "$delete_confirm" != "y" ]; then
  echo "Deletion canceled."
  php artisan up
  echo "Panel is out of maintenance mode."
  exit 0
fi

find "$install_dir" -mindepth 1 -maxdepth 1 ! -name 'backup' -exec rm -rf {} +

echo "Deleted all files and folders in $install_dir except the backup folder."

echo "Downloading Files..."
curl -L https://github.com/pelican-dev/panel/releases/latest/download/panel.tar.gz | sudo tar -xzv -C "$install_dir"

echo "Setting Permissions"
cd "$install_dir"
chmod -R 755 storage/* bootstrap/cache

echo "Installing Composer"
composer install --no-dev --optimize-autoloader --no-interaction

php artisan down

echo "Restoring .env"
mv "$backup_dir/.env.backup" "$install_dir/.env"
if [ "$db_connection" = "sqlite" ]; then
  echo "Restoring sqlite database"
  mv "$backup_dir/$db_database.backup" "$install_dir/database/$db_database"
fi

echo "Updating database"
php artisan migrate --seed --force

read -p "Enter the owner of the files (www-data, apache, nginx) [www-data]: " file_owner
file_owner=${file_owner:-www-data}

chown -R "$file_owner":"$file_owner" "$install_dir"

php artisan queue:restart
php artisan up

echo "Panel is now live and out of maintenance mode."
echo "Panel Updated!"
exit 0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels
    No fields configured for Feature.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions