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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
|
---
layout: es/page
title: Instalación manual
---
# Instalación manual
<p class="lead">
Las siguientes instrucciones describen el proceso paso a paso para la
instalación de Alaveteli. <em>No es obligatorio hacerlo de este modo</em>,
normalmente resulta más sencillo utilizar el
<a href="{{ page.baseurl }}/docs/installing/script/">script de instalación</a>
o el
<a href="{{ page.baseurl }}/docs/installing/ami/">AMI EC2 de Amazon</a>.
</p>
Existen [otras maneras de instalar Alaveteli]({{ page.baseurl }}/docs/installing/).
<div class="attention-box">
<ul>
<li>Los comandos incluidos en este manual requieren permisos de usuario root.</li>
<li>Los comandos deben ejecutarse en el terminal o mediante SSH.</li>
</ul>
</div>
## Configuración el sistema operativo
### Sistema operativo objetivo
Estas instrucciones corresponden a una versión de 64 bits de Debian 6 (Wheezy), Debian 7 (Squeeze)
o Ubuntu 12.04 LTS (Precise). Debian es la plataforma de implementación con mejor soporte. También
tenemos instrucciones para la [instalación en MacOS]({{ page.baseurl }}/docs/installing/macos/).
### Defina la localización
**Debian Wheezy o Squeeze**
Siga el [manual de Debian](https://wiki.debian.org/Locale#Standard) para configurar la localización del sistema operativo.
Genere las localizaciones que desea tener disponibles. Cuando la pantalla interactiva solicite que escoja una localización predeterminada, elija «None», pues la sesión SSH proporcionará la localización requerida.
dpkg-reconfigure locales
Inicie una nueva sesión SSH para utilizar su localización de SSH.
**Ubuntu Precise**
Desactive la localización predeterminada, ya que la sesión SSH debería proporcionar la localización requerida.
update-locale LC_ALL=
Inicie una nueva sesión SSH para utilizar su localización de SSH.
### Actualice el sistema operativo
Actualice el sistema operativo con los últimos paquetes:
apt-get update -y
apt-get upgrade -y
`sudo` no está instalado de forma predeterminada en Debian. Instálelo junto con `git` (la herramienta de control de versiones que utilizaremos para obtener una copia del código de Alaveteli).
apt-get install -y sudo git-core
### Prepare la instalación de dependencias del sistema utilizando paquetes del sistema operativo
Estos son paquetes de los que el software depende: software de terceros utilizado para
analizar documentos, hospedar el sitio, etc. En el siguiente paso también hay paquetes que contienen
encabezados necesarios para compilar parte de las dependencias gem.
#### Utilice otros repositorios para obtener paquetes más recientes
Añada los siguientes repositorios a `/etc/apt/sources.list`:
**Debian Squeeze**
cat > /etc/apt/sources.list.d/debian-extra.list <<EOF
# Mirror de Debian que incluye contrib y non-free:
deb http://the.earth.li/debian/ squeeze main contrib non-free
deb-src http://the.earth.li/debian/ squeeze main contrib non-free
# Actualizaciones de seguridad:
deb http://security.debian.org/ squeeze/updates main non-free
deb-src http://security.debian.org/ squeeze/updates main non-free
# Backports de Debian
deb http://backports.debian.org/debian-backports squeeze-backports main contrib non-free
deb-src http://backports.debian.org/debian-backports squeeze-backports main contrib non-free
# Wheezy
deb http://ftp.uk.debian.org/debian wheezy main contrib non-free
EOF
El repositorio squeeze-backports proporciona una versión más reciente de RubyGems y el repositorio de Wheezy proporciona bundler. Debería configurar la opción package-pinning para reducir la prioridad del repositorio de Wheezy con el objetivo de evitar que se le soliciten otros paquetes.
cat >> /etc/apt/preferences <<EOF
Package: bundler
Pin: release n=wheezy
Pin-Priority: 990
Package: *
Pin: release n=wheezy
Pin-Priority: 50
EOF
**Debian Wheezy**
cat > /etc/apt/sources.list.d/debian-extra.list <<EOF
# Mirror de Debian que incluye contrib y non-free:
deb http://the.earth.li/debian/ wheezy main contrib non-free
deb-src http://the.earth.li/debian/ wheezy main contrib non-free
# Actualizaciones de seguridad:
deb http://security.debian.org/ wheezy/updates main non-free
deb-src http://security.debian.org/ wheezy/updates main non-free
EOF
**Ubuntu Precise**
cat > /etc/apt/sources.list.d/ubuntu-extra.list <<EOF
deb http://de.archive.ubuntu.com/ubuntu/ precise multiverse
deb-src http://de.archive.ubuntu.com/ubuntu/ precise multiverse
deb http://de.archive.ubuntu.com/ubuntu/ precise-updates multiverse
deb-src http://de.archive.ubuntu.com/ubuntu/ precise-updates multiverse
deb http://de.archive.ubuntu.com/ubuntu/ trusty universe
deb-src http://de.archive.ubuntu.com/ubuntu/ trusty universe
EOF
Aquí se utiliza el repositorio trusty para obtener una versión más reciente de bundler. Debería configurar la opción package-pinning para reducir la prioridad del repositorio de Wheezy con el objetivo de evitar que se le soliciten otros paquetes.
cat >> /etc/apt/preferences <<EOF
Package: ruby-bundler
Pin: release n=trusty
Pin-Priority: 990
Package: *
Pin: release n=trusty
Pin-Priority: 50
EOF
#### Paquetes personalizados por mySociety
Si utiliza Debian o Ubuntu, debería añadir el archivo de Debian de mySociety a sus fuentes
apt. Los paquetes de mySociety actualmente solo se construyen para Debian de 64 bits.
**Debian Squeeze, Wheezy o Ubuntu Precise**
cat > /etc/apt/sources.list.d/mysociety-debian.list <<EOF
deb http://debian.mysociety.org squeeze main
EOF
El repositorio anterior le permite instalar `wkhtmltopdf-static` y `pdftk` (para Squeeze) utilizando `apt`.
Añada la clave GPG del
[repositorio de paquetes de Debian de mySociety](http://debian.mysociety.org/):
wget -O - https://debian.mysociety.org/debian.mysociety.org.gpg.key | apt-key add -
**Solamente para Ubuntu Precise**
cat > /etc/apt/sources.list.d/mysociety-launchpad.list <<EOF
deb http://ppa.launchpad.net/mysociety/alaveteli/ubuntu precise main
deb-src http://ppa.launchpad.net/mysociety/alaveteli/ubuntu precise main
EOF
El repositorio anterior le permite instalar una versión reciente de `pdftk` utilizando `apt`.
Añada la clave GPG del
[repositorio de paquetes de Ubuntu para Alaveteli de mySociety](https://launchpad.net/~mysociety/+archive/ubuntu/alaveteli).
apt-get install -y python-software-properties
add-apt-repository -y ppa:mysociety/alaveteli
**Debian Wheezy o Ubuntu Precise**
También debería configurar la opción package-pinning para reducir la prioridad del
repositorio de Debian de mySociety. Solo nos interesa obtener wkhtmltopdf-static
de mySociety.
cat >> /etc/apt/preferences <<EOF
Package: *
Pin: origin debian.mysociety.org
Pin-Priority: 50
EOF
**Debian Squeeze**
No se requiere la adición de ningún paquete especial.
#### Otras plataformas
Si utiliza otra plataforma basada en Linux, puede instalar, opcionalmente,
estas dependencias de forma manual, como se describe a continuación:
1. Si desea que los usuarios puedan obtener archivos PDF agradables como parte del
archivo comprimido descargable del historial de su solicitud, instale
[wkhtmltopdf](http://code.google.com/p/wkhtmltopdf/downloads/list).
Recomendamos descargar la última versión compilada estáticamente del sitio web
del proyecto, ya que permite su ejecución sin cabeceras (es decir, sin utilizar
una interfaz gráfica) en Linux. Si instala `wkhtmltopdf`, necesitará editar una opción
en el archivo de configuración para añadir el puntero correspondiente (encontrará más información a continuación).
Si no instala esta herramienta, todo funcionará correctamente, pero los usuarios
obtendrán versiones poco atractivas en texto sin formato de sus solicitudes al descargarlas.
2. La versión 1.44 de `pdftk` contiene un error que causa un bucle infinito en ciertas
condiciones radicales. Este problema se soluciona en el paquete estándar 1.44.7, disponible en Wheezy (Debian) y Raring (Ubuntu).
Si no puede obtener una versión oficial con esta reparación para su sistema operativo, puede
tener la esperanza de que no se produzca el problema (bloquea un proceso de Rails de forma infinita
y es necesario matarlo), aplicar un parche por su cuenta o utilizar los paquetes de
[Debian](http://debian.mysociety.org/dists/squeeze/main/binary-amd64/)
o
[Ubuntu](https://launchpad.net/~mysociety/+archive/ubuntu/alaveteli/+packages)
compilados por mySociety.
#### Actualice las fuentes
Actualice las fuentes tras añadir los repositorios adicionales.
apt-get -y update
### Cree un usuario de Alaveteli
Cree un nuevo usuario de Linux para ejecutar la aplicación de Alaveteli:
adduser --quiet --disabled-password --gecos "Alaveteli" alaveteli
## Obtenga Alaveteli
Cree el directorio de destino y clone el código fuente de Alaveteli en este directorio:
mkdir -p /var/www/alaveteli
chown alaveteli:alaveteli /var/www
chown alaveteli:alaveteli /var/www/alaveteli
cd /home/alaveteli
sudo -u alaveteli git clone --recursive \
--branch master \
https://github.com/mysociety/alaveteli.git /var/www/alaveteli
Estos comandos clonan la rama maestra, que siempre contiene la última versión estable. Si desea probar el código más reciente (con posibles errores), puede cambiar a la rama `develop`.
pushd /var/www/alaveteli
sudo -u alaveteli git checkout develop
sudo -u alaveteli git submodule update
popd
La opción `--recursive` instala las librerías comunes de mySociety requeridas para el funcionamiento de Alaveteli.
## Instale las dependencias
Instale los paquetes correspondientes para su sistema:
# Debian Wheezy
apt-get -y install $(cat /var/www/alaveteli/config/packages.debian-wheezy)
# Debian Squeeze
apt-get -y install $(cat /var/www/alaveteli/config/packages.debian-squeeze)
# Ubuntu Precise
apt-get -y install $(cat /var/www/alaveteli/config/packages.ubuntu-precise)
Algunos de los archivos también tienen un número de versión listado en config/packages, compruebe
que tiene instaladas las versiones correctas. Algunas también ofrecen una selección de paquetes
listados con «`|`».
<div class="attention-box">
<strong>Nota:</strong> Para instalar las dependencias de Ruby de Alaveteli, necesita instalar bundler. En
Debian y Ubuntu se proporciona como paquete (instalado como parte del proceso de
instalación de paquetes anterior). Para otros sistemas operativos, puede instalarlo también como gem:
<pre><code> gem install bundler --no-rdoc --no-ri</code></pre>
</div>
## Configure la base de datos
Se ha trabajado para intentar conseguir que el código funcione con otras bases de datos
(por ejemplo, SQLite), pero la base de datos soportada actualmente es PostgreSQL
(«postgres»).
Cree un usuario `foi` desde la línea de comando, de este modo:
sudo -u postgres createuser -s -P foi
_Nota:_ Dejar la contraseña en blanco puede causar gran confusión si no está familiarizado con
PostgreSQL.
Cree una plantilla para nuestras bases de datos de Alaveteli:
sudo -u postgres createdb -T template0 -E UTF-8 template_utf8
echo "update pg_database set datistemplate=true where datname='template_utf8';" > /tmp/update-template.sql
sudo -u postgres psql -f /tmp/update-template.sql
rm /tmp/update-template.sql
A continuación, cree las bases de datos:
sudo -u postgres createdb -T template_utf8 -O foi alaveteli_production
sudo -u postgres createdb -T template_utf8 -O foi alaveteli_test
sudo -u postgres createdb -T template_utf8 -O foi alaveteli_development
## Configure el correo electrónico
Necesitará definir un servidor de correo (MTA) para enviar y recibir
correo electrónico.
La configuración completa de un MTA va más allá del alcance de este documento. Consulte el manual de [configuración de los servidores Exim4 y Postfix]({{ page.baseurl }}/docs/installing/email/).
En el modo de desarrollo el correo es gestionado por [`mailcatcher`](http://mailcatcher.me/) por defecto para
que pueda visualizar los correos en un navegador. Inicie mailcatcher ejecutando `bundle exec mailcatcher` en el directorio de aplicaciones.
## Configure Alaveteli
Alaveteli tiene tres archivos principales de configuración:
- `config/database.yml`: configuración de la comunicación entre Alaveteli y la base de datos.
- `config/general.yml`: ajustes generales de la aplicación de Alaveteli.
- `config/newrelic.yml`: configuración del servicio de monitorización de [NewRelic](http://newrelic.com).
Copie los archivos de configuración y actualice sus permisos:
cp /var/www/alaveteli/config/database.yml-example /var/www/alaveteli/config/database.yml
cp /var/www/alaveteli/config/general.yml-example /var/www/alaveteli/config/general.yml
cp /var/www/alaveteli/config/newrelic.yml-example /var/www/alaveteli/config/newrelic.yml
chown alaveteli:alaveteli /var/www/alaveteli/config/{database,general,newrelic}.yml
chmod 640 /var/www/alaveteli/config/{database,general,newrelic}.yml
### database.yml
Ahora necesitará definir el archivo de configuración de la base de datos para que la aplicación
pueda conectar con la base de datos de Postgres.
Edite cada sección para apuntar a la base de datos local de PostgreSQL correspondiente.
Sección `development` de ejemplo de `config/database.yml`:
development:
adapter: postgresql
template: template_utf8
database: alaveteli_development
username: foi
password: secure-password-here
host: localhost
port: 5432
Asegúrese de que el usuario especificado en `database.yml` existe y tiene permisos completos
en las bases de datos.
Como el usuario requiere la capacidad de desactivar restricciones durante la ejecución de las pruebas, necesita permisos de superusuario. Si no desea que el usuario de su base de datos tenga permisos de superusuario, puede añadir esta línea a la sección `test` de `database.yml` (como puede ver en `config/database.yml-example`):
constraint_disabling: false
### general.yml
Tenemos un [manual completo de configuración de Alaveteli]({{ page.baseurl }}/docs/customising/config/), que abarca todas las opciones incluidas en `config/general.yml`.
_Nota:_ Si está configurando Alaveteli para su funcionamiento en producción, asigne a la variable [`STAGING_SITE`]({{ page.baseurl }}/docs/customising/config/#staging_site) el valor `0` en `/var/www/alaveteli/config/general.yml`.
STAGING_SITE: 0
Los ajustes predeterminados para los ejemplos de páginas frontales están diseñados para trabajar con
los datos de muestra incluidos en Alaveteli; una vez disponga de datos reales, deberá editar estos ajustes.
El tema por defecto es el [tema «Alaveteli»](https://github.com/mysociety/alavetelitheme). Al ejecutar `rails-post-deploy` (consulte la información siguiente), este tema se instala automáticamente.
### newrelic.yml
Este archivo contiene información de configuración para el sistema de gestión
de mantenimiento de New Relic. La gestión es desactivada por defecto mediante la opción
`agent_enabled: false`. Consulte las instrucciones de [análisis de rendimiento remoto](https://github.com/newrelic/rpm) de New Relic para activarlo
para análisis locales y remotos.
## Implementación
Debería ejecutar el script `rails-post-deploy` después de cada actualización de software:
sudo -u alaveteli RAILS_ENV=production \
/var/www/alaveteli/script/rails-post-deploy
Este comando instala las dependencias de Ruby, instala/actualiza temas, efectúa migraciones
de bases de datos, actualiza directorios compartidos y lleva a cabo otras tareas necesarias
después de una actualización de software, como la precompilación de atributos estáticos
para una instalación en producción.
La primera ejecución de este script puede requerir *mucho* tiempo, ya que debe
compilar las dependencias nativas de `xapian-full`.
Cree el índice para el motor de búsqueda (Xapian):
sudo -u alaveteli RAILS_ENV=production \
/var/www/alaveteli/script/rebuild-xapian-index
Si esta acción falla, el sitio debería funcionar en gran parte, pero se trata de un componente principal,
así que debería hacer lo posible para que funcione.
<div class="attention-box">
Hemos definido <code>RAILS_ENV=production</code>. Utilice
<code>RAILS_ENV=development</code> si está instalando Alaveteli para
efectuar cambios en el código.
</div>
## Configure el servidor de aplicaciones
Alaveteli puede funcionar con numerosos servidores de aplicaciones. mySociety recomienda
el uso de [Phusion Passenger](https://www.phusionpassenger.com) (alias
mod_rails) o [thin](http://code.macournoyer.com/thin).
### Con Phusion Passenger
Passenger es el servidor de aplicaciones recomendado, ya que se ha probado a conciencia
en entornos de producción. Está implementado como un módulo de Apache, así que no puede
ejecutarse de forma independiente.
apt-get install -y libapache2-mod-passenger
Consulte más adelante en el manual cómo configurar el servidor web de Apache con Passenger.
### Con Thin
Thin es un servidor de aplicaciones más ligero que puede ejecutarse con independencia del
servidor web. Thin se instalará en el paquete de la aplicación y se utilizará para gestionar
Alaveteli por defecto.
Ejecute lo siguiente para poner el servidor en marcha:
cd /var/www/alaveteli
bundle exec thin \
--environment=production \
--user=alaveteli \
--group=alaveteli \
start
El servidor escucha todas las interfaces de forma predeterminada. Puede restringirlo a la interfaz de
localhost añadiendo `--address=127.0.0.1`.
El servidor debería haber indicado la dirección URL de acceso desde el navegador,
para que pueda observar el sitio en acción.
Puede demonizar el proceso iniciándolo con la opción `--daemonize`.
Más adelante en este manual crearemos un demonio SysVinit para gestionar la aplicación, así que puede detener todos los procesos thin que haya empezado a crear.
## Demonios y procesos cron
Los scripts crontab e init utilizan el formato de archivo `.ugly`, que es un extraño formato
de plantillas utilizado por mySociety.
El formato `ugly` utiliza una sustitución simple de variables. Una variable tiene este
`!!(*= $aspecto *)!!`.
### Genere el archivo crontab
`config/crontab-example` contiene los procesos cron que se ejecutan en
Alaveteli. Escriba de nuevo el archivo de ejemplo para sustituir las variables
y después guárdelo en la carpeta `/etc/cron.d/` del servidor.
**Variables de la plantilla:**
* `vhost_dir`: ruta completa del directorio destino de Alaveteli.
Por ejemplo, si la salida se halla en `/var/www/alaveteli`, indique `/var/www`.
* `vcspath`: nombre del directorio que contiene el código de Alaveteli.
Por ejemplo, `alaveteli`.
* `user`: usuario con el que se ejecuta el software.
* `site`: cadena de texto que identifica su implementación de Alaveteli.
* `mailto`: dirección de correo electrónico o cuenta local a la que se enviará la salida cron. La configuración de una dirección de correo depende de que su MTA haya sido configurado para el envío remoto.
Existe una tarea rake que le ayudará a escribir de nuevo este archivo para que le resulte útil.
Este ejemplo envía la salida cron al usuario local `alaveteli`. Modifique las variables para adaptarlas a su instalación.
pushd /var/www/alaveteli
bundle exec rake config_files:convert_crontab \
DEPLOY_USER=alaveteli \
VHOST_DIR=/var/www \
VCSPATH=alaveteli \
SITE=alaveteli \
MAILTO=alaveteli \
CRONTAB=/var/www/alaveteli/config/crontab-example > /etc/cron.d/alaveteli
popd
chown root:alaveteli /etc/cron.d/alaveteli
chmod 754 /etc/cron.d/alaveteli
### Genere el demonio de la aplicación
Genere un demonio basado en el servidor de aplicaciones instalado. Este demonio permitirá utilizar
el comando `service` nativo para detener, iniciar y reiniciar la aplicación.
#### Passenger
**Variables de la plantilla:**
* `vhost_dir`: ruta completa del directorio destino de Alaveteli.
Por ejemplo, si la salida se halla en `/var/www/alaveteli`, indique `/var/www`.
* `vcspath`: nombre del directorio que contiene el código de Alaveteli.
Por ejemplo, `alaveteli`.
* `site`: cadena de texto que identifica su implementación de Alaveteli.
* `user`: usuario con el que se ejecuta el software.
Existe una tarea rake que le ayudará a escribir de nuevo este archivo para que le resulte útil.
Este ejemplo envía la salida cron al usuario local `alaveteli`. Modifique las variables para adaptarlas a su instalación.
pushd /var/www/alaveteli
bundle exec rake config_files:convert_init_script \
DEPLOY_USER=alaveteli \
VHOST_DIR=/var/www \
VCSPATH=alaveteli \
SITE=alaveteli \
SCRIPT_FILE=/var/www/alaveteli/config/sysvinit-passenger.ugly > /etc/init.d/alaveteli
popd
chown root:alaveteli /etc/init.d/alaveteli
chmod 754 /etc/init.d/alaveteli
Inicie la aplicación:
service alaveteli start
#### Thin
**Variables de la plantilla:**
* `vhost_dir`: ruta completa del directorio destino de Alaveteli.
Por ejemplo, si la salida se halla en `/var/www/alaveteli`, indique `/var/www`.
* `vcspath`: nombre del directorio que contiene el código de Alaveteli.
Por ejemplo, `alaveteli`.
* `site`: cadena de texto que identifica su implementación de Alaveteli.
* `user`: usuario con el que se ejecuta el software.
Existe una tarea rake que le ayudará a escribir de nuevo este archivo para que le resulte útil.
Este ejemplo envía la salida cron al usuario local `alaveteli`. Modifique las variables para adaptarlas a su instalación.
pushd /var/www/alaveteli
bundle exec rake config_files:convert_init_script \
DEPLOY_USER=alaveteli \
VHOST_DIR=/var/www \
VCSPATH=alaveteli \
SITE=alaveteli \
SCRIPT_FILE=/var/www/alaveteli/config/sysvinit-thin.ugly > /etc/init.d/alaveteli
popd
chown root:alaveteli /etc/init.d/alaveteli
chmod 754 /etc/init.d/alaveteli
Inicie la aplicación:
service alaveteli start
### Genere el demonio de alerta
Uno de los procesos cron hace referencia a un script en `/etc/init.d/alaveteli-alert-tracks`. Se trata
de un script init, que puede generarse a partir de la plantilla
`config/alert-tracks-debian.ugly`. Este script envía correos a usuarios suscritos a actualizaciones del sitio, denominados [`tracks`]({{ page.baseurl }}/docs/installing/email/#correo-de-tracks), cuando existe algo nuevo que concuerda con sus intererses.
**Variables de la plantilla:**
* `daemon_name`: nombre del demonio, establecido por la tarea rake.
* `vhost_dir`: ruta completa del directorio destino de Alaveteli.
Por ejemplo, si la salida se halla en `/var/www/alaveteli`, indique `/var/www`.
* `vcspath`: nombre del directorio que contiene el código de Alaveteli.
Por ejemplo, `alaveteli`.
* `site`: cadena de texto que identifica su implementación de Alaveteli.
* `user`: usuario con el que se ejecuta el software.
Existe una tarea rake que le ayudará a escribir de nuevo este archivo para que le resulte útil.
Este ejemplo envía la salida cron al usuario local `alaveteli`. Modifique las variables para adaptarlas a su instalación.
pushd /var/www/alaveteli
bundle exec rake RAILS_ENV=production config_files:convert_init_script \
DEPLOY_USER=alaveteli \
VHOST_DIR=/var/www \
VCSPATH=alaveteli \
SITE=alaveteli \
SCRIPT_FILE=/var/www/alaveteli/config/alert-tracks-debian.ugly > /etc/init.d/alaveteli-alert-tracks
popd
chown root:alaveteli /etc/init.d/alaveteli-alert-tracks
chmod 754 /etc/init.d/alaveteli-alert-tracks
Inicie el demonio de tracks de alerta:
service alaveteli-alert-tracks start
### Genere el demonio de purga de Varnish
`config/purge-varnish-debian.ugly` es un script init similar, que es opcional
e innecesario si elige no ejecutar su sitio con Varnish (más información a continuación). Notifica a Varnish sobre páginas en caché que necesitan ser purgadas de la caché de Varnish. No funcionará si Varnish no está instalado.
**Variables de la plantilla:**
* `daemon_name`: nombre del demonio, establecido por la tarea rake.
* `vhost_dir`: ruta completa del directorio destino de Alaveteli.
Por ejemplo, si la salida se halla en `/var/www/alaveteli`, indique `/var/www`.
* `vcspath`: nombre del directorio que contiene el código de Alaveteli.
Por ejemplo, `alaveteli`.
* `site`: cadena de texto que identifica su implementación de Alaveteli.
* `user`: usuario con el que se ejecuta el software.
Existe una tarea rake que le ayudará a escribir de nuevo este archivo para que le resulte útil.
Este ejemplo envía la salida cron al usuario local `alaveteli`. Modifique las variables para adaptarlas a su instalación.
pushd /var/www/alaveteli
bundle exec rake RAILS_ENV=production config_files:convert_init_script \
DEPLOY_USER=alaveteli \
VHOST_DIR=/var/www \
VCSPATH=alaveteli \
SITE=alaveteli \
SCRIPT_FILE=/var/www/alaveteli/config/purge-varnish-debian.ugly > /etc/init.d/alaveteli-purge-varnish
popd
chown root:alaveteli /etc/init.d/alaveteli-purge-varnish
chmod 754 /etc/init.d/alaveteli-purge-varnish
Inicie el demonio de tracks de alerta:
service alaveteli-purge-varnish start
## Configure el servidor web
En casi todos los escenarios recomendamos ejecutar la aplicación en Rails de Alaveteli
detrás de un servidor web. Así, el servidor web puede ofrecer contenido estático sin recorrer
la pila de Rails, proporcionando un mejor rendimiento.
Recomendamos dos combinaciones principales de aplicación y servidor web:
- Apache y Passenger
- Nginx y Thin
Hay formas de ejecutar Passenger con Nginx y, por supuesto, Thin con Apache, pero
no se tienen en cuenta en este manual. Si desea hacer algo que no está documentado aquí,
contacte con [alaveteli-dev](https://groups.google.com/forum/#!forum/alaveteli-dev) y
estaremos encantados de ayudarle en la puesta en marcha.
Si ha seguido este manual, ya debería tener instalado un servidor de aplicaciones, así que
ahora deberá eleigr el servidor web adecuado para configurarlo.
### Apache (con Passenger)
Instale Apache con el contenedor Suexec:
apt-get install -y apache2
apt-get install -y apache2-suexec
Active los módulos requeridos:
a2enmod actions
a2enmod expires
a2enmod headers
a2enmod passenger
a2enmod proxy
a2enmod proxy_http
a2enmod rewrite
a2enmod suexec
Cree un directorio para la configuración opcional de Alaveteli:
mkdir -p /etc/apache2/vhost.d/alaveteli
Copie el ejemplo de archivo de configuración de VirtualHost. Necesitará modificar todas
las ocurrencias de `www.example.com` por su URL.
cp /var/www/alaveteli/config/httpd.conf-example \
/etc/apache2/sites-available/alaveteli
Desactive el sitio predeterminado y active el VirtualHost `alaveteli`:
a2dissite default
a2ensite alaveteli
Compruebe la configuración y solucione posibles problemas:
apachectl configtest
Reinicie Apache para cargar una nueva configuración de Alaveteli:
service apache2 graceful
Se recomienda encarecidamente que su sitio funcione con SSL. (Asigne a `FORCE_SSL` el
valor «true» en `config/general.yml`). Para ello necesitará un certificado SSL para su dominio.
Active el módulo SSL de Apache:
a2enmod ssl
Copie la configuración SSL, cambiando de nuevo `www.example.com` por su dominio,
y active el VirtualHost:
cp /var/www/alaveteli/config/httpd-ssl.conf.example \
/etc/apache2/sites-available/alaveteli_https
a2ensite alaveteli_https
Fuerce las solicitudes HTTPS desde el VirtualHost HTTP:
cp /var/www/alaveteli/config/httpd-force-ssl.conf.example \
/etc/apache2/vhost.d/alaveteli/force-ssl.conf
Si está probando Alaveteli o configurando un sitio interno de pruebas, genere
certificados SSL autofirmados. **No utilice certificados autofirmados para un
servidor de producción**. Sustituya `www.example.com` por su nombre de dominio.
openssl genrsa -out /etc/ssl/private/www.example.com.key 2048
chmod 640 /etc/ssl/private/www.example.com.key
openssl req -new -x509 \
-key /etc/ssl/private/www.example.com.key \
-out /etc/ssl/certs/www.example.com.cert \
-days 3650 \
-subj /CN=www.example.com
chmod 640 /etc/ssl/certs/www.example.com.cert
Compruebe la configuración y solucione posibles problemas:
apachectl configtest
Reinicie Apache para cargar una nueva configuración de Alaveteli. También se reiniciará
Passenger (el servidor de la aplicación).
service apache2 graceful
### Nginx (con Thin)
Instale Nginx:
apt-get install -y nginx
#### Funcionamiento con SSL
Se recomienda encarecidamente que el sitio funcione con SSL. (Asigne a `FORCE_SSL` el valor
«true» en `config/general.yml`). Para ello necesitará un certificado SSL para su dominio.
Copie la configuración SSL, cambiando de nuevo `www.example.com` por su dominio,
active el servidor `alaveteli_https` y desactive el sitio predeterminado.
cp /var/www/alaveteli/config/nginx-ssl.conf.example \
/etc/nginx/sites-available/alaveteli_https
rm /etc/nginx/sites-enabled/default
ln -s /etc/nginx/sites-available/alaveteli_https \
/etc/nginx/sites-enabled/alaveteli_https
<div class="attention-box">
<strong>Nota:</strong> Por motivos de historial, <code>nginx-ssl.conf.example</code> establece la ruta de Alaveteli como <code>/var/www/alaveteli/alaveteli</code>; necesitará modificarla manualmente a <code>/var/www/alaveteli</code> o a la raíz de su instalación de Alaveteli.
</div>
Si está probando Alaveteli o configurando un sitio interno de pruebas, genere
certificados SSL autofirmados. **No utilice certificados autofirmados para un
servidor de producción**. Sustituya `www.example.com` por su nombre de dominio.
openssl genrsa -out /etc/ssl/private/www.example.com.key 2048
chmod 640 /etc/ssl/private/www.example.com.key
openssl req -new -x509 \
-key /etc/ssl/private/www.example.com.key \
-out /etc/ssl/certs/www.example.com.cert \
-days 3650 \
-subj /CN=www.example.com
chmod 640 /etc/ssl/certs/www.example.com.cert
Compruebe la configuración y solucione posibles problemas:
service nginx configtest
Cargue la nueva configuración de Nginx y reinicie la aplicación:
service nginx reload
service alaveteli restart
#### Funcionamiento sin SSL
Asigne a `FORCE_SSL` el valor
«false» en `config/general.yml`. Copie el ejemplo de configuración de Nginx:
cp /var/www/alaveteli/config/nginx.conf.example \
/etc/nginx/sites-available/alaveteli
<div class="attention-box">
<strong>Nota:</strong> Por motivos de historial, <code>nginx.conf.example</code> establece la ruta de Alaveteli como <code>/var/www/alaveteli/alaveteli</code>; necesitará modificarla manualmente a <code>/var/www/alaveteli</code> o a la raíz de su instalación de Alaveteli.
</div>
Desactive el sitio por defecto y active el servidor `alaveteli`:
rm /etc/nginx/sites-enabled/default
ln -s /etc/nginx/sites-available/alaveteli \
/etc/nginx/sites-enabled/alaveteli
Compruebe la configuración y solucione posibles problemas:
service nginx configtest
Inicie la aplicación de Rails con Thin (si aún no lo ha hecho).
service alaveteli start
Cargue de nuevo la configuración de Nginx:
service nginx reload
---
## Añada Varnish como acelerador HTTP
En todas las cargas, excepto las ligeras, se recomienda encarecidamente que el servidor funcione con
un acelerador HTTP, como Varnish. Se suministra un VCL de muestra de Varnish en
`conf/varnish-alaveteli.vcl`.
Si utiliza SSL necesitará configurar un terminador de SSL delante de
Varnish. Si ya utiliza Apache como servidor web, puede utilizarlo
también como terminador SSL.
Tenemos algunas [notas sobre buenas prácticas para el servidor
de producción]({{ page.baseurl }}/docs/running/server/).
## ¿Qué hacer ahora?
Consulte los [siguientes pasos]({{ page.baseurl }}/docs/installing/next_steps/).
## Solución de problemas
* **Efectúe las pruebas**
Asegúrese de que todo está bien. Como usuario de Alaveteli, ejecute:
bundle exec rake spec
Si se produce algún error, algo ha fallado en los pasos anteriores
(consulte la próxima sección sobre problemas y soluciones comunes). Es posible que
pueda avanzar a los [siguientes pasos]({{ page.baseurl }}/docs/installing/next_steps/), según la gravedad del problema,
pero lo ideal sería que intentara averiguar la causa del error.
<div class="attention-box">
<strong>Nota:</strong> Si ha configurado su instalación de Alaveteli para producción, necesitará eliminar temporalmente el archivo <code>config/rails_env.rb</code>, utilizado para forzar el entorno de rails en producción, y editar su archivo <code>.bundle/config</code> para eliminar la línea <code>BUNDLE_WITHOUT</code>, que excluye las dependencias de desarrollo. Una vez hecho esto, como usuario de Alaveteli, ejecute la instalación <code>bundle install</code>. También necesitará convertir Alaveteli en propietario de <code>/var/www/alaveteli/log/development.log</code> y llevar a cabo las migraciones de bases de datos.
<pre><code>chown alaveteli:alaveteli /var/www/alaveteli/log/development.log
sudo -u alaveteli bundle exec rake db:migrate</code></pre>
Debería haber podido ejecutar las pruebas. No olvide restaurar <code>config/rails_env.rb</code> cuando haya terminado. Probablemente verá algunos errores de procesos cron, ya que se estarán ejecutando en el modo de desarrollo.
</div>
* **No aparecen los correos entrantes en mi instalación de Alaveteli**
Consulte el [manual general de solución de problemas de correo]({{ page.baseurl }}/docs/installing/email#solucin-de-problemas-generales-de-correo).
* **Varias pruebas muestran el error «*Your PostgreSQL connection does not support
unescape_bytea. Try upgrading to pg 0.9.0 or later*»**
Tiene una versión antigua de `pg`, el controlador de Postgres de Ruby. En
Ubuntu, por ejemplo, es proporcionado por el paquete `libdbd-pg-ruby`.
Pruebe actualizando la instalación `pg` de su sistema o instalando el paquete gem pg
con `gem install pg`
* **Algunas de las pruebas relacionadas con el correo están fallando con mensajes tales como
«*when using TMail should load an email with funny MIME settings'
FAILED*»**
Parece que las pruebas se están efectuando en el entorno `production`
en lugar de en el entorno `test` por algún motivo.
* **Los caracteres que no pertenecen al código ASCII se muestran como asteriscos en mis mensajes entrantes**
Utilizamos `elinks` para convertir los correos HTML en texto sin formato.
Normalmente la codificación debería funcionar, pero en algunas circunstancias parece que
`elinks` ignora los parámetros recibidos desde Alaveteli.
Para forzar que `elinks` siempre trate las entradas como UTF8, añada lo siguiente
a `/etc/elinks/elinks.conf`:
set document.codepage.assume = "utf-8"
set document.codepage.force_assumed = 1
También debería comprobar que su localización está configurada correctamente. Consulte
[esta publicación de seguimiento](https://github.com/mysociety/alaveteli/issues/128#issuecomment-1814845)
para obtener más información.
* **Recibo `rake: command not found` al ejecutar el script posterior a la instalación**
El script utiliza `rake`.
Es posible que las librerías binarias instaladas por bundler no se ubiquen en la
ruta `PATH` del sistema; por tanto, para poder ejecutar `rake` (necesario para los
despliegues), deberá utilizar un comando similar a este:
ln -s /usr/lib/ruby/gems/1.8/bin/rake /usr/local/bin/
|