React Script build Deployment não funciona

Para fazer um deploy de produção no react utiliza-se o serve, normalmente ele é utilizado globalmente, mas no caso como a umbler não suporta instalação de pacotes globais fiz localmente.
Porém Ele não encontra o pacote. Já testei localmente e no heroku e em ambos essa alternativa funciona. Mas aqui não. Aparentemente ele não instala todos os pacotes.

{
“name”: “whale-client”,
“version”: “0.1.0”,
“private”: true,
“dependencies”: {
@ant-design/icons”: “^4.0.6”,
@date-io/date-fns”: “^1.3.13”,
@material-ui/core”: “^4.9.7”,
@material-ui/icons”: “^4.9.1”,
@material-ui/pickers”: “^3.2.10”,
“antd”: “^4.1.3”,
“axios”: “^0.19.2”,
“date-fns”: “^2.11.1”,
“moment”: “^2.24.0”,
“node-sass”: “^4.13.1”,
“react”: “^16.13.0”,
“react-dom”: “^16.13.0”,
“react-redux”: “^7.2.0”,
“react-router-dom”: “^5.1.2”,
“react-scripts”: “3.4.0”,
“redux”: “^4.0.5”,
“redux-saga”: “^1.1.3”,
“serve”: “^11.3.0”,
“typesafe-actions”: “^5.1.0”,
“typescript”: “^3.8.3”
},
“scripts”: {
“postinstall”: “yarn build”,
“start”: “serve -s build”,
“serve”: “serve”,
“start:dev”: “react-scripts start”,
“build”: “react-scripts build”,
“test-react”: “react-scripts test”,
“test”: “JEST_SUITE_NAME=“Jest Unit” JEST_JUNIT_OUTPUT_DIR=”./tests/unit" jest --passWithNoTests --ci --verbose --forceExit --detectOpenHandles --colors --coverage --reporters=default --reporters=jest-junit",
“integration”: “JEST_SUITE_NAME=“Jest Integration” JEST_JUNIT_OUTPUT_DIR=”./tests/integration" jest -i -c integration.config.json --passWithNoTests --ci --verbose --forceExit --detectOpenHandles --colors --coverage --reporters=default --reporters=jest-junit",
“eject”: “react-scripts eject”
},
“eslintConfig”: {
“extends”: “react-app”
},
“browserslist”: {
“production”: [
“>0.2%”,
“not dead”,
“not op_mini all”
],
“development”: [
“last 1 chrome version”,
“last 1 firefox version”,
“last 1 safari version”
]
},
“devDependencies”: {
@testing-library/jest-dom”: “^4.2.4”,
@testing-library/react”: “^9.3.2”,
@testing-library/user-event”: “^7.1.2”,
@types/jest”: “^24.0.0”,
@types/node”: “^12.0.0”,
@types/react”: “^16.9.0”,
@types/react-dom”: “^16.9.0”,
@types/react-redux”: “^7.1.7”,
@types/react-router-dom”: “^5.1.3”,
@types/redux-saga”: “^0.10.5”,
@types/uuid”: “^7.0.2”,
@typescript-eslint/eslint-plugin”: “^2.26.0”,
@typescript-eslint/parser”: “^2.26.0”,
“eslint-config-airbnb”: “^18.1.0”,
“eslint-config-prettier”: “^6.10.1”,
“eslint-import-resolver-typescript”: “^2.0.0”,
“eslint-plugin-import”: “^2.20.2”,
“eslint-plugin-jsx-a11y”: “^6.2.3”,
“eslint-plugin-prettier”: “^3.1.2”,
“eslint-plugin-react”: “^7.19.0”,
“jest-junit”: “^10.0.0”,
“prettier”: “^2.0.2”,
“redux-devtools”: “^3.5.0”,
“ts-jest”: “^25.2.1”,
“typescript”: “^3.8.3”
}
}

Olá, @Judah_Holanda! Tudo bem?

Realmente, módulos que requerem permissão elevada para serem instalados ou usados não podem ser usados na nossa hospedagem.

Mas isso não é o caso se o módulo precisar dessa permissão apenas para registrar seus comandos globalmente.

Ele mesmo assim não poderá fazer esse registro, mas não impedirá de instalar ou utilizar. Pois o arquivo binário ou bash ainda será instalado dentro de node_modules/.bin

Você pode executar esses comandos especificando o caminho completo deles. Alternativamente, você consegue utilizar esses comandos normalmente dentro de um comando do package.json. Pois quando o NPM executa um desses scripts, ele considera a ./bin para procurar os comandos. Mesmo que o resto do sistema operacional não faça isso.

Então algo assim funcionaria:

"scripts": {
    "build": "ng build",
    [...]
}

Onde poderia ser executado pelo bash assim:
ng run build

Se quiser mais informações, temos esse tutorial das adaptações que precisam ser feitas pra utilizar frameworks:

Mas foi justamente o que fiz, falei isso no final da primeira frase.

Sem contar que ele não está instalando novamente os pacotes ao fazer o deploy.
Antes imaginei que ele não instalava apenas alguns pacotes, mas se eu manualmente apagar o node_modules e fazer o deploy ele não instala novamente.

O comportamento de instalar as dependências automaticamente é só pra deploys via Git remote.
Outros como sincronização com GitHub, FTP, etc. é preciso fazer manualmente.
É algum desses que você está utilizando?

Estou utilizando o github.

Se ele não instala automaticamente com o github, qual o sentido disso? Qual o sentido do deploy automático e remover os arquivos não versionados?

Se oferecem um serviço de deploy automático ele tem que instalar e iniciar automaticamente. Justamente como o Heroku faz.

E não consigo connectar via ssh no servidor.
Sempre recebo esse erro: ssh_exchange_identification: Connection closed by remote host
OBS.: já adicionei a chave publica na umbler e adicionei o host da minha máquina.