proyecto:armar_la_aplicacion_inicial
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
proyecto:armar_la_aplicacion_inicial [2021/12/13 22:33] – [Opción 1: Apache2 + PHP] cc3201 | proyecto:armar_la_aplicacion_inicial [2023/04/27 20:10] (current) – sferrada | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Armar la Aplicación ====== | ====== Armar la Aplicación ====== | ||
- | |||
- | OJO: en cualquier parte del tutorial donde se mencione XX, este es el NÚMERO DE LA MÁQUINA, no su número de grupo. | ||
===== Objetivo ===== | ===== Objetivo ===== | ||
Line 8: | Line 6: | ||
* Como fue mencionado antes, hay que tener al menos tres consultas demostrando una mezcla de rasgos de SQL, es decir, joins, consultas anidadas, agregación, | * Como fue mencionado antes, hay que tener al menos tres consultas demostrando una mezcla de rasgos de SQL, es decir, joins, consultas anidadas, agregación, | ||
+ | * Al menos dos de las consultas deberían incluir uno o más parámetros ingresados por el usuario de la aplicación web. | ||
* No es necesario tener todos los rasgos en todas las consultas. La idea es que se demuestren los rasgos en alguna consulta. Se puede empezar con una consulta simple. | * No es necesario tener todos los rasgos en todas las consultas. La idea es que se demuestren los rasgos en alguna consulta. Se puede empezar con una consulta simple. | ||
* Es importante usar indices, vistas, etc., para optimizar las consultas. | * Es importante usar indices, vistas, etc., para optimizar las consultas. | ||
Line 20: | Line 19: | ||
Independientemente de la opción que se elija, la seguridad de la aplicación será parte de la evaluación del proyecto, así que hay que: | Independientemente de la opción que se elija, la seguridad de la aplicación será parte de la evaluación del proyecto, así que hay que: | ||
* Usar sentencias precompiladas. | * Usar sentencias precompiladas. | ||
+ | * Crear un usuario para la aplicación que tenga solo el acceso mínimo requerido (si es que no se usa Django). | ||
- | Y si es que se elije usar Apache2 + PHP: | + | Con respecto al último punto, |
- | * Crear un usuario para la aplicación que tenga solo el acceso mínimo requerido. | + | |
- | + | ||
- | La idea es no usar un superuser '' | + | |
< | < | ||
CREATE USER webuser WITH PASSWORD ' | CREATE USER webuser WITH PASSWORD ' | ||
+ | GRANT CONNECT ON DATABASE cc3201 TO webuser; | ||
GRANT USAGE ON SCHEMA proyecto TO webuser; | GRANT USAGE ON SCHEMA proyecto TO webuser; | ||
... | ... | ||
Line 34: | Line 32: | ||
... y después usar '' | ... y después usar '' | ||
+ | |||
+ | Hay que tener cuidado con consultas como: | ||
+ | |||
+ | < | ||
+ | SELECT * FROM tabla WHERE col = ' | ||
+ | </ | ||
+ | |||
+ | En particular, esta consulta no ha especificado el esquema, así que Postgres usará el '' | ||
+ | |||
+ | < | ||
+ | SELECT * FROM esquema.tabla WHERE col = ' | ||
+ | </ | ||
+ | |||
+ | Así funcionará ante cambios al '' | ||
===== Servidor Web ===== | ===== Servidor Web ===== | ||
Hay que eligir una sola opción aquí. | Hay que eligir una sola opción aquí. | ||
- | La primera opción es de un nivel más bajo y (para Aidan, que fue quien redactó esto), es un buen lugar para empezar. En particular, | + | La primera opción |
- | La segunda opción es un ejemplo de framework MVC, el uso del cual es popular hoy en día. Ofrece una abstracción de nivel más alto, pero hay que aprender y configurar mucho. | + | La segunda opción |
- | Se puede eligir otra opción | + | La tercera |
- | Cabe señalar | + | Se puede eligir otra opción también. El curso no se trata del desarrollo de aplicaciones web, así que no importa qué opción |
**Nota 1**: Durante el tutorial se pedirá usar: | **Nota 1**: Durante el tutorial se pedirá usar: | ||
Line 64: | Line 76: | ||
... aceptando cada vez que pida confirmación. Esto es necesario hacerlo solo una vez. [[https:// | ... aceptando cada vez que pida confirmación. Esto es necesario hacerlo solo una vez. [[https:// | ||
- | **Nota 2**: Durante el tutorial se pedirá instalar cierta versión de algún paquete, ejemplo: | + | **Nota 2**: Si al intentar actualizar o ejecutar algo sale este error: |
- | < | + | |
- | sudo apt-get install tomcat7 | + | |
- | </ | + | |
- | Pero si dicho paquete no se encuentra, | + | |
- | < | + | |
- | E: Unable to locate package tomcat7 | + | |
- | </ | + | |
- | + | ||
- | ... probar buscando si el paquete se encuentra en otra versión: | + | |
- | + | ||
- | < | + | |
- | apt-cache search tomcat | + | |
- | </ | + | |
- | < | + | |
- | ... | + | |
- | tomcat9 - Apache Tomcat 9 - Servlet and JSP engine | + | |
- | tomcat9-admin - Apache Tomcat 9 - Servlet and JSP engine -- admin web applications | + | |
- | tomcat9-common - Apache Tomcat 9 - Servlet and JSP engine -- common files | + | |
- | tomcat9-docs - Apache Tomcat 9 - Servlet and JSP engine -- documentation | + | |
- | tomcat9-examples - Apache Tomcat 9 - Servlet and JSP engine -- example web applications | + | |
- | tomcat9-user - Apache Tomcat 9 - Servlet and JSP engine -- tools to create user instances | + | |
- | ... | + | |
- | </ | + | |
- | + | ||
- | ... en este caso encontramos la versión 9. | + | |
- | + | ||
- | **Nota 3**: Si al intentar actualizar o ejecutar algo sale este error: | + | |
< | < | ||
E: You don't have enough free space in / | E: You don't have enough free space in / | ||
Line 110: | Line 95: | ||
* PRO: más fácil de instalar y se puede empezar rápidamente con algunos ejemplos. | * PRO: más fácil de instalar y se puede empezar rápidamente con algunos ejemplos. | ||
- | * CON: hay que programar | + | * CON: hay que programar |
- | * PRO: en realidad no hay que programar | + | |
- | Apache2 es un servidor web. PHP es un scripting language. Armaremos Apache2 y crearemos la aplicación después con PHP. | + | Apache2 es un servidor web. PHP es un scripting language |
=== Instalar apache2 === | === Instalar apache2 === | ||
Line 138: | Line 122: | ||
Para instalar PHP con soporte para apache2 y postgres: | Para instalar PHP con soporte para apache2 y postgres: | ||
- | < | + | < |
Ahora, tenemos que reiniciar Apache: | Ahora, tenemos que reiniciar Apache: | ||
Line 159: | Line 143: | ||
?> | ?> | ||
</ | </ | ||
+ | |||
+ | ... y guardar. | ||
Ir aquí para verificar que funcione: | Ir aquí para verificar que funcione: | ||
Line 237: | Line 223: | ||
Si funciona, podrán adaptar el ejemplo para crear su aplicación. Hay [[http:// | Si funciona, podrán adaptar el ejemplo para crear su aplicación. Hay [[http:// | ||
- | OJO: ¡Es importante usar métodos seguros contra inyección! | + | OJO: ¡Es importante usar métodos seguros contra inyección! |
=== Debugear / Logs === | === Debugear / Logs === | ||
Line 247: | Line 233: | ||
Al final del archivo habrá los errores más recientes. Puedes usar la barra espaciadora para avanzar en el archivo. El error debería proveer más información para resolver el problema. | Al final del archivo habrá los errores más recientes. Puedes usar la barra espaciadora para avanzar en el archivo. El error debería proveer más información para resolver el problema. | ||
- | Si el error no es de Apache2 + PHP, puede tratarse de postgres. Para ver los logs hay que abrir: | + | Si el error no es de Apache2 + PHP, puede tratarse de Postgres. Para ver los logs hay que abrir: |
< | < | ||
Line 259: | Line 245: | ||
* PRO: da una abstracción de todo en Python | * PRO: da una abstracción de todo en Python | ||
* CON: hay que programar en Python | * CON: hay que programar en Python | ||
- | * CON: muy **muy** | + | * CON: difícil de configurar inicialmente |
* CON: mucho más " | * CON: mucho más " | ||
La idea de Django es proveer una abstracción Modelo/ | La idea de Django es proveer una abstracción Modelo/ | ||
- | A mi parecer, | + | Django tiene un costo inicial muy alto, pero después uno tendrá una abstracción más limpia, la cual es útil, en particular, para aplicaciones complejas. Si ustedes quieren hacer algo más simple y rápido, PHP sería la mejora opción. Si ustedes quieren aprender algo de un framework usado bastante en la práctica, Django es una buena opción PERO aquí sólo se dará la información suficiente para instalar y configurar una aplicación básica. No será un tutorial completo (el enfoque del curso es bases de datos, no aplicaciones web). Aquí puede encontrar más información |
- | + | ||
- | Aqui puede encontrar más información | + | |
=== Instalar Python === | === Instalar Python === | ||
Line 289: | Line 273: | ||
=== Instalar Django === | === Instalar Django === | ||
- | Usaremos PIP (un instalador para packages de Python) para instalar la versión más reciénte | + | Usaremos PIP (un instalador para packages de Python) para instalar la versión más reciente |
< | < | ||
Line 1163: | Line 1147: | ||
Con el ejemplo previo, y por fin, tienen todos los ingredientes para armar su aplicación usando Django. Un recordatorio: | Con el ejemplo previo, y por fin, tienen todos los ingredientes para armar su aplicación usando Django. Un recordatorio: | ||
+ | |||
+ | ==== Opción 3: Java Servlets ==== | ||
+ | |||
+ | * PRO: se puede programar en Java | ||
+ | * CON: difícil de instalar y configurar | ||
+ | * CON: una metodología desactualizada (pero con muchos sistemas legados todavía) | ||
+ | * CON: hay que programar en Java | ||
+ | | ||
+ | La opción de Java Servlets es una opción legada que tenía relevancia cuando el lenguaje usado en el curso Introducción a Programación fue Java. En vez de borrar la opción, la hemos mantenido acá, pero en general, no es una opción recomendada, | ||
+ | |||
+ | === Instalar tomcat9 === | ||
+ | |||
+ | Hay que instalar '' | ||
+ | |||
+ | < | ||
+ | sudo apt-get update | ||
+ | sudo apt-get install tomcat9 tomcat9-admin tomcat9-examples tomcat9-docs authbind | ||
+ | </ | ||
+ | |||
+ | === Configurar tomcat9 === | ||
+ | |||
+ | Tenemos que poner un usuario " | ||
+ | |||
+ | < | ||
+ | sudo nano / | ||
+ | </ | ||
+ | |||
+ | Aquí: | ||
+ | |||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | Hay que poner (ojo: la página es publica así que ¡es importante elegir una contraseña segura! es decir, ¡no '' | ||
+ | |||
+ | < | ||
+ | < | ||
+ | <user username=" | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ... y guardar el archivo. | ||
+ | |||
+ | Por defecto, tomcat9 será instalado con el puerto 8080, el cual no es accesible desde afuera. Tenemos que cambiarlo a 80 (el puerto por defecto en HTTP). | ||
+ | |||
+ | < | ||
+ | sudo nano / | ||
+ | </ | ||
+ | |||
+ | Hay que cambiar (ojo que no es '' | ||
+ | |||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | ... por ... | ||
+ | |||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | ... y guardar el archivo. | ||
+ | |||
+ | Ahora ... | ||
+ | |||
+ | < | ||
+ | sudo nano / | ||
+ | </ | ||
+ | |||
+ | Hay que cambiar: | ||
+ | |||
+ | < | ||
+ | # | ||
+ | </ | ||
+ | |||
+ | por (ojo: hay que borrar el gato): | ||
+ | |||
+ | < | ||
+ | AUTHBIND=yes | ||
+ | </ | ||
+ | |||
+ | ... y guardar el archivo. | ||
+ | |||
+ | El próximo paso es deshabilitar IPv6 porque '' | ||
+ | |||
+ | < | ||
+ | sudo nano / | ||
+ | </ | ||
+ | |||
+ | Hay que poner: | ||
+ | |||
+ | < | ||
+ | export CATALINA_OPTS=" | ||
+ | </ | ||
+ | |||
+ | Después, en: | ||
+ | |||
+ | < | ||
+ | sudo nano / | ||
+ | </ | ||
+ | |||
+ | Hay que comentar la primera línea aquí y agregar la segunda: | ||
+ | |||
+ | < | ||
+ | # exec " | ||
+ | exec authbind --deep " | ||
+ | </ | ||
+ | |||
+ | Por fin, está lista la configuración del puerto 80. | ||
+ | |||
+ | Finalmente, hay que darle a Tomcat acceso al controlador de Postgres: | ||
+ | |||
+ | < | ||
+ | sudo apt-get install wget | ||
+ | cd / | ||
+ | sudo wget https:// | ||
+ | </ | ||
+ | |||
+ | Ahora se puede usar JDBC para consultar a Postgres desde Tomcat. | ||
+ | |||
+ | === Correr el servidor de tomcat9 === | ||
+ | |||
+ | En el caso de que Apache esté instalado y corriendo, hay que deshabilitarlo (si no está instalado, se puede saltar este paso): | ||
+ | |||
+ | < | ||
+ | sudo / | ||
+ | </ | ||
+ | |||
+ | Está lista la configuración así que tenemos que reiniciar tomcat9: | ||
+ | |||
+ | < | ||
+ | sudo service tomcat9 restart | ||
+ | </ | ||
+ | |||
+ | Ahora, se puede ir aquí para verificar que funcione (ojo: '' | ||
+ | |||
+ | < | ||
+ | http:// | ||
+ | </ | ||
+ | |||
+ | Hemos instalado Tomcat con el cual podemos instalar Java Servlets. :) | ||
+ | |||
+ | === Un ejemplo de un Java Servlet === | ||
+ | |||
+ | (//Una confesión: en el ejemplo que doy, pongo HTML en el código de Java. Eso es muy feo porque mezcla la presentación y la lógica de la aplicación. Sería muchísimo mejor usar JSP con los servlets, pero también más complicado.// | ||
+ | |||
+ | Efectivamente, | ||
+ | |||
+ | Descargar [[http:// | ||
+ | |||
+ | En '' | ||
+ | |||
+ | En '' | ||
+ | |||
+ | En '' | ||
+ | |||
+ | En '' | ||
+ | |||
+ | En '' | ||
+ | |||
+ | Tenemos que crear un paquete '' | ||
+ | |||
+ | Ahora hay que refrescar el proyecto: hacer clic en la carpeta del proyecto y presionar '' | ||
+ | |||
+ | Tenemos que subir el archivo '' | ||
+ | |||
+ | < | ||
+ | sudo chown -R tomcat9: | ||
+ | sudo chmod -R g+r / | ||
+ | sudo chmod -R g+w / | ||
+ | sudo chmod -R g+w / | ||
+ | sudo chmod -R g+w / | ||
+ | sudo chmod -R g+w / | ||
+ | sudo chmod -R g+s / | ||
+ | sudo chmod -R g+s / | ||
+ | sudo chmod -R g+s / | ||
+ | sudo chmod -R g+s / | ||
+ | sudo usermod -a -G tomcat9 cc3201 | ||
+ | </ | ||
+ | |||
+ | Después, [[https:// | ||
+ | |||
+ | Ir a: | ||
+ | |||
+ | < | ||
+ | http:// | ||
+ | </ | ||
+ | |||
+ | Aquí se pueden ver tres ejemplos simples de aplicaciones que pueden adaptar para su aplicación. | ||
+ | |||
+ | OJO: ¡es importante usar métodos seguros contra inyección! Mi ejemplo es solo una prueba, no un ejemplo a seguir. | ||
+ | |||
+ | Si hay un problema con el servlet, el log está aquí: | ||
+ | |||
+ | < | ||
+ | sudo more / | ||
+ | </ | ||
+ | |||
+ | ... el error más común es un problema con la contraseña/ | ||
==== Opción 4: Algo diferente ==== | ==== Opción 4: Algo diferente ==== | ||
- | Se puede usar otra opción para armar la aplicación: | + | Tienen sudo, así que pueden |
- | * JSP, Spring, Struts, Flask, Rails, | + | * Flask, React, Angular, Rails, |
... pero no podremos ofrecerles soporte si hay problemas. | ... pero no podremos ofrecerles soporte si hay problemas. | ||
+ | |||
+ | ====== Conexión Externa ===== | ||
+ | |||
+ | Finalmente, se deben configurar los puertos de modo que la aplicación web quede disponible para acceder a través de una URL. Puede encontrar instrucciones de como hacerlo visitando [[proyecto: |
proyecto/armar_la_aplicacion_inicial.1639434805.txt.gz · Last modified: 2021/12/13 22:33 by cc3201