Skip to content

Ayudantía 2 Servidor

Benjamín Vicente edited this page Sep 3, 2021 · 1 revision

Ayudantía 2 - Servidor

Servidor del curso

Conexión con el servidor

El servidor está ubicado en codd.ing.puc.cl.

Para acceder necesitamos un cliente SSH. En el caso de Unix o Mac podemos simplemente usar la terminal incluida por defecto. Para Windows modernos, PowerShell sirve, mientras que en versiones de Windows antiguos se necesita instalar un cliente SSH. Recomendamos el uso de Putty.

Una vez en la terminal aplicamos el siguiente comando:

ssh grupo<numero de grupo>@codd.ing.puc.cl

Por ejemplo, si somos el grupo 2 usamos ssh [email protected] y para el grupo 37 usamos ssh [email protected]. El password por defecto de cada grupo era: grupo<numero de grupo> Nuevamente, en los ejemplos sería grupo2 o grupo37.

Una vez establecida la conexión, podrán navegar usando comandos de terminal Unix. Recomendamos leer algún tutorial si no estás familiarizado con estos.

Cambio de clave del Usuario

Una vez que ingresen al servidor usando ssh deberían cambiar su contraseña para evitar el ingreso de usuarios malintencionados. Para ello deben utilizar:

passwd

Este comando les pedirá su clave actual y su clave nueva dos veces. Si es su primera vez usando una consola, no se asusten si al escribir no les salen asteriscos para la contraseña, eso es normal.

  • Cada enunciado tendrá instrucciones específicas sobre el lugar en que se deben subir los archivos y reportes PDF. Estas deben ser respetadas sin importar lo que diga este tutorial.
  • Como regla general, los reportes PDF deben entregarse en una carpeta de nombre EntregaX ubicada dentro de su carpeta de usuario.
  • El homepage de su aplicación web (es decir, lo que se muestra públicamente en la web) se encuentra dentro de la carpeta Sites. Es decir, archivos como .php y .css deben ser subidos a Sites para poder ser corregidos.

Ruta de la aplicación web hosteada en el servidor

  • Sus próximas entregas consisten en presentar consultas en un sitio web, para luego ir añadiendo funcionalidades adicionales. Se ingresará a la aplicación desde la dirección
    http://codd.ing.puc.cl/~grupoXX/ruta/al/archivo.php.
    Esta ruta ejecutara o mostrará el contenido del archivo
    ~/Sites/ruta/al/archivo.php

Subir archivos al Servidor

Opción 1: FileZilla

Captura de pantalla de 2019-03-19 20-22-26

Esta es la interfaz de FileZilla luego de descargarlo e instalarlo. El sector izquierdo corresponde a los directorios y archivos en su computador, mientras que el lado derecho corresponde al servidor.

En la parte superior hay campos para completar con servidor, usuario, contraseña y puerto. Deben rellenarlas con los siguientes datos:

servidor: codd.ing.puc.cl
user: grupoXX
password: mypassword
port: 22

También existe la posibilidad de guardar esta conexión para luego ingresar con 1 click y no tener que escribir las credenciales cada vez (SiteManager).

Captura de pantalla de 2019-03-19 20-23-05

La transferencia de archivos es bidireccional y para ello pueden arrastrar los archivos o hacerles doble click. También es posible mover, renombrar o eliminar archivos y carpetas en el servidor.

Captura de pantalla de 2019-03-19 20-24-20

Una vez que terminen y quieran desconectarse, solo deben cerrar la aplicación.

Opción 2: Con comandos del terminal

Existen comandos similares a cp (copy), pero que permiten transferir archivos a otros computadores. El más simple de estos es scp, que tiene el siguiente formato:

# scp [*opciones] origen destino

# por ejemplo, para subir un archivo:
scp origen/archivo.csv [email protected]:~/path/destino/archivo.csv 
# y para bajarlo:
scp [email protected]:~/origen/archivo.csv path/destino/archivo.csv 

Si se quiere subir archivos recursivamente, como para subir carpetas enteras, se puede utilizar la opción -r:

scp -r datos/ [email protected]:~/datos/

Otros ejemplos:

# Subir un archivo de entrega
scp entrega-1-lista.pdf [email protected]:~/Entrega1/Informe.pdf
# Descargar todo lo subido en una entrega
scp -r [email protected]:~/Entrega2/ .

Los usuarios de Windows pueden ocupar el comando pscp en lugar de scp, el que se instala automáticamente junto con Putty, a menos que tengan alguna terminal que posea el comando scp.

Otro comando similar es rsync, que se encuentra generalmente en macOS (brew) y Linux. También se puede instalar en Windows con GitBash. Este en vez de copiar los archivos, solo sube las diferencias, por lo que suele ser más rápido. Como rsync sube solo las diferencias, se puede utilizar para actualizar el código local con el del servidor rápidamente al estilo de git push. Por ejemplo, para subir archivos de web/ a Sites/:

rsync web/ [email protected]:~/Sites/

También se pueden entregar más opciones como mostrar cambios, no borrar archivos más nuevos del servidor, borrar archivos que no existen localmente, subir recursivamente (para directorios) y excluir archivos (mostrados en ese orden):

rsync --itemize-changes   \
      --update            \
      --delete            \
      --recursive         \
      --exclude='archivo' \
      web/ [email protected]:~/Sites/

Opción 3: Conectando el sistema de archivos

Otra opción es montar el directorio del servidor. En esta parte se explicará con sshfs, pero hay otras opciones.

SSHFS en Windows

Esto es un extracto de las instrucciones de sshfs-win. En su README se encuentran más detalladas.

Hay que instalar winfsp y sshfs-win.

Para montar:

  1. Añadir una unidad de red
  2. Añadir la dirección de red \\sshfs\grupoXX@codd:ing.puc.cl
  3. Ingresar la contraseña de usuario.

Para desmontar:

  1. Desconectar unidad de red
  2. Recargar el explorador de archivos y asegurarse que se eliminó la unidad

SSHFS en Unix (Mac y Linux)

Se puede instalar con la mayoría de los administradores de paquetes. En el caso de brew (macOS), se puede instalar con:

brew install install gromgit/fuse/sshfs-mac

Para montar:

sshfs [email protected] /mnt/bddXX

Para desmontar:

fusermount -u /mnt/bddXX
# o
umount /mnt/bddXX

Opción 4: Usar repositorio local (no recomendado)

No recomendamos utilizar este método, ya que requiere correr comandos tantos localmente como en el servidor (lo que es lento) y entregarle al servidor credenciales para acceder a GitHub. Si no logran utilizar los métodos anteriores, pueden probar con este.

Lo primero es crear un repositorio privado en Github, como se indica más abajo.

Primero, hay que conectarse al servidor y en la primera carpeta en que aparecen (es decir, su carpeta de usuario, donde se encuentra Sites) ejecutar el comando git init para que esta carpeta se convierta en un repositorio local.

Luego, hay que decirle a este repositorio local que se tiene que sincronizar con el repositorio remoto privado que crearon en GitHub. Para ello toman la URL de este último y ejecutan el siguiente comando:

git remote add origin https://github.com/<usuario>/<repo>

Para comprobar que se configuró correctamente ejecutan git remote -v y deberían verlo 2 veces.

Ahora bien, cuando quieran hacer git pull o git push por primera vez, les pedirá que especifiquen a qué rama debe sincronizarse. La misma terminal les dirá el comando que deben ejecutar.

Cuando quieran añadir archivos, verán que hay un conjunto de archivos ocultos sin commitear. Es recomendable agregar un archivo .gitignore para que no molesten. No los eliminen.

Su .gitignore debería tener al menos:

.bash_logout
.bashrc
.cache/
.gitconfig
.gitignore
.profile
.ssh/

Una vez que todo esté configurado, solo tienen que trabajar desde sus computadores y pushear sus cambios. El día de la entrega alguien debe conectarse al servidor y hacer git pull.

Trabajo Colaborativo

Repositorio de Git

Recomendamos fuertemente utilizar un repositorio de Git, tanto para respaldar sus avances y poder trabajar asincronicamente en grupo. Las entregas se revisarán a partir de lo que está en el servidor, no con lo que está en el repositorio de GitHub.

Para crear un repositorio pueden dirigirse a repo.new o en la opción de crear repositorio que se encuentra en la esquina superior de GitHub. Es importante que el repositorio creado sea privado para evitar copia de entregas.

Para añadir miembros hay que ir a la configuración del repositorio (Settings), a la sección de administrar acceso (Manage access), ingresar la contraseña y luego invitar los colaboradores (Invite a collaborator).

Trabajar simultáneamente utilizando LiveShare

Existe la extensión Live Share en VSCode que permite crear una sesión colaborativa para editar código, al estilo de Google Docs. Requiere que una persona comparta el código en VSCode, el resto puede unirse a la sesión tanto por navegador o utilizando VSCode.

Una vez instalada la extensión, un nuevo menú aparecerá en la barra de actividad que mostrará la opción de compartir una nueva sesión (Share) o unirse a una existente (Join).

Asincrónicamente utilizando Git

Sin branches

Requiere estar constantemente pendiente de cambios en el repositorio. Pueden generar problemas si es que no se sincronizaron los cambios.

  1. Hacer pull antes de hacer cambios

    git pull
  2. Luego se crean los commits directo a main

    git add index.php
    git commit -m "arregla el bug"
  3. E inmediatamente se suben al origin (GitHub)

    git push

Con branches

Se puede seguir una versión simplificada de GitHub Flow, requiere que se preocupen de unir los cambios.

  1. Hacer pull y luego crear una rama de Git para implementar algo

    # arreglar-error es un ejemplo, puede ser cualquier nombre
    git checkout -b arreglar-error
    # o también
    git switch -c arreglar-error
  2. Se hacen commits en esa rama y no en main

    git add index.php
    git commit -m "arregla el bug"
  3. Se hacen Pull Requests en GitHub y se unen los cambios

    git push -u origin arreglar-error
    # ir a https://github.com/<usuario>/<repo>/pull/new/arreglar-error
    # y ahí unir los cambios
  4. Volver a main y hacer pull

    git checkout main
    # o
    git switch main
    # y luego
    git pull

Base de Datos

Ingresar al DBMS Postgres

Una vez dentro del servidor, pueden ejecutar el siguiente comando para ingresar a su base de datos:

psql

Se les pedirá una contraseña, que en principio es la misma que utilizaron para ingresar al servidor por primera vez ('grupoXX'). Se sugiere que también la cambien para evitar accesos no autorizados.

Cambio de clave Postgres

Una vez dentro de la terminal de postgres, deben ejecutar:

ALTER USER <grupoXX> ENCRYPTED PASSWORD 'newpassword';

Debería mostrarles el siguiente output

ALTER ROLE

Con eso esta listo el cambio de clave.

Sintaxis en Postgres

Existen 2 tipos de comandos:

  • Los que son propios del DBMS y sirven para administrar el sistema. Estos comienzan con \ y no terminan con ;. Por ejemplo: \dt.
  • Los que son típicos de SQL y que sirven para administrar las tablas. Estos deben terminar con ;. Por ejemplo: SELECT * FROM Tabla;.

Para más información pueden consultar la documentación oficial.

Importar datos en Postgres

Para ello pueden utilizar el siguiente comando

\COPY nombre_tabla from 'relative/path/to/file.csv' DELIMITER ',' CSV HEADER

Aquí es importante destacar un par de cosas:

  • La ruta relativa comienza desde su carpeta de usuario, es decir, si los datos están en el servidor en '/home/grupoXX/entrega1/CSV/datos.csv', en el comando de postgres deberían escribir '/entrega1/CSV/datos.csv'
  • DELIMITER sirve para indicar el caracter de separación de los datos.
  • HEADER indica la presencia de una fila de encabezado, para ignorarla al importar los datos.
  • Las columnas de datos se insertan de forma ordenada y correlativa en la tabla. Si desean insertar con un orden personalizado, pueden utilizar:
\COPY nombre_tabla(atributo2, atributo1, atributo3) from 'relative/path/to/file.csv' DELIMITER ',' CSV HEADER

Si tienen más dudas, pueden consultar la documentación oficial, y luego publicar en las Issues.