1. objetivo

Instalar um ambiente contínuo para desenvolvimento

2. ambiente

2.1 hardware/os

  • Máquina Física
  • 2 GB de RAM
  • 4 Processadores (Intel(R) Xeon(R) CPU X3430 @ 2.40GHz)
  • Sistema Operacional LINUX - Debian 6.0 Squeeze - Arch 64 Bits
  • Endereço IP: 192.168.0.190

    2.2 tecnologias

  • Apache Tomcat
  • Apache Maven
  • Jenkins
  • Sonar
  • Nexus Sonatype
  • PostgreSQL
  • Apache Httpd + ModProxy + Passenger
  • NGINX + Passenger
  • Redmine
  • Git

    3. instalação

3.1 pre-reqs

3.1.1 repos debian

abaixo os repositórios eu que estou usando, edite seu arquivo sources.list e ajuste conforme abaixo

deb http://ftp.br.debian.org/debian/ squeeze main contrib non-free
deb http://security.debian.org/ squeeze/updates main contrib non-free
deb http://ftp.br.debian.org/debian/ squeeze-updates main contrib non-free
 
# para instalar um pacote backports apt-get -t squeeze-backport install package
deb http://backports.debian.org/debian-backports squeeze-backports main

atualize os índices após alterar os repositórios

aptitude update

atualize o sistema

aptitude safe-upgrade

legal, ambiente pronto para começarmos.

3.1.2 sysadmin utils

instalando algumas ferramentas para trabalhar

aptitude install vim htop nmap tcpdump iptraf lynx elinks ftp telnet rsync mtr-tiny traceroute less screen unzip sudo

3.1.3 java utils

vamos instalar o jre da SUN para uso das ferramentas java

aptitude install sun-java6-jre

3.1.4 download dir

acesse o diretório opt

cd /opt

crie o diretório downloads

mkdir downloads

acesse o diretório

cd downloads/

3.2 apache-tomcat

faça o download da última versao do tomcat no diretório /opt/downloads

wget http://apache.mirror.pop-sc.rnp.br/apache/tomcat/tomcat-7/v7.0.29/bin/apache-tomcat-7.0.29.tar.gz

descompacte o tomcat

tar zxvf apache-tomcat-7.0.29.tar.gz

mova o diretório compactado para /opt

mv apache-tomcat-7.0.29 ../

crie um link simbólico para facilitar as coisas

ln -s apache-tomcat-7.0.29/ apache-tomcat

vamos criar o grupo tomcat

groupadd tomcat

vamos criar o usuário tomcat

useradd -g tomcat -d /opt/apache-tomcat tomcat

vamos corrigir as permissões

chown -R tomcat:tomcat /opt/apache-tomcat-7.0.29

crei o arquivo de inicialização do tomcat

vim /etc/init.d/tomcat
/etc/init.d/tomcat
#!/bin/bash
 
### BEGIN INIT INFO
# Provides:          tomcat
# Required-Start:    $local_fs $remote_fs $network $time $named
# Required-Stop:     $local_fs $remote_fs $network $time $named
# Default-Start:    2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Sonar
# Description:       Open platform to manage code quality
### END INIT INFO
 
CATALINA_HOME=/opt/apache-tomcat; export CATALINA_HOME
JAVA_HOME=/usr/lib/jvm/java-6-sun; export JAVA_HOME
TOMCAT_OWNER=tomcat; export  TOMCAT_OWNER
 
start() {
  echo -n "Starting Tomcat:  "
  su $TOMCAT_OWNER -c $CATALINA_HOME/bin/startup.sh
 
}
stop() {
   echo -n "Stopping Tomcat: "
   su $TOMCAT_OWNER -c $CATALINA_HOME/bin/shutdown.sh
}
 
##
 
case "$1" in
start)
  start
   ;;
stop)
   stop
   ;;
restart)
   stop
   start
   ;;
*)
   echo $"Usage: tomcat {start|stop|restart}"
   exit
esac

ajuste a permissão do arquivo

chmod 755 /etc/init.d/tomcat

ative o arquivo para ser carregado na inicializacao

update-rc.d -f tomcat defaults

saída

update-rc.d: using dependency based boot sequencing
insserv: warning: script 'tomcat' missing LSB tags and overrides

verifique se o link simbólico foi criado no /etc/rc2.d

ls /etc/rc2.d/|grep tomcat

saída

S18tomcat

bacana, agora vamos ajustar os usuários do tomcat em /opt/apache-tomcat/conf/tomcat-users.xml, deixei a sessão tomcat-users como abaixo:

/opt/apache-tomcat/conf/tomcat-users.xml
<tomcat-users>
    <role rolename="manager" />
    <role rolename="manager-gui" />
    <role rolename="admin"/>
    <role rolename="admin-gui"   />
    <user username="4linux" password="4lx" roles="admin,admin-gui,manager,manager-gui" />
</tomcat-users>

tuning

Alterei o seguinte trecho no catalina.sh

de

if [ -z "$LOGGING_MANAGER" ]; then
  #JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
  JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
else
  #JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER"
  JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER"
fi

para

if [ -z "$LOGGING_MANAGER" ]; then
  #JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
  JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Xms600m -Xmx1200m -XX:MaxPermSize=256m"
else
  #JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER"
  JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER -Xms600m -Xmx1200m -XX:MaxPermSize=256m"
fi

isso significa que temos um heap size inicial de 600 MB de RAM que pode chegar até 1200 MB, além disto seto o tamanho máximo das permgens para 256m.

3.3 apache-maven

acesse o diretório /opt/downloads

cd /opt/downloads

faça o download do maven

wget  http://www.apache.org/dyn/closer.cgi/maven/binaries/apache-maven-3.0.4-bin.tar.gz

descompacte

tar zxvf apache-maven-3.0.4-bin.tar.gz

mova o diretório para /opt

mv apache-maven-3.0.4 ../

crie um link simbólico

ln -s apache-maven-3.0.4 apache-maven

adicione o diretório bin do maven (/opt/apache-maven/bin) ao path do sistema, vamos usar o arquivo /etc/profile

primeiro edite o /etc/profile

vim /etc/profile

adicione o diretório do maven ao final da variável, conforme exemplo abaixo

 if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/apache-maven/bin"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/opt/apache-maven/bin"
fi
export PATH


salve e saia

:wq

recarregue o path

source /etc/profile

pronto, maven instalado e pode ser utilizado pelos demais programas pois já está no PATH.

3.4 jenkins

deploy no tomcat (recomendado)

acesse o diretório /opt/downloads

cd /opt/downloads

faça o download do jenkins war

wget http://mirrors.jenkins-ci.org/war/latest/jenkins.war

mova o arquivo para /opt/apache-tomcat-7.0.29/webapps e confira se está rodando, para acessar http://192.168.0.190:8080/jenkins/

modo standalone

instalando chaves do repositório jenkns

wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | apt-key add -

adicioanando repositório ao sources.list

echo "deb http://pkg.jenkins-ci.org/debian binary/" >> /etc/apt/sources.list

atualizando índices

aptitude update

instalando jenkins

aptitude install jenkins

saída

...
Starting Jenkins Continuous Integration Server: jenkinsThe selected http port (8080) seems to be in use by another program 
Please select another port to use for jenkins

veja que o jenkins não subiu pois o tomcat já está usando a porta 8080, vamos ajustar isso em /etc/default/jenkins

vim /etc/default/jenkins

encontre a linha que começa com HTTP_PORT e ajuste a porta para 8081

HTTP_PORT=8081

inicie o jenkins

/etc/init.d/jenkins start

saída

Starting Jenkins Continuous Integration Server: jenkins.

cheque as portas via netstat para ver se está tudo certo.

netstat -ntpl|grep java|grep 808

saída

tcp6       0      0 :::8080                 :::*                    LISTEN      4315/java       
tcp6       0      0 :::8081                 :::*                    LISTEN      4671/java       

acesse http://localhost:8081 em seu navegador, usuário admin/admin.

3.5 sonar

sonar rodando no tomcat (recomendado)

precisa de um banco para instalar o sonar, neste exemplo vamos usar o postgres.

banco

mude para o usuário postgres

su postgres

acesse o banco

psql

crie um usuário sonar no postgres

postgres=# CREATE ROLE sonar LOGIN ENCRYPTED PASSWORD 'sonar' NOINHERIT VALID UNTIL 'infinity';
CREATE ROLE

crie um banco sonar no postgres

postgres=# CREATE DATABASE sonar WITH ENCODING='UTF8' OWNER=sonar;
CREATE DATABASE

saia do banco

\q

saida da conta postgres

exit

acesse o diretório downloads

cd /opt/downloads

faça o download

wget http://dist.sonar.codehaus.org/sonar-3.1.1.zip

descompacte

unzip sonar-3.1.1.zip

mova o diretório para /opt

mv sonar-3.1.1 ../

acesse o diretório e edite o arquivo sonar.properties que está no sub-diretório conf

cd ../sonar-3.1.1
vim conf/sonar.properties

ajuste o usuário e senha

sonar.jdbc.username:                       sonar
sonar.jdbc.password:                       sonar

comente a linha abaixo pois não vamos usar banco derby

#sonar.jdbc.url:                            jdbc:derby://localhost:1527/sonar;create=true

e descomente a linha abaixo pois vamos usar postgresql

sonar.jdbc.url:                            jdbc:postgresql://localhost/sonar

acesse o diretório war

cd ../war

execute o build

./build-war.sh 

veja a saída

Buildfile: build.xml

clean:
   [delete] Deleting directory /opt/sonar-3.1.1/war/build
   [delete] Deleting: /opt/sonar-3.1.1/war/sonar.war

war:
    [mkdir] Created dir: /opt/sonar-3.1.1/war/build/sonar-server
     [copy] Copying 2093 files to /opt/sonar-3.1.1/war/build/sonar-server
     [copy] Copying 4 files to /opt/sonar-3.1.1/war/build/sonar-server/WEB-INF/lib
      [war] Building war: /opt/sonar-3.1.1/war/sonar.war
     [echo] 
     [echo]       -----------------------------------------------------------------------------------------------------------
     [echo]       sonar.war is ready to be deployed. It is linked to the Sonar home directory:
     [echo]       /opt/sonar-3.1.1
     [echo] 
     [echo]       IMPORTANT NOTES :
     [echo]       * supported web servers are Jetty and Tomcat 5.x/6.x/7.x
     [echo]       * the web application uses the Sonar home directory. For this reason it must be deployed on this host only.
     [echo]       * the war file must be rebuilt when :
     [echo]         - the Sonar home directory is moved to other location
     [echo]         - sonar is upgraded to a new version
     [echo]       -----------------------------------------------------------------------------------------------------------
     [echo]     

BUILD SUCCESSFUL
Total time: 5 seconds

pronto build feito, vamos fazer o deploy

cp sonar.war ../../apache-tomcat-7.0.29/webapps/

vá para o tomcat e veja se a aplicação está rodando, normalmente estará rodando em http://192.168.0.190:8080/sonar/

sonar rodando standalone

adicione a linha abaixo ao sources.list

echo "deb http://downloads.sourceforge.net/project/sonar-pkg/deb binary/" /etc/apt/sources.list

atualize os indices

aptitude update

instale o sonar

aptitude install sonar

inicie o sonar

/etc/init.d/sonar start

edite o arquivo de configurações do sonar e ajuste as linhas Default-Start e Default-Stop como abaixo

# Default-Start:    2 3 4 5
# Default-Stop:     0 1 6

ative o script na inicialização do sistema

update-rc.d -f sonar defaults

saída

update-rc.d: using dependency based boot sequencing

confira se o script está em rc2.d

ls /etc/rc2.d/ | grep sonar

saída

S17sonar

acesse http://localhost:9000 em seu navegador, usuário admin/admin.

3.6 nexus sonatype

Eu até ia instalar o nexus em modo standalone, mas não tem um init script de exemplo para debian, portando preferi fazer deploy no tomcat, achei mais seguro.

Primeiro eu fiz o download em /opt/downoads

wget http://www.sonatype.org/downloads/nexus-2.0.6.war

depois eu joguei o war dentro do webapps do tomcat

cp nexus-2.0.6.war ../apache-tomcat/webapps/

depois eu chequei nos logs

tail -f /opt/apache-tomcat/logs/*.log
...
INFO: Deploying web application archive /opt/apache-tomcat-7.0.29/webapps/nexus-2.0.6.war
...
INFO: Key[type=org.sonatype.nexus.web.NexusRestletServlet, annotation=[none]]: [Noelios Restlet Engine] - Attaching application:   org.sonatype.nexus.rest.NexusApplication@31768615 to URI: /nexus-2.0.6
...

O deploy ocorreu, acessei a interface web e vi que está bacana.

Para entrar nele basta acessar o endereço: http://192.168.0.190:8080/nexus-2.0.6/index.html

3.7 postgresql

instalando o postgres

aptitude install postgresql-8.4

vamos usar ele para o redmine

3.8 redmine

pre-reqs

pacotes sql

necessários para o bundle install mysql,pg,sqlite

aptitude install postgresql-server-dev-8.4 libmysqld-dev libsqlite3-dev

imagemagick

necessário para a gem imagemagick

aptitude install install libmagick9-dev

pacotes ruby

instalando dependencias para redmine

apt-get install ruby rubygems rake libcurl3 libcurl4-openssl-dev

gem path

para usar o gems precisamos ajustar o path, antes disso precisamos o EXECUTABLE DIRECTORY do RUBY, use o comando abaixo para descobrir:

gem environment

saída

RubyGems Environment:
  - RUBYGEMS VERSION: 1.3.7
  - RUBY VERSION: 1.8.7 (2010-08-16 patchlevel 302) [x86_64-linux]
  - INSTALLATION DIRECTORY: /var/lib/gems/1.8
  - RUBY EXECUTABLE: /usr/bin/ruby1.8
  - EXECUTABLE DIRECTORY: /var/lib/gems/1.8/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-linux
  - GEM PATHS:
     - /var/lib/gems/1.8
     - /root/.gem/ruby/1.8
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - http://rubygems.org/

bacana, o diretório é /var/lib/gems/1.8/bin , vamos adicioná-lo ao path no arquivo /etc/profile

vim /etc/profile

tem que ficar como abaixo, veja no final da linha /var/lib/gems/1.8/bin

if [ "`id -u`" -eq 0 ]; then
  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/apache-maven/bin:/var/lib/gems/1.8/bin"
else
  PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/opt/apache-maven/bin:/var/lib/gems/1.8/bin"
fi

salve arquivo e recarregue

source /etc/profile

pronto, agoamos podemos continuar.

instalando

fazendo o download do redmine 2.0.3

cd /opt/downloads
wget http://rubyforge.org/frs/download.php/76259/redmine-2.0.3.tar.gz

descompactando

tar zxvf redmine-2.0.3.tar.gz

mova o diretório para /opt

mv redmine-2.0.3 ../

crie um link simbólico para facilitar

ln -s redmine-2.0.3 redmine

acesse o diretório

cd redmine

instale o bundle

gem install bundle

rode o bundle install (tem que estar dentro do diretório do redmine)

bundle install

saída

Fetching gem metadata from http://rubygems.org/.......
Using rake (0.9.2.2) 
Using i18n (0.6.0) 
Using multi_json (1.3.6) 
Using activesupport (3.2.6) 
Using builder (3.0.0) 
Using activemodel (3.2.6) 
Using erubis (2.7.0) 
Using journey (1.0.4) 
Using rack (1.4.1) 
Using rack-cache (1.2) 
Using rack-test (0.6.1) 
Using hike (1.2.1) 
Using tilt (1.3.3) 
Using sprockets (2.1.3) 
Using actionpack (3.2.6) 
Using mime-types (1.19) 
Using polyglot (0.3.3) 
Using treetop (1.4.10) 
Using mail (2.4.4) 
Using actionmailer (3.2.6) 
Using arel (3.0.2) 
Using tzinfo (0.3.33) 
Using activerecord (3.2.6) 
Using activeresource (3.2.6) 
Using bundler (1.1.4) 
Using coderay (1.0.7) 
Using fastercsv (1.5.5) 
Using json (1.7.3) 
Using metaclass (0.0.1) 
Using mocha (0.12.0) 
Using mysql (2.8.1) 
Using net-ldap (0.3.1) 
Using pg (0.14.0) 
Using rack-ssl (1.3.2) 
Using rdoc (3.12) 
Using thor (0.15.4) 
Using railties (3.2.6) 
Using rails (3.2.6) 
Using prototype-rails (3.2.1) 
Using ruby-openid (2.1.8) 
Using rack-openid (1.3.1) 
Using rmagick (2.13.1) 
Using shoulda (2.11.3) 
Installing sqlite3 (1.3.6) with native extensions 
Installing yard (0.8.2.1) 
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.

vamos criar o banco de dados, mude para o usuário postgres

su postgres

acesse o banco

psql
psql (8.4.12)
Type "help" for help.

crie a role redmine

postgres=# CREATE ROLE redmine LOGIN ENCRYPTED PASSWORD '4linux' NOINHERIT VALID UNTIL 'infinity';
CREATE ROLE

crie o banco

postgres=# CREATE DATABASE redmine WITH ENCODING='UTF8' OWNER=redmine;
CREATE DATABASE

saia do banco

postgres=# \q
postgres@infra-java:/opt/redmine$ exit

agora vamos configurar a parte de banco do redmine

cd /opt/redmine/configs

copie o arquivo

cp database.yml.example database.yml

edite o arquivo e insira apenas o conteúdo abaixo

vim database.yml
production:
  adapter: postgresql
  database: redmine
  host: localhost
  username: redmine
  password: 4linux
  encoding: utf8
:wq

salve e retorno ao diretório raiz do redmine, agora precisamos rodar o comando rake generatesecrettoken

rake generate_secret_token

saída

(in /opt/redmine-2.0.3)
rake aborted!
uninitialized constant Rake::DSL
/opt/redmine-2.0.3/Rakefile:7
(See full trace by running task with --trace)

veja que deu um erro ai, pesquisando cai em uma página na stackoverflow que ajudou a resolver o problema, basicamente vamos remover o rake atual que não compatível com o redmine-2.0.3 e instalar um mais novo.

gem uninstall rake

saída

Remove executables:
	rake

in addition to the gem? [Yn]  y
Removing rake

You have requested to uninstall the gem:
	rake-0.9.2.2
treetop-1.4.10 depends on [rake (>= 0)]
sprockets-2.1.3 depends on [rake (>= 0)]
rack-1.4.1 depends on [rake (>= 0)]
multi_json-1.3.6 depends on [rake (~> 0.9)]
mocha-0.12.0 depends on [rake (>= 0)]
railties-3.2.6 depends on [rake (>= 0.8.7)]
thor-0.15.4 depends on [rake (~> 0.9)]
If you remove this gems, one or more dependencies will not be met.
Continue with Uninstall? [Yn]  y
Successfully uninstalled rake-0.9.2.2

instale o novo rake

gem install rake

saída

Successfully installed rake-0.9.2.2
1 gem installed
Installing ri documentation for rake-0.9.2.2...
Building YARD (yri) index for rake-0.9.2.2...
Installing RDoc documentation for rake-0.9.2.2...

mesmo assim ainda estaremos vendo o rake velho

rake --version
rake, version 0.8.7

passa a faca nele

aptitude remove rake

se nao encontrar o rake, logue novamente para recarregar o PATH, se preferir pode passar o path absoluto do rake novo

/var/lib/gems/1.8/bin/rake generatesecrettoken

pronto agora vamos popular a base (antes dê uma checadinha)

rake --version
rake, version 0.9.2.2

legal, tá certinho

rake db:migrate RAILS_ENV="production"

você vai ter uma longa saída que vai acabar nisso

...
==  ChangeRepositoriesToFullSti: migrating ====================================
==  ChangeRepositoriesToFullSti: migrated (0.0003s) ===========================

agora vamos acertar as permissÕes

chown www-data. redmine-2.0.3/ -R

bacana, agora vamos configurar o nginx

3.9 passenger

vamos instalar o passenger

gem install passenger

assim que instalado, configura se o diretório abaixo existe

cd /var/lib/gems/1.8/gems/passenger-3.0.13/ext/nginx

liste o conteúdo

ls

saída

config           Configuration.h   ContentHandler.h  ngx_http_passenger_module.c  ScgiRequestParser.h     StaticContentHandler.h
Configuration.c  ContentHandler.c  HelperAgent.cpp   ngx_http_passenger_module.h  StaticContentHandler.c

bacana, isso será usado para compilação do nginx com suporte a passenger

3.10 servidor app

3.10.1 nginx

pre-reqs

vamos compilar a ultima versão do nginx, para isso precisamos de algumas coisas, vamos instalar

aptitude install libpcre3 libpcre3-dev libpcrecpp0 libssl-dev zlib1g-dev

instalando

baixando o nginx ultima versao

wget  http://nginx.org/download/nginx-1.3.3.tar.gz

descompactando

tar zxvf nginx-1.3.3.tar.gz

entre no diretório

cd nginx-1.3.3 
configurando

configure os sources para instalação

./configure --sbin-path=/usr/sbin --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx.lock --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/body --http-proxy-temp-path=/var/lib/nginx/proxy --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --with-debug --with-http_stub_status_module --with-http_flv_module --with-http_ssl_module --with-http_dav_module --with-ipv6 --add-module=/var/lib/gems/1.8/gems/passenger-3.0.11/e^C/nginx --with-poll_module --with-pcre --with-http_gzip_static_module

se você teve uma saída como abaixo pode prosseguir, se não corrija os problemas que o configure apontou

Configuration summary
  + using system PCRE library
  + using system OpenSSL library
  + md5: using OpenSSL library
  + sha1: using OpenSSL library
  + using system zlib library

  nginx path prefix: "/usr/local/nginx"
  nginx binary file: "/usr/sbin"
  nginx configuration prefix: "/etc/nginx"
  nginx configuration file: "/etc/nginx/nginx.conf"
  nginx pid file: "/var/run/nginx.pid"
  nginx error log file: "/var/log/nginx/error.log"
  nginx http access log file: "/var/log/nginx/access.log"
  nginx http client request body temporary files: "/var/lib/nginx/body"
  nginx http proxy temporary files: "/var/lib/nginx/proxy"
  nginx http fastcgi temporary files: "/var/lib/nginx/fastcgi"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"
compilando

bora compilar

make

se tudo deu certo, você deve ver a linha abaixo

make[1]: Leaving directory `/opt/downloads/nginx-1.3.3'
instalando

hora de instalar

make install

se tudo deu certo, você deve ver a linha baixo

make[1]: Leaving directory `/opt/downloads/nginx-1.3.3'
testando

testando nginx

mkdir -p /var/lib/nginx/body

rode o nginx

nginx

veja se aporta abriu

netstat -ntpl|grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      5255/nginx: master

o louco, abriu, vamos testar acesse http://localhost

It works!
This is the default web page for this server.
The web server software is running but no content has been added, yet.

bacana, carregou geral.

configurando

nginx.conf

salve uma cópia do nginx.conf

cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.original

substitua o conteúdo do nginx.conf por esse aqui

vim

/etc/nginx.conf
user  nobody;
worker_processes  1;
 
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
 
#pid        logs/nginx.pid;
 
 
events {
    worker_connections  1024;
}
 
http {
 
    passenger_root /var/lib/gems/1.8/gems/passenger-3.0.13;
    passenger_max_pool_size 4;
    passenger_max_instances_per_app 1;
    passenger_pool_idle_time 3600;
 
    include       mime.types;
    default_type  application/octet-stream;
 
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
 
    #access_log  logs/access.log  main;
 
    sendfile        on;
    #tcp_nopush     on;
 
    #keepalive_timeout  0;
    keepalive_timeout  65;
 
    gzip  on;
 
    server {
        listen       80;
        server_name  localhost;
 
        passenger_enabled on;
        rails_env production;
 
        root /opt/redmine-2.0.3/public;
 
        error_page   500 502 503 504  /50x.html;
        location = /50x.html { root   html; }
    }
 
}

pronto, agora vamos fazer o script de init.

init

script

tomei a liberdade de copiar o script de init do pacote NGINX oficial do site, serve como uma luva.

crie um arquivo em /etc/init.d/nginx e insira o conteúdo abaixo

/etc/init.d/nginx
#!/bin/sh
### BEGIN INIT INFO
# Provides:          nginx
# Required-Start:    $network $remote_fs $local_fs 
# Required-Stop:     $network $remote_fs $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Stop/start nginx
### END INIT INFO
 
# Author: Sergey Budnevitch <sb@nginx.com>
 
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC=nginx
NAME=nginx
CONFFILE=/etc/nginx/nginx.conf
DAEMON=/usr/sbin/nginx
DAEMON_ARGS="-c $CONFFILE"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
 
[ -x $DAEMON ] || exit 0
 
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
 
. /lib/init/vars.sh
 
. /lib/lsb/init-functions
 
do_start()
{
    start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
        $DAEMON_ARGS
    RETVAL="$?"
    return "$RETVAL"
}
 
do_stop()
{
    # Return
    #   0 if daemon has been stopped
    #   1 if daemon was already stopped
    #   2 if daemon could not be stopped
    #   other if a failure occurred
    start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
    RETVAL="$?"
    rm -f $PIDFILE
    return "$RETVAL"
}
 
do_reload() {
    #
    start-stop-daemon --stop --signal HUP --quiet --pidfile $PIDFILE --name $NAME
    RETVAL="$?"
    return "$RETVAL"
}
 
do_configtest() {
    if [ "$#" -ne 0 ]; then
        case "$1" in
            -q)
                FLAG=$1
                ;;
            *)
                ;;
        esac
        shift
    fi
    $DAEMON -t $FLAG -c $CONFFILE
    RETVAL="$?"
    return $RETVAL
}
 
do_upgrade() {
    OLDBINPIDFILE=$PIDFILE.oldbin
 
    do_configtest -q || return 6
    start-stop-daemon --stop --signal USR2 --quiet --pidfile $PIDFILE --name $NAME
    RETVAL="$?"
    sleep 1
    if [ -f $OLDBINPIDFILE -a -f $PIDFILE ]; then
        start-stop-daemon --stop --signal QUIT --quiet --pidfile $OLDBINPIDFILE --name $NAME
        RETVAL="$?"
    else
        echo $"Upgrade failed!"
        RETVAL=1
        return $RETVAL
    fi
}
 
case "$1" in
    start)
        [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC " "$NAME"
        do_start
        case "$?" in
            0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
            2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
    stop)
        [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
        do_stop
        case "$?" in
            0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
            2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
        esac
        ;;
  status)
        status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
        ;;
  configtest)
        do_configtest
        ;;
  upgrade)
        do_upgrade
        ;;
  reload|force-reload)
        log_daemon_msg "Reloading $DESC" "$NAME"
        do_reload
        log_end_msg $?
        ;;
  restart|force-reload)
        log_daemon_msg "Restarting $DESC" "$NAME"
        do_configtest -q || exit $RETVAL
        do_stop
        case "$?" in
            0|1)
                do_start
                case "$?" in
                    0) log_end_msg 0 ;;
                    1) log_end_msg 1 ;; # Old process is still running
                    *) log_end_msg 1 ;; # Failed to start
                esac
                ;;
            *)
                # Failed to stop
                log_end_msg 1
                ;;
        esac
        ;;
    *)
        echo "Usage: $SCRIPTNAME {start|stop|status|restart|reload|force-reload|upgrade|configtest}" >&2
        exit 3
        ;;
esac
 
exit $RETVAL
permissões

precisamos colocar permissão de execução nos cript

chmod 755 /etc/init.d/nginx
inicialização

colocando script na inicialização

update-rc.d -f nginx defaults

conferindo

ls /etc/rc2.d/ |grep nginx
S17nginx

bacana, vamos testar.

testando

primeiro vamos matar o processo nginx que está rodando

killall nginx
killall nginx

agora vamos iniciar pelo script

/etc/init.d/nginx start

confere

netstat -ntpl|grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      5920/nginx.conf

acesse http://localhost, usuário admin, senha admin

3.10.2 apache2

se preferir pode usar o apache como proxy.

aptitude install apache2 libapache2-mod-proxy-html libapache2-mod-passenger
a2enmod proxy
a2enmod passenger
a2enmod proxy_http

caso tenha instalado o nginx, desative-o

update-rc.d -f nginx remove

redmine

vamos deixar o redmine como site principal do apache, desabilite o site default

a2disite default

crie o arquivo redmine em sites-available

vim redmine

coloque o conteúdo abaixo

<VirtualHost *:80>
 
	ServerAdmin webmaster@localhost
	DocumentRoot /opt/redmine-2.0.3/public
 
	<Directory />
		Options FollowSymLinks
		AllowOverride None
	</Directory>
 
	<Directory /opt/redmine-2.0.3/public>
		Options Indexes FollowSymLinks -MultiViews
		AllowOverride None
		Order allow,deny
		allow from all
	</Directory>
 
	ErrorLog ${APACHE_LOG_DIR}/error.log
 
	# Possible values include: debug, info, notice, warn, error, crit,
	# alert, emerg.
	LogLevel warn
	CustomLog ${APACHE_LOG_DIR}/access.log combined
 
</VirtualHost>

pronto, agora habilite o site

a2ensite redmine

reinicie o apache2

/etc/init.d/apache2 restart

verifique o site acessando http://192.168.0.190 tem que carregar o redmine.

proxy jenkins

crie um arquivo chamado jenkins em /etc/apache2/sites-available com o conteúdo abaixo

ProxyPass         /jenkins  http://localhost:8080/jenkins
ProxyPassReverse  /jenkins  http://localhost:8080/jenkins
ProxyRequests     Off
 
# Local reverse proxy authorization override
# Most unix distribution deny proxy by default (ie /etc/apache2/mods-enabled/proxy.conf in Ubuntu)
<Proxy http://localhost:8080/jenkins*>
  Order deny,allow
  Allow from all
</Proxy>

habilite o site

a2ensie jenkins

reinicie o apache2

/etc/init.d/apache2 restart 

proxy sonar

crie um arquivo chamado sonar em /etc/apache2/sites-available com o conteúdo abaixo

ProxyPass         /sonar  http://localhost:8080/sonar
ProxyPassReverse  /sonar  http://localhost:8080/sonar
ProxyRequests     Off
 
# Local reverse proxy authorization override
# Most unix distribution deny proxy by default (ie /etc/apache2/mods-enabled/proxy.conf in Ubuntu)
<Proxy http://localhost:8080/sonar*>
  Order deny,allow
  Allow from all
</Proxy>

habilite o site

a2ensite sonar

reinicie o apache2

/etc/init.d/apache2 restart

proxy nexus

crie um arquivo chamado nexus em /etc/apache2/sites-available com o conteúdo abaixo

ProxyPass         /nexus  http://localhost:8080/nexus
ProxyPassReverse  /nexus  http://localhost:8080/nexus
ProxyRequests     Off
 
# Local reverse proxy authorization override
# Most unix distribution deny proxy by default (ie /etc/apache2/mods-enabled/proxy.conf in Ubuntu)
<Proxy http://localhost:8080/nexus*>
  Order deny,allow
  Allow from all
</Proxy>

habilite o site

a2ensie nexus

reinicie o apache2

/etc/init.d/apache2 restart

3.11 git-core

Ainda não decidi qual front-end para git vou usar, poder ser simplesmente o GITWEB, GITLAB ou mesmo GITORIOUS, por hora vamos instalar o GIT puro.

aptitude install git git-core

4. configurações e integração

4.1 ldap



instalando_ambiente_de_desenvolvimento_continuo_java.txt · Last modified: 2012/07/17 14:50 by gutocarvalho
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0