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

De Tek-System Wiki
Ir para navegação Ir para pesquisar
 
(18 revisões intermediárias por 2 usuários não estão sendo mostradas)
Linha 1: Linha 1:
'''PASSO 1'''
'''PASSO 1'''


Criar uma maquina linux debian 7GB de memoria ram e pelo menos 100GB de HD, não faça menos que isso.
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'''
'''PASSO 2'''
Linha 27: Linha 27:




'''6 - NORMALMENTE A LOJA ESTÁ COM O CODIGO 'ts''''
'''PASSO 6 '''
 
 
// $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.
  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:
Código fonte da index:
Linha 386: Linha 359:
  </nowiki>
  </nowiki>


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


ALTERE O CONFIG TOKEN:  
ALTERE O CONFIG TOKEN:  
Linha 395: Linha 367:
'''PASSO 7'''
'''PASSO 7'''


2 - Acesse '''IP-DO-CLIENTE/phpmyadmin'''
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:


Acesse o painel e vá na tabela: '''core_config_data'''
apt-get install php7.0-fpm


Troque todas urls pelo dominio do cliente novo. Não se esqueça de colocar HTTP!
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...