anúncios

quarta-feira, 27 de dezembro de 2017

Instalando e Configurando o phpPgAdmin no Debian

O presente post, tem como objetivo explicar a instalação e configuração do phpPgAdmin no GNU/Linux Debian 7.
phpPgAdmin é uma ferramenta web de gerenciamento do SGBD PostgreSQL.

No Debian 8 precisa adicionar o pacote do PHP 7 no arquivo /etc/apt/sources.list
# echo -e "deb http://packages.dotdeb.org jessie all\n deb-src http://packages.dotdeb.org jessie all" >> /etc/apt/sources.list

Download da chave do pacote
# wget https://www.dotdeb.org/dotdeb.gpg
Adiciona a chave
# apt-key add dotdeb.gpg
Atualização do repositório
# apt-get update
Instalação do Apache2, módulos do PHP 7 e postgresql
PS: O "x" corresponde o release da versão PHP, troque pelo release corrente.
# apt-get install apache2 php7.x libapache2-mod-php7.x php7.x-fpm php7.x-pgsql php7.x-gd php7.x-mcrypt php7.x-mbstring php7.x-gettext php7.x-gd php7.x-json php-gettext php7.x-readline postgresql-9.4 postgresql-client-9.4
Instalação do phppgadmin
# apt-get install phppgadmin

Ao acessar no navegador http://IPSERVIDOR/phppgadmin ocorreu erro HTTP ERROR 500, verifiquei o log de erros /var/log/apache/error.log sobre o erro.

Solução:
Editar o arquivo /etc/phppgadmin/apache2.conf na linha 9
< IfModule mod_php5.c > trocar por < IfModule mod_php7.x.c >
Reinicia o Apache: # /etc/init.d/apache2 restart
Após fazer isso, deve acessar normal no navegador http://IPSERVIDOR/phppgadmin

Algumas recomendações caso o acesso do phpPgAdmin seja externo
  • Jamais o usuário root do PostgreSQL deve ter acesso direto pelo phpPgAdmin;
  • Criar um usuário para o sistema com as permissões: select, insert, update, delete já são suficiente;
  • Criar um usuário para o migrations com as permissões: create, alter, drop, insert, update, delete, select, lock tables, trigger, view, event.
O usuário migrations é o responsável por criar a estrutura das tabelas (migrate), popular (seed) e fazer o dump por meio do script shell agendado no crontab.

Feito!

quinta-feira, 21 de dezembro de 2017

Instalando e Configurando o PHPMyAdmin no Debian

O presente post, tem como objetivo explicar a instalação e configuração do PHPMyAdmin no GNU/Linux Debian 7.
PHPMyAdmin é uma ferramenta web de gerenciamento do SGBD MySQL/MariaDB.

No Debian 8 precisa adicionar o pacote do PHP 7 no arquivo /etc/apt/sources.list
# echo -e "deb http://packages.dotdeb.org jessie all\n deb-src http://packages.dotdeb.org jessie all" >> /etc/apt/sources.list

Download da chave do pacote
# wget https://www.dotdeb.org/dotdeb.gpg
Adiciona a chave
# apt-key add dotdeb.gpg
Atualização do repositório
# apt-get update
Instalação do Apache2, módulos do PHP 7 e mysql-server
# apt-get install apache2 php7.0 libapache2-mod-php7.0 php7.0-fpm php7.0-mysql php7.0-gd php7.0-mysql php7.0-mcrypt php7.0-mbstring php7.0-gettext php7.0-gd php7.0-json php-gettext php7.0-readline mysql-server
Instalação do phpmyadmin
# apt-get install phpmyadmin

Ao acessar no navegador http://IPSERVIDOR/phpmyadmin ocorreu erro HTTP ERROR 500, verifiquei o log de erros /var/log/apache/error.log sobre o erro.

Solução:
Editar o arquivo /etc/phpmyadmin/apache2.conf na linha 9
trocar por
Reinicia o Apache: # /etc/init.d/apache2 restart
Após fazer isso, deve acessar normal no navegador http://IPSERVIDOR/phpmyadmin

Algumas recomendações caso o acesso do PHPMyAdmin seja externo
  • Jamais o usuário root do MySQL/MariaDB deve ter acesso direto pelo PHPMyAdmin;
  • Criar um usuário para o sistema com as permissões: select, insert, update, delete já são suficiente;
  • Criar um usuário para o migrations com as permissões: create, alter, drop, insert, update, delete, select, lock tables, trigger, view, event.
O usuário migrations é o responsável por criar a estrutura das tabelas (migrate), popular (seed) e fazer o dump por meio do script shell agendado no crontab.

Confira no post a criação e as permissões de usuário no SGBD MySQL/MariaDB

Feito!

sábado, 4 de novembro de 2017

Criando e atribuindo permissões para o usuário no SGBD MySQL/MariaBD

O presente post, tem como objetivo esclarecer como criar usuário e atribuir permissões para o usuário no SGBD MySQL/MariaDB.

Sobre o MySQL e MariaDB

O MySQL é um Sistema de Gerenciamento de Banco de Dados (SGBD) open source que ajuda os usuários a armazenar, organizar, e posteriormente, recuperar dados. Ele possui uma variedade de opções para conceder a usuários específicos permissões diferenciadas dentro de tabelas e bases de dados. O MariaDB é o fork do MySQL. Na maioria dos aspectos o MariaDB vai funcionar exatamente como o MySQL: todos os comandos, interfaces, bibliotecas e APIs que existem no MySQL também existem no MariaDB. Não há nenhuma necessidade de converter um bancos de dados para migrar para o MariaDB. MariaDB é um verdadeiro substituto para o MySQL.

Primeiramente precisa conectar no servidor SGBD MySQL/MariaDB: mysql -h IPSERVIDORBD -u root -p

Para criar um usuário no SGBD MySQL/MariaDB, após logar com o root é o seguinte comando:
CREATE USER `nome-usuario`@`IPServerDB` IDENTIFIED BY `password`;

Para dar uma permissão a um usuário específico, você pode utilizar esta estrutura:
GRANT [tipo de permissão] ON [nome da base de dados].[nome da tabela] TO `[nome do usuário]`@`IPServerDB`;

Se você quer dar a ele acesso a qualquer base de dados ou a qualquer tabela, certifique-se de colocar um asterisco (*) no lugar do nome da base de dados ou do nome da tabela. Cada vez que você atualizar ou mudar uma permissão certifique-se de utilizar o comando Flush Privileges.

Se você precisar revogar uma permissão, a estrutura é quase idêntica a concedê-la:
REVOKE [tipo de permissão] ON [nome da base de dados].[nome da tabela] FROM `[nome do usuário]`@`IP`;

Para adicionar permissão de leitura, inserção, atualização, exclusão, criação de tabelas/bases, remoção e alteração de tabelas/colunas para o usuário:
GRANT select, insert, update, delete, create, drop, alter ON nomeBD.* TO `nomeUsuarioBD`@`%IPMaquinaAcessoServerBD` WITH GRANT OPTION;

Para adicionar permissão geral a um usuário:
GRANT ALL PRIVILEGES ON database.* TO 'usuarioBD'@'IPServerBD' WITH GRANT OPTION;

Para visualizar as permissões que acabamos de aplicar usamos o comando:
SHOW GRANTS FOR `usuarioBD`@`%IPMaquinaAcessoServerBD`;

Se você precisar retirar todos os privilégios de um usuário do SGBD MySQL/MariaDB, pode utilizar esta estrutura:
USAGE [tipo de permissão] ON [nome da base de dados].[nome da tabela] FROM `[nome do usuário]`@`IP`;
A permissão USAGE significa sem privilégios.

Os comandos necessários para criar usuário, conceder/revogar permissões a um banco de dados e tabelas foram apresentados neste post. Espero que possa ser útil para quem desconhecia.

Feito!

sexta-feira, 27 de outubro de 2017

Aumentar tamanho de upload ao importar banco pelo phpmyadmin

Por default, o limite máximo permitido é de 2MB para upload no PHP. Se utiliza a ferramenta phpmyadmin e caso o dump do banco for maior do que 2MB, não será possível fazer a importação pelo phpmyadmin.

Mas, calma que a configuração é simples, basta seguir: Para permitir importar BD acima de 2MB pelo phpmyadmin

Edite o php.ini conforme abaixo como exemplo
upload_max_filesize = 100MB
post_max_size = 200MB
memory_limit = 512

Reinicie o Apache, acesse o phpmyadmin e ao importar o BD notará que o tamanho permitido para upload será de 100MB conforme a configuração.

Particularmente, prefiro usar o software DBeaver (cliente BD que suporta os SGBDs: MySQL/MariaDB, PostgreSQL, MS SQL Server, Oracle, Firebird e outros. Além de ser multiplataforma e opensource!

Feito!

segunda-feira, 23 de outubro de 2017

A importância de usar migrations/seeds no projeto de sistema web

Vocês utilizam migrations nas tabelas do sistema?

Não? Então precisar ler o howto [1] seguinte sobre migrations com Phinx para automatizar e versionar as tabelas do sistema. Os frameworks PHP tradicionais já inclui migrations, mas pode ser que esteja em um sistema já construído que não foi pensado em migrations, imagina como é quando necessita fazer uma alteração de uma estrutura nas tabelas específica e/ou criar um tabela, enviar ALTER TABLE tabela ADD campo tipo AFTER campo; e/ou CREATE TABLE table tabela ... para todos né. Depois no deploy precisa lembrar qual foi a ordem que executou para poder executar no BD de produção.

Com migrations com Phinx, isso é mais prático e versionado, pois com um comando atualiza o BD de desenvolvimento, homologação e produção, bastando alterar o argumento especificando qual BD deseja aplicar.

Então, como aplicar o uso do migrations com Phinx na equipe de desenvolvimento? Cria um repositório a parte no Github ou Bitbucket com nome migrations. Os integrantes do time fazem fork, o clone do seu fork, adiciona o remote oficial do migrations.

1. fork do repositório migrations criado no Github ou Bitbucket
2. git clone < url repositório migrations do fork >
3. git remote add upstream < url repositório oficial migrations >
4. composer install (obviamente irá colocar o diretório vendor do projeto migrations no arquivo .gitignore, então por isso terá que executar o passo 4

Assim para cada alteração na estrutura da tabela ou criar uma tabela, cria um migrations, executa e faz o commit no seu fork e o pull request no oficial. Provavelmente no time de desenvolvimento deve ter um grupo no Slack com canais direcionados sobre o projeto, deve ter um #canal banco de dados, então nesse canal comunica para atualizar com os seguintes comandos abaixo.

O Phinx também permite popular dados na tabela, que é chamado de seed, na qual é utilizado para popular as tabelas que tem dados fixos no sistema, e.g: estados, cidades, CNAES e etc.

cd /path/diretorio/onde/salvou/clone-migrations;
git pull upstream master;
git push origin master;
vendor/bin/phinx migrate

Caso tiver seed execute
vendor/bin/phinx seed:run

Viu como fica mais organizado, automatizado e versionado usando migrations/seeds com Phinx no sistema web com PHP? Com certeza, vale a pena utilizar o migrations/seeds com Phinx no sistema web com PHP.
Ok, como usar o migrations/seeds com Phinx?
Acesse o howto [1] e tenha a certeza que se perguntará, por que não pensei nisso antes? Logo vai começar a utilizar o migrations e seeds com Phinx.

[1] https://mundodacomputacaointegral.blogspot.com.br/2017/09/automatizando-e-versionalizando-tabelas-bd-com-phinx.html

Feito!

segunda-feira, 25 de setembro de 2017

Automatizando e versionalizando as tabelas do banco de dados com Phinx

O que é Phinx ?

É uma ferramenta para escrever e executar migrations, usada inclusive pelo plugin de migrations do framework CakePHP. Atualmente os frameworks PHP populares possui recurso de migrations incluso, mas caso você esteja em um projeto que não utilize nenhum framework PHP e precisa de uma forma organizada e atualizada de controlar as alterações na base de dados, nesse caso o Phinx pode ajudar.

SGBD suportados
O Phinx suporte aos SGBDs: MySQL, PostgreSQL, SQLite, SQL Server
  • MySQL: use mysql adapter.
  • PostgreSQL: use pgsql adapter.
  • SQLite: use sqlite adapter.
  • SQL Server: use sqlsrv adapter.
Instalação do Composer
Para instalar o Phinx, precisa instalar o Composer que pode ser obtido no site https://getcomposer.org/
Windows: Após fazer o download do executável, execute e segue Next, Next e Finish

Linux
Debian:
# apt-get install curl

CentOS:
# yum install curl

Download do Composer
# curl -sS https://getcomposer.org/installer | php
Setar permissão de execução
$ chmod +x composer.phar
Mover para o diretório local
# mv composer.phar /usr/local/bin/composer

Instalação do Phinx
No diretório do projeto, execute
$ composer require robmorgan/phinx

Execute o comando seguinte para gerar o arquivo phinx.yml
$ vendor/bin/phinx init .

O arquivo phinx.yml é onde armazena as informações do banco de dados, vem montado base de produção, desenvolvimento e testes, cabe preencher as credencias do banco de dados.
Na configuração default_database define o ambiente da base default, por boas práticas, coloca-se development como default.

Assim ao executar o migrate não precisa especificar o argumento. Para atualizar a base de testes e produção, faça:
$ vendor/bin/phinx migrate -e testing
$ vendor/bin/phinx migrate -e production

Para cada tabela nova e/ou alterações na tabela já existente deve criar um migrate com o padrão CamelCase.
Estando no diretório onde instalou o phinx, o comando para criar uma migration é: vendor/bin/phinx create NomeDaMigrationCorrespondente
Com isso, irá gerar um arquivo template no diretório db/migrations com o nome da migration incluindo timestamp no nome do arquivo criado. É nesse arquivo que irá criar a tabelas e os campos. Veja o arquivo de exemplo para se basear. Após a implementação do arquivo da migrations correspondente, pode executar o comando para criar a migrations no banco, com o comando vendor/bin/phinx migrate

Tipos das colunas inclusos nas migrations (tabelas)
  • biginteger
  • integer
  • boolean
  • date
  • datetime
  • decimal
  • float
  • string
  • text
  • time
  • timestamp
  • uuid

Criar uma migration para uma tabela correspondente
$ vendor/bin/phinx create NomeDaMigrationCorrespondente
Irá gerar o arquivo correspondente ao nome da migration com timestamp no diretório db/migrations

Implementar a migration criada
Edita o arquivo db/migrations/< TIMESTAMP_nome_migration_criada >.php
Para uma nova tabela, coloca no método up() e no final aplica com o método save().
Para alteração de uma tabela já existente, coloca no método change() e no final aplica com o método update().
Nova tabela
public function up()
{
$nome_tabela = $this->table('nome_tabela');
$nome_tabela->addColumn('nome', 'string', array('limit' => 100))
->addColumn('sobrenome', 'string', array('limit' => 100))
->addColumn('email', 'string', array('limit' => 100))
->addColumn('d_criado', 'datetime')
->addColumn('d_atualizado', 'datetime', array('null' => true))
->save();
}

Alteração na tabela
public function change()
{
$nome_tabela = $this->table('nome_tabela');
$nome_tabela->addColumn('nome_coluna', 'tipo', array('after' => 'nome_coluna'))
->update();
}

Adicionar um FK na tabela
->addForeignkey('id_campo', 'tabela_relacionada', 'id', array('delete'=>'RESTRICT', 'delete'=>'RESTRICT'))


Método down
Esse método faz o oposto do método up() e change(), por exemplo, se up() esta fazendo a criação de uma tabela, no down() faz o drop table, e no change(), no down() faria retornar a alteração anterior. Veja um exemplo claro no item seguinte.
O método down() é executado quando executar o comando de roolback
vendor/bin/phinx rollback

Renomear uma tabela
Após criar a migration
public function up()
{
$nome_tabela = $this->table('nome_tabela');
$table->rename('nome_nova_tabela');
}
public function down()
{
$nome_tabela = $this->table('nome_tabela_nova');
$table->rename('nome_tabela_antiga');
}

Renomear uma coluna da tabela
public function up()
{
$nome_tabela = $this->table('nome_tabela');
$nome_tabela->renameColumn('campo_antigo', 'campo_novo');
}
public function down()
{ $nome_tabela = $this->table('nome_tabela');
$nome_tabela->renameColumn('campo_novo', 'campo_antigo');
}

Executando a(s) migration(s) para criar a(s) tabela(s) correspondente
$ vendor/bin/phinx migrate

Criar Seeds
Vimos a criação do migration que cria e/ou altera tabelas, mas se quisermos popular dados na tabela? É nesse tópico que será visto como fazer.
Criar um seed: vendor/bin/phinx seed:create NomeSeedCorrespondente
Irá gerar o arquivo para o seed correspondente no diretório db/seeds/.php

Exemplo de seed para tabela usuarios
$ vendor/bin/phinx seed:create CriaUsuarioZeferino
public function run()
{
$dados = array(
array('nome' => 'Zeferino',
'prenome' => "",
'sobrenome' => 'Silva',
'apelido' => 'Testador',
'email' => 'zeferino.silva@hotmail.com',
'senha' => '$2a$08$R2Tzm7EugyNcquA7BYIyVetLdji4XFTAhsA1A3M85zt0IUDlQis86',
'cpf' => '61813735786',
'id_usrt' => 1,
'acesso' => 0,
'status' => 1)
);
$user = $this->table("usuarios");
$user->insert($dados)
->save();
}

Executar o seed criado na tabela:
vendor/bin/phinx seed:run -s CriaUsuarioZeferino
Verifique se a(s) tabela(s) foram criadas e/ou populadas no seu BD, se foram, está correto.

Considerações finais

Após utilizar o Phinx no projeto, notou-se no time de desenvolvimento uma organização e automação no deploy na base de dados local garantindo a mesma estrutura das tabelas nos ambientes de desenvolvimento, homologação e produção.
Espera-se que possa ser útil no seu time de desenvolvimento no projeto em PHP também.

Referência
http://docs.phinx.org/en/latest
Feito!

segunda-feira, 18 de setembro de 2017

Git deploy na VPS

Considerando que já tenha configurado o ambiente e esteja funcionando na VPS, incluindo o GIT. Chegou a hora de automatizar o deploy da aplicação. Esse é o objetivo deste post.

Na VPS cria dois diretórios, uma para o repositório e outro para aplicação.
repositório: /var/repo/projeto.git
aplicação: /var/www/html/projeto

# mkdir /var/repo
# mkdir /var/repo/projeto.git
# cd /var/repo/projeto.git
# git init --bare
# cd hooks
# vim post-receive


#!/bin/bash
git --work-tree=/var/www/html/projeto --git-dir=/var/repo/projeto.git checkout -f

ESC +:wq

# chmod +x post-receive
# chown -R usuario:usuario /var/repo/projeto.git
# mkdir /var/www/html/projeto
# chown R www-data:www-data /var/www/html/projeto


Agora na máquina de desenvolvimento, adicione o remote do repositório do projeto criado na VPS
Acesse o diretório do projeto, execute
Adicionar o repositório deploy da VPS no remote
git remote add deploy ssh://usuario@IP_VPS/var/repo/projeto.git
No meu caso, tenho os seguintes remotes: upstream do repositório oficial, origin do fork do repositório e deploy do repositório da VPS.

git add .
git commit -m "primeiro commit"
git push origin master
git push deploy master

Para visualizar os commits
git log --all --graph --decorate --oneline
Caso ocorra algum erro de permissão, execute o hooks/post-receive manualmente
#cd /var/repo/projeto.git/hooks
#./post-receive

Feito!

sábado, 16 de setembro de 2017

Configurando ambiente de desenvolvimento PHP com framework CakePHP

O que é CakePHP ?

CakePHP é um framework PHP que tem os principais objetivos, oferecer uma estrutura que possibilite aos programadores PHP de todos os níveis desenvolverem aplicações robustas rapidamente, sem perder flexibilidade. O CakePHP utiliza conceitos de engenharia de software e padrões de projeto, tais como: ActiveRecord, Association Data Mapping, Front Controller e MVC (Model-View-Controller). Lançado em Abril de 2005, com licença MIT, até a data de publicação deste post, a versão estável é 3.5.

Requisitos para executar o CakePHP
Servidor HTTP Server, por exemplo: Apache, Nginx, com módulo rewrite habilitado
PHP >= 5.6.4
OpenSSL PHP Extension
PDO PHP Extension
Mbstring PHP Extension
mbstring PHP Extension
Tokenizer PHP Extension
intl PHP Extension
simplexml PHP Extension
Caso não tenha o Apache, SGBD MySQL e PHP instalado, segue o howto Configurando ambiente PHP 7 no Debian e CentOS , se caso já tiver, vá para a próxima etapa.

Instalando os requerimentos
Mbstring PHP Extension
Debian:
PHP 5.6 # apt-get install php5-mbstring
PHP 7 # apt-get install php7.0-mbstring
CentOS:
PHP 5.6 # yum install php56w-mbstring
PHP 7 #yum install php7-mbstring
Debian: #apt-get install php-tokenizer
XML PHP Extension
Debian: #apt-get install php-xml

Instalando o Composer
Debian:
# apt-get install curl
CentOS:
# yum install curl
Download do Composer
# curl -sS https://getcomposer.org/installer | php
Setar permissão de execução
$ chmod +x composer.phar
Mover para o diretório local
# mv composer.phar /usr/local/bin/composer
Atualizar o Composer
# composer self-update

Instalação do CakePHP no Document Root do servidor HTTP
Nesse howto, é abordado o servidor HTTP Apache, no caso em Linux, o document root é /var/www/html É necessário executar para permissão no seu usuário
# chown -R usuario:usuario /var/www/html/projeto
Execute o comando no diretório correspondente ao document root
$composer create-project --prefer-dist cakephp/app projeto

Criar um VirtualHost para o projeto
# vim /etc/apache/sites-available/projeto.conf

ServerAdmin webmaster@localhost
DocumentRoot "/var/www/html/projeto/public"
ServerName http://projeto
ErrorLog "logs/projeto-error.log"
CustomLog "logs/projeto-access.log" common

DirectoryIndex index.php index.html index.htm
AllowOverride All
Order allow,deny
Allow from all


ESC +:wq (salva e sai do editor Vim)

Ativar o VirtualHost
# ae2nsite projeto.conf
Habilitar o módulo rewrite
# a2enmod rewrite
Reload das configurações feitas no Apache
# service apache2 reload
Após criar o VirtualHost do projeto, acessa pelo browser http://IP/projeto
Feito!

quarta-feira, 30 de agosto de 2017

Habilitar Conexão remota no MySQL

De acordo com as boas práticas de planejamento na arquitetura de infraestrutura do projeto, separar o servidor de BD do servidor da APP, por segurança, desempenho e escalabilidade. O presente post, explica os procedimentos necessários para que conecte remotamente ao servidor de BD no SGBD MySQL.

Estando com o MySQL instalado, segue os procedimentos abaixo>
Debian 7/8
# vim /etc/mysql/my.cnf
Debian 9
# vim /etc/mysql/mariadb.conf.d/50-server.cnf
Alterar bind-address = 127.0.0.1 por bind-address = 0.0.0.0

Reiniciar o MySQL
# /etc/init.d/mysql restart

Conceder permissão para que o usuário acesse o BD a partir de qualquer IP
# mysql -u root -p
# GRANT ALL PRIVILEGES ON *.* TO 'usuario'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
# FLUSH PRIVILEGES;


Feito!

segunda-feira, 28 de agosto de 2017

Criando database, usuário e permissão ao usuário no MySQL

No presente post, o objetivo é criar o banco de dados, usuário e permissão de acesso ao banco de dados criado, no SGBD MySQL via CLI (terminal).

Estando com o MySQL instalado, segue os procedimentos abaixo:
Logando como root
# mysql -u root -p
Enter password: < digite a senha de root que foi definida na instalação do MySQL >

Criando database
mysql> create database exemplo character set utf8;
Query OK, 1 row affected (0.00 sec)


Criando usuário para o database
mysql> create user 'usuario'@'localhost' IDENTIFIED BY 'password';

Criando privilégios de acesso ao database ao usuário
mysql> GRANT ALL PRIVILEGES ON exemplo.* TO usuario@localhost WITH GRANT OPTION; Query OK, 0 rows affected (0.00 sec)
mysql> quit

Bye

Com isso, preserva o usuário root do MySQL por segurança.

Feito!

segunda-feira, 21 de agosto de 2017

6 anos de blog

O blog esta completando hoje, 21 de Agosto de 2017, 6 anos!

Gostaria de agradecer a todos pelo prestígio e a paciência de ler os posts que são publicados. Espero continuar compartilhando conhecimentos no blog para nossos leitores. Continuem prestigiando e divulgando o blog Mundo da Computação Integral, assim aumentamos nossa comunidade.

sábado, 15 de julho de 2017

Guia prático GIT

O que é Git ?

Git é um sistema de controle de versão distribuído, desenvolvido por Linus Torvalds para o Kernel Linux, tem sido utilizado em diversos projetos pessoais e/ou por uma equipe de desenvolvedores.
Git tem ser tornado o melhor sistema de versionamento utilizado em projetos de software.
Depois de conhecer o Git, podemos instalar-lo no SO que usa, verificar a lista de comandos mais utilizadas do Git e praticá-lo.

Frontend do Git: Github, Bitbucket, Gitlab

Download do Git
Git Bash for Windows

No Linux
Debian: # apt-get install git-core

CentOS: # yum install git

Configurações

O local das configurações do Git são armazenadas no diretório de usuário do Sistema Operacional no arquivo .gitconfig
Ex: Windows: C:\Users\Reginaldo\.gitconfig e Linux: /home/reginaldo/.gitconfig

As informações armazenadas no comando seguinte são armazenadas no arquivo mencionado acima.
Setar usuário: git config --global user.name "Reginaldo"
Setar e-mail: git config --global user.email "usuario@dominio.com"
Setar editor: git config --global core.editor vim
Setar ferramenta de merge: git config --global merge.tool vimdiff
Setar arquivos a serem ignorados: git config --global core.excludesfile ~/.gitignore

Lista de comandos mais utilizados
git init : usado para iniciar um repositório local do git(Esse comando criar um diretório .git com vários arquivos de configuração).

git add ou git add . : Esse comando adiciona arquivos ao index, isso prepara os arquivos para um novo commit.
A diferença de um para outro é que o git add . adiciona todos os arquivos na index e o outro é individual.

git commit -m "comentário" : Adiciona uma mensagem ao commit do arquivo adicionado.

git remote add origin : Esse comando vincula o alias origin a um repositório remoto.

git push origin master : Esse comando enviar os arquivo que estão no estagio HEAD (arquivos comitados) para o servidor remoto.
No comando acima você deve ter notado ORIGIN e o MASTER, o origin é um alias para o repositório remoto ex: origin = https://github.com/user/repositorio.git e master é um alias para o branch local Eex: master = workdir/repositorio.

git pull ou git pull origin master : Esse comando obtém os atualizações do repositório remoto para o branch master ou um branch especifico. você deve usa-lo sempre antes de começar a alterar os arquivo para não ter conflito com a versão que está no repositório remoto.

git clone : Esse comando cria uma cópia no diretório atual do repositório local ou remoto.

git checkout -b : Esse comando cria uma nova branch com um nome especifico com ele você também pode navegar entre os branchs (Ex: git checkout master para voltar ao master). Você pode criar quantos branchs quiser e depois junta-los criando um merge.

git remote show origin : Esse comando lista a url do alias origin do repositório remoto.

git remote add origin (url) : Esse comando adiciona um novo repositório remoto ao alias origin.

git remote set-url origin (nova url) : Esse comando muda a url atual do alias origin para um novo repositório remoto.

git log --decorate --graph --oneline : Esse comando exibi um log detalhado e colorido com os commit realizados e o status das branchs.

git merge nomedobranch : Como o nome já sugere ese comando faz a junção de um branch em outro branch selecionado.

git checkout hashdocommit : Esse comando da um rollback para o commit especificado.

git reset –hard HEAD~1 : Um dos n comandos usados para revert um commit, similar ao rollback no svn.

git branch -d nomebranch : Esse comando deleta um branch local.

git push origin --delete nomebranch : Esse comando deleta um branch remoto.

git blame [caminho-arquivo-projeto] : Esse comando exibe a última modificação de quem escreveu.

git bisect start [--term-{old,good}= --term-{new,bad}=] : Esse comando pesquisa o commit que introduziu o bug.

Atualização do fork com o repositório oficial
git remote add upstream < end-oficial >: Adiciona a url do repositório oficial junto ao seu fork no repositório local

git fetch upstream: Atualiza o seu fork com o repositório oficial

git merge upstream/master master: Aplica o merge do fork com o oficial

Considerações finais
Caso ainda não tenha conta no Github ou Bitbucket ou Gitlab, cria uma conta, um repositório e os commits dos arquivos correspondente ao seu projeto. É bom ressaltar que esses citados são frontend do Git para gerenciar os versionamentos de arquivos do projetos pela interface web. Como o Git é um sistema de controle de versão distribuído, pode-se usar os protocolos SSH ou FTP ou HTTP como servidor que ficarão os arquivos do projeto.

Referência
https://git-scm.com/book/pt-br/v2
Feito!

domingo, 21 de maio de 2017

Configurando ambiente de desenvolvimento PHP com framework Laravel

O que é Laravel?

Laravel é um framework PHP criado por Taylor Otwell. Laravel foi lançado em 09 de Junho de 2011.

O Laravel permite que se mantenha o foco em um projeto, minimizando a quantidade de código necessário para uma dada tarefa.

Laravel foi desenvolvido sobre o paradigma da programação Orientada a Objetos sob o padrão de arquitetura de software MVC.

Depois de conhecer o Laravel e para que serve, podemos seguir os procedimentos de configuração no ambiente de desenvolvimento PHP com Laravel na distribuição Linux Debian e/ou CentOS/RHEL/Fedora.

Instalação dos pré-requisitos

Antes é necessário instalar o servidor Apache ou Nginx, PHP e SGBD MySQL ou PostgreSQL. No presente howto será instalado o Apache, PHP e SGBD MySQL/MariaDB.

Requerimentos do Laravel
  • PHP >= 5.6.4
  • OpenSSL PHP Extension
  • PDO PHP Extension
  • Mbstring PHP Extension
  • Tokenizer PHP Extension
Caso não tenha o Apache, SGBD MySQL e PHP instalado, segue o howto Configurando ambiente PHP 7 no Debian e CentOS , se caso já tiver, vá para a próxima etapa.

Instalando os requerimentos
Mbstring PHP Extension
Debian:
PHP 5.6 # apt-get install php5-mbstring
PHP 7 # apt-get install php7.0-mbstring

CentOS:
PHP 5.6 # yum install php56w-mbstring
PHP 7 #yum install php7-mbstring

Tokenizer PHP Extension
Debian: #apt-get install php-tokenizer
XML PHP Extension
Debian: #apt-get install php-xml

Instalando o Composer
Debian:
# apt-get install curl

CentOS:
# yum install curl

Download do Composer
$ curl -sS https://getcomposer.org/installer | php
Setar permissão de execução
$ chmod +x composer.phar Mover para o diretório local
# mv composer.phar /usr/local/bin/composer
Atualizar o Composer
# composer self-update

Modos de instalação do Laravel
Escolha um dos modos de sua preferência

1. Global
$ composer global require "laravel/installer"
Depois de instalado, execute o comando laravel new projeto

2. Create-projet
No diretório raiz do servidor web (Apache ou Nginx)
$ composer create-project --prefer-dist laravel/laravel projeto

Servidor PHP embutido
$ php artisan serve
Irá exibir server at http://localhost:8000
Abre no browser e irá aparecer a página de boas vindas default do Laravel.
Isso se o projeto não tiver no diretório raiz do servidor web (Apache, Nginx)
Caso queira executar o projeto no servidor web, colocar o projeto no diretório raiz do servidor web e startar o serviço do Apache ou Ngninx, por fim acessar no browser http://localhost/projeto

Referências
https://laravel.com/docs/5.4
Feito!

sábado, 13 de maio de 2017

Configurando ambiente de desenvolvimento PHP com framework CodeIgniter

O que é CodeIgniter?

CodeIgniter é um framework PHP. A primeira versão pública do CodeIgniter foi lançada em 28 de fevereiro de 2006.

O CodeIgniter permite que se mantenha o foco em um projeto, minimizando a quantidade de código necessário para uma dada tarefa.

CodeIgniter foi desenvolvido sobre o paradigma da programação Orientada a Objetos sob o padrão de arquitetura de software MVC, mas também já dá suporte à metodologia HMVC, um nível hierárquico acima, absorvendo cada tríade MVC, tornando-a modular e, até certo ponto, independente das demais. Por ser mais recente e não nativo do CodeIgniter, o HMVC exige o download de alguns arquivos e a criação do diretório Modules para que funcione corretamente.

Depois de conhecer o CodeIgniter e para que serve, podemos seguir os procedimentos de configuração no ambiente de desenvolvimento PHP com CodeIgniter na distribuição Linux Debian e/ou CentOS/RHEL/Fedora.

Observação: A versão atual estável do CodeIgniter é 3.1.4 até a data de publicação deste post.

Instalação dos pré-requisitos

Antes é necessário instalar o servidor Apache ou Nginx, PHP e SGBD MySQL ou PostgreSQL. No presente howto será instalado o Apache, PHP e SGBD MySQL/MariaDB.

Debian: # apt-get install git-all
CentOS: #yum install git-all
Windows: Instale o Git Bash Git Bash
Se ainda não tem o ambiente PHP 7 no Windows, clique no link XAMPP e escolha o Setup Xampp com a versão do PHP 7. Faça o download e instale como qualquer software do Windows.
Se ainda não tem o ambiente PHP 7 no Debian ou CentOS, clique no link abaixo, caso já tenha ambiente PHP configurado, vá direto no próximo item do Howto.
Configurando ambiente PHP 7 no Debian e CentOS

Procedimentos de Configuração CodeIgniter
Substitua pelo seu usuário/grupo
No Linux:
# chown -R reginaldo:reginaldo /var/www/html/
$ cd /var/www/html
$ git clone "https://github.com/bcit-ci/CodeIgniter.git"
$ mv CodeIgniter/ projeto

No Windows:
Abre o Git Bash e acesse até o diretório c:/xampp/htdocs.
Considerando que fez a instalação default do XAMPP.
Execute: git clone "https://github.com/bcit-ci/CodeIgniter.git"
Move o nome default para o nome do projeto mv CodeIgniter/ projeto

NOTA: Remover o diretório oculto .git/ para não conflitar com as alterações feitas, pois esse não será versionado com o repositório do CodeIgniter, apenas no repositório do seu projeto.
$ rm -rf .git

Se for ambiente local: http://localhost/projeto
Caso seja ambiente na intranet: http://IPSERVIDOR/projeto
Se exibir a página default do CodeIgniter, como no screenshot, está correto.

Referências:
https://www.codeigniter.com/user_guide/
Feito!

segunda-feira, 9 de janeiro de 2017

Configurando servidor web Nginx integrado com PHP

Em servidores web, o mais comum ser utilizado é o Apache, porém existe outro servidor web bastante conhecido e com excelente desempenho de performance. O Nginx.

O presente howto explicará os procedimentos de instalação e configuração do servidor web Nginx integrado com PHP na distro Debian 8 e CentOS 7.

No Debian 8
# apt-get update
# apt-get install nginx php5-fpm php5 php5-mysql php5-mcrypt php5-gd php5-mysql mysql-server


No CentOS 7
# yum install epel-release
# yum update
# yum -y install nginx php php-gd php-mysql mysql-server


Startar o serviço Nginx
# service nginx start

Habilitar no boot
# systemctl enable nginx

O diretório root padrão do Nginx é /usr/share/nginx/www , mas vou alterar para deixar o mesmo diretório root do Apache, no caso /var/www/html

# mkdir -p /var/www/html

Ajustes de configuração para Nginx # vim /etc/php5/fpm/php.ini
Procure a linha cgi.fix_pathinfo=1 e troque 1 por 0
cgi.fix_pathinfo=0
# mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default.orig

Se quiser ativar o SSL no Ngnix, precisará gerar o certificado auto-assinado e a chave.
Segue os procedimentos:
Criar certificados SSL auto-assinados
No Debian
# apt-get install openssl ca-certificates
No CentOS
# yum install openssl
Criar os diretórios para o certificado e a chave
# mkdir /etc/ssl/nginx/certs
# mkdir /etc/ssl/nginx/private


Criando os certificados auto-assinados
#openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/nginx/private/serverwww.key -out /etc/ssl/nginx/certs/serverwww.crt

Ajuste de permissão
chmod 600 /etc/ssl/nginx/private/serverwww.key
chmod 600 /etc/ssl/nginx/certs/serverwww.crt


Backup do arquivo default de configuração
# mv /etc/nginx/sites-available/default /etc/nginx/sites-available/default.orig
Criar o arquivo default novo de configuração
# vim /etc/nginx/sites-available/default
server {
  listen 80;
  listen 443 ssl;
  ssl_certificate /etc/ssl/nginx/certs/serverwww.crt;
  ssl_certificate_key /etc/ssl/nginx/private/serverwww.key;

  ssl_session_cache shared:SSL:10m;
  ssl_session_timeout 5m;

  ssl_ciphers "EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 
EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4
EECDH EDH+aRSA RC4 !EXPORT !aNULL !eNULL !LOW !3DES
!MD5 !EXP !PSK !SRP !DSS"; ssl_prefer_server_ciphers on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #root /usr/share/nginx/www; root /var/www/html; index index.php index.html index.htm; server_name www; location / { try_files $uri $uri/ /index.html; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { #root /usr/share/nginx/www; root /var/www/html; } ### Redirects e rewrites # Remove barras no final do endereço rewrite ^/(.*)/$ /$1 permanent; # Redirectiona antigas requisições para wp-contents rewrite ^/wp-content/.*/(.*)$ /$1/images/$2 permanent; ### Locations location ~* \.(js|css)$ { # Configurações para JavaScripts e CSS gzip_static on; # Compressão GZIP ativada expires 1w; # Browser cache de 1 semana } location ~* \.(jpg|jpeg|png|gif|ico)$ { # Configurações para imagens gzip_static on; # Compressão GZIP ativada expires 2w; # Browser cache de 2 semana } # pass the PHP scripts to FastCGI server listening on the php-fpm socket location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
Crie um arquivo info.php no diretório root configurado
< ?php
 phpinfo();
 ? >
Reinicie o serviço php5-fpm e Nginx
# /etc/init.d/php5-fpm restart
# /etc/init.d/nginx restart


Acesse no browser: http://IPSERVIDOR/info.php ou https://IPSERVIDOR/info.php
Feito!

quinta-feira, 5 de janeiro de 2017

Configurando OSSN na sua Intranet ou VPS

O que é OSSN?

OSSN é uma rede social desenvolvida em PHP com os mesmos recursos do Facebook. Pode ser usada como rede social na Intranet ou VPS, sendo apenas por funcionários da empresa, tornando uma rede social corporativa.

Depois de conhecer o OSSN, podemos instalar e configurar no seu servidor GNU/Linux Debian 8 na Intranet ou VPS.

1. Instalação dos pré-requisitos do OSSN
1.1 Instalação do Apache, PHP e MySQL
PHP 5.6
# apt-get install apache2 php5 php5-cli mysql-server php5-curl php5-gd php5-mcrypt php5-mysql mysql-server

PHP 7
No Debian 8.x
Adicionar no arquivo /etc/apt/sources.list as linhas abaixo
# echo -e "deb http://packages.dotdeb.org jessie all\n deb-src http://packages.dotdeb.org jessie all" >> /etc/apt/sources.list
Adicionar a chave GPG
# wget https://www.dotdeb.org/dotdeb.gpg
# apt-key add dotdeb.gpg

# apt-get apache2 php7.0 libapache2-mod-php7.0 php7.0-gd php7.0-curl php7.0-mcrypt php7-mysql mysql-server

1.2 Ajuste no PHP
Editar o arquivo php.ini
# vim /etc/php5/apache2/php.ini
Deixe como abaixo
allow_url_fopen = On
file_uploads = On
upload_max_filesize = 32M
ESC +:x (salva e sai do editor Vim)

2. Criação do banco, usuário e permissão de privilégios
# mysql -u root -p
Enter password: < digite a senha de root que foi definida na instalação do MySQL >

Criando o banco ossn
mysql> create database ossndb character set utf8;
Query OK, 1 row affected (0.06 sec)

Criando o usuário para o banco ossn
mysql> create user 'ossn'@'localhost' IDENTIFIED BY 'ossn_senha';
Query OK, 0 rows affected (0.10 sec)

Criando permissão de privilégios no banco ossn para o usuário ossn
mysql> GRANT ALL PRIVILEGES ON ossn.* TO ossn@localhost WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye


2.1 Download e configuração do OSSN
# mkdir /opt/ossn && cd /opt/ossn
# wget -c "https://www.opensource-socialnetwork.org/downloads/ossn-v4.3.1-1480759958.zip" -O ossn.zip
# unzip ossn.zip -d /var/www/html
# mkdir -p /var/www/ossn_data
# chown www-data:www-data -R /var/www/html/ossn/

3. Setup de instalação do OSSN
Acesse no browser http://IPouDOMINIO/ossn
Preenche os dados solicitados correspondente ao banco de dados e por fim os dados na conta de administrador.
PS: Pode ser instalado na raiz ao invés do /ossn

4. Certificado SSL
4.1 Criar certificados SSL auto-assinados
Caso queira acessar com HTTPS é necessário gerar o certificado SSL auto-assinado.
# apt-get install openssl ca-certificates

#openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/ossn.key -out /etc/ssl/certs/ossn.crt

4.1 Ajuste de permissão
# chmod 600 /etc/ssl/private/ossn.key
# chmod 600 /etc/ssl/certs/ossn.crt


5. Criando VirtualHost para OSSN
# cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/ossn.conf
# vim /etc/apache2/sites-available/ossn.conf
Altere as linhas correspondentes ao certificado gerado por openSSL
  # Caminhos para os dados de certificado
  SSLCertificateFile /etc/ssl/certs/ossn.crt
  SSLCertificateKeyFile /etc/ssl/private/ossn.key
ESC +:x (salva e sai do editor Vim)

5.1 Habilitar o VirtualHost
# a2ensite ossn.conf

5.2 Habilita SSL
# a2enmod rewrite ssl

5.3 Reinicia o Apache
# service apache2 restart

Após finalizar, acesse via https://IPouDOMINIO/ossn ou caso instalou diretamente na raíz sem /ossn https://IPouDOMINIO
Crie uma conta da mesma forma como o Facebook, que enviará o link de ativação no e-mail fornecido na criação da conta de perfil.
Acesso de administração do OSSN: https://IPouDOMINIO/ossn/administrator
Use a conta que definiu na última etapa de instalação para a conta de admin com a respectiva senha.
Feito!