Mudanças entre as edições de "Tutoriais:Implantação resumida"

De Tek-System Wiki
Ir para navegação Ir para pesquisar
Linha 400: Linha 400:


Troque todas urls pelo dominio do cliente novo. Não se esqueça de colocar HTTP!
Troque todas urls pelo dominio do cliente novo. Não se esqueça de colocar HTTP!
"PASSO 8"
rode a atualizacao mas não se esqueça do chmod...
  chmod +x script-atualizacao-ecommerce.sh
./script-atualizacao-ecommerce.sh

Edição das 21h47min de 11 de setembro de 2019

PASSO 1

Criar uma maquina linux debian 7GB de memoria ram e pelo menos 100GB de HD, não faça menos que isso.

PASSO 2

Jogue a pasta com scripts Teksystem_Scripts (http://192.168.254.201/ecommerce-magento/infra) na mesma altura onde será inserido o magento2-ready(Codigo fonte do magento)

PASSO 3 Rode o comando para ser possivel utilizar a pasta com scripts:

chmod +x configura_maquina_linux.sh 

rode o comando de configuracao da maquina linux

./configura_maquina_linux.sh

PASSO 4

Envie o arquivo do magento zipado pelo filezilla


PASSO 5 Apos enviado o magento e descompacta-lo:

Acesse o arquivo index.php


6 - NORMALMENTE A LOJA ESTÁ COM O CODIGO 'ts'


// $bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);
switch($_SERVER['HTTP_HOST']) {
   case '127.0.0.1':
       $mageRunCode = 'base';
       $mageRunType = 'website';
   break;
   // case 'sergius.local':
   //     $mageRunCode = 'ts';
   //     $mageRunType = 'website';
   // break;
   case 'sergius.local':
       $mageRunCode = 'tc';
       $mageRunType = 'website';
   break;
   // case 'https://tekwebserver.com.br':
   //     $mageRunCode = 'sw';
   //     $mageRunType = 'website';
   // break;
   // case 'https://www.tekwebserver.com.br':
   //     $mageRunCode = 'sw';
   //     $mageRunType = 'website';
   // break;
}


obs: Não se esqueça de configurar o Tek-Prot!!! Ou seja o código do usuário da tekapi.


Código fonte da index:


<?php

    function dataVerificacaoExpirada(){

        $arquivo = "data_ultima_bloqueio.txt";
        $hora_espera = 2;

        if (is_writable($arquivo)) {

            $fp = fopen($arquivo, "r+");

            $dataAnterior = fgets($fp, 256);

            date_default_timezone_set('America/Sao_Paulo');
            $dataAtual = new DateTime('NOW');

            $dataAnterior = new DateTime($dataAnterior);
            $diferenca =  $dataAnterior->diff($dataAtual);

            $horas = $diferenca->h+($diferenca->days * 24);

            if($horas >= $hora_espera){
                return true;
            }

            fclose($fp);

        }else{

            $fp = fopen($arquivo, "a+");

            date_default_timezone_set('America/Sao_Paulo');
            $dataAtual = new DateTime('NOW');

            fwrite($fp, $dataAtual->format('Y-m-d H:i:s'));
            
            fclose($fp);

            return true;
        }

        return false;
    }

    function gravarUltimaDataValida(){

        $arquivo = "data_ultima_bloqueio.txt";

        if (is_writable($arquivo)) {

            $fp = fopen($arquivo, "r+");

            file_put_contents($arquivo, ""); // limpa arquivo

            date_default_timezone_set('America/Sao_Paulo');
            $dataAtual = new DateTime('NOW');
            fwrite($fp, $dataAtual->format('Y-m-d H:i:s'));
            fclose($fp);
        }
    }

    function gravarSeEcommerceEstaValidoNoArquivo($boolEhValido){

        $arquivoValidacaoTP = "eh-valido-tekprot.txt";

        $boolEhValido = $boolEhValido ? "sim" : "nao";

        if (is_writable($arquivoValidacaoTP)) {
            $fp = fopen($arquivoValidacaoTP, "r+");
            file_put_contents($arquivoValidacaoTP, ""); // limpa arquivo
            fwrite($fp, $boolEhValido);
            fclose($fp);
        }else{

            $fp = fopen($arquivoValidacaoTP, "a+");
            fwrite($fp, $boolEhValido);
            fclose($fp);
        }

    }

    function lerSeEcommerceEstaValidoNoArquivo(){

        $arquivoValidacaoTP = "eh-valido-tekprot.txt";
        $fp = fopen($arquivoValidacaoTP, "r+");

        $boolEhValido = fgets($fp, 200);

        return $boolEhValido == "sim";
    }

    // Sim, esse processo ira utilizar o mesmo token para varios clientes, mas nao importa pois ira bloquear os ataques de bots
    function gravarUltimoTokenEncriptadoNoArquivoPassandoToken($key, $url, $configToken, $tokenDaApiEncriptado){

        $arquivoToken = "token.txt";

        if (is_writable($arquivoToken)) {

            $fp = fopen($arquivoToken, "r+");

            file_put_contents($arquivoToken, ""); // limpa arquivo

            fwrite($fp, $tokenDaApiEncriptado);
            fclose($fp);
        }else{

            $fp = fopen($arquivoToken, "a+");

            fwrite($fp, $tokenDaApiEncriptado);
            fclose($fp);
        }

    }

    function buscarUltimoTokenEncriptadoNoArquivo(){

        $arquivoToken = "token.txt";
        $fp = fopen($arquivoToken, "r+");
        $tokenEncriptado = fgets($fp, 1024);

        return $tokenEncriptado;
    }

    function buscaToken($configToken, $url){
        $userData = array("token" => $configToken);
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($userData));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));

        $data = curl_exec($ch);
        $err = curl_error($ch);

        if($err === ""){
            $json = json_decode($data);
            if(isset($json->errors))
                return $json->data->token;
            else return false;
        }else{
            return false;
        }   
    }

    function validaIntegracao($configUrlWebservice, $token){

        gravarUltimaDataValida();

        $canal = "ECOMMERCE_MAGENTO";
        $url = $configUrlWebservice. "integracao/tekecommerce/" . $canal ;
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "GET");
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json", "Authorization: Bearer " . $token));
        // Fim - Requisicao
        $result = curl_exec($ch);
        $err = curl_error($ch);

        if($err === ""){
            $json = json_decode($result);

            if(isset($json->errors)){
                return $json->data;
            }else {
                return false;
            }

        }else{
            return false;
        }
        
    }

    function liberaMagento(){

        switch($_SERVER['HTTP_HOST']) {
            case '35.196.243.242 ':
                $mageRunCode = 'base';
                $mageRunType = 'website';
            break;
            case 'teksystemcommerce.com.br':
                $mageRunCode = 'tc';
                $mageRunType = 'website';
            break;
            case 'www.teksystemcommerce.com.br':
                $mageRunCode = 'tc';
                $mageRunType = 'website';
            break;
        }
        
        $params = $_SERVER;
        $params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE] = $mageRunCode;
        $params[\Magento\Store\Model\StoreManager::PARAM_RUN_TYPE] = $mageRunType;
        $bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $params);
        
        /** @var \Magento\Framework\App\Http $app */
        $app = $bootstrap->createApplication('Magento\Framework\App\Http');
        $bootstrap->run($app);
    }

    function paginaErro($msg){
        echo 
        '<div class="container">
            <div class="title">
                <h3>AVISO IMPORTANTE</h3>
            </div>
            <div class="bg-tek">
                <img src="http://teksystemcommerce.com.br/pub/static/version1553773995/frontend/Emthemes/everything_fashionshop/pt_BR/images/logo@2x.svg" width="300px"/>
                <p>Este site está temporariamente indisponível !!!</p>
            </div>
        </div>
        <style>
            .container{
                border: solid 1px;
                margin: 0 20% 0 20%;
                text-align: center;
            }
            .title{
                color: white;
                font-size: 19px;
                font-family:"Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
                background-color: #000;
                padding: 1px;
            }
            p{
                padding: 5% 0 5% 0;
                font-family: "Franklin Gothic Medium", "Arial Narrow", Arial, sans-serif;
                font-size: 25px;
                font-weight:900;
            }

            img{
                padding-top: 10%;
            }

            .bg-tek{
                background-color: #59a4f9;
                padding-bottom: 1px;
            }

            @media only screen and (max-width: 767px) {
                p{
                    padding: 10% 0 0 0;
                    font-family: "Franklin Gothic Medium", "Arial Narrow", Arial, sans-serif;
                    font-size: 45px;
                    font-weight:900;
                }
                img{
                    width: 600px;
                }
                .container{
                    margin: unset;
                }
            }
        </style>';
    }   

try {
    require __DIR__ . '/app/bootstrap.php';
} catch (\Exception $e) {
    echo <<<HTML
<div style="font:12px/1.35em arial, helvetica, sans-serif;">
    <div style="margin:0 0 25px 0; border-bottom:1px solid #ccc;">
        <h3 style="margin:0;font-size:1.7em;font-weight:normal;text-transform:none;text-align:left;color:#2f2f2f;">
        Autoload error</h3>
    </div>
    <p>{$e->getMessage()}</p>
</div>
HTML;
    exit(1);
}

$key = "0fb32560a639adbb2b05b27f920a3a08"; //encrypitamento do token
$expireCookie = 3600; // expira o cookie em 1h, para fazer uma nova consulta no TEKPROT
$configToken = "b2121-21445-454a-bb67-0f7d622123faf"; //Token do usuario
$configUrlWebservice = "http://ts.teksystem.com.br:9090/api/v1/"; //URL da api
$url = $configUrlWebservice . "auth"; //URL de autenticacao

if(!isset($_COOKIE["token"])){

    $tokenEncriptado = buscarUltimoTokenEncriptadoNoArquivo();

    if($tokenEncriptado != null){
        setcookie("token", buscarUltimoTokenEncriptadoNoArquivo() , -1, '/');
    }
}


if(isset($_COOKIE["token"]) && buscarUltimoTokenEncriptadoNoArquivo() != $_COOKIE["token"]){
    setcookie("token", buscarUltimoTokenEncriptadoNoArquivo(), -1, '/');
}


if(dataVerificacaoExpirada()){ //licenca invalida

    $result = buscaToken($configToken, $url);
    $encry = $result . $key ;
    $encry = base64_encode($encry);

    if($result){
 
        gravarUltimoTokenEncriptadoNoArquivoPassandoToken($key, $url, $configToken, $encry);

        setcookie("token", $encry, -1, '/');
        $result = validaIntegracao($configUrlWebservice, $result);

        gravarSeEcommerceEstaValidoNoArquivo($result);

        if($result){
            liberaMagento();
        }else{
            paginaErro("Erro de conexao - Liberacao");
        }

    }else{
        paginaErro("Erro de conexao - Token");
    }
}elseif (lerSeEcommerceEstaValidoNoArquivo()) {
    liberaMagento();
}else{
     paginaErro("Erro de conexao - Token");
}

 

COLOQUE A URL ALI, SE FOR LOCAL NAO COLOQUE HTTP AQUI, MAS SE FOR ONLINE COLOQUE!!!!!!!!!!

ALTERE O CONFIG TOKEN:

$configToken = "b2121-21445-454a-bb67-0f7d622123faf";


PASSO 7

2 - Acesse IP-DO-CLIENTE/phpmyadmin

Acesse o painel e vá na tabela: core_config_data

Troque todas urls pelo dominio do cliente novo. Não se esqueça de colocar HTTP!


"PASSO 8"

rode a atualizacao mas não se esqueça do chmod...

 chmod +x script-atualizacao-ecommerce.sh 
./script-atualizacao-ecommerce.sh