Nginx

O Nginx (pronuncia-se “Enginex”) é um servidor web leve, que consome pouquíssimos recursos do servidor, e é muito utilizado para servir conteúdo estático, mas nada nos impede de o utilizarmos para servir conteúdo dinâmico, substituindo o Apache.

– Instalando – A instação do nginx é mais que tranquila, no meu Ubuntu, tive apenas que mandar:

$ sudo apt-get install nginx

Pronto, servido instalado. Se vc tiver o Apache ou outro servidor rodando, preste atenção, o nginx por padrão, vai tentar utilizar a porta 80, como todos. Com isso, já temos um servidor web, mas somente para conteúdo estático, vamos adicionar suporte a PHP. Primeiro vamos instalar o PHP, utilizando o jeito mais prático:

$ sudo apt-get install php5 php5-common php5-cgi php5-gd php5-mysql php5-sqlite

Temos agora, um PHP bem básico instalado, sem muitos módulos, pq não é o propósito deste artigo. Precisamos agora configurar o nginx para interpretar corretamente nossos scripts PHP, abra o arquivo “default” - aqui em /etc/nginx/sites-availabe - e cole o conteúdo abaixo.

server {
    listen 80;
    server_name localhost;
    location / {
        root /var/www; index index.php index.html index.htm;
        autoindex off;
    }
    location ~ \.php$ {
        fastcgi_pass unix:/tmp/php-cgi.pid;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /var/www/$fastcgi_script_name;
        include fastcgi_params;
    }
}

Essa é uma regrinha simples, que faz com que todos os arquivos com extensão “.php” requisitado pelo cliente, seja enviado e processado pelo php-cgi.  É necessário também, habilitar uma linha no php.ini (/etc/php5/cgi/php.ini):

cgi.fix_pathinfo=1

Rodando o PHP como daemon No nosso caso, vamos utilizar o PHP no modo CGI,como você viu, as requisições a scripts PHP são encaminhadas via proxy para um socket. Cole o conteúdo abaixo em um aquivo vazio, vamos chamar de php-fcgi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#!/bin/sh
#
# Author: Till Klampaeckel
#
# Credits
#
#  * original script: http://unix.derkeiler.com/Mailing-Lists/FreeBSD/questions/2007-09/msg00468.html
#  * improved: http://till.klampaeckel.de/blog/archives/30-PHP-performance-III-Running-nginx.html
#  * all linux start script fu inspired by CouchDB's start script (by Noah Slater)
#

SCRIPT_OK=0
SCRIPT_ERROR=1

DESCRIPTION="php-fcgi super-duper-control thing"
NAME=php-fgcid
SCRIPT_NAME=$(basename $0)

WWW_USER=www-data
WWW_GROUP=www-data
PHP_CGI=/usr/bin/php-cgi

phpfcgid_children="2"
phpfcgid_requests="100"

log_daemon_msg () {
    echo [email protected]
}

log_end_msg () {
    # Dummy function to be replaced by LSB library.
    if test "$1" != "0"; then
        echo "Error with $DESCRIPTION: $NAME"
    fi

    return $1
}

phpfcgid_start() {
    echo "Starting $NAME with $phpfcgid_children children (req: $phpfcgid_requests)."

    export PHP_FCGI_CHILDREN=$phpfcgid_children
    export PHP_FCGI_MAX_REQUESTS=$phpfcgid_requests

    su -m ${WWW_USER} -c "${PHP_CGI} -b /tmp/php-cgi.pid &"
}

phpfcgid_stop() {
    echo "Stopping $NAME."

    pids=`pgrep php-cgi`

    pkill php-cgi
}

phpfcgid_status() {
    log_daemon_msg "To be implemented: status"
    log_end_msg $SCRIPT_ERROR
}


parse_script_option_list () {

    case "$1" in
        start)
            log_daemon_msg "Starting $DESCRIPTION" $NAME
            if phpfcgid_start; then
                log_end_msg $SCRIPT_OK
            else
                log_end_msg $SCRIPT_ERROR
            fi
            ;;
        stop)
            log_daemon_msg "Stopping $DESCRIPTION" $NAME
            if phpfcgid_stop; then
                log_end_msg $SCRIPT_OK
            else
                log_end_msg $SCRIPT_ERROR
            fi
            ;;
        restart|force-reload)
            log_daemon_msg "Restarting $DESCRIPTION" $NAME
            if phpfcgid_stop; then
                if phpfcgid_start; then
                    log_end_msg $SCRIPT_OK
                else
                    log_end_msg $SCRIPT_ERROR
                fi
            else
                log_end_msg $SCRIPT_ERROR
            fi
            ;;
        status)
            phpfcgid_status
            ;;
        *)
            cat <&2
Usage: $SCRIPT_NAME {start|stop|restart|force-reload|status}
EOF
            exit $SCRIPT_ERROR
            ;;
    esac
}

parse_script_option_list [email protected]

Atribuímos permissão de execução e rodamos, pronto, suporte a PHP instalado. De quebra, já colocamos para iniciar logo após o boot.

$ chmod +x php-fcgi
$ sudo mv php-fcgi /etc/init.d/
$ sudo update-rc.d php-fcgi defaults
$ sudo /etc/init.d/php-fcgi start
$ sudo /etc/init.d/nginx restart 

Conclusão — O nginx é um servidor web pronto que na minha opinião, já está pronto para substituir o Apache em aplicações de pequeno e médio porte, sites pessoais, blog e etc, onde se queira economizar ao máximo os recursos, ou mesmo servir conteúdo estático apenas. É difícil mensurar a carga máxima que ele pode aguentar, mas em todos os meus testes de carga, ele sempre respondeu muito bem.

No Wiki, há inclusive uma configuração que fizeram, utilizando FreeBSD, com 45k conexões ativas, vale a pena conferir.

Ubuntu voando com Openbox

Instalando Vamos começar, instalando alguns pacotes básicos para um funcionamento redondo no nosso desktop.

apt-get install openbox openbox-themes openbox-xdgmenu lxpanel rotate-wallpaper feh conky xcompmgr

Pronto, com isso, já temos nosso desktop instalado, falta agora configurar.

Iniciando tudo junto Depois de tudo instaldo, rode o openbox selecionando ele no menu sessões do GDM ou do seu gerenciador de login. É simples, é básico, bem secão.. mas vamos incrementar isso.

Vai existir - senão crie - no seu home, o diretório .config/openbox/, vamos criar o nosso arquivo de inicialização automática para alguns aplicativos e serviços importantes.

$ gedit ~/.config/openbox/autostart.sh Cole o seguinte texto dentro do arquivo:

#!/bin/bash

Serviços essenciais

xcompmgr & #gnome-volume-manager & gnome-settings-daemon & update-notifier & xdg-user-dirs-gtk-update & gnome-at-visual -s & #gnome-power-manager & nm-applet –sm-disable & bluetooth-applet &

Papel de parede randômico a cada login - lembre-se de alterar o caminho

rotate-wallpaper –path $HOME/Wallpapers/

Painel

(sleep 2 && lxpanel) &

Conky

(sleep 3 && conky) & Também precisamos dar permissão de execução para ele

$ chmod +x ~/.config/openbox/autostart.sh Configurando o monitor do sistema Vamos criar agora o arquivo de configuração do Conky, nosso monitor do sistema, que vai rodar como um widget na sua área de trabalho, com bastante informação.

$ gedit ~/.conkyrc E jogamos o conteúdo abaixo:

UBUNTU-CONKY

A comprehensive conky script, configured for use on

Ubuntu / Debian Gnome, without the need for any external scripts.

#

background yes cpu_avg_samples 2 net_avg_samples 2 out_to_console no stippled_borders 0

Create own window instead of using desktop (required in nautilus)

own_window yes own_window_type normal # override # normal own_window_transparent yes own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager own_window_class Conky own_window_colour brown

Use double buffering (reduces flicker, may not work for everyone)

double_buffer yes

fiddle with window

use_spacer yes

Update interval in seconds

update_interval 1.0

Minimum size of text area

minimum_size 250 5

Draw shades?

draw_shades no draw_borders no draw_graph_borders yes draw_outline no

use_xft yes xftfont monospace:pixelsize=12

override_utf8_locale yes

uppercase no

border_margin 9 border_width 10

default_color black

Text alignment, other possible values are commented

#alignment top_left alignment top_right #alignment bottom_left #alignment bottom_right

Gap between borders of screen and text

gap_x 10 gap_y 5

stuff after ‘TEXT’ will be formatted on screen

TEXT ${color orange}SYSTEM $nodename ${hr 2}${color white} $sysname $kernel $machine $alignr Up: ${uptime_short}${color} ${color orange}Processes:${color lightgrey} $processes ${color orange}Run:${color lightgrey} $running_processes ${color orange}CPU Temp:${color lightgrey} ${acpitemp}

${color orange}CPU ${hr 2}${color white} $cpubar ${color orange}Usage (Avg):${color white} ${freq_dyn_g}Ghz ${color lightgrey}${cpu cpu0}% ${alignr}${cpubar cpu0 5,80} ${color orange}Usage (Core 1):${color white} ${freq_dyn_g cpu1}Ghz ${color lightgrey}${cpu cpu1}% ${alignr}${cpubar cpu1 5,80} ${color orange}Usage (Core 2):${color white} ${freq_dyn_g cpu2}Ghz ${color lightgrey}${cpu cpu2}% ${alignr}${cpubar cpu2 5,80}

${color orange}Average ${loadavg} / ${freq}MHz ${hr 2} ${color white} ${cpugraph cpu0 42AE4A eeeeee} ${color orange}Core 1 $alignr Core 2${color white} ${cpugraph cpu1 25,120 42AE4A eeeeee} $alignr ${cpugraph cpu2 25,120 42AE4A eeeeee}

${color yellow}NAME PID CPU% MEM% ${color lightyellow}${top name 1} ${top pid 1} ${top cpu 1} ${top mem 1}${color white} ${top name 2} ${top pid 2} ${top cpu 2} ${top mem 2} ${top name 3} ${top pid 3} ${top cpu 3} ${top mem 3} ${top name 4} ${top pid 4} ${top cpu 4} ${top mem 4} ${top name 5} ${top pid 5} ${top cpu 5} ${top mem 5} ${top name 6} ${top pid 6} ${top cpu 6} ${top mem 6} ${top name 7} ${top pid 7} ${top cpu 7} ${top mem 7} ${top name 8} ${top pid 8} ${top cpu 8} ${top mem 8} ${top name 9} ${top pid 9} ${top cpu 9} ${top mem 9}

${color orange}MEMORY ${hr 2}${color white} RAM: $memperc% ${color grey}${membar 6}${color white} Swap: $swapperc% ${color grey}${swapbar 6}${color white}

${color orange}DISK ${hr 2}${color white} Root: ${fs_free_perc /}% ${alignr}${color 891B0B}${fs_bar 6,208 /}${color white} Home: ${fs_free_perc /home}% ${alignr}${color 1B890B}${fs_bar 6,208 /home}${color white} Disk I/O: ${diskio} ${color white}${alignr}HD Temp: ${hddtemp /dev/sda} ${diskiograph 990000 DDFFAA}${color white}

${color orange}NETWORK (${addr ppp0}) ${hr 2}${color white} Down: ${color white}${downspeed ppp0} k/s ${alignr}Up: ${upspeed ppp0} k/s ${downspeedgraph ppp0 25,140 00ff00 ff0000} ${alignr}${upspeedgraph ppp0 25,140 0000ff 00ff00}${color white} Total: ${totaldown ppp0} ${alignr}Total: ${totalup ppp0} Inbound: ${tcp_portmon 1 32767 count} Outbound: ${tcp_portmon 32768 61000 count}${alignr}Total: ${tcp_portmon 1 65535 count} Pronto agora é só relogar e ver um desktop redondinho usando o mínimo de memória.

O lxpanel é muito simples de ser configurado, é só clicar com o direito encima e pronto, ir adicionando e customizando conforme o seu gosto, e os serviços principais - ao menos pra mim - do Gnome, como o Network Manager rodam tranquilamente.

Ainda é possível customizar ainda mais o gerenciador, rodando por exemplo, algum aplicativo para disponibilizar ícones no desktop, como o rox.

Streaming e conversão de vídeos com Software Livre

Iniciando Para instalar o ffmpeg no Ubuntu, temos duas maneiras, a primeira, é compilando o mesmo, assim você dar uma refinada nos formatos que deseja dar suporte e ganha um software mais personalizado, ganhando assim em desempenho.

A segunda forma, é baixar do repositório Medibuntu, uma versão pré-compilada, com suporte a mp3 (iremos precisar para converter para FLV), já que na versão padrão do repositório do Ubuntu, não tem esse suporte, e é esta opção que vamos seguir abaixo, por ser a mais simples e fácil.

Instalando via Repositório

$ sudo -s

wget http://www.medibuntu.org/sources.list.d/jaunty.list -O /etc/apt/sources.list.d/medibuntu.list

wget -q http://packages.medibuntu.org/medibuntu-key.gpg -O- | apt-key add - && apt-get update

apt-get install ffmpeg lame mencoder libavcodec-unstripped-52

Testando a conversão

$ ffmpeg -i teste_in.wmv -b 1200 -deinterlace -ar 22050 -ab 64 -f flv -s 480x360 -aspect 4:3 -y -acodec libmp3lame -ac 1 teste_out.flv Pronto, temos o ffmpeg pronto para uso.