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

De Tek-System Wiki
Ir para navegação Ir para pesquisar
 
(3 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 380: Linha 380:


'''PASSO 8'''
'''PASSO 8'''
rode a atualizacao mas não se esqueça do chmod...
  chmod +x script-atualizacao-ecommerce.sh
./script-atualizacao-ecommerce.sh
Completo: http://tekwiki.teksystem.com.br/~teksys/tekwiki/index.php?title=Atualizacao


Talvez precise instalar o sshpass.. entao olhe o tutorial
Talvez precise instalar o sshpass.. entao olhe o tutorial
Linha 413: Linha 405:


  /home/ecommerce/Teksystem_scripts/ativa-todos-cron-por-tempo.sh
  /home/ecommerce/Teksystem_scripts/ativa-todos-cron-por-tempo.sh
ATENCAO, NECESSARIO INSTALAR O PHP, SOMENTE O PHP SEM APACHE, RODE:
apt-get install php7.0-fpm


Dessa forma ele vai preencher os eventos sem você ter que ficar lembrando, mas note que o cron deve estar limpo de inserir isto pois ele vai duplicar a linha...
Dessa forma ele vai preencher os eventos sem você ter que ficar lembrando, mas note que o cron deve estar limpo de inserir isto pois ele vai duplicar a linha...

Edição atual tal como às 19h52min de 8 de setembro de 2020

PASSO 1

Criar uma maquina linux debian 7GB de memoria ram e pelo menos 100GB de HD, não faça menos que isso. Lembre-se de apontar o dominio para o servidor da maquina e vice-versa. Deixa-a no jeito.

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


PASSO 6

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");
}

 


ALTERE O CONFIG TOKEN:

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


PASSO 7

Acesse IP-DO-CLIENTE/phpmyadmin

Vá no repositorio: http://192.168.254.201/ecommerce-magento/inicializacao-scripts

Rode a sql procedure-implantacao.sql trocando pelas informações da empresa.
Depois rode a limpeza: procedure-limpa-pedidos-produtos.sql


Não se esqueça de colocar HTTP na url do host!


PASSO 8

Talvez precise instalar o sshpass.. entao olhe o tutorial

PASSO 9

Configure o backup automatico e aproveite para colocar no cron os scripts necessarios para rotina do magento:

http://tekwiki.teksystem.com.br/~teksys/tekwiki/index.php?title=BACKUP_CRON


PASSO 10

Adicionar caminho do arquivo e empresa em:

http://192.168.254.201/ecommerce-magento/acesso-ssh-mac-ou-linux/tree/master/Teksystem_scripts

PASSO 11

Instale o certificado gratuito lets encript:

http://tekwiki.teksystem.com.br/~teksys/tekwiki/index.php?title=Certificado_SSL_GRATUITO_LETS_ENCRIPT

ISIRA TODOS COMANDOS DE CRON AUTOMATICAMENTE

/home/ecommerce/Teksystem_scripts/ativa-todos-cron-por-tempo.sh

ATENCAO, NECESSARIO INSTALAR O PHP, SOMENTE O PHP SEM APACHE, RODE:

apt-get install php7.0-fpm

Dessa forma ele vai preencher os eventos sem você ter que ficar lembrando, mas note que o cron deve estar limpo de inserir isto pois ele vai duplicar a linha...