Skip to content

Instantly share code, notes, and snippets.

@aduartem
Created June 16, 2016 20:35
Show Gist options
  • Save aduartem/8c9817abc0ace7aca7f6afce0325b13f to your computer and use it in GitHub Desktop.
Save aduartem/8c9817abc0ace7aca7f6afce0325b13f to your computer and use it in GitHub Desktop.
Como crear una máquina de QA Amazon con Ubuntu 14.04

Documentación proceso de creación de máquina de QA Amazon con Ubuntu 14.04

I. Actualizar el listado de paquetes disponibles

$ sudo apt-get update

II. Agregar Swap

$ sudo fallocate -l 1G /swapfile

Verificamos que el espacio reservado sea el correcto:

$ ls -lh /swapfile
-rw-r--r-- 1 root root 1.0G Jun 16 15:43 /swapfile

Habilitar el archivo Swap

Por seguridad cambiamos los permisos:

$ sudo chmod 600 /swapfile

Verificamos que el archivo tenga los permisos correctos:

$ ls -lh /swapfile
-rw------- 1 root root 1.0G Jun 16 15:43 /swapfile

Ahora podemos configurar nuestra swap

$ sudo mkswap /swapfile

Salida:

Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=e2f1e9cf-c0a9-4ed4-b8ab-714b8a7d6944
$ sudo swapon /swapfile

Verificamos que el procedimiento fue exitoso comprobando que el sistema informa el espacio de intercambio:

$ sudo swapon -s
Filename                Type        Size    Used    Priority
/swapfile               file        4194300 0       -1

Tenemos creado y habilitado el nuevo archivo swap, ahora podemos ejecutar el comando free y aparecera la Swap:

$ free -m
             total       used       free     shared    buffers     cached
Mem:          3953        101       3851          0          5         30
-/+ buffers/cache:         66       3887
Swap:         4095          0       4095

III. Instalar Nginx

$ sudo apt-get install nginx

Para conocer la ip pública del servidor:

$ ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

o usar:

$ curl http://icanhazip.com

En el navegador verificamos que podemos ver la página por defecto de nginx desde el host (nombre del dominio o IP)

http://server_domain_name_or_IP

IV. Instalar MySQL

$ sudo apt-get install mysql-server
$ sudo mysql_install_db

A continuación configuramos mysql:

$ sudo mysql_secure_installation

V. Instalar PHP-FPM

Instalamos php-fpm y la extensión para mysql:

$ sudo apt-get install php5-fpm php5-mysql

Configuramos php:

$ sudo vim /etc/php5/fpm/php.ini

Descomentar la siguiente línea:

cgi.fix_pathinfo=0

Reiniciar el servicio de php-fpm:

$ sudo service php5-fpm restart

VI. Configurar Nginx para utilizar nuestro procesador de PHP (php-fpm)

Respaldar el archivo default:

$ sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default_bkp

Ahora lo editamos:

$ sudo vim /etc/nginx/sites-available/default
server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.html index.htm;

    server_name localhost;

    location / {
        try_files $uri $uri/ =404;
    }
}
  • En la directiva index agregamos como primer valor index.php
  • En server_name, reemplazar localhost por el nombre del dominio o la IP
  • Eliminar todos los comentarios
  • Añadimos la directiva try_files para asegurarnos que Nginx no pasa malas peticiones al procesador de PHP.

Finalmente el archivo debe quedar así:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;

    root /usr/share/nginx/html;
    index index.php index.html index.htm;

    server_name server_domain_name_or_IP;

    location / {
        try_files $uri $uri/ =404;
    }

    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Reiniciamos Nginx:

$ sudo service nginx restart

Crear un archivo php de test para probar la configuración por defecto:

$ sudo vim /usr/share/nginx/html/info.php

Agregar las siguientes líneas al archivo:

<?php
phpinfo();
?>

Ahora podemos visitar la página en el navegador, ingresando el nombre del dominio o ip seguido de /info.php

http://server_domain_name_or_IP/info.php

Luego de verificar que todo esta ok eliminamos el archivo info.php:

$ sudo rm /usr/share/nginx/html/info.php

VII. Instalar php5-cli

$ sudo apt-get install php5-cli

VIII. Instalar composer

Ejecutar el siguiente comando:

$ cd ~
$ curl -sS https://getcomposer.org/installer | php

Esto descargará el archivo composer.phar en la carpeta del usuario. Este archivo tendría que ser ejecutado cada vez que queramos utilizar composer. Para instalarlo de manera global moveremos el archivo a la carpeta /usr/local/bin

$ sudo mv ~/composer.phar /usr/local/bin/composer

IX. Instalar Git

$ sudo apt-get install git

Luego de instalar Git copiamos a ~/.ssh las llaves ssh de nuestro usuario asociadas al repositorio que realizaremos el clone y cambiamos los permisos por 400.

X. Instalar proyecto

1. Hacer un clone del repositorio en /var/www

Crear carpeta /var/www y cambiar propietario y grupo por ubuntu

$ sudo mkdir /var/www
$ chown ubuntu:ubuntu /var/www

Cambiamos de directorio a /var/www y realizamos el clone

$ cd /var/www
$ git clone SSH_URLs

2. A la carpeta storage y a sus subdirectorios cambiar propietario y grupo por www-data

$ cd miproyecto
$ sudo chown -Rvf www-data:www-data storage

3. Ejecutar composer update para descargar las dependencias del proyecto

$ composer update

4. Crear base de datos e importar dump

$ mysql -u root -p
Enter password:
mysql> CREATE DATABASE ejemplo
mysql> exit
$ cd /var/www/miproyecto/db_schema
$ mysql -u root -p ejemplo < dump.sql

5. Crear copia del archivo .env.example y renombrarla como .env

Cambiamos de directorio a la raiz del proyecto y listamos todos los archivos para ver los archivos ocultos

$ cd /var/www/miproyecto/
$ ls -a

Copiamos el archivo y lo renombramos a .env

$ cp .env.example .env

Comprobamos que el archivo se copio exitosamente

$ ls -a

Editamos el archivo .env y modificamos la clave de la base de datos

$ vim .env
DB_PASSWORD=CLAVE_BD

6. Instalar imagemagick e imagick

$ sudo apt-get install imagemagick
$ sudo apt-get install php5-imagick

Reiniciar el servicio php5-fpm

$ sudo service php5-fpm restart

XI. Crear Virtual Host en Ngnix

Crear un nuevo archivo para nuestro virtual host en /etc/nginx/sites-available/

$ sudo vim /etc/nginx/sites-available/miproyecto

Ingresar lo siguiente:

limit_req_zone  $cookie_PHPSESSID  zone=twelve:10m   rate=3r/s;
limit_req_zone  $binary_remote_addr  zone=thirteen:10m   rate=10r/s;

server {
    server_name ejemplo.miproyecto.cl;

    root /var/www/miproyecto/public;
    index index.html index.php;

    access_log /var/log/miproyecto/access.log;
    error_log /var/log/miproyecto/error.log;
    # set expiration of assets to MAX for caching
    location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {
        expires max;
        log_not_found off;
    }

    location ~* \.(git|rb|inc|ht) {
        deny all;
    }

    location / {
        # Check if a file or directory index file exists, else route it to index.php.
        try_files $uri $uri/ /index.php;
    }

    location ~* \.php$ {
        limit_req   zone=twelve burst=10;
        limit_req   zone=thirteen  burst=10;
        try_files $uri =404;
        # fastcgi_pass 127.0.0.1:9000;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_read_timeout 300;
    }
}

Por ahora la configuración utilizará php-fpm por socket

Crear link simbólico del nuevo virtual host en /etc/nginx/sites-enabled/

$ sudo ln -s /etc/nginx/sites-available/miproyecto /etc/nginx/sites-enabled/

Crear carpeta para almacenar los logs:

$ sudo mkdir /var/log/miproyecto

Finalmente reiniciar Nginx:

$ sudo service nginx restart

Tutoriales relacionados

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment