View
280
Download
0
Category
Preview:
Citation preview
Quem Sou Eu?● Graduação:
– Eng. Telecomunicações– Analise de Sistemas Orientado a Objetos
● GNU/Linux: ~2002● Analista de Infraestrutura GNU/Linux● Programador FOSS:
– Anarchy, USB Manager, Tiamat, C-CairoPlot...– Cairoplot, Web2py e Pelican
● Passatempos:
– http://mindbending.org– Hack 'n' Cast
Objetivos
● Novas tecnologias● Experiência própria● Menos pode ser mais● Repensar as “respostas padrões”
Wordpress● Software Livre● Plataforma de publicação de conteúdo● A maior do Mundo (70% do mercado)● Possui:
– Suporte a templates– Plugins (30.000)– Temas– Múltiplos autores– Fluxo de edição– Editor WYSIWYG– etc.
● Feito em PHP & MySQL
Pelican● Software Livre● Python e Jinja● Gera HTML estático● Suporte a:
– Plugins– Multiplos autores– Templates– Markdown & reStructuredText
● Gerenciado através de CLI● Fácil de hospedar
Pessoalmente?● Comportamento não satisfatório● Desenvolvimento de plugins para
Wordpress é complexo● Não sou bom em PHP● Ambiente de desenvolvimento? Good luck
bro● Off-line mirror● Não gosto/uso de editores WYSIWYG● Integração via linha de comando● Interface web apenas para gerência de
atualizações/configs● Dilema da Bazooka e da formiga
Tecnicamente?● Foco de ataques● NGINX!● Recuperação de desastres?● Tempo/esforço para configuração● Recursos Computacionais:
– Tempo de resposta– Memória– Processamento
● Artigos de 5 anos sendo gerados?● Limpeza de banco de dados semestral● MySQL?
Eu sei!● W3 Total Cache● Compressão GZIP em Apache e NGINX● Smush.it (imagens)● Minify CSS & HTML● Offloading● Op Code Caching
– Alternative PHP Cache (APC), Memcached & Varnish
● Ghost!
Outros Geradores● http://staticsitegenerators.net/● Outros que testei:
– Ruby:● Jekyll● Octopress
– Python● Hyde● Blogofile● Cactus● Nikola● Wok● Mynt
Dependências● Debian:$ sudo aptitude install python3 python-setuptools python-virtualenv libxml2-dev libxslt-dev python3.3-dev
● Fedora:$ sudo yum install python3 python3-devel python-setuptools python-virtualenv libxml2-devel libxslt-devel
● Arch Linux:$ sudo pacman -S python-setuptools python-virtualenv libxml2 libxslt
VirtualEnv● Localização:$ mkdir ~/venv
● Criação:$ virtualenv -p /usr/bin/python3 --prompt "(pelican-3.4)" ~/venv/pelican-3.4
● Instalar dependências:$ wget http://bit.ly/1o3KfSC -O /tmp/requirements.txt
$ . ~/venv/pelican-3.4/bin/activate
(pelican-3.4)$ pip3 install -r /tmp/requirements.txt
Criando seu site(pelican-3.4)$ mkdir mysite && cd mysite
(pelican-3.4)$ pelican-quickstart
(...)
> Where do you want to create your new web site? [.] .
> What will be the title of this web site? MySite
> Who will be the author of this web site? Magnun
> What will be the default language of this web site? [en] pt
> Do you want to specify a URL prefix? e.g., http://example.com (Y/n) y
> What is your URL prefix? (see above example; no trailing slash) http://mysite.org
> Do you want to enable article pagination? (Y/n) y
> How many articles per page do you want? [10] 10
Criando seu site(...)
> Do you want to generate a Fabfile/Makefile to automate generation and publishing? (Y/n) y
> Do you want an auto-reload & simpleHTTP script to assist with theme and site development? (Y/n) y
> Do you want to upload your website using FTP? (y/N) n
> Do you want to upload your website using SSH? (y/N) n
> Do you want to upload your website using Dropbox? (y/N) n
> Do you want to upload your website using S3? (y/N) n
> Do you want to upload your website using Rackspace Cloud Files? (y/N) n
> Do you want to upload your website using GitHub Pages? (y/N) n
Done. Your new project is available at /tmp/teste/mysite
(pelican-3.4)$ ls
content/ develop_server.sh fabfile.py Makefile output/ pelicanconf.py publishconf.py
(pelican-3.4)$ mkdir content/{articles,pages,images}
Primeiro Artigo● Criando Artigo:(pelican-3.4)$ vim ./content/articles/hello-world.rst
Hello World
###########
:date: 2014-03-10 15:17
:category: Categoria
:tags: tag01, tag02, tag03
Olá! Este é o primeiro artigo. Então vamos de lorem ipsum!
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
(...)
deserunt mollit anim id est laborum.
E claro, um código Python!
.. code-block:: python
print "Hello World!"
Primeira Página● Criando Artigo:(pelican-3.4)$ vim content/pages/my-page.rst
My Page
#######
:date: 2014-03-10 15:17
Esta é uma página!
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur
sint occaecat cupidatat non proident, sunt in culpa qui officia
deserunt mollit anim id est laborum.
Compilando o Site● Compiling!(pelican-3.4)$ make html
pelican /tmp/teste/mysite/content -o /tmp/teste/mysite/output -s /tmp/teste/mysite/pelicanconf.py
Done: Processed 1 article(s), 0 draft(s) and 1 page(s) in 0.24 seconds.
● Servindo...(pelican-3.4)$ make serve
cd /tmp/teste/mysite/output && python -m pelican.server
● Agora acesse: http://localhost:8000
Configurações● AUTHOR = “Autor”● SITENAME = “Nome do Site”● SITEURL = 'http://mysite.org'● DEFAULT_LANG = u'pt'● TIMEZONE = “America/Sao_Paulo”● DEFAULT_PAGINATION = 10● PLUGIN_PATHS = [“.plugins”]● PLUGINS = [“PluginA”, “PluginB”]● THEME = “theme_path”● SOCIAL = ((“Rede” : “Link”))● STATIC_PATHS = [''images”, “codes'”]● JINJA_EXTENSIONS = ['jinja2.ext.do']
Configurações Avançadas● ARTICLE_URL = "{slug}"● ARTICLE_SAVE_AS = "{slug}/index.html"● PAGE_URL = "{slug}"● PAGE_SAVE_AS = "{slug}/index.html"● CATEGORY_URL = "category/{slug}"● CATEGORY_SAVE_AS = "category/{slug}/index.html"● TAG_URL = "tag/{slug}"● TAG_SAVE_AS = "tag/{slug}/index.html"● AUTHOR_URL = 'author/{slug}'● AUTHOR_SAVE_AS = 'author/{slug}/index.html'● PAGINATION_PATTERNS = ((1, '{base_name}/', '{base_name}/index.html'),● (2, '{base_name}/page/{number}/', '{base_name}/page/
{number}/index.html'))
Temas
● 75 temas no Repositório Oficial!(pelican-3.4)$ git clone --recursive https://github.com/getpelican/pelican-themes ./.themes
● Mudando o tema:(pelican-3.4)$ vim pelicanconf.py
THEME = “.themes/pure”
(pelican-3.4)$ make html && make serve
Plugins● 64 Plugins no Repositório Oficial(pelican-3.4)$ git clone --recursive https://github.com/getpelican/pelican-plugins ./.plugins
● Novos “readers” (Asciidoc e Creole)● Assets & Image optimization● Podcasts/iTunes Feeds● Comentários com Google+● Gerador de PDF ● Estatísticas de Artigos● Related Posts● Gzip● Etc
Better Figures And Images● Adiciona atributos às tags <img>
– style="width: XXXpx; height: auto;"● Torna as imagens responsivas:
– RESPONSIVE_IMAGES = True
Optimize Images
● Utiliza os programas jpegtrans e optipng para reduzir as imagens
$ ls -la content/images/logo.jpg output/images/logo.jpg
-rw-rw-r-- 1 magnun magnun 839358 Set 18 00:30 content/images/logo.jpg
-rw-rw-r-- 1 magnun magnun 797295 Set 18 00:30 output/images/logo.jpg
● Redução de 42063 bytes (~42K)
Pelican YouTube & VIMEO
● Cria tags rst para facilitar a inclusão de vídeos:.. youtube:: 37818131
:width: 800
:height: 500
:align: center
.. vimeo:: 37818131
:width: 800
:height: 500
:align: center
Related Posts● Quando habilitado cria a variável article.related_posts:<ul>
{% for related_post in article.related_posts %}
<li><a href="{{ SITEURL }}/{{ related_post.url }}">{{ related_post.title }}</a></li>
{% endfor %}
</ul>
Touch● Configura corretamente o timestamp dos artigos:● Antes:$ ls -la output/hello-world.html
-rw-rw-r-- 1 magnun magnun 4649 Set 18 00:54 output/hello-world.html
● Depois:$ ls -la output/hello-world.html
-rw-rw-r-- 1 magnun magnun 4649 Mar 10 2014 output/hello-world.html
$ grep ":date:" content/articles/hello-world.rst
:date: 2014-03-10 15:17
GZIP● Antes:$ curl -Is http://mysite.org | grep Length
Content-Length: 77688
$ curl -Is -H 'Accept-Encoding: gzip' http://mysite.org | grep Length
Content-Length: 10933
● Resposta 7.1 vezes menor● Economia de 66.755 Bytes
Exportando & Importanto
● Para exportar seus artigos do Wordpress:– Tools > Export
● Em seguida:$ cd mysite/content/articles
$ pelican-import --wpfile mysite-articles.wordpress.2014-02-17.xml -o .
● Remover metadados desnecessários:$ sed "/^:author:/d" *.rst -i
$ sed "/^:slugs:/d" *.rst -i
Imagens● Baixando todas as imagens referenciadas:$ cd ../images
$ for img in `grep -i "\.jpg\|\.jpeg\|\.png\|\.gif" ../articles/*.rst | sed "s/^.*: \(http:.*\)/\1/" | uniq`; do \
wget $img --no-clobber; \
done
$ cd ..
● Corrigindo referências$ cd ../articles$ sed "s#http://.*/\(.*\.\(png\|jpg\|jpeg\|gif\)\)#{filename}/images/\1#" *.rst -i
● Referência Correta.. image:: {filename}/images/image_name.png
● Remover referências ao site:$ sed "s#http://mysite.org##" *.rst -i
NGINX
● Instalação:– Debian
$ sudo aptitude install nginx
– Fedora $ sudo yum install nginx
– Arch Linux $ sudo pacman -S nginx
NGINXServer {
# Config Básica
listen *:80;
server_name mysite.org;
index index.html;
root /var/www/MySite/output;
try_files $uri.html $uri/index.html $uri =404;
error_page 404 /404;
# Logs
error_log /var/log/nginx/mysite-error.log warn;
access_log /var/log/nginx/mysite-access.log;
NGINX # GZIP
gzip_static on;
# Browser Caching
location ~* \.(js|css|eot|otf|woff|ttf)$ {
expires 1w;
}
location ~* \.(jpg|jpeg|png|gif|ico|svg)$ {
expires 2w;
}
location / {
expires 1d;
}
}
Git, Gitolite & Hooks
● Tutorial de Instalação e Configuração● Vamos utilizar o post-update hook● Possivelmente em: /home/git/repositories/mysite.git/hooks/post-update
Post-update#!/bin/sh
branch=`echo $1 | cut -d'/' -f 3`
OUT=/var/www/MySite
case $branch in
"master")
echo "Checking-out working copy..."
rm -rf $OUT/*
GIT_WORK_TREE=$OUT git checkout -f
echo "Generating blog..."
cd $OUT; make publish
echo "Fixing permissions..."
chown -R git:www-data $OUT/output/*
chmod -R 775 $OUT/output/*
echo "Done!"
break;;
*)
echo "Nothing to do here!"
break;;
esac
Fluxo de Publicações● Cria conteúdo e testa alterações localmente:$ vim content/articles/novo-artigo.rst
$ make html && make serve
$ firefox locahost:8000
● Faz o commit:$ git add content/articles/novo-artigo.rst
$ git commit -m “Adicionado novo artigo”
● Atualiza repositório$ git push origin master
Hardware● Antigo:
– Servidor físico compartilhado com outras 3 instâncias do Wordpress:● CPU: Intel Xeon 3060 DualCore 32 Bits - 2.40GHz
– Cache: 4096 KB● Memória RAM: 4 Gbytes
● Atual:
– Servidor virtual dedicado:● CPU: QEMU Virtual CPU version 1.0 64 Bits - 2,0GHz
– Cache: 4096 KB● Memória RAM: 500 MByte
Vantagens● Mitiga 99,99% de falhas de segurança● Fácil hospedagem (HTML puro)● Facilmente replicável● Sem banco de dados● Exige pouco hardware (um droplet na Digital Ocean)● Utiliza uma linguagem mais amigável● Temas e Plugins mais simples, compreensíveis e otimizáveis● Versionamento de código em Git com cópias locais distribuídas
– Permitindo múltiplos autores● GitHub para Código fonte e/ou GH Pages● Depoy automatizado e encriptado
Desvantagens
● CLI● Interface não muito amigável para iniciantes● “Trabalho manual”● Não posso publicar de qualquer lugar
Mais Informações● Meus artigos:
– http://mindbending.org/pt/category/pelican● Pelican:
– http://docs.getpelican.com/en/3.4.0/– http://blog.getpelican.com/
● Templates Jinja:– http://jinja.pocoo.org/– http://jinja.pocoo.org/docs/dev/
Recommended