
********************************************************************
*     1. Generate ssh keys - private key to gitlab (localhost)     *
********************************************************************

mkdir -p /path/to/project/.ssh_dev
ssh-keygen -t rsa -f "/path/to/project/.ssh_dev/id_rsa" -N ""
cat /path/to/project/.ssh_dev/id_rsa

*************************************************************
*     2. Copy ssh to server - public key to remote host     *
*************************************************************

can ask a password - enter XXXXXXXXXX
ssh-copy-id -i "/path/to/project/.ssh_dev/id_rsa" -p 22 "example-user@example.com"

********************************************************
*     3. Generate generate ssh-keys on remote host     *
********************************************************

ssh -i "/path/to/project/.ssh_dev/id_rsa" -p 22 "example-user@example.com" "ssh-keygen -t rsa -f ~/.ssh/id_rsa -N \"\""
ssh -i "/path/to/project/.ssh_dev/id_rsa" -p 22 "example-user@example.com" "cat ~/.ssh/id_rsa.pub"
Remote pub-key: rsa-ssh AAA....AAA user@host

*******************************
*     4. Gitlab variables     *
*******************************

BIN_PHP
/usr/bin/php8.1

BIN_COMPOSER
/usr/bin/php8.1 /usr/bin/composer

DEPLOY_BASE_DIR
/home/example-user/web/example.com/public_html

DEPLOY_SERVER
example.com

DEPLOY_USER
example-user

SSH_PORT
22

SSH_PUB_KEY
rsa-ssh AAA....AAA user@host

CI_ENABLED
0

SSH_PRIVATE_KEY

tip: put SSH_PUB_KEY => Gitlab.project -> Settings -> Repository -> Deploy keys

*******************************************************************
*     5. Add gitlab to confirmed (known hosts) on remote host     *
*******************************************************************

ssh-keyscan -t ecdsa-sha2-nistp256 gitlab.hexide-digital.com,188.34.141.230
ssh -i "/path/to/project/.ssh_dev/id_rsa" -p 22 "example-user@example.com" "cat ~/.ssh/known_hosts"
ssh -i "/path/to/project/.ssh_dev/id_rsa" -p 22 "example-user@example.com" 'echo "..." >> ~/.ssh/known_hosts'

************************************************
*     6. Run deploy prepare from localhost     *
************************************************

php /path/to/project/vendor/bin/dep deploy:prepare dev -v -o branch=dev

**********************************************************
*     7. Putting static env variables to deploy file     *
**********************************************************

$CI_REPOSITORY_URL = "git@gitlab.hexide-digital.com:namespace/template.git";
$CI_COMMIT_REF_NAME = "dev";
$BIN_PHP = "/usr/bin/php8.1";
$BIN_COMPOSER = "/usr/bin/php8.1 /usr/bin/composer";
$DEPLOY_BASE_DIR = "/home/example-user/web/example.com/public_html";
$DEPLOY_SERVER = "example.com";
$DEPLOY_USER = "example-user";
$SSH_PORT = "22";

******************************************************************
*     8. Setup env file for remote server and move to server     *
******************************************************************

Backup original env file and create for host
cp /path/to/project/.env /path/to/project/.env.backup
cp /path/to/project/.env.example /path/to/project/.env
Filling env file for host
array (
  'APP_KEY=' => 'APP_KEY=base64:yECj71xn9e6CZzSJybo6pPHf1fbUH4t3eXwDG3tEehQ=',
  'APP_URL=' => 'APP_URL="https://example.com"#',
  'DB_DATABASE=' => 'DB_DATABASE="example_db_name"#',
  'DB_USERNAME=' => 'DB_USERNAME="example_db_name"#',
  'DB_PASSWORD=' => 'DB_PASSWORD="XXXXXXXXXX"#',
)
Coping to remote
can ask a password - enter XXXXXXXXXX
scp -i "/path/to/project/.ssh_dev/id_rsa" -P 22 "/path/to/project/.env" "example-user@example.com":"/home/example-user/web/example.com/public_html/shared/"
Restore original env file
cp /path/to/project/.env /path/to/project/.env.host
cp /path/to/project/.env.backup /path/to/project/.env

************************************
*     9. Run deploy from local     *
************************************

php /path/to/project/vendor/bin/dep deploy dev -v -o branch=dev
Rollback deploy file content

*************************************
*     10. Append custom aliases     *
*************************************

# PHP, Laravel development
_artisan()
{
    local arg="${COMP_LINE#php }"

    case "$arg" in
        a*)
            COMP_WORDBREAKS=${COMP_WORDBREAKS//:}
            COMMANDS=`artisan --raw --no-ansi list | sed "s/[[:space:]].*//g"`
            COMPREPLY=(`compgen -W "$COMMANDS" -- "${COMP_WORDS[COMP_CWORD]}"`)
            ;;
        *)
            COMPREPLY=( $(compgen -o default -- "${COMP_WORDS[COMP_CWORD]}") )
            ;;
        esac

    return 0
}

complete -F _artisan artisan
complete -F _artisan a

alias artisan="/usr/bin/php8.1 artisan"
alias a="artisan"

alias pcomopser="/usr/bin/php8.1 /usr/bin/composer"

export BASE_DIR="/home/example-user/web/example.com/public_html"
export CURRENT_DIR="$BASE_DIR/current"
export SHARED_DIR="$BASE_DIR/shared"

alias cur="cd $CURRENT_DIR"
alias shared="cd $SHARED_DIR"


****************************
*     11. IDEA - Setup     *
****************************


    - change mount path
    /home/example-user/web/example.com/public_html

    - add site url
    example.com

    - add mapping
    /current

    - connect to databases (local and remote)
    port: 22
    domain: https://example.com
    db_name: example_db_name
    db_user: example_db_name
    password: XXXXXXXXXX
