¿Vosotros estáis de acuerdo?
¿Qué distro(s) utilizáis normalmente? ¿Sabíais que existe una distro basada en Hanna Montana? Sí... aquí está el enlace. Ya me contaréis si lo intentáis...
miércoles, 2 de mayo de 2018
miércoles, 4 de abril de 2018
AWS - Actualizar un certificado SSL externo
Hoy os voy a explicar cómo lo hago yo para actualizar un certificado SSL en AWS, un certificado que se ha comprado fuera. Lo vamos a hacer en tres pasos, que son
- Codificar los certificados (pasar a .pem)
- Subirlos a AWS
- Cambiar el viejo por el nuevo
1) Para codificar el certificado nuevo vamos a necesitar
-
domain.crt (el certificado que nos habrá enviado el proveedor)
domain.key
root.crt (es el Certificado Intermedio del tipo de SSL que hemos tramitado, que nos debería dar también el proveedor, sino mejor se lo pedimos).
Para hacer la conversión y encriptar los archivos lo hacemos así (desde cualquier linux que tenga el paquete openssl instalado)
> rsa -in domain.key -outform PEM -out domain.key.pem
> x509 -inform PEM -in domain.crt -out domain.crt.pem
> x509 -inform PEM -in root.crt -out root.crt.pemYa los tienes codificados. Vamos a subirlos.
2) Subirlos no es complicado, sólo necesitas un usuario IAM con permisos para subirlos. Aquí tienes la documentación de todas las políticas en ACM que necesitas para definir los permisos de tu usuario.
La subida la puedes hacer desde la consola de AWS o desde línea de comandos (habiendo instalado las AWS tools previamente). Desde el directorio donde tienes los certificados codificados, el comando sería este
> aws iam upload-server-certificate --server-certificate-name Nombre_del_Certificado --certificate-body
file:/domain.crt.pem --private-key
file:/domain.key.pem --certificate-chain
file:/domain_2016_ca.crt.pemCuando este paso se hace bien, el sistema devuelve algo así:
{
"ServerCertificateMetadata": {
"ServerCertificateId": "ASCAJKNEFTXTK7XXXXXXX",
"ServerCertificateName": "domain",
"Expiration": "2019-07-21T23:59:59Z",
"Path": "/",
"Arn": "arn:aws:iam::xxxxxxxx:server-certificate/domain",
"UploadDate": "2018-01-26T11:16:35.819Z"
}
}
"ServerCertificateMetadata": {
"ServerCertificateId": "ASCAJKNEFTXTK7XXXXXXX",
"ServerCertificateName": "domain",
"Expiration": "2019-07-21T23:59:59Z",
"Path": "/",
"Arn": "arn:aws:iam::xxxxxxxx:server-certificate/domain",
"UploadDate": "2018-01-26T11:16:35.819Z"
}
}
Sencillo, ¿no? El problema es cuando el usuario de AWS no tiene permisos, que hay que dárselos. El error es más del tipo:
A client error (AccessDenied) occurred when calling the
UploadServerCertificate operation: User:
arn:aws:iam::xxxxxxxx:user/USER is not authorized to perform:
iam:UploadServerCertificate on resource:
arn:aws:iam::xxxxxxxx:server-certificate/domain
En este caso, falta algún permisos; prueba a darle a tu usuario permisos IAMFullAccess y a quitárselos después de importar el certificado.
3) Cambiar el nuevo certificado : Desde el panel de AWS, entra en EC2 y en el panel de la izquierda busca Load Balancing y justo debajo, Load Balancer. Busca el balanceador al que está asociado el certificado que vamos a actualizar, selecciónalo y vete a la pestaña "Listeners". Selecciona el HTTPS y edítalo. En el campo
Default SSL certificate
escoge el certificado que acabas de subir y guarda. Ya lo has cambiado.
domingo, 4 de febrero de 2018
Cómo volcar una BD SQL Server desde el RDS de AWS a un entorno on-premise (II)
Hola a todos!
En un primer post os estuve explicando cómo podéis hacer un export de una BD SQL Server en el RDS de AWS.
En este punto tenemos el backup del SQL en S3; para descargarlo necesitamos acceder a S3 y hacer que el archivo esté disponible desde internet. Para hacerlo, accede al panel de AWS y ve a S3; dentro del bucket tenemos el backup, con el mismo nombre que le has dado al hacer el export. Entra en este archivo y en la pestaña Overview hay un botón para hacerlo público:
También tienes el link externo del archivo. Cópialo y vamos al servidor donde vamos a importar esa base de datos
Recuerda borrar lo que vaya quedando en el bucket para que no se generen gastos no necesarios
Ahora tenemos que descargar e importar la base de datos en el entorno de on-premise. Vamos por partes:
1. Conéctate al servidor desde el que vas a lanzar la restauración, para descargar el backup en local.
2. Descarga el .BAK que hemos generado desde S3. Si ves que no te funciona el enlace por algún motivo, piensa que puedes entrar desde el servidor a la consola de AWS y descargarlo directamente. Ten localizada la descarga; yo la suelo mover a la raiz del disco en el que esté para tenerla controlada.
3. Abre el MS SQL y conecta al motor del SQL
4.Vamos a eliminar la BD. Recuerda avisar a quien sea necesario. Para eliminarla, ponla en modo offline primero para confirmar que no hay ninguna conexión abierta y de errores. Si lo haces con una query será algo así
Los corchetes “[“ y “]” no los quites, son parte de la query. Una vez la BD esté offline, podrás eliminarla sin problema.
5. Ahora ya podemos restaurar la BD. Lo vamos a hacer con esta otra query; modifica los campos que sean necesarios
6. Una vez acabe (puede tardar unos 5 o 10 minutos, dependiendo del tamaño), hay que habilitar el acceso a esta base de datos nueva. En Seguridad → Inicios de Sesion, busca el usuario que se utilizaba antes y vete a propiedades
Cuando se abra la ventana de propiedades, vete a Asignación de usuarios en el menú arriba a la izquierda
y selecciona la nueva base de datos en “Usuarios asignados a este inicio de sesión":
Una vez estén asignados, acepta y el backup estará restaurado del todo.
En un primer post os estuve explicando cómo podéis hacer un export de una BD SQL Server en el RDS de AWS.
En este punto tenemos el backup del SQL en S3; para descargarlo necesitamos acceder a S3 y hacer que el archivo esté disponible desde internet. Para hacerlo, accede al panel de AWS y ve a S3; dentro del bucket tenemos el backup, con el mismo nombre que le has dado al hacer el export. Entra en este archivo y en la pestaña Overview hay un botón para hacerlo público:
También tienes el link externo del archivo. Cópialo y vamos al servidor donde vamos a importar esa base de datos
Recuerda borrar lo que vaya quedando en el bucket para que no se generen gastos no necesarios
Ahora tenemos que descargar e importar la base de datos en el entorno de on-premise. Vamos por partes:
1. Conéctate al servidor desde el que vas a lanzar la restauración, para descargar el backup en local.
2. Descarga el .BAK que hemos generado desde S3. Si ves que no te funciona el enlace por algún motivo, piensa que puedes entrar desde el servidor a la consola de AWS y descargarlo directamente. Ten localizada la descarga; yo la suelo mover a la raiz del disco en el que esté para tenerla controlada.
3. Abre el MS SQL y conecta al motor del SQL
4.Vamos a eliminar la BD. Recuerda avisar a quien sea necesario. Para eliminarla, ponla en modo offline primero para confirmar que no hay ninguna conexión abierta y de errores. Si lo haces con una query será algo así
ALTER DATABASE [database_name] SET OFFLINE WITH ROLLBACK IMMEDIATE
GO
GO
Los corchetes “[“ y “]” no los quites, son parte de la query. Una vez la BD esté offline, podrás eliminarla sin problema.
5. Ahora ya podemos restaurar la BD. Lo vamos a hacer con esta otra query; modifica los campos que sean necesarios
RESTORE DATABASE [database_name] FROM DISK = 'c:\AAAAMMDD_backup.bak'
WITH MOVE 'database_mdf_name' TO 'C:\Program Files\Microsoft SQL
Server\MSSQL11.DEVW2012\MSSQL\DATA
\database_mdf_name.mdf',
MOVE 'database_log_name' TO 'C:\Program Files\Microsoft SQL
Server\MSSQL11.DEVW2012\MSSQL\DATA
\database_mdf_name.ldf
RECOVERY, REPLACE, STATS = 10;
WITH MOVE 'database_mdf_name' TO 'C:\Program Files\Microsoft SQL
Server\MSSQL11.DEVW2012\MSSQL\DATA
\database_mdf_name.mdf',
MOVE 'database_log_name' TO 'C:\Program Files\Microsoft SQL
Server\MSSQL11.DEVW2012\MSSQL\DATA
\database_mdf_name.ldf
RECOVERY, REPLACE, STATS = 10;
6. Una vez acabe (puede tardar unos 5 o 10 minutos, dependiendo del tamaño), hay que habilitar el acceso a esta base de datos nueva. En Seguridad → Inicios de Sesion, busca el usuario que se utilizaba antes y vete a propiedades
Cuando se abra la ventana de propiedades, vete a Asignación de usuarios en el menú arriba a la izquierda
y selecciona la nueva base de datos en “Usuarios asignados a este inicio de sesión":
Una vez estén asignados, acepta y el backup estará restaurado del todo.
miércoles, 24 de enero de 2018
Cómo volcar una BD SQL Server desde el RDS de AWS a un entorno on-premise (I)
Hola! Hoy os traigo un tutorial algo más elaborado, y el primero (creo) en el que trabajo con AWS. Espero que no sea el único!
Para exportar una BD SQL Server desde AWS a un entorno on-premise, vamos a hacer un export a S3 y desde allí lo descargamos e importamos desde el entorno on premise.
En esta primera parte del tutorial vamos a hacer el export, y en una segunda parte, la importación en destino
Lo que primero vamos a necesitas será un usuario con permisos suficientes para poder exportar el backup y volcarlo en un bucket de S3; después necesitas tener ese bucket. Y por último, tener la opción
SQLSERVER_BACKUP_RESTORE añadida a un grupo de opciones en tu instancia RDS.
Si ya tienes un usuario IAM puedes crear y asignarle la política específica para hacer exports/restores RDS o puedes crear un rol y asignarlo. En cualquier caso, la política que tienes que crear debería ser una de las tres definidas aquí.
Para hacer el export del SQLServer nos conectamos a la consola y ejecutamos este comando
exec msdb.dbo.rds_backup_database
@source_db_name='database_name',
@s3_arn_to_backup_to='arn:aws:s3:::bucket_name/file_name_and_extension',
@kms_master_key_arn='arn:aws:kms:region:account-id:key/key-id',
@overwrite_S3_backup_file=1,
@type='differential/FULL';
donde
- @source_db_name hace referencia a la BD que vas a exportar
- @s3_arn_to_backup_to hace referncia al bucket donde vas a exportar y al nombre del fichero con que se va a guardar
- @kms_master_key_arn hace referencia a la encriptación del fichero, y es OPCIONAL
- @overwrite_S3_backup_file hace referencia a si quieres sobreescribir el fichero en caso de que exista; 1 equivale a Sí y 0 a No. Es OPCIONAL, y por defecto es "1"
- @type hace referencia al tipo de backup, si es diferencial o completo. Esta opción también es OPCIONAL y por defecto equivale a FULL. Para el backup diferencial se toma como punto de referencia el último backup FULL que se ha hecho. Se puede consultar cuándo se ha hecho con esta query:
select top 1
database_name
, backup_start_date
, backup_finish_date
from msdb.dbo.backupset
where database_name='database_name'
and type = 'D'
order by backup_start_date desc;
Este export no es instantáneo y va a depender sobre todo del tamaño de la BD; para ver su evolución, lo hacemos con esta query:
exec msdb.dbo.rds_task_status @db_name='database_name';
Si quisiéramos restaurar la base de datos, la query sería
exec msdb.dbo.rds_restore_database
@restore_db_name=’database_name';
@s3_arn_to_restore_from='arn:aws:s3:::bucket_name/file_name_and_extension';Bien, y hasta aquí la parte de AWS; en el siguiente post os explico cómo lo hago yo para importar el export en un SQL Server.
Gracias!
martes, 12 de diciembre de 2017
Error común: "Too many open files", en Tomcat o PHP
Si Tomcat os devuelve un error HTTP 500 y en el 'catalina.out' encontráis algo de este tipo
[] org.apache.tomcat.util.net.JIoEndpoint$Acceptor run SEVERE: Socket accept failed
java.net.SocketException: Too many open files
java.net.SocketException: Too many open files
es que tenéis un problema de ficheros abiertos; con
> ulimit -a
puedes ver tu configuración actual; repasa la variable "open files" que te da cuántos ficheros abiertos puede haber por proceso. Puedes modificarla con
> ulimit -n #
donde # es el nuevo valor; prueba con 4096 y reinicia el tomcat para que coja el cambio de esta variable de sistema
Para controlar cuántos ficheros tiene un proceso abierto, lo puedes hacer con
> lsof -l | grep tomcat
Este tipo de fallo es aplicable a cualquier otra aplicación, no sólo a tomcat; también PHP requiere abrir muchos ficheros y puede arrojar un error similar. Tenlo en cuenta cuando una aplicación se pare de repente después de rato funcionando bien.
Gracias!
lunes, 30 de octubre de 2017
viernes, 1 de septiembre de 2017
Compilar y configurar PHP-FPM 5.6.30 para que escuche en un puerto sobre Debian 8
Aprovecho que he tenido que compilar de nuevo PHP para poder utilizarlo con nGinx, y os dejo mi receta
# Configuro PHP-fpm
Solo faltaría configurar nGinx para que envíe las peticiones PHP a este puerto. También se podría configurar por socket.
> mkdir /opt/source
> mkdir -p /opt/php-5.6
> cd /opt/source # Bajo y descomprimo el código fuente en este directorio
> get http://es1.php.net/get/php-5.6.30.tar.gz
> tar -xzvf php-5.6.30.tar.gz
> apt-get install build-essential
> apt-get install libcurl4-openssl-dev pkg-config
> apt-get install libbz2-dev
> apt-get install libjpeg62 libjpeg62-dev
> apt-get install libpng12-dev
> apt-get install libfreetype6-dev
> apt-get update && apt-get install -y libc-client-dev libkrb5-dev
> mkdir /usr/lib64/
> ln -s /usr/lib/libc-client.a /usr/lib64/libc-client.a
> apt-get install make
> cd php-5.6.30
> ./configure \
--prefix=/opt/php-5.6 \
--with-zlib-dir \
--with-freetype-dir \
--enable-mbstring \
--with-libxml-dir=/usr \
--enable-soap \
--enable-calendar \
--with-curl \
--with-mcrypt \
--with-zlib \
--with-gd \
--disable-rpath \
--enable-inline-optimization \
--with-bz2 \
--with-zlib \
--enable-sockets \
--enable-sysvsem \
--enable-sysvshm \
--enable-pcntl \
--enable-mbregex \
--with-mhash \
--enable-zip \
--with-pcre-regex \
--with-mysql \
--with-pdo-mysql \
--with-mysqli \
--with-png-dir=/usr \
--enable-gd-native-ttf \
--with-openssl \
--with-libdir=lib64 \
--enable-ftp \
--with-imap \
--with-imap-ssl \
--with-kerberos \
--with-gettext \
--with-gd \
--with-jpeg-dir=/usr/lib/ \
--enable-fpm \
--with-fpm-user=www-data \
--with-fpm-group=www-data \
--enable-intl \
--with-xsl \
--with-pear
> make
> make install
> mkdir -p /opt/php-5.6
> cd /opt/source # Bajo y descomprimo el código fuente en este directorio
> get http://es1.php.net/get/php-5.6.30.tar.gz
> tar -xzvf php-5.6.30.tar.gz
> apt-get install build-essential
> apt-get install libcurl4-openssl-dev pkg-config
> apt-get install libbz2-dev
> apt-get install libjpeg62 libjpeg62-dev
> apt-get install libpng12-dev
> apt-get install libfreetype6-dev
> apt-get update && apt-get install -y libc-client-dev libkrb5-dev
> mkdir /usr/lib64/
> ln -s /usr/lib/libc-client.a /usr/lib64/libc-client.a
> apt-get install make
> cd php-5.6.30
> ./configure \
--prefix=/opt/php-5.6 \
--with-zlib-dir \
--with-freetype-dir \
--enable-mbstring \
--with-libxml-dir=/usr \
--enable-soap \
--enable-calendar \
--with-curl \
--with-mcrypt \
--with-zlib \
--with-gd \
--disable-rpath \
--enable-inline-optimization \
--with-bz2 \
--with-zlib \
--enable-sockets \
--enable-sysvsem \
--enable-sysvshm \
--enable-pcntl \
--enable-mbregex \
--with-mhash \
--enable-zip \
--with-pcre-regex \
--with-mysql \
--with-pdo-mysql \
--with-mysqli \
--with-png-dir=/usr \
--enable-gd-native-ttf \
--with-openssl \
--with-libdir=lib64 \
--enable-ftp \
--with-imap \
--with-imap-ssl \
--with-kerberos \
--with-gettext \
--with-gd \
--with-jpeg-dir=/usr/lib/ \
--enable-fpm \
--with-fpm-user=www-data \
--with-fpm-group=www-data \
--enable-intl \
--with-xsl \
--with-pear
> make
> make install
# Configuro PHP-fpm
> cp /opt/php-5.6/etc/php-fpm.conf.default /opt/php-5.6/etc/php-fpm.conf
> cp /opt/source/php-5.6.30/php.ini-production /opt/php-5.6/lib/php.ini
> vi /opt/php-5.6/etc/php-fpm.conf
[...]
pid = run/php-fpm.pid
[...]
user = www-data
group = www-data
[...]
listen = 127.0.0.1:9001
[...]
#include=/opt/php-5.6/etc/pool.d/*.conf
[...]
[www-PHP56]
> cp /opt/source/php-5.6.30/sapi/fpm/init.d.php-fpm /etc/init.d/php5.6-fpm
> chmod 755 /etc/init.d/php5.6-fpm
> /etc/init.d/php5.6-fpm start
> cp /opt/source/php-5.6.30/php.ini-production /opt/php-5.6/lib/php.ini
> vi /opt/php-5.6/etc/php-fpm.conf
[...]
pid = run/php-fpm.pid
[...]
user = www-data
group = www-data
[...]
listen = 127.0.0.1:9001
[...]
#include=/opt/php-5.6/etc/pool.d/*.conf
[...]
[www-PHP56]
> cp /opt/source/php-5.6.30/sapi/fpm/init.d.php-fpm /etc/init.d/php5.6-fpm
> chmod 755 /etc/init.d/php5.6-fpm
> /etc/init.d/php5.6-fpm start
Solo faltaría configurar nGinx para que envíe las peticiones PHP a este puerto. También se podría configurar por socket.
Suscribirse a:
Entradas (Atom)



