Gnu/Linux‎ > ‎

Servidores

Servidor Web con PHP y Apache

publicado a la‎(s)‎ 9 sept. 2016 5:36 por Juan Jose Ramirez Lama   [ actualizado el 12 sept. 2017 12:07 ]

¿Qué es un Servidor Web?

Un servidor web como su nombre lo indica, es un software instalado en el equipo con todas las condiciones necesarias para servir o entregar páginas web que le sean solicitadas por un navegador, asegurando que se muestren y representen todos los elementos necesarios para su correcto funcionamiento y visualización.

Existen varios tipos de servidores web, Apache es un software de código abierto, libre de uso y totalmente configurable, es en este momento el más utilizado en la red, ya sea en plataformas Linux, Mac o Windows.

Al instalarlo en nuestra equipo dispondremos de un servidor completo, con todos los requisitos para ejecutarlo de forma local.


Partiendo desde la instalación del sistema operativo Debian GNU/Linux podemos ahora montar un servidor que ofrezca varios servicios a terceros como por ejemplo Servidor Web Apache 2 compatible con PHP, FTP, bases de datos, entre otros servicios.

Estos tipos de servidores los podemos usar solos en una maquina o en conjunto para que nuestro servidor sea más o menos completo. Recuerda que cuantos más servicios ofrezcamos más potente tiene que ser la maquina para poder dar a basto con todo.

Respecto a la compatibilidad de este frente a clientes con Linux, Windows o Mac va a ser total con lo que podremos compartir todos los servicios sin problemas como pueden ser la impresora o los archivos, directorios particiones que compartamos con nuestra red, entre otros.

Hardware Necesario

Podemos llamar servidor a toda maquina que este conectada a la red y ofrezca diferentes servicios a los usuarios de la misma. Para esto necesitamos Hardware suficiente para montar un computador que pueda cumplir nuestras necesidades.

El uso que le vamos a dar a esta maquina es exclusivamente la de servidor así que voy a prescindir de usar entorno gráfico para ahorrar recursos en nuestra maquina. Esto no quiere decir que no necesitemos una tarjeta gráfica y un monitor si no que no necesitamos una tarjeta gráfica muy potente y el monitor pues da lo mismo ya que operaremos con ella en modo Terminal. También vamos a prescindir del tema del sonido, por lo que no voy a instalarle ninguna tarjeta de sonido. 

En un servidor Web el Hardware más potente que tiene que haber en la maquina es el procesador y la memoria ram sin duda alguna. De ellos dos depende el funcionamiento de todo una vez empecemos a sobrecargar el sistema con programas y usuarios conectados a el, así que cuanto mas tengamos de esto mejor.

Necesitamos minimamente:
    • Placa base (2 Puertos USB)
    • Microprocesador (mínimo 500 Mhz)
    • Tarjeta gráfica
    • Tarjeta de red 10/100 por lo menos
    • Memoria Ram (mínimo 512mb)
    • Disco duro (10Gb mínimo)
    • Lector de CD/DVD o usb libres para cargar el SO.
Con este Hardware es suficiente para un servidor casero, funciona a la perfección para uso personal pero no para profesional.

Una vez Instalado el servidor lo primero que recomiendo es que actualicen los paquetes.
sudo apt-get update
sudo apt-get upgrade

Configuración de Red

En la instalación del sistema operativo se nos configuró automáticamente el servicio DHCP para que nuestro router nos asigne automáticamente una IP. Eso esta muy bien y nos ha sido muy cómodo ya que no hemos tenido que configurar nuestra tarjeta de red para nada durante la instalación del sistema, pero vamos a tener que configurarla manualmente para que nuestro servidor sea accesible desde cualquier lugar.
 
¿Porque? Pues muy sencillo, Vamos a necesitar que nuestra tarjeta de red tenga una IP estática ya que cuando compartamos un ervicio Web o Ftp deberemos abrir y redireccionar el puerto 80 para el Web y el 21 para el Ftp hacia nuestro servidor y por consecuente a una IP, que a continuación la configuraremos para que podamos hacerlo.

Lo primero que haremos será iniciar el servidor y accederemos a una Terminal, donde habrá que logearse como root.

Vamos a hacer algunas comprobaciones y configuraciones para asegurarnos de que tenemos bien configurada la red además de tener acceso a Internet desde este servidor.

Para empezar vamos a asignarle una IP fija a nuestra maquina, esto es necesario porque si vamos a ofrecer servicios hacia Internet deberemos abrir puertos y asignarlos a una IP fija desde el Router.  Si por el contrario tenemos la asignación IP de forma automática con DHCP no podremos asignar "X "puerto a "Y" IP. Con lo cual es completamente necesario que nuestra tarjeta de red tenga una IP fija.

Durante la instalación el sistema quedo con una IP asignada de modo automático (DHCP) por el Router. Comprobemos si tenemos salida a Internet mandando unos pings, por ejemplo a Google.

Si en la terminal tecleamos:
$ ping www.google.com
Debería responder algo como lo siguiente, si es así, es que tenemos IP.
PING www.google.com (64.233.186.105): 56 data bytes
64 bytes from 64.233.186.105: icmp_seq=0 ttl=43 time=19.543 ms
64 bytes from 64.233.186.105: icmp_seq=1 ttl=43 time=25.960 ms
64 bytes from 64.233.186.105: icmp_seq=2 ttl=43 time=18.283 ms
Salimos del ping con Control + c.

Ahora vamos a ver de que rango es la IP que nuestro Router nos asigno en el arranque ejecutando el comando ifconfig.
sudo ifconfig
 Veremos algo parecido a esto:
sudo ifconfig
eth0      Link encap:Ethernet  HWaddr 08:00:27:bd:ef:d7  
          inet addr:10.1.15.148  Bcast:10.1.255.255  Mask:255.255.0.0
          inet6 addr: fe80::a00:27ff:febd:efd7/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:315721 errors:0 dropped:24 overruns:0 frame:0
          TX packets:220 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:19355675 (18.4 MiB)  TX bytes:25903 (25.2 KiB)
Como podemos ver, mi Router tiene activado el modo DHCP y me asigno automaticamente la IP 10.1.15.148 por lo que con ella sabemos el rango que debemos usar para nuestra IP fija es de 10.1.15.148.x.

Asignando IP Estática

Siempre que modifiquemos un archivo del sistema para configurarlo tenemos que tener en cuenta que es necesario hacer una copia de seguridad del mismo para que podamos guiarnos de él en un momento dado o restaurarlo en cualquier caso. A continuación haremos una copia del archivo llamado interfaces que está situado en la ruta /etc/network y seguidamente lo editaremos para indicarle que IP fija es la que va a tener nuestro servidor.
sudo cp /etc/network/interfaces /etc/network/interfacesOLD
Una vez creada la copia vamos a editar el archivo interfaces con el editor de texto más sencillo de todos que viene por defecto en casi todas las distribuciones GNU/Linux llamado nano.
sudo nano -w /etc/network/interfaces
 Veremos que el documento es así:
GNU nano 2.2.6         File: /etc/network/interfaces                          

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet dhcp

              [ Read 16 lines ]
Como pueden ver, a nuestra tarjeta de red se le asigna una IP automática gracias a la linea iface eth0 inet dhcp

A continuación vamos a introducirle los siguientes parámetros para configurar manualmente la tarjeta de red. Para empezar vamos a cambiar el texto dhcp por la  palabra static y a continuación especificaremos cual va a ser nuestra IP fija, mascara de subred, puerta de enlace o gateway (router) y resolvedor de nombres DNS.

Para conocer cuales son los datos a obtener que necesitaremos llenar solo debemos teclear ifconfig en la terminal. Donde aparecerán cada uno de los dispositivos de red del equipo, buscamos el que dice eth0 y anotamos:
$ ifconfig
  • La IP o address (inet addr)
  • El broadcast (Bcast)
  • La Mascara de Red o netmask (Mask)
  • La red o network es la IP pero terminada en 0
Para saber el gateway tecleamos:
$ ip route show
Por último el servidor DNS o nameserver, para este yo utilizo las asignadas por \url{opendns.org} o puedes usar las que se encuentran en:
$ cat /etc/resolv.conf

A continuación expongo la configuración estática para este ejemplo, la cual no necesariamente tiene que ser igual que la mía, puede variar dependiendo de sus rangos de IP y proveedor de internet para el apartado DNS.
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
#iface eth0 inet dhcp

auto eth0
iface eth0 inet static

    address 10.1.15.148
    netmask 255.255.0.0
    network 10.1.15.0
    broadcast 10.1.255.255
    gateway 10.1.0.1
    nameserver 208.67.222.222 208.67.220.220

             [ Read 16 lines ]

Como ven, le he asignado la IP 10.1.15.148. Respecto a los servidores DNS he usado las direcciones de http://www.opendns.org  un servicio de resolvedores de nombres que nos ofrecen gratuitamente desde Internet.
 
Una vez hechas todas las modificaciones al archivo interfaces guardamos el archivo y salimos del editor nano.

A continuación vamos a reiniciar la red para que los cambios surjan efecto.
sudo /etc/init.d/networking restart
[ ok ] Restarting networking (via systemctl): networking.service.  

Ahora deberíamos tener la IP que configuramos anteriormente. Esto podemos verlo ejecutando el comando ip addr.
sudo ip addr
Ahora cada vez que arranquemos tendremos la misma IP y no una dinámica como antes, también puedes hacer un ping para verificar que tengas internet. 

Servidor Web Apache


Crearemos el grupo "www-data".  Para ello ejecutaremos los siguientes comandos:
sudo groupadd www-data
sudo usermod -a -G www-data www-data

A partir de aquí empieza la instalación de Apache:
sudo apt-get install apache2

En Debian usaremos el programa Apache Web Server en su versión apache2-mpm-prefork que es la recomendada para Debian por su Multi-Processing Module (MPM) ya que es considerablemente más rápido que el modelo tradicional.
sudo apt-get install apache2-mpm-prefork #Para Debian solamente
sudo a2enmod mpm_prefork #Solo si instalaste el paquete mpm-prefork

Una vez finalizada la instalación abrimos un navegador en nuestro PC de escritorio e introducimos la IP del servidor http://localhost (en este ejemplo http://192.168.11.111) y veremos el mensaje It works!.
Este mensaje quiere decir que el servidor Web Apache está funcionando y listo para servir contenido Web.

El directorio hacia donde apunta el servidor Web Apache por defecto es a /var/www/Este directorio podemos usarlo, pero cada vez que deseemos añadir nuevos archivo, necesitaremos tener permisos de root o cambiarle los permisos a ese directorio para poder usarlo. De todas formas no es recomendable usarlo, ya que cualquier ataque que pudiésemos recibir, es el principal destino de ataque, ya que es un directorio universal. 

Para eliminar un poco esta brecha de seguridad es recomendable cambiar el directorio que reconoce por defecto apache, para que apunte a uno de los directorios que tenemos en nuestro home. 

Directorio Web independiente por cada usuario

Para poder asignar a cada usuario del sistema un directorio para publicar sus paginas web es necesario verificar si tenemos los archivos userdir.conf y userdir.loaden /etc/apache2/mods-available, para comprobar esto, tecleamos el siguiente comando el cual debería entregar el mismo mensaje que aquí:
$ ls /etc/apache2/mods-available/userdir*
/etc/apache2/mods-available/userdir.conf
/etc/apache2/mods-available/userdir.load
Una vez comprobado esto, debemos comprobar si tenemos esos mismos archivos en el directorio /etc/apache2/mods-enabled, esto lo comprobamos con el siguiente comando:
$ ls /etc/apache2/mods-enabled/userdir*
Si arroja que no tenemos nada o que no existe continuamos.

Si no apareció ningún resultado con el comando anterior debes teclear los siguientes 3 comando de a continuación. (si apareció resultado, omite el primer comando).
sudo ln -s /etc/apache2/mods-available/userdir* /etc/apache2/mods-enabled/
sudo a2enmod userdir
$ ls -la /etc/apache2/mods-enabled/userdir*
/etc/apache2/mods-enabled/userdir.conf  
/etc/apache2/mods-enabled/userdir.load
El último comando revisa si están ahora los 2 archivos antes mencionados, cosa que debería aparecer.

Si todo esta correcto ahora hay que reiniciar apache.
sudo /etc/init.d/apache2 restart

Una vez hecho esto, falta añadir en la carpeta personal de cada usuario un directorio que se llame public_html este será el directorio donde cada usuario deberá publicar sus paginas web. Lo primero que haremos es crear el directorio para el usuario que estamos ahora (NO HACER ESTO COMO ROOT)
$ mkdir ~/public_html

Ahora vamos a crear una pagina web html sencilla para comprobar que funcione.
$ echo '<html><body><p><strong>Hola Mundo</strong></p></body></html>' > ~/public_html/index.html

Luego en el navegador tecleamos una ruta como la siguiente (IPServer/~TU_USARIO):
10.1.15.148/~juaramir
O desde la terminal podemos teclear ($USER es el nombre de tu usuario):
$ iceweasel 10.1.15.148/~$USER
$ links2 10.1.15.148/~$USER

Veremos algo como esto.

Habilitar Python en Apache2

Modificamos la configuración del servidor para habilitar el soporte para código python.
sudo nano /etc/apache2/conf-enabled/serve-cgi-bin.conf
Ahora buscamos la línea </Directory> y añadimos lo siguiente sobre esta
AddHandler cgi-script .py          # add this line (there is a blank between cgi-script and .py)
El directorio por defecto para los script cgi es /usr/lib/cgi-bin/, por lo que usaremos este directorio. Creamos un script.
sudo nano /usr/lib/cgi-bin/pytest.py
Añadimos lo siguiente:
#!/usr/bin/python

import cgi
import cgitb
cgitb.enable()

print 'Content-type: text/html\n\n'
print '<h1>Python Script Test</h1>'
Hacemos el código ejecutable
sudo chmod +x /usr/lib/cgi-bin/pytest.py
Reiniciamos Apache
sudo /etc/init.d/apache2 restart
Ahora para abrir la página lo hacemos desde localhost/cgi-bin/pytest.py.

Virtual Host y Dominios

Preparando los Directorios

Después de haber realizado uno de los procedimientos anteriores comenzaremos a crear el Host Virtual. En este ejemplo crearemos 2 host, los cuales son ejemplo.com y pruebas.com.

Asumiré que aplicaste el método de multiples usuario (Opción 1) pero la configuración la haremos con un solo usuario. Lo primero que debemos hacer es crear los directorios que contendrán las distintas paginas por cada sitio.
 $ mkdir -p ~/public_html/ejemplo.com/
 $ mkdir -p ~/public_html/pruebas.com/

Si por algún motivo decidiste hacer la opción para un único usuario (Opción 2 o 3) debes crear los directorios así:
# mkdir -p /var/www/ejemplo.com/public_html
# mkdir -p /var/www/pruebas.com/public_html
Luego darle permisos al directorio
# chown -R USUARIO:GRUPO /var/www/ejemplo.com/public_html
# chown -R USUARIO:GRUPO /var/www/pruebas.com/public_html
# chmod -R 755 /var/www
Para los casos de este ejemplo cambiar ~/public_html/ por /var/www/si deseas trabajar para único usuario, pero todo este manual esta enfocado a la opción 1. 

Creando Páginas de Prueba

Creamos la página de prueba para el dominio ejemplo.com:
$ nano ~/public_html/ejemplo.com/index.html
Añadimos el Código
<html>
 <head>
  <title>Bienvenido a Ejemplo.com!</title>
 </head>
 <body>
  <h1>&Eacute;xito! El Virtual Host ejemplo.com esta funcionando!</h1>
 </body>
</html>
Guarda y Cierra el Archivo

Ahora en vez de volver a hacer lo mismo para el dominio prueba.com, reutilizaremos código y luego lo editaremos.
$ cp ~/public_html/ejemplo.com/index.html ~/public_html/pruebas.com/index.html
$ nano ~/public_html/pruebas.com/index.html
Reemplaza el texto Ejemplo.com por Pruebas.com, luego guarda y cierra.

Crear Archivos Virtual Host

Los archivos Virtual Host son archivos que contienen información y configuración específica para el dominio y que le indican al servidor Apache como responden a las peticiones de varios dominios. Apache (2.4 en adelante) incluye un archivo Virtual Host por defecto denominado 000-default.conf que podemos usar para saltarnos al punto. 

Realizaremos una copia para trabajar sobre ella y crear nuestro Virtual Host para cada dominio. Iniciaremos con un dominio, configurarlo, copiarlo para el segundo dominio, y después realiza los ajustes necesarios.  La configuración por defecto  requiere que cada archivo de configuración de Virtual Host termine en .conf.

Empezando por copiar el archivo para el primer dominio:
# cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/ejemplo.com.conf

Abre el nuevo archivo con tu editor como usuario root:
# nano /etc/apache2/sites-available/ejemplo.com.conf
Este archivo se verá algo como esto (he removido los comentarios aquí para hacer el archivo más legible):
<VirtualHost *:80>
 ServerAdmin webmaster@localhost
 DocumentRoot /var/www/html
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Primero, necesitamos cambiar la directiva ServerAdmin por un correo del administrador del sitio que pueda recibir correos.
ServerAdmin admin@ejemplo.com

Después de esto, necesitamos agregar dos directivas.
  • La primera llamada ServerName, que establece la base del dominio que debe coincidir para este Virtual Host.  Esto será como tu dominio. 
  • La segunda, llamada ServerAlias, determina nombres futuros que pueden coincidir y servirse como el nombre base o dominio principal.  Esto es útil para host tipo www.
ServerName ejemplo.com
ServerAlias www.ejemplo.com

Lo que resta por cambiar para la configuración básica de un Virtual Host es la ubicación del directorio raíz para el dominio.  Ya hemos creado lo que necesitamos, así que solo necesitamos modificar DocumentRoot para apuntarlo al directorio que hemos creado.
DocumentRoot /home/linux/public_html/ejemplo.com/
 En total, nuestro archivo de Virtual Host debe verse así:
<VirtualHost *:80>
 ServerAdmin admin@ejemplo.com
 ServerName ejemplo.com
 ServerAlias www.ejemplo.com
 DocumentRoot /home/linux/public_html/ejemplo.com
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Guarda y cierra el archivo.

Ahora que tenemos nuestro primer archivo Virtual Host configurado, podemos crear el segundo copiando el primero y realizando los cambios necesarios.
# cp /etc/apache2/sites-available/ejemplo.com.conf /etc/apache2/sites-available/pruebas.com.conf

 Abre el nuevo archivo con privilegios root en tu editor:
# nano /etc/apache2/sites-available/pruebas.com.conf
 Ahora tenemos que modificar todas las piezas de información para referirnos al segundo dominio. Cuando hayas terminado, deberá verse algo así:
<VirtualHost *:80>
 ServerAdmin admin@pruebas.com
 ServerName pruebas.com
 ServerAlias www.pruebas.com
 DocumentRoot /home/linux/public_html/pruebas.com
 ErrorLog ${APACHE_LOG_DIR}/error.log
 CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Guarda y cierra el archivo.

Habilitar los nuevos archivos Virtual Host

Ahora que hemos creado nuestros archivos virtual hosts, debemos habilitarlos.  Apache incluye herramientas que nos permiten hacer esto. Podemos usar la herramienta a2ensite para habilitar cada uno de nuestros sitios haciendo esto:
# a2ensite ejemplo.com.conf
# a2ensite pruebas.com.conf

Cuando hayas concluido, deberás reiniciar Apache para asegurarte de que tus cambios surtan efecto:
# service apache2 restart
* Restarting web server apache2
 AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
Este mensaje no afecta nuestro sitio.

Configurar Archivos Locales (opcional)

Si aún no estás utilizando nombres de dominio de tu propiedad para este procedimiento y utilizaste dominios ejemplo en su lugar, puedes al menos hacer pruebas de funcionalidad de este proceso modificando temporalmente el archivo hosts de tu computadora local (equipo cliente).

Esto interceptará cualquier petición a los dominios que configures y apunten a tu VPS (Servidor Privado Virtual), solo si estas utilizando dominios registrados. Esto solo funciona a través de tu computadora, y es simplemente útil para propósitos de prueba.

Asegúrate de estar trabajando en tu computadora local para los siguientes pasos y no en tu VPS. Deberás conocer la contraseña del administrador o ser miembro del grupo administrativo.

Si estas en una Mac o una máquina con Linux, edita tu archivo local con privilegios de administrador escribiendo, recuerda hacer esto en el equipo cliente, no en el servidor:
# nano /etc/hosts

Si estás en una máquina con Windows, puedes buscar las instrucciones para modificar tu archivo hosts en http://support.microsoft.com/kb/923947.

Los detalles que necesitas agregar son la IP pública de tu VPS seguido del dominio que deseas apuntar a ese VPS. Para los dominios que utilizamos en esta guía, asumiremos que la IP de nuestro VPS es 10.1.15.148, podemos agregar las siguientes líneas al final del archivo hosts:
10.1.15.148 ejemplo.com
10.1.15.148 pruebas.com
Guarda y cierra el archivo.

Esto apuntará directamente cualquier petición para ejemplo.com y pruebas.com en nuestra computadora y enviarlas a nuestro servidor en 10.1.15.148Esto es lo que queremos si no somos propietarios de esos dominios aún, solo con fines de prueba para nuestros Virtual Hosts.

Luego desde el mismo equipo cliente, escribe la dirección url de la pagina y verás un resultado como el siguiente.

Soporte para PHP

¿Qué es PHP y para que se puede utilizar?

PHP es un lenguaje de programación de código abierto muy usado en el ámbito web. A diferencia de otros lenguajes como Javascript, HTML, etc., que funcionan del lado del cliente, PHP funciona del lado del servidor, es decir al código insertado en la página que se encuentra en el servidor web, el usuario no tiene acceso, solo ve el resultado que genera dicho código en el navegador. O sea, las funciones que usamos en nuestras páginas, nadie podrá conocerlas ni copiarlas, a menos que nosotros se las ofrezcamos.

Con PHP se pueden hacer muchas cosas, pero su uso más practico es el de crear paginas dinámicas y script que realizan funciones a petición, es un lenguaje complejo y potente, pero podemos aprovechar sus funciones de forma elemental para agregarle funcionalidad a nuestras páginas. Solo es necesario el navegador, un servidor que de soporte para PHP y el propio PHP que podemos descargar gratis de internet. Uno de los lenguajes de programación que vamos a necesitar en el montaje de este servidor Web en Linux Debian es sin duda PHP.

Instalación

Lo instalamos con el siguiente comando:
sudo apt-get install php

sudo apt-get install php-cgi php-cli php-common libapache2-mod-php lighttpd libapache2-mod-perl2 php-curl php-dev php-gd php-imap php-ldap php-odbc
Habilitamos los siguiente módulos:
sudo a2enmod cgi cgid

Luego vamos a agregar la siguiente linea al archivo de configuración del Apache llamado apache2.conf para que nuestro Web server sea compatible con los siguientes tipos de extensiones.
sudo echo "DirectoryIndex index.html index.cgi index.py index.pl index.php index.xhtml index.shtml" >> /etc/apache2/apache2.conf

Probando PHP

Podrán verificar si lo ha hecho bien con el comando tail que nos muestra en pantalla el contenido de un archivo. Ahora vamos a comprobar que todo ha ido bien editando un archivo en el directorio raíz de nuestro servidor Web.

Anteriormente configuramos a conciencia donde iba a estar situada la raíz de el servidor Web, o sea el directorio que es visible desde otros exploradores, ~/public_html/ (o uno de los dominio) o ~/web/.

Creamos un archivo llamado por ejemplo compatible.php con el siguiente comando. 
$ echo '<?php phpinfo(); ?>' > ~/public_html/compatible.php

Habilitar PHP para configuración de multiples usuarios

Si por algún motivo no funciona PHP en tu directorio personalizado, es porque tu distribución trae el userdirs en PHP desactivado por defecto, una distribución que hace esto es Debian.  Para solucionarlo debemos abrir el archivo /etc/apache2/mods-enabled/php7.0.conf.
sudo nano /etc/apache2/mods-enabled/php7.0.conf

Buscar el siguiente mensaje (casi al final del archivo).
<IfModule mod_userdir.c>
      <Directory /home/*/public_html>
          php_admin_value engine Off
      </Directory>
    </IfModule>
y deshabilitar esas lineas, ya sea borrandolas o comentandolas (anteponer un # al comienzo de cada línea).

Reiniciamos apache con:
sudo /etc/init.d/apache2 restart
Ahora tan solo nos queda abrir ese archivo en el navegador introduciendo la dirección el IP o dominio (en el caso que haya decidido almacenar el archivo ahi) de tu servidor seguido del archivo compatible.php http://IPServer/~USUARIO/compatible.php.

Debería aparecer una ventana como la siguiente
Esto es todo, ya tenemos nuestro servidor web con PHP y Apache funcionando.

PSQL, Primeros pasos y Comandos básicos

publicado a la‎(s)‎ 15 jun. 2016 18:08 por Juan Jose Ramirez Lama   [ actualizado el 8 ago. 2017 8:54 ]

PSQL es el entorno de terminal para el manejo del motor de Base de Datos PostgreSQL. Los datos aquí presentados son basados en los que puedes encontrar en http://viviryaprenderweb.com

Para iniciarla podemos hacer con el siguiente comando:
$ psql -U username -W -h iphost basename
Parámetros:
  • -U es el usuario de la base
  • -W mostrará el prompt de solicitud de password
  • -h IP del servidor de la base de datos en caso nos conectemos remotamente sino bastaría con poner localhost
  • basename es el nombre de la base de datos
Luego ya estaremos dentro de postgres y podremos hacer consultas:
basename=# SELECT * FROM tabla; 
(no olvidemos el ; al final de cada query)

Ahora bien a veces necesitamos saber alguna información extra de nuestra base como las tablas que la componen, los campos de alguna tabla, etc., para eso existen los siguientes comandos:

El equivalente de SHOW TABLES es
basename=# \d

El equivalente de SHOW DATABASES es
basename=# \l

El equivalente de SHOW COLUMNS es
basename=# \d table

El equivalente de DESCRIBE TABLE es
basename=# \d+ table

Seleccionar una base de datos o cambiar de base:
basename=# \c basename

Ver la ayuda con respecto a la sintaxis de nuestras consultas SQL:
basename=# \h INSERT
Al utilizar este comando nos mostrará como debemos armar nuestro "insert", así como parametros y el orden correspondiente.

Mostrar la lista de las tablas de la base de datos que tengamos seleccionada:
basename=# \dt

Hacer que una consulta se ejecute cada ciertos segundos:
Primero ejecutamos nuestra consulta:
basename=# select count(*) from books;
Segundo ejecutamos nuestro comando \watch + los segundos
basename=# \watch 1

Editar la consulta que tengamos en el buffer con un editor mas amigable como nano:
basename=# \e
Al ejecutarlo por primera vez, este comando te mostrará un menu donde puedes elegir el editor.

La segunda vez que ejecutemos este comando veremos que nos lo habré automáticamente con el editor selecionado (nano) y luego de hacer los cambios y guardemos (ctrl + o) veremos que se ejecutará la consulta.

Ademas con el comando \p podemos ver lo que teníamos en el buffer

Si queremos guardar lo que tengamos en buffer en un archivo podemos utilizar el comando \w de la siguiente manera:
basename=# \w /tmp/test.sql
OJO si utilizamos un archivo que ya este creado previamente por nosotros tenemos que darle permisos de escritura (chmod 777 archivo), por ejemplo si tenemos nuestro archivo en /home/miusuario/mis.sql tendríamos que darle permisos de escritura primero antes de ejecutar nuestro comando desde la consola interactiva.

Ejecutar los consultas (querys) que tengamos en un archivo externo:
basename=# \i /tmp/test.sql

Guarda los resultados de una consulta en un archivo:
Primero ejecutamos \o seguido del archivo
basename=# \o /tmp/out.sql
Segundo ejecutamos nuestra consulta:
basename=# select * from books;
no nos muestra los resultados de la consulta en la consola sino que tendremos que ver nuestro archivo /tmp/out.sql, lo podemos hacer abriendo otra consola y ejecutar el siguiente comando:
basename=# cat /tmp/out.sql

Ahora un concejo importante después de utilizar este comando todas nuestras consultas mandaran los resultados al archivo (una tras otra), para dejar de mandar los resultados al archivo solamente ejecutamos el comando \o sin definir el archivo:
basename=# \o
Y veremos como de nuevo se nos muestran los resultados de nuestras consultas en la consola.

Mostrar la codificación que tiene activa nuestra consola interactiva:
basename=# \encoding

Obtener la salida de una consulta en formato HTML:
basename=# \H
Sirve para activar y desactivar la salidas de nuestras consultas en formato HTML, lo que hace este comando es crear una tabla HTML con los resultados de nuestra consulta.

Para desactivar las vista en formato HTML solamente tenemos que escribir nuevamente \H.

Podemos usar este comando en conjunto con nuestro comando \o y escribir de una sola vez nuestro archivo .html.

Información de nuestra conexión activa:
basename=# \conninfo

Ayuda de PSQL:
mostrará una lista de todos los comandos que podemos usar en la consola.
basename=# \?

Vaciar una tabla en especifico o el famoso TRUNCATE que conocemos:
basename=# TRUNCATE TABLE table RESTART IDENTITY
Con este comando borramos el contenido de una tabla y reiniciamos su indice sino agregamos RESTART IDENTITY nuestros indices no seran reiniciados y seguiran según el ultimo registro.

Crear Esquema:
CREATE SCHEMA schemaname;
Modificar Esquema:
ALTER SCHEMA schemaname RENAME TO newname
ALTER SCHEMA schemaname OWNER TO newowner
Eliminar Esquema:
DROP SCHEMA schemaname CASCADE;

Crear una base de datos:
basename=# CREATE DATABASE basename;
Borrar o eliminar una base de datos:
basename=# DROP DATABASE basename;
Borrar o eliminar una tabla en especifico:

basename=# DROP TABLE tablename;

Enviar resultados de una consulta a un archivo delimitado por |
basename=# COPY (SELECT * FROM tablename) TO '/home/tablename.csv' WITH DELIMITER '|';
Cabe mencionar que el archivo necesito permisos de escritura.

Uso de LIMIT y OFFSET
basename=# SELECT * FROM table LIMIT limit OFFSET offset;
Donde:
    • limit: es nuestro limite de registros a mostrar
    • offset: indica desde donde comenzaran a mostrarce los registros
Uso de comillas:
basename=# SELECT “column” FROM “table” WHERE “column” = 'value';
Generalmente podemos utilizar comillas dobles para nuestras columnas y comillas simples para nuestros valores, esto no es una regla pero a veces es necesario en casos especiales, tales como cuando ocupamos nombres reservados, por ejemplo:
basename=# SELECT to FROM table;
En este caso tenemos un campo llamado “to”, esto nos dará un error de sintaxis, por lo tanto tendremos que usar comillas dobles:
basename=# SELECT “to” FROM table;

Salir del cliente psql:
basename=# \q

Cómo importar una base de datos en PostgreSQL

El comando para importar una base de datos en postgresql es el siguiente:
$ psql -U postgres -W -h localhost nombre_base < dump_base.sql
Como vemos utilizamos el comando psql con los siguientes parámetros:
    • -U Se refiere al Usuario, en nuestro ejemplo usamos el usuario:  postgres
    • -W Con este parámetro conseguiremos que nos solicite el password del usuario antes especificado
    • -h Con este indicamos cuál es el servidor PostgreSQL al que nos conectaremos para importar nuestro dump, si estamos en el mismo servidor podemos colocar localhost, si será un servidor remoto colocaremos la IP
    • nombre_base Este es el ultimo parámetro en nuestra linea del comando, el cual hace referencia al nombre de la base de datos a la que importaremos nuestro dump.
    • < dump_base.sql Indicamos cual es el archivo que contiene el dump de la base y que por tanto queremos importar.



MAN

  \copyright      mostrar términos de uso y distribución de PostgreSQL

  \g [ARCH] o ;   enviar búfer de consulta al servidor (y resultados a archivo u |orden)

  \gset [PREFIJO] ejecutar la consulta y almacenar los resultados en variables de psql

  \h [NOMBRE]     mostrar ayuda de sintaxis de órdenes SQL; use «*» para todas las órdenes

  \q              salir de psql

  \watch [SEGS]   ejecutar consulta cada SEGS segundos


Búfer de consulta

  \e [ARCHIVO] [LÍNEA]         editar el búfer de consulta (o archivo) con editor externo

  \ef [NOMBRE-FUNCIÓN [LÍNEA]] editar una función con editor externo

  \p                           mostrar el contenido del búfer de consulta

  \r                           reiniciar (limpiar) el búfer de consulta

  \s [ARCHIVO]                 mostrar historial de órdenes o guardarlo en archivo

  \w ARCHIVO                   escribir búfer de consulta a archivo


Entrada/Salida

  \copy ...       ejecutar orden SQL COPY con flujo de datos al cliente

  \echo [CADENA]  escribir cadena a salida estándar

  \i ARCHIVO      ejecutar órdenes desde archivo

  \ir ARCHIVO     como \i, pero relativo a la ubicación del script actual

  \o [ARCHIVO]    enviar resultados de consultas a archivo u |orden

  \qecho [CADENA] escribir cadena a salida de consultas (ver \o)


Informativo

   (opciones: S = desplegar objectos de sistema, + = agregar más detalle)

  \d[S+]            listar tablas, vistas y secuencias

  \d[S+]  NOMBRE    describir tabla, índice, secuencia o vista

  \da[S]  [PATRÓN]  listar funciones de agregación

  \db[+]  [PATRÓN]  listar tablespaces

  \dc[S+] [PATRÓN]  listar conversiones

  \dC[+]  [PATRÓN]  listar conversiones de tipo (casts)

  \dd[S]  [PATRÓN]  listar comentarios de objetos que no aparecen en otra parte

  \ddp    [PATRÓN]  listar privilegios por omisión

  \dD[S+] [PATRÓN]  listar dominios

  \det[+] [PATRÓN]  listar tablas foráneas

  \des[+] [PATRÓN]  listar servidores foráneos

  \deu[+] [PATRÓN]  listar mapeos de usuario

  \dew[+] [PATRÓN]  listar conectores de datos externos

  \df[antw][S+] [PATRÓN]  listar funciones [sólo ag./normal/trigger/ventana]

  \dF[+]  [PATRÓN]  listar configuraciones de búsqueda en texto

  \dFd[+] [PATRÓN]  listar diccionarios de búsqueda en texto

  \dFp[+] [PATRÓN]  listar analizadores (parsers) de búsq. en texto

  \dFt[+] [PATRÓN]  listar plantillas de búsqueda en texto

  \dg[+]  [PATRÓN]  listar roles

  \di[S+] [PATRÓN]  listar índices

  \dl               listar objetos grandes, lo mismo que \lo_list

  \dL[S+] [PATRÓN]  listar lenguajes procedurales

 \dm[S+] [PATRÓN]   listar vistas materializadas

  \dn[S+] [PATRÓN]  listar esquemas

  \do[S]  [PATRÓN]  listar operadores

  \dO[S]  [PATRÓN]  listar ordenamientos (collations)

  \dp     [PATRÓN]  listar privilegios de acceso a tablas, vistas y secuencias

  \drds [PAT1 [PAT2]] listar parámetros de rol por base de datos

  \ds[S+] [PATRÓN]  listar secuencias

  \dt[S+] [PATRÓN]  listar tablas

  \dT[S+] [PATRÓN]  listar tipos de dato

  \du[+]  [PATRÓN]  listar roles

  \dv[S+] [PATRÓN]  listar vistas

  \dE[S+] [PATRÓN]  listar tablas foráneas

  \dx[+]  [PATRÓN]  listar extensiones

  \dy    [PATRÓN]   listar disparadores por eventos

  \l[+] [PATRÓN]    listar bases de datos

  \sf[+] FUNCIÓN    mostrar la definición de una función

  \z      [PATRÓN]  lo mismo que \dp


Formato

  \a              cambiar entre modo de salida alineado y sin alinear

  \C [CADENA]     definir título de tabla, o indefinir si es vacío

  \f [CADENA]     mostrar o definir separador de campos para modo de salida sin alinear

  \H              cambiar modo de salida HTML (actualmente desactivado)

  \pset NOMBRE [VALOR]  define opción de salida de tabla (NOMBRE := {format|border|expanded|fieldsep|fieldsep_zero|footer|null|numericlocale|recordsep|recordsep_zero|tuples_only|title|tableattr|pager})

  \t [on|off]     mostrar sólo filas (actualmente desactivado)

  \T [CADENA]     definir atributos HTML de <table>, o indefinir si es vacío

  \x [on|off|auto] cambiar modo expandido (actualmente desactivado)


Conexiones

  \c[onnect] [BASE-DE-DATOS|- USUARIO|- ANFITRIÓN|- PUERTO|- | conninfo]

                              conectar a una nueva base de datos (actual: «juaramir»)

  \encoding [CODIFICACIÓN]    mostrar o definir codificación del cliente

  \password [USUARIO]         cambiar la contraseña para un usuario en forma segura

  \conninfo                   despliega la información sobre la conexión actual


Sistema Operativo

  \cd [DIR]                 cambiar el directorio de trabajo actual

  \setenv NOMBRE [VALOR]    definir o indefinir variable de ambiente

  \timing [on|off]          mostrar tiempo de ejecución de órdenes (actualmente desactivado)

  \! [ORDEN]                ejecutar orden en intérprete de órdenes (shell), o iniciar intérprete interactivo


Variables

  \prompt [TEXTO] NOMBRE  preguntar al usuario el valor de la variable

  \set [NOMBRE [VALOR]]   definir variables internas, listar todas si no se dan parámetros

  \unset NOMBRE           indefinir (eliminar) variable interna


Objetos Grandes

  \lo_export LOBOID ARCHIVO

  \lo_import ARCHIVO [COMENTARIO]

  \lo_list

  \lo_unlink LOBOID   operaciones con objetos grandes



Cambiar el nombre del computador

publicado a la‎(s)‎ 14 oct. 2015 6:07 por Juan Jose Ramirez Lama   [ actualizado el 14 oct. 2015 6:08 ]

Sistema -> Administración -> Red


Configuración de la red


Pestaña General -> Configuración del host -> Nombre del equipo: Especificar un nombre para el ordenador


Guarde y cierre todas las aplicaciones abiertas, Reinicie el ordenador

Cambiar las descripciones del computador

publicado a la‎(s)‎ 14 oct. 2015 6:06 por Juan Jose Ramirez Lama   [ actualizado el 14 oct. 2015 6:07 ]

# cp /etc/samba/smb.conf /etc/samba/smb.conf_backup

# gedit /etc/samba/smb.conf


Encuentre esta línea


...

server string = %h server (Samba, Ubuntu)

...


Reemplácela por la siguiente línea


server string = new_computer_descriptions


Guarde el archivo editado


#testparm

# /etc/init.d/samba restart

Cambiar el Dominio/Grupo de trabajo del ordenador

publicado a la‎(s)‎ 14 oct. 2015 6:05 por Juan Jose Ramirez Lama   [ actualizado el 14 oct. 2015 6:07 ]

# cp /etc/samba/smb.conf /etc/samba/smb.conf_backup

# gedit /etc/samba/smb.conf


Encuentre esta línea


...

workgroup = MSHOME

...


Reemplácela por la siguiente línea


workgroup = new_domain_or_workgroup


Guarde el archivo editado


# testparm

# /etc/init.d/samba restart

Compartir carpetas fácilmente

publicado a la‎(s)‎ 14 oct. 2015 6:04 por Juan Jose Ramirez Lama   [ actualizado el 14 oct. 2015 6:08 ]

Clic derecho en la carpeta -> Compartir carpeta


Carpeta compartida -> Compartir con: Seleccionar "SMB"

Propiedades de arch. compartidos -> Nombre: Especifique el nombre para compartirla

Compartir archivos con Samba

publicado a la‎(s)‎ 14 oct. 2015 6:03 por Juan Jose Ramirez Lama

Según la Wikipedia Samba es una implementación libre del protocolo de archivos compartidos de Microsoft Windows (antiguamente llamado SMB, renombrado recientemente a CIFS) para sistemas de tipo UNIX. De esta forma, es posible que ordenadores con Linux o Mac OS X se vean como servidores o actúen como clientes en redes de Windows.


Veamos cómo compartir carpetas en Ubuntu y que éstas se vean desde ordenadores con Windows. En primer lugar instalamos Samba en Ubuntu escribiendo en el terminal lo siguiente:

# apt-get install samba


A continuación vamos a Sistema/Administración/Carpetas compartidas y hacemos clic sobre el botón "Añadir" para compartir una carpeta.


En la primera opción seleccionaremos la carpeta que vamos a compartir. En la segunda opción escogeremos "Redes Windows (SMB)". En la tercera pondremos el nombre con el cual compartiremos la carpeta. Marcaremos la casilla de "Sólo lectura" si no queremos que se creen o copien archivos en la carpeta que vamos a compartir


A continuación hacemos clic sobre la pestaña "Propiedades generales" y en "Dominio/Grupo de trabajo" escribimos el nombre del grupo de trabajo del equipo. No marcaremos la casilla "Este equipo es un servidor WINS"


El siguiente paso será añadir un usuario a la lista de usuarios de Samba con la siguiente orden:

# smbpasswd -a nombre_usuario


Le pondremos la misma contraseña que tiene el usuario en el sistema.


Reiniciamos Samba para que los cambios tengan efecto:

# /etc/init.d/samba restart


Bien, ya tenemos la carpeta compartida y podremos acceder a ella desde Windows. En Windows veremos que en los equipos del grupo de trabajo aparece el equipo con Ubuntu. Al hacer doble clic sobre el equipo nos pedirá el nombre de usuario y contraseña (tendremos que poner el nombre de usuario y contraseña del usuario que hemos añadido en Samba)


fuente: http://www.alejandrox.com y http://tuxapuntes.com

Comparte archivos con NFS

publicado a la‎(s)‎ 14 oct. 2015 5:59 por Juan Jose Ramirez Lama

El protocolo NFS, es el protocolo por excelencia en Linux para compartir ficheros, la desventaja que tiene esque Windows no es compatible, luego sólo podremos usarlo en redes Linux puras.


Para empezar, como todo servicio de red, tenemos el servidor y el cliente. El servidor será la máquina donde se encuentran los ficheros a compartir y el cliente el que los puede ver.


Empezaremos con la configuración del servidor:

1º-Instalamos los paquetes

# apt-get install nfs-kernel-server nfs-common portmap


2º- Reconfiguramos portmap

# dpkg-reconfigure portmap


Aquí respondemos ‘NO’ a la pregunta, para indicar que no debe usar las conexiones de loopback.


3º-Indicamos que directorios vamos a compartir en el /etc/exports; la sintaxis es la siguiente:

directorio cliente1(opcion11,opcion12) cliente2(opcion21,opcion22)


Las opciones son:


* ro | rw : Con la opción ro el directorio será compartido en modo lectura. Esta opción está por defecto. Con la opción rw se permitirá tanto acceso de lectura como de escritura.

* sync | async : sync es la opción recomendada, ya que se ha de respetar el protocolo NFS, es decir, no se responden a las peticiones antes de que los cambios realizados sean escritos al disco. Con la opción async se permite mejorar el rendimiento y agilizar el funcionamiento global, pero supone un riesgo de corrupción de archivos o del sistemas de ficheros en casos de caidas del servidor y/o errores de éste.

* root_squash | no_root_squash | all_squash : root_squash indica que un cliente identificado como root tendrá acceso al directorio con privilegios de un usuario anónimo. Si seleccionamos la opción no_root_squash evitaremos esto, y si indicamos all_squash, entonces aplicaremos esto último a todos los usuarios, no sólo root.


Un ejemplo de /etc/exports sería este:

/home/usuario/Escritorio 192.168.2.0/24(ro,sync,root_squash)

/tmp 192.168.2.3(rw,sync,no_root_squash)


En la primera línea le damos acceso de lectura a todos los ordenadores de la red al directorio /home/usuario/Escritorio cuya ip este entre 0 y 24.

En la segunda tendrá acceso el pc con la ip a /tmp con permisos de escriutra.


Por último sólo queda reiniciar los servicios para que funcione:

# /etc/init.d/nfs-kernel-server restart

# exportfs -a


Ahora que hemos acabado con el servidor, procedemos a la configuración del cliente:

1º- Instalar paquetes:

# apt-get install portmap nfs-common


2º-Creamos el punto de montaje:

# mkdir /mnt/remoto


3º-Comprobamos que la red funciona y podemos ver los archivos remotos montándolos a mano.

# mount ip_del_servidor:/home/usuario/Escritorio /mnt/remoto


Si ésto nos ha funcionado, ahora podemos configurarlo para que se monte al inicio automáticamente en el /etc/fstab.

Para ello añadimos al final del fichero lo siguiente:

ip_del_servidor:/home/usuario/Escritorio /mnt/remoto nfs defaults,auto,rw 0 0


Con ésto ya debería funcionarnos a la perfección, si algo falla, piensa que estos pasos son para Ubuntu Gutsy y no hemos tocado las configuraciones de los archivos /etc/hosts.deny y /etc/hosts.allow, a lo mejor esto te ayuda.


Fuente

Instalación del servicio SSH en plataforma Ubuntu

publicado a la‎(s)‎ 14 oct. 2015 5:18 por Juan Jose Ramirez Lama

Para poder utilizar SSH necesitaremos el paquete ‘openssh-server’ y ‘openssh-client’ para ello nos dirigimos al menú principal, ‘Sistema-Administración-Gestor de paquetes Sypnatics’ y hacemos una búsqueda puesto que los paquetes necesarios están en los repositorios.


La casilla indica estado: Verde>Instalado, Blanco>No instalado, Rojo>Paquete roto

ssh en ubuntu

  • Para instalar pinchamos con botón derecho del ratón encima de ‘openssh-client’ y seleccionamos ‘Marcar para instalar’, luego aplicamos cambios.
  • Cerramos el Gestor y para asegurarnos de que está el servicio corriendo, nos dirigímos a un ‘Terminal’ y hacemos>sudo /etc/init.d/ssh restart


ssh ubuntu instalacion reiniciar servicio




El gurú informático


vía Instalación del servicio SSH en plataforma Ubuntu.

Backup y Restauración Base de Datos en PostgreSQL

publicado a la‎(s)‎ 22 abr. 2015 19:39 por Juan Jose Ramirez Lama   [ actualizado el 13 oct. 2015 8:53 ]

Se trata de volcar en un archivo de texto que contendrá los comandos y datos SQL necesarios para restaurar una copia exacta de la base de datos en el momento de la copia. La herramienta a utilizar es pg_dump.

Base de Datos Especifica

La forma más sencilla de hacer un backup de una base de datos completa es la siguiente:
# pg_dump basededatos > archivo.sql

En el caso de tener que especificar un host remoto o puerto de conexión distinto usaríamos los parámetros correspondientes, -h para el host y -p para el puerto, lo mismo se tenemos que especificar usuario, clave, etc.

La restauración del backup es el mismo proceso pero a la inversa:
# psql basededatos < archivo.sql

Especificando parámetros:
# psql -U usuario -d basededatos -p 5432 -h 192.168.0.111 < archivo.sql

Mediante el frontend de PostgreSQL psql volcamos el contenido del archivo SQL en la base de datos a restaurar. Al igual que con la exportación se pueden especificar un gran número de parámetros para personalizar la restauración.

Backup de todas las bases de datos del servidor PostgreSQL

Mediante pg_dumpall podemos hacer con un único comando una copia de seguridad de todas las bases de datos del servidor:
# pg_dumpall > backup_server.sql
Posteriormente para restaurar todas las bases de datos:
# psql -f backup_server.sql postgres

1-10 of 16