Érico Andrei
Posts do blog publicados pelo Cleber
Varnish 3, Plone 4: Discutindo a Relação.
Não preciso dizer o quanto a PythonBrasil [7] foi um sucesso :-D , infelizmente não tive como ver todas as palestras o que seria bizarro conseguir, dado que não sou onipresente. Apesar da minha palestra ter sido em uma sexta-feira no final do dia eu pude extrapolar o tempo, e ainda ficou faltando diversos detalhes.
Um detalhe importante é que o @ericof apareceu e também participou da palestra, conhecidencia ou não, ocorreu após eu ter invocado seu nome 3 vezes. Em minha apresentação pude mostrar o quanto o Varnish é poderoso, e o quanto a combinação Varnish [3] e Plone [4] pode ser igual a [42].
Buildout, para o que der e vier Parte 2
O buildout.
[buildout] parts = ... supervisor nginx-build nginxctl default-server-config ... [nginx-build] recipe = zc.recipe.cmmi url = http://nginx.org/download/nginx-1.0.4.tar.gz extra_options = --with-http_gzip_static_module --with-http_stub_status_module --with-http_dav_module --with-http_ssl_module --with-http_flv_module --http-client-body-temp-path=${buildout:directory}/tmp --http-proxy-temp-path=${buildout:directory}/tmp/proxy --http-fastcgi-temp-path=${buildout:directory}/tmp/fastcgi --with-md5-asm --with-md5=/usr/include --with-sha1-asm --with-sha1=/usr/include --with-http_realip_module [nginxctl] recipe = gocept.nginx nginx = nginx configuration = daemon off; worker_processes 1; events { worker_connections 1024; } http { include ${nginx:location}/conf/mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; include ${buildout:directory}/etc/nginx.conf; } [default-server-config] recipe = collective.recipe.template input = ${buildout:directory}/etc/nginx.conf.in output = ${buildout:directory}/etc/nginx.conf [supervisor] recipe = collective.recipe.supervisor logfile = ${buildout:directory}/var/log/supervisord.log logfile-backups = 10 loglevel = info pidfile = ${buildout:directory}/var/supervisord.pid plugins = superlance user = admin password = secret port = 9001 programs = 10 fcgi ${buildout:directory}/parts/fcgi/bin/spawn-fcgi [ -a 127.0.0.1 -p 53217 -P ${buildout:directory}/tmp/fastcgi-php.pid -- /usr/bin/php-cgi] true 20 nginx ${buildout:directory}/parts/nginxctl/sbin/nginx [ -c ${buildout:directory}/parts/nginxctl/nginxctl.conf] true
Então crie estes dois diretórios e vamos seguir em frente, também teremos que criar dentro do diretório etc um arquivo com o nome nginx.conf, este contém as configurações para rodar-mos o WP, abaixo o conteúdo deste arquivo.
server { listen 80; server_name *.meusite.com; rewrite ^ http://www.meusite.com$request_uri permanent; } server { location / { root /home/cleber/buildout/wordpress; index index.php index.html index.htm; fastcgi_index index.php; # this sends all non-existing file or directory requests to index.php if (!-e $request_filename) { rewrite ^(.+)$ /index.php?q=$1 last; } autoindex on; } location = /favicon.ico { empty_gif; log_not_found off; access_log off; } # Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac). location ~ /\. { deny all; access_log off; log_not_found off; } try_files $uri $uri/ /index.php; location ~ \.php$ { include /home/cleber/buildout/parts/nginx-build/conf/fastcgi_params.default; fastcgi_pass 127.0.0.1:53217; fastcgi_param SCRIPT_FILENAME /home/cleber/buildout/wordpress/$fastcgi_script_name; } }
./bin/supervisord
Nota. Vale lembrar que a porta 80 só pode ser aberta pelo root ou por um usuário com poder igual, neste caso estamos falando que o comando acima deverá ser rodado por um usuário com poderes de sudo ou root.
Até a próxima!
Buildout, para o que der e vier
Começo dizendo que durante algum tempo fui assombrado pelo buildout, desde a minha entrada na Simples até alguns meses depois, eu tremia sempre que eu tinha de rodar um, a primeira coisa que vinha na cabeça era: "Pronto, agora o ambiente vai ser destruído :(".
Trabalhar com alho no pescoço, pé de coelho e até mesmo trevo de 4 folhas não estava em meu escopo de trabalho, e não é muito meu tipo, pois bem, depois de algumas brigas decidi me tornar o melhor amigo do buildout, após alguns copos de café, e saindo juntos, decidimos fazer as pazes.
Hoje posso garantir, que em qualquer situação onde preciso instalar alguma aplicação que vá ou não rodar com o Plone, penso no meu amigo buildout.
Duas pessoas que me tiraram esse medo e me deram coragem foi o amigo e inesquecível Dorneles, e também o amigo Érico.
E agora a novidade é que não vou falar de como instalar Plone usando buildout, isso tudo para poder mostrar todo o poder do buildout, caso não saiba ainda do que estou falando acesso em http://www.buildout.org/docs/tutorial.html.
Buildout
- É simples de usar e de manter se você fizer configurações simples e legíveis.
- Trabalha com eggs.
- Evita conflitos com os pacotes instalados no site_packages.
- Evita a instalação diretamente no Python do sistema.
- Instala dependências a partir das definições dos eggs.
- Podemos instalar por exemplo:
- Bancos de dados: PostgreSql, Mysql, Oracle e etc...
- Serviço de autenticação como o LDAP.
- Aplicações como: Versões diferentes de Python, Varnish,Squid, Supervisor e etc..
- Frameworks: Django, Web2Py, Zope
- CMS: Plone, WordPress e etc..
- Servidores web: Apache, Nginx e etc...
- E etc...
|- tmp|- etc|- src
Instalando o WordPress usando Python, ironia?
[buildout] parts = fcgi wp [wpconf] wpversion = latest.tar.gz mydb_name = wp mydb_user = wp mydb_pass = wpnginx mydb_charset = utf8 mydb_host = localhost [downloads] wp_url = http://wordpress.org/${wpconf:wpversion} fcgi_url = http://www.lighttpd.net/download/spawn-fcgi-1.6.3.tar.gz [ports] fastcgi = 53217 [fcgi] recipe = zc.recipe.cmmi url = ${downloads:fcgi_url} configure-options = --prefix=${buildout:directory}/parts/fcgi [wp] recipe = plone.recipe.command command = chmod 600 .installed.cfg if [ ! -f ${buildout:directory}/${wpconf:wpversion} ]; then wget ${downloads:wp_url}; fi tar xzf ${wpconf:wpversion} cp ${buildout:directory}/wordpress/wp-config-sample.php ${buildout:directory}/wordpress/wp-config.php ln -dfs ${buildout:directory}/wordpress ${buildout:directory}/var/www/wordpress sed -i "s/define('DB_NAME', 'database_name_here')/define('DB_NAME', '${wpconf:mydb_name}')/" ${buildout:directory}/wordpress/wp-config.php sed -i "s/define('DB_USER', 'username_here')/define('DB_USER', '${wpconf:mydb_user}')/" ${buildout:directory}/wordpress/wp-config.php sed -i "s/define('DB_PASSWORD', 'password_here')/define('DB_PASSWORD', '${wpconf:mydb_pass}')/" ${buildout:directory}/wordpress/wp-config.php sed -i "s/define('DB_HOST', 'localhost')/define('DB_HOST', '${wpconf:mydb_host}')/" ${buildout:directory}/wordpress/wp-config.php sed -i "s/define('DB_CHARSET', 'utf8')/define('DB_CHARSET', '${wpconf:mydb_charset}')/" ${buildout:directory}/wordpress/wp-config.php chmod +x ${buildout:directory}/bin/spawn-fcgi update-command = ${wp:command
Criei duas seções que servirá para instalar o WordPress e um script de inicialização do php-cgi, este script também vem quando instalamos o servidor lighttpd, que é uma forma de manter o php vivo enquanto podemos dar um restart ou reload no servidor lighttpd, mas isso não vem ao caso.
Também criamos 3 outras seções que são:
wpconf - > Colocamos aqui as configurações do nosso WP, como dados da base de dados [usuário, senha etc ] e a versão que desejamos instalar do WP.
downloads -> Urls das aplicações, WP e fcgi.
ports -> Configuração da porta no qual o fcgi irá rodar
Note que na seção [wp], usei alguns comandos para fazer a mágica acontecer, quero baixar e descompactar o tar.gz, lembrando que em casos de arquivos zip, será necessário alterar a linha. Após descompactar copiamos o arquivo wp-config-sample.php para wp-config.php, este será o que o Wp irá ler.
E por fim, setamos os dados de acesso ao bando de dados neste arquivo de configuração.
Rode o bootstrap e o buildout: python bootstrap.py && ./bin/buildout -Nvvv -t 30
Ao final teremos o o Wp instalado e pronto pra usar, é claro que faltam detalhes como instalar o servidor Apache ou Nginx, ou um de sua preferência.
Para subir o fcgi você pode executar:
./parts/fcgi/bin/spawn-fcgi -a 127.0.0.1 -p 53217 -P ./tmp/fastcgi-php.pid -- /usr/bin/php-cgi
A configuração acima, usei com o servidor Nginx, também compilado com buildout, por este motivo adicionei o fcgi, abaixo sugestões de eggs que ajudam nas instalações.
Sugestões.
- zc.recipe.cmmi: Usado para executar comando configure/make/make install
- plone.recipe.command: Executa comandos arbitrários para o buildout.
- collective.recipe.supervisor: Receita para instalar o supervisor
- z3c.recipe.usercrontab: Adicionar comandos ao Crontab do Linux
- collective.recipe.template: Receita para a criação de templates de configurações
- Mais :)