This Project aim is to create a isolated processes for php enabled sites using PHP-FPM. This process will be owned by a specific linux user. To ensure this, this script creates a new user, group and a php-fpm pool owned by the user.
Just download or clone the project and assign execute permission to the create_site file.
sudo chmod +x create_siteThen type
sudo ./create_site <site name>In order
- Check if
phpis installed and his version is greater than or equals to 5.x - Check if
nginxwebserver is installed - Check if
php-fpmis installed and his version is greater than or equals to 5.x - Creates a new linux
userandgroupwith the same name of the site - Creates the following directories:
/var/www/<site name>(to hold site files)/var/log/nginx/<site name>(to hold site log files)/var/lib/mysql/<site name>(if you plan to use mysql as database)
After the directory and user creation phases, the script will create a new php-fpm pool configuration under /etc/<php path>/fpm/pool.d/<site name>.conf using templates/<php version folder>/php_fpm_pool.template as template. Feel free to modify this file to match your own needs.
After that, there should be a running site using an dedicated php-fpm pool owned by the site owner. This user has the same name provided as site name. The pool configuration file will be in: path /etc/<php version>/fpm/pool.d/<nome do site>.conf.
Example: if the site's name provided as argument to the script is api_v2 in an environment with php5andphp5-fpm` enabled, then, a pool configuration file will be created under the path:
/etc/php5/fpm/pool.d/api_v2.confYou can open this file and made your own changes to configure the pool. You must to restart the php-fpm service. In Debian based distros (Ubuntu is a Debian based distro) you can list these services by typing the following command: ls /etc/init.d/. To list only the php-fpm related services type:
ls /etc/init.d/ | egrep '^php.+-fpm$'This command lists only services related to php-fpm. The regular expression provided as argument to the egrep command '^php.+-fpm$', matches all services that begins with php and ends with -fpm.
If the outut result is php5-fpm, so you must to type:
sudo service php5-fpm restartIn case of failure, check the fpm log file under /var/log/<service name>.log. In our case, the complete path to this file is: /var/log/php5-fpm.log.
You can use an text editor to browse the file contents or you can type:
cat /var/log/php5-fpm.logTo see the file contents in the default stdout, in this case, the terminal.
The followed approach to do this tool was based in this tutorial How To Host Multiple Websites Securely With Nginx And Php-fpm On Ubuntu 14.04 .
This is a alpha version tested only in docker containers. The development is in this initial phase and there are a lot of work to be done until a stable version be releasead. You can contribute to this project if you want by doing one of these thigs: finding bugs, correcting the code, translating, pointing possibles use cases. Feel free to do what you want. You can contact me at: sereno.desenvolvimento@gmail.com
TODO
- Fix a lot of bugs
- Add messages in other languages than portuguese
- Allow more flexibility by adding options
- Write documentation
- Build a docker image that will contain this tool as a default system tool
O objetivo deste projeto é criar processos isolados para sites php usando o PHP-FPM. Este processo será de propriedade de um usuário linux. Para garantir isso, esse script cria um novo usuário, grupo e um pool php-fpmde propriedade do usuário.
Faça download ou clone o projeto e dê permissão de execução ao arquivo create_site.
sudo chmod +x create_siteEntão digite
sudo ./create_site <nome do site>Na ordem
- Checa se o
phpestá instalado e sua versão é igual ou maior que 5.x - Checa se o
nginxwebserver está instalado - Checa se o
php-fpmestá instalado e sua versão é igual ou maior que 5.x - Cria um novo
usuárioegrupocom o mesmo nome do site - Cria os seguintes diretórios:
/var/www/<nome do site>(aqui ficaram os arquivos do site)/var/log/nginx/<nome do site>(arquivos de log)/var/lib/mysql/<nome do site>(para armazenar arquivos do mysql caso você pretenda usar)
Depois da fase de criação de diretórios, o script cria uma nova configuração para o pool php-fpm no caminho /etc/<php path>/fpm/pool.d/<site name>.conf usando templates/<pasta com a versão do php>/php_fpm_pool.template como template. Sinta-se livre para modificar este arquivo com suas próprias configurações.
Depois disso, deverá existir um site em funcionamento, usando um php-fpm pool próprio, controlado pelo usuário de mesmo nome do site. O arquivo de configuração do pool será: path /etc/<versao php>/fpm/pool.d/<nome do site>.conf.
Exemplo: caso o nome do site passado como argumento para o script seja api_v2 em um ambiente com php5 e php5-fpm habilitado, Será criado então um arquivo de configuração do pool no caminho:
/etc/php5/fpm/pool.d/api_v2.confVocê pode abrir este arquivo e configura-lo do jeito que quiser. Mas não esqueça de reiniciar o serviço php-fpm rodando na sua máquina. Em ambientes baseados em Debian (Ubuntu é baseado no Debian) você pode listar estes serviços digitando o seguinte comando ls /etc/init.d/. Para listar apenas os serviços instalados pelo php-fpm digite:
ls /etc/init.d/ | egrep '^php.+-fpm$'Este comando irá listar apenas os serviços relativos a php-fpm. E expressão regular fornecida como parametro pro comando egrep '^php.+-fpm$', vai encontrar todos os serviços começando em php e que terminam com -fpm.
Caso o resultado seja php5-fpm, digite então:
sudo service php5-fpm restartEm caso de falha, confira o log do fpm que geralmente encontra-se em /var/log/<nome do serviço>.log. No nosso caso, o caminho completo para este arquivo é: /var/log/php5-fpm.log.
Você pode usar um editor de texto para ver as mensgens dentro deste arquivo ou pode simplestemente digitar:
cat /var/log/php5-fpm.logpara ver o conteúdo do arquivo na saída padrão, neste caso o próprio terminal.
O aproach seguido, foi baseado neste tutorial How To Host Multiple Websites Securely With Nginx And Php-fpm On Ubuntu 14.04 Esta é uma versão alpha que está sendo testada em container docker. Está em fase inicial de desenvolvimento e ainda há muito trabalho a ser feito até atingir o estágio de versão estável. Quem quiser, pode se envolver no projeto, corrigingo bugs, traduzindo, apontando possíveis usos. Sinta-se a vontade. Para entrar em contato mande-me um email para: sereno.desenvolvimento@gmail.com
TODO
- Resolver um monte de bugs
- Dar suporte a outras linguas (as mensagens estão direto nas functions, retirar isso pra um arquivo separado)
- Dar a possibilidade do usuário informar opções ao executar o script
- Escrever documentação
- Construir uma imagem docker que usará o script como ferramenta default