├── AWS_EC2_setup_guide.md ├── DNF_guide.md ├── MariaDB_createDB.md ├── MariaDB_installation_guide.md ├── NGINX_installation_guide.md ├── Preparando_proyecto_Integrador.md ├── README.md ├── SpringBoot_App_installation_guide.md ├── build-jar.sh ├── init.sh ├── nginx-conf.sh └── to-do.md /AWS_EC2_setup_guide.md: -------------------------------------------------------------------------------- 1 | # Amazon Web Services (AWS). 2 | 3 | **Amazon Web Services (AWS)** es una plataforma en la nube ofrecida por Amazon que proporciona una amplia gama de servicios en la nube (cloud computing), como almacenamiento, computación, bases de datos, redes, entre otros. AWS permite a las empresas y desarrolladores crear, desplegar y gestionar aplicaciones en la nube sin tener que preocuparse por la infraestructura física. 4 | 5 | ## Amazon EC2. 6 | 7 | **Amazon EC2 (Elastic Compute Cloud)** es uno de los servicios más populares de AWS y permite ejecutar aplicaciones en servidores virtuales, conocidos como instancias, en la nube. EC2 proporciona capacidad de computación escalable, lo que significa que puedes ajustar el tamaño de tus recursos según la demanda, pagando solo por el uso que realmente necesitas. 8 | 9 | ## Instancias. 10 | 11 | **Instancias de EC2** son servidores virtuales que puedes lanzar para ejecutar aplicaciones. Existen diferentes tipos de instancias con distintas configuraciones de CPU, memoria, almacenamiento y capacidad de red, lo que permite elegir la configuración más adecuada para las necesidades de tu aplicación. 12 | 13 | Beneficios de usar EC2: 14 | 15 | - Escalabilidad: Puedes aumentar o disminuir la cantidad de recursos en función de las necesidades de tu aplicación. 16 | - Pago por uso: Solo pagas por el tiempo que la instancia está en funcionamiento, lo que lo hace flexible y rentable. 17 | - Opciones de personalización: Puedes elegir entre una variedad de sistemas operativos y configuraciones de hardware. 18 | - Alta disponibilidad: EC2 proporciona opciones para distribuir instancias en diferentes regiones geográficas y zonas de disponibilidad, lo que garantiza que las aplicaciones permanezcan disponibles incluso en caso de fallos. 19 | 20 | ## Regiones de AWS. 21 | 22 | AWS tiene el concepto de una **Región**, que es una ubicación física en todo el mundo donde agrupamos los centros de datos. Llamamos a cada grupo de centros de datos lógicos “zona de disponibilidad”. Cada región de AWS consta de un mínimo de tres zonas de acceso aisladas y físicamente separadas dentro de un área geográfica. 23 | 24 | Es necesario seleccionar la Región más cercana a nuestra ubicación en la lista desplegable que se ubica en la parte superior derecha de la consola. Nosotros trabajaremos con dos regiones: `Ohio` y `Virginia`. Solo basta con seleccionar la región para cambiar entre ellas. 25 | 26 | ## Configurando Pares de Claves (key pairs). 27 | 28 | Los **pares de claves (key pairs)** son un mecanismo de seguridad utilizado en servicios de la nube como AWS EC2 para garantizar un acceso seguro a las instancias (servidores virtuales). Un par de claves consta de dos partes: 29 | 30 | - *Clave pública*: Esta clave se almacena en la instancia en la nube. Se utiliza para cifrar los datos que solo pueden ser descifrados por la clave privada correspondiente. 31 | - *Clave privada*: Esta clave se descarga y guarda localmente. Se utiliza para autenticarte y conectarte a la instancia. La clave privada descifra la información que fue cifrada con la clave pública, permitiéndote acceder de manera segura al servidor. 32 | 33 | ### Pasos para configurar el par de claves en EC2. 34 | 35 | Es necesario crear tantos pares de claves sean necesarios para asegurar las instancias en la nube. Para ello, sigue los siguientes pasos. 36 | 37 | 1. Iniciar sesión en la [Consola de AWS](https://console.aws.amazon.com/) con usuario y contraseña. 38 | 2. Seleccionar el servicio `EC2`. 39 | 3. Seleccionar la opción `Pares de claves` que se encuentra en la sección de **Red y Seguridad.** 40 | 4. Asignar un nombre al par de claves. 41 | 5. Seleccionar el Tipo de par de claves `RSA`. 42 | 6. Seleccionar el formato de archivo de clave privada `.pem`. 43 | 7. Crear pares de claves. 44 | 45 | Al crear el par de claves se genera un archivo `'nombre-par-claves'.pem` con el nombre que asignamos a nuestro par de claves. 46 | 47 | *Recuerda crear el par de claves, según la región o regiones que trabajarás.* 48 | 49 | ## Grupos de seguridad 50 | 51 | Los **grupos de seguridad** en AWS son un componente crucial para gestionar la seguridad de las instancias en la nube, como las instancias de EC2. Un grupo de seguridad actúa como un firewall virtual que controla el tráfico de red entrante y saliente a nivel de instancia. 52 | 53 | ### Pasos para crear Grupos de seguridad en EC2. 54 | 55 | Es necesario configurar los permisos para los grupos de seguridad. Para ello sigue los siguientes pasos: 56 | 57 | 1. Iniciar sesión en la [Consola de AWS](https://console.aws.amazon.com/) con usuario y contraseña. 58 | 2. Seleccionar el servicio `EC2`. 59 | 3. Seleccionar la opción `Grupos de seguridad` que se encuentra en la sección de **Red y Seguridad.** 60 | 4. Presionar el botón `Crear grupo de seguridad` para comenzar la configuración de nuestro grupo de seguridad. 61 | 5. Configurar el nombre del grupo de seguridad, así como la descripción "Permitir el acceso SSH, MariaDB y Spring boot". 62 | 6. Configurar las Reglas de Entrada. Vamos a agregar cuatro reglas a nuestro Grupo de seguridad. 63 | 64 | **Primer regla**. Seleccionamos el botón `Agregar regla` y configuramos de la siguiente manera: 65 | 66 | - Tipo: SSH 67 | - Origen: Anywhere-IPv4 68 | 69 | **Segunda regla**. Seleccionamos el botón `Agregar regla` y configuramos de la siguiente manera: 70 | 71 | - Tipo: HTTP 72 | - Origen: Anywhere-IPv4 73 | 74 | **Tercer regla**. Seleccionamos el botón `Agregar regla` y configuramos de la siguiente manera: 75 | 76 | - Tipo: MYSQL/Aurora 77 | - Origen: Anywhere-IPv4 78 | 79 | **Cuarta regla** Seleccionamos el botón `Agregar regla` y configuramos de la siguiente manera: 80 | 81 | - Tipo: TPC personalizado 82 | - Intervalo de puertos: 8080 83 | - Origen: Anywhere-IPv4 84 | 7. Presionamos el botón `Crear grupo de seguridad` para finalizar la creación. 85 | 86 | *Recuerda crear Grupos de seguridad, según la región o regiones que trabajarás.* 87 | 88 | ## Aprovisionando instancias en EC2. 89 | 90 | En el contexto de AWS, la palabra `aprovisionar` (del inglés "provision") se refiere al proceso de configurar y lanzar recursos en la nube para su uso. Cuando se habla de aprovisionar una instancia en EC2, significa que estás creando y configurando un servidor virtual con ciertos recursos (CPU, memoria, almacenamiento, etc.) listos para ejecutar aplicaciones. 91 | 92 | Para aprovisionar instancias es necesario seguir los siguientes pasos: 93 | 94 | 1. Iniciar sesión en la [Consola de AWS](https://console.aws.amazon.com/) con usuario y contraseña. 95 | 2. Seleccionar el servicio `EC2`. 96 | 3. Seleccionar la opción `Instancias` que se encuentra en la sección de **Instancias.** 97 | 4. Asignar un nombre a la instancia. 98 | 5. Seleccionar `Amazon Linux` como Imagen de Máquina de Amazon (AMI). 99 | 6. Configurar el `Par de claves` para el inicio de sesión, seleccionando el par de claves que generamos previamente. 100 | 7. Configurar el `firewall (grupos de seguridad)` seleccionando la opción `Seleccionar un grupo de seguridad existente`. 101 | 8. Lanzamos la instancia, presionando el botón `Lanzar instancias` y observamos que se ha creado. 102 | Podemos ver todas las instancias que hemos aprovisionado. 103 | 104 | > Podemos generar el número de instancias necesarias escribiendo el número de instancias. 105 | 106 | *Recuerda aprovisionar Instancias, según la región o regiones que trabajarás.* 107 | 108 | ## Cambiando el estado de las instancias. 109 | 110 | En AWS, las instancias de EC2 pasan por varios estados durante su **ciclo de vida**. Cada estado refleja la actividad o el estado actual de la instancia. Estos estados permiten gestionar de manera flexible las instancias, controlando el uso y los costos según las necesidades de la aplicación. 111 | 112 | *Estados de instancias:* 113 | 114 | - **Pendiente**: ste es el estado inicial de una instancia cuando se está lanzando.. 115 | - **En ejecución**: En ejecución, funcionando correctamente y lista para ser usada. 116 | - **Deteniéndose**: En proceso de detenerse. 117 | - **Detenida**: La instancia ha sido detenida correctamente, aunque la configuración de la instancia permanece intacta. 118 | - **Apagándose**: Este estado indica que la instancia está en proceso de apagarse de manera permanente. 119 | - **Terminada**: Instancia eliminada permanentemente. 120 | - **Reiniciando**: La instancia está reiniciándose, conservando sus configuraciones. 121 | - **Hibernación**: Permite "pausar" una instancia en lugar de detenerla completamente, preservándola en el mismo estado en que se encontraba antes de la hibernación. 122 | 123 | Dentro del panel de instancias podemos visualizar las instancias aprovisionadas con la información de cada una (nombre, Id, estado, tipo, estatus, entre otras) y podemos modificar los estados seleccionando la(s) instancia(s) necesarias. 124 | 125 | *Recuerda que las instancias se encuentran en las regiones donde se aprovisionaron.* 126 | -------------------------------------------------------------------------------- /DNF_guide.md: -------------------------------------------------------------------------------- 1 | ## DNF (Dandified YUM) 2 | 3 | DNF es un sistema de gestión de paquetes utilizado principalmente en distribuciones de Linux basadas RPM (Red Hat Package Manager) como Red Hat, Fedora, CentOS y Amazon Linux 2023. DNF es una evolución de YUM (Yellowdog Updater, Modified), y se introdujo para mejorar la velocidad, el rendimiento y la usabilidad en comparación con su predecesor. 4 | 5 | Para usar el comando DNF debes tener privilegios de super usuario. El programa sudo (super user do​) es una utilidad de los sistemas operativos tipo Unix, que permite a los usuarios ejecutar programas con los privilegios de seguridad de otro usuario (como el usuario root). 6 | 7 | ### Principales comandos de DNF 8 | 9 | - **`sudo dnf update`**: Actualiza todos los paquetes instalados en el sistema a sus últimas versiones disponibles. 10 | ```bash 11 | sudo dnf update 12 | ``` 13 | 14 | - **`sudo dnf search`**: Permite buscar paquetes en los repositorios disponibles. 15 | ```bash 16 | sudo dnf search mariadb 17 | ``` 18 | 19 | - **`sudo dnf info`**: Proporciona información detallada sobre un paquete específico, incluida su versión, descripción y dependencias. 20 | ```bash 21 | sudo dnf info mariadb105-server 22 | ``` 23 | 24 | - **`sudo dnf install`**: Este comando se utiliza para instalar nuevos paquetes y todas sus dependencias no instaladas en el sistema. 25 | ```bash 26 | sudo dnf install mariadb105-server 27 | ``` 28 | 29 | - **`sudo dnf remove`**: Permite eliminar paquetes instalados en el sistema. 30 | ```bash 31 | sudo dnf remove mariadb105-server 32 | ``` 33 | 34 | - **`sudo dnf upgrade`**: Similar a dnf update, pero también maneja actualizaciones de versiones mayores de los paquetes instalados. 35 | ```bash 36 | sudo dnf upgrade mariadb105-server 37 | ``` 38 | 39 | - **`sudo dnf clean all`**: Se utiliza para limpiar el caché de paquetes descargados, lo que puede liberar espacio en disco. 40 | ```bash 41 | sudo dnf clean all 42 | ``` -------------------------------------------------------------------------------- /MariaDB_createDB.md: -------------------------------------------------------------------------------- 1 | # Creación de una Base de Datos en MariaDB. 2 | 3 | En esta guía, aprenderás cómo crear una base de datos en MariaDB instalada en una instancia EC2 con Amazon Linux. La base de datos estará diseñada para una aplicación de comercio electrónico. 4 | 5 | ## Pasos para Crear la Base de Datos. 6 | 7 | ### Paso 1: Acceda a los servicios de MariaDB. 8 | 9 | Accede a la consola de MariaDB utilizando el siguiente comando: 10 | 11 | ```bash 12 | mysql -u root -p 13 | ``` 14 | 15 | El usuario root puede ser cambiado por otro usuario configurado previamente. 16 | 17 | ### Paso 2: Crea la Base de Datos. 18 | 19 | Ejecuta el siguiente comando SQL para crear la base de datos. 20 | 21 | ```sql 22 | CREATE DATABASE ecommerce; 23 | ``` 24 | 25 | ### Paso 3: Crea Usuarios. 26 | 27 | #### a. Usuario con Todos los Privilegios. 28 | Crea un usuario con todos los privilegios en la base de datos de comercio electrónico. Reemplaza 'username' y 'password' con tu nombre de usuario y contraseña deseados: 29 | 30 | ```sql 31 | CREATE USER 'username'@'%' IDENTIFIED BY 'password'; 32 | GRANT ALL PRIVILEGES ON ecommerce.* TO 'username'@'%'; 33 | FLUSH PRIVILEGES; 34 | ``` 35 | 36 | #### b. Usuario de Solo Lectura. 37 | Crea un usuario con privilegios de solo lectura en la base de datos de comercio electrónico. Reemplaza 'readonly_username' y 'readonly_password' con tu nombre de usuario y contraseña deseados: 38 | 39 | ```sql 40 | CREATE USER 'readonly_username'@'localhost' IDENTIFIED BY 'readonly_password'; 41 | GRANT SELECT ON ecommerce.* TO 'readonly_username'@'localhost'; 42 | FLUSH PRIVILEGES; 43 | ``` 44 | 45 | ### Paso 4: Verifica la Base de Datos y los Usuarios. 46 | 47 | Puedes verificar que la base de datos y los usuarios se hayan creado correctamente listando las bases de datos y los usuarios. 48 | 49 | ```sql 50 | SHOW DATABASES; 51 | SELECT user FROM mysql.user; 52 | ``` 53 | 54 | ### 5. Verifica los Permisos del Usuario 55 | 56 | Puedes verificar los permisos de un usuario específico ejecutando la siguiente consulta SQL. 57 | 58 | ```sql 59 | SHOW GRANTS FOR 'username'@'%'; 60 | ``` 61 | 62 | ### Paso 6: Sal de MariaDB. 63 | Sal de la interfaz de línea de comandos de MariaDB. 64 | 65 | ```sql 66 | EXIT; 67 | ``` 68 | -------------------------------------------------------------------------------- /MariaDB_installation_guide.md: -------------------------------------------------------------------------------- 1 | # Instalación de MariaDB en AWS Linux 2023 2 | 3 | ## ¿Qué es MariaDB? 4 | 5 | MariaDB es un sistema de gestión de bases de datos relacional (RDBMS) de código abierto que es una bifurcación de MySQL. Ofrece características avanzadas, alto rendimiento y es compatible con la mayoría de las aplicaciones MySQL. MariaDB es utilizado por empresas de todo el mundo para gestionar sus datos de manera eficiente y segura. 6 | 7 | ## Pasos para instalar MariaDB en AWS Linux 2023 8 | 9 | ### Paso 1: Conectarse a su instancia de AWS Linux. 10 | 11 | Utilice su cliente SSH favorito para conectarse a su instancia de AWS Linux. 12 | 13 | ```bash 14 | ssh -i your_key.pem ec2-user@your_instance_public_ip 15 | ``` 16 | 17 | Es necesario que tu archivo de clave `.pem` tenga permisos de solo lectura; de lo contrario, podrías encontrarte con el error "Permissions 0644 for your_key.pem are too open". Para resolver este problema, establece permisos de solo lectura para el archivo `.pem`. 18 | 19 | ```bash 20 | chmod 400 your_key.pem 21 | ``` 22 | El comando `chmod` en sistemas operativos tipo Unix se utiliza para cambiar los permisos de un archivo o directorio. En este comando, 400 especifica que el propietario del archivo (your_key.pem) debe tener permisos de solo lectura, mientras que todos los demás usuarios no tienen ningún permiso. 23 | 24 | ### Paso 2: Actualizar el sistema. 25 | 26 | Antes de instalar cualquier paquete nuevo, es una buena práctica actualizar los paquetes existentes en el sistema. 27 | 28 | ```bash 29 | sudo dnf update 30 | ``` 31 | 32 | ### Paso 3: Instalar MariaDB Server 33 | 34 | Para instalar MariaDB Server en AWS Linux, utilice el siguiente comando: 35 | 36 | ```bash 37 | sudo dnf install mariadb105-server 38 | ``` 39 | 40 | ### Paso 4: Iniciar el servicio MariaDB 41 | 42 | Inicie el servicio de MariaDB y habilítelo para que se inicie automáticamente en el arranque del sistema. 43 | 44 | ```bash 45 | sudo systemctl start mariadb 46 | sudo systemctl enable mariadb 47 | ``` 48 | 49 | `systemctl` es una herramienta de administración de servicios en sistemas Linux. Permite interactuar con el sistema de inicio, controlar servicios (como iniciar, detener, reiniciar, habilitar o deshabilitar), ver el estado de los servicios y más 50 | 51 | ### Paso 5: Verificar el servicio MariaDB 52 | 53 | Una vez que la inicialización haya finalizado, puede verificar el estado del servicio de MariaDB. 54 | 55 | ```bash 56 | sudo systemctl status mariadb 57 | ``` 58 | 59 | ### Paso 6: Configurar MariaDB 60 | 61 | Para mejorar la seguridad de su instalación de MariaDB, ejecute el script de seguridad incluido. 62 | 63 | ```bash 64 | sudo mysql_secure_installation 65 | ``` 66 | 67 | ### Paso 7: Acceda a los servicios de MariaDB 68 | 69 | Una vez configurado, puede acceder a la consola de MariaDB utilizando el siguiente comando: 70 | 71 | ```bash 72 | mysql -u root -p 73 | ``` 74 | 75 | Se le pedirá que ingrese la contraseña que configuró anteriormente. Una vez dentro de la consola de MariaDB, puede comenzar a crear bases de datos, tablas y realizar consultas SQL. -------------------------------------------------------------------------------- /NGINX_installation_guide.md: -------------------------------------------------------------------------------- 1 | # Configuración de NGINX como Proxy Inverso. 2 | 3 | ## ¿Por qué no utilizar directamente el puerto 80 en mi aplicación de Spring Boot? 4 | 5 | En Spring Boot, el puerto por defecto para escuchar solicitudes HTTP es el 8080. Sin embargo, no es posible configurar directamente el puerto 80 en la propiedad server.port debido a restricciones de seguridad y permisos. 6 | 7 | Aquí tienes algunas razones por las que no se recomienda usar el puerto 80 directamente: 8 | 9 | - Privilegios de Puerto: El puerto 80 está reservado para servicios web estándar (HTTP). En sistemas operativos Unix/Linux, los puertos por debajo del 1024 requieren privilegios de superusuario para ser utilizados. Ejecutar una aplicación Spring Boot con privilegios de superusuario no es seguro y no se recomienda. 10 | 11 | - Conflictos con Servicios Existentes: El puerto 80 podría estar ocupado por otros servicios web en la misma máquina. Si intentamos usarlo directamente, podríamos enfrentarnos a conflictos y errores al iniciar nuestra aplicación. 12 | 13 | - Recomendaciones de Seguridad: Por razones de seguridad, se sugiere utilizar un puerto no privilegiado (por encima del 1024) para aplicaciones web. Esto ayuda a evitar posibles vulnerabilidades y ataques. 14 | 15 | ## ¿Qué es un Proxy Inverso? 16 | 17 | Un proxy inverso es un servidor que actúa como intermediario entre los clientes (navegadores, aplicaciones móviles, etc.) y los servidores de aplicaciones. 18 | 19 | NGINX se utiliza comúnmente como un proxy inverso debido a su eficiencia y flexibilidad. 20 | Ventajas de Usar un Proxy Inverso con NGINX: 21 | 22 | - Seguridad: El proxy inverso oculta los detalles de la infraestructura detrás de él, protegiendo los servidores de aplicaciones de ataques directos. 23 | 24 | - Balanceo de Carga: NGINX puede distribuir las solicitudes entrantes entre varios servidores de aplicaciones, mejorando la escalabilidad. 25 | 26 | - Caché: Puede almacenar en caché respuestas para reducir la carga en los servidores de aplicaciones. 27 | 28 | - SSL/TLS: NGINX puede manejar la terminación SSL/TLS, liberando a los servidores de aplicaciones de esta tarea. Esto significa que NGINX se encarga de descifrar las solicitudes cifradas (HTTPS) enviadas por el cliente y luego reenvía las solicitudes sin cifrar al servidor de aplicaciones (que puede estar ejecutando Spring Boot). 29 | 30 | ## Instalar NGINX en AWS Linux 2023 31 | 32 | ### Paso 1: Conectarse a su instancia de AWS Linux. 33 | 34 | Utilice su cliente SSH favorito para conectarse a su instancia de AWS Linux. 35 | 36 | ```bash 37 | ssh -i your_key.pem ec2-user@your_instance_public_ip 38 | ``` 39 | 40 | Es necesario que tu archivo de clave `.pem` tenga permisos de solo lectura; de lo contrario, podrías encontrarte con el error "Permissions 0644 for your_key.pem are too open". Para resolver este problema, establece permisos de solo lectura para el archivo `.pem`. 41 | 42 | ```bash 43 | chmod 400 your_key.pem 44 | ``` 45 | El comando `chmod` en sistemas operativos tipo Unix se utiliza para cambiar los permisos de un archivo o directorio. En este comando, 400 especifica que el propietario del archivo (your_key.pem) debe tener permisos de solo lectura, mientras que todos los demás usuarios no tienen ningún permiso. 46 | 47 | ### Paso 2: Actualizar el sistema. 48 | 49 | Antes de instalar cualquier paquete nuevo, es una buena práctica actualizar los paquetes existentes en el sistema. 50 | 51 | ```bash 52 | sudo dnf update 53 | ``` 54 | 55 | ### Paso 3: Instalar NGINX 56 | 57 | Para instalar NGINX en AWS Linux, utilice el siguiente comando: 58 | 59 | ```bash 60 | sudo dnf install nginx 61 | ``` 62 | 63 | ### Paso 4: Iniciar el servicio NGINX 64 | 65 | Inicie el servicio de nginx y habilítelo para que se inicie automáticamente en el arranque del sistema. 66 | 67 | ```bash 68 | sudo systemctl start nginx 69 | ``` 70 | ```bash 71 | sudo systemctl enable nginx 72 | ``` 73 | 74 | `systemctl` es una herramienta de administración de servicios en sistemas Linux. Permite interactuar con el sistema de inicio, controlar servicios (como iniciar, detener, reiniciar, habilitar o deshabilitar), ver el estado de los servicios y más 75 | 76 | 77 | ## Configurar NGINX como proxy inverso 78 | 79 | Para configurar un proxy inverso de NGINX, puedes hacerlo directamente en el archivo `nginx.conf` o puedes optar por la estructura más organizada de tener carpetas `sites-available` y `sites-enabled`. En la configuración directa en `nginx.conf`, generalmente buscarías la sección http y agregarías las directivas necesarias para configurar el proxy inverso. 80 | 81 | Por otro lado, al usar las carpetas `sites-available` y `sites-enabled`, puedes crear archivos de configuración separados para cada sitio o aplicación que necesite un proxy inverso, lo que puede ser más fácil de mantener en entornos con múltiples configuraciones. Una vez que hayas configurado los archivos de configuración en sites-available, puedes habilitarlos creando enlaces simbólicos desde sites-enabled. Esto permite una gestión más modular y organizada de las configuraciones de proxy inverso en NGINX. 82 | 83 | ### Paso 1: Crear carpetas `site-enabled` y `site-available` 84 | 85 | - sites-available: Este directorio se utiliza para almacenar archivos de configuración de sitios web disponibles. Estos archivos pueden contener la configuración de diferentes sitios web que podrían ser servidos por NGINX, pero no están activos actualmente. 86 | 87 | - sites-enabled: En este directorio se colocan enlaces simbólicos (también conocidos como "symlinks") a los archivos de configuración de los sitios web que están activos y se están sirviendo actualmente. NGINX lee la configuración de los sitios web desde estos archivos en lugar de los archivos ubicados directamente en sites-available. 88 | 89 | ```bash 90 | sudo mkdir /etc/nginx/sites-available /etc/nginx/sites-enabled 91 | ``` 92 | 93 | ### Paso 2: Crear el archivo de configuración para el proxy inverso. 94 | 95 | ```bash 96 | sudo touch /etc/nginx/sites-available/reverse-proxy 97 | ``` 98 | 99 | ### Paso 3: Edita el archivo de configuración `reverse-proxy`. 100 | 101 | El siguiente comando te ayudará a iniciar la configuración del archivo `reverse-proxy`. Recuerda escribir correctamente el nombre del archivo creado anteriormente. 102 | 103 | ```bash 104 | sudo tee -a /etc/nginx/sites-available/reverse-proxy < Es necesario recordarte que el punto de acceso de nuestro frontend es el archivo `index.html` el cual se debe encontrar en el nivel principal. 13 | 14 | Para realizar el acoplamiento, copiaremos la carpeta del frontend dentro de la carpeta del backend, en la ruta `src/main/resources/static` 15 | 16 | Puedes consultar el siguiente repositorio para observar la nueva estructura del proyecto 17 | [Repositorio de ejemplo](https://github.com/sergiotrrs/aws-ec2-demo.git) 18 | 19 | ## Configurando mi URL remota. 20 | 21 | Solicita la `IP pública` proporcionada por la instancia de AWS a la persona encargada, ya que esta será la dirección que reemplazarás en el frontend y te permitirá vincular con el servidor remoto que configuraremos más adelante. 22 | 23 | Hasta este momento hemos desarrollado nuestra API y realizado pruebas HTTP de manera local, pero necesitamos conectarnos a una IP remota para realizar pruebas de manera remota. Por ello, localiza todas las url de tu proyecto que apunten a `localhost:8080` y sustitúyela por la `IP pública` proporcionada. 24 | 25 | *Revisa cada archivo de tu código para asegurarte que se realicen los cambios correctos.* 26 | 27 | Así mismo, solicita a la persona encargada la información referente a tu instancia aprovisionada en AWS, como Región, Nombre de instancia, Id de instancia y el archivo `'nombre-par-claves'.pem` que servirá como el Par de claves para conectarte posteriormente a la instancia. 28 | 29 | ## Propiedades para Producción (Variables de entorno). 30 | 31 | Por seguridad, es necesario ocultar las propiedades del proyecto como variables de entorno, ya que de esta manera no exponemos información sensible a nivel producción. Para ello, realizamos lo siguiente: 32 | 33 | 1. Crear un nuevo archivo llamado `application-prod.properties` en la ruta `src/main/resources` 34 | - Este servirá exclusivamente para configuración de producción. 35 | - No es necesario modificar `application.properties` o `application.yml`. 36 | 37 | 2. Dentro del archivo `application-prod.properties` copiar lo siguiente: 38 | ```properties 39 | 40 | spring.jpa.hibernate.ddl-auto=update 41 | 42 | spring.datasource.url=jdbc:mysql://${MYSQLHOST}:${MYSQLPORT}/${MYSQLDATABASE} 43 | spring.datasource.username=${MYSQLUSER} 44 | spring.datasource.password=${MYSQLPASSWORD} 45 | spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver 46 | ``` 47 | 3. En la carpeta del proyecto abrir el archivo `.gitignore` y realizar comentarios sobre las siguientes líneas: 48 | ```properties 49 | # build 50 | # !**/src/main/**/build/ 51 | ``` 52 | 53 | ## ¿Qué es Gradle y para qué sirve en Spring Boot? 54 | 55 | Gradle es una herramienta de automatización de compilación que se utiliza para gestionar y construir proyectos de software. En un proyecto de Spring Boot, Gradle permite gestionar las dependencias, compilar el código, ejecutar pruebas, crear archivos ejecutables (.jar o .war) y desplegar la aplicación de manera eficiente. 56 | 57 | ## Construyendo el proyecto con Gradle. 58 | 59 | Necesitamos ejecutar varias tareas en nuestro proyecto, tales como configurar, descargar dependencias, compilar clases Java, ejecutar pruebas y crear archivos `jar`. Para ello haremos uso de las tareas de gradle. 60 | 61 | Tenemos dos opciones disponibles para realizar la construcción de nuestro proyecto (`'archivo' .jar`): 62 | 63 | ### Opción 1. 64 | Ubicar la opción de `Gradle Task` en la consola. Seleccionar la carpeta del proyecto `nombre_proyecto`, seleccionar `build` y dar doble click en la opción de `build` para iniciar la construcción del proyecto. 65 | 66 | ### Opción 2. 67 | Ubicarse en la carpeta del proyecto y ejecutar el comando: 68 | 69 | ```bash 70 | ./gradlew build 71 | ``` 72 | 73 | Una vez finalizada la construción del proyecto, se generan una serie de carpetas y un archivo llamado `'proyecto-version'.jar` según el nombre de nuestro proyecto y la versión del mismo. Este archivo se localiza en la ruta `build/libs/'proyecto-version'.jar` 74 | 75 | ## Archivo .gitignore 76 | 77 | Para el deploy remoto de nuestro proyecto, necesitamos enviar el código y los archivos .jar a un repositorio de Github, pero dichos archivos no deben ser ignorados. Para resolverlo, es necesario modificar el archivo `.gitignore` localizando las líneas siguientes y agregando un comentario (#) al inicio de las mismas. 78 | 79 | ```bash 80 | # build 81 | # !**/src/main/**/build/ 82 | ``` 83 | 84 | Con esto, le decimos a Github que no ignore los archivos que se encuentran dentro del directorio `build`. 85 | 86 | ## Creación y despliegue en Github. 87 | 88 | Una vez que hayamos realizado las configuraciones necesarias en nuestro proyecto integrador, es momento de crear un repositorio público y vacío en Github para realizar la conexión a dicho repositorio. Para ello sigue los pasos habituales desde git: 89 | 90 | ```bash 91 | git init 92 | ``` 93 | ```bash 94 | git add . 95 | ``` 96 | ```bash 97 | git commit -m 'comentario' 98 | ``` 99 | ```bash 100 | git remote add origin 'url.git' 101 | ``` 102 | ```bash 103 | git push -u origin main 104 | ``` 105 | 106 | ## Pasos finales. 107 | 108 | Para mayor organización, se sugiere crear una carpeta general que contenga al mismo nivel la carpeta del proyecto integrador (frontend integrado al backend) y el archivo `'nombre-par-claves'.pem` para continuar con las siguientes configuraciones de AWS. 109 | 110 | Te invitamos a consultar el archivo [MariaDB_installation_guide.md](MariaDB_installation_guide.md) para conocer las próximas configuraciones necesarias para el despliegue de la Aplicación. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Bienvenido al Repositorio de AWS EC2 y Configuraciones. 2 | 3 | En este repositorio encontrarás información detallada y guías paso a paso para configurar y gestionar instancias EC2 en Amazon Web Services (AWS). Además, también encontrarás instrucciones para configurar otras herramientas y servicios relacionados, como MariaDB, Spring Boot y NGINX. 4 | 5 | ## Contenido del Repositorio. 6 | 7 | ### AWS y EC2 8 | 9 | En el archivo [AWS_EC2_setup_guide.md](AWS_EC2_setup_guide.md), encontrarás una guía que explica qué es AWS, EC2 y las ventajas de utilizar instancias de EC2. Así mismo, encontrarás instrucciones paso a paso para configurar grupos de seguridad, pares de claves y aprovisionar instancias en la consola de AWS. 10 | 11 | ### Manual DNF 12 | 13 | En el archivo [DNF_guide.md](DNF_guide.md), encontrarás una guía que explica qué es DNF y proporciona las principales instrucciones para su uso en instancias Amazon Linux. DNF es un gestor de paquetes de código abierto utilizado en algunas distribuciones de Linux, como Fedora y CentOS. 14 | 15 | ### Preparando nuestro Proyecto Integrador. 16 | 17 | En el archivo [Preparando_proyecto_Integrador.md](Preparando_proyecto_Integrador.md), encontrarás las configuraciones necesarias que debemos realizar en los archivos de nuestro Proyecto Integrador. Hasta este momento hemos trabajado de manera local creando el frontend con HTML, CSS y Bootstrap, el backend con Java y Spring boot y, nuestra base de datos con MySQL. Es momento de realizar cambios que nos permitirán trabajar a nivel producción con AWS. 18 | 19 | ### Instalación de MariaDB en una Instancia EC2 y creación de una base de datos. 20 | 21 | En el archivo [MariaDB_installation_guide.md](MariaDB_installation_guide.md), encontrarás instrucciones paso a paso para instalar y configurar MariaDB en una instancia EC2 de AWS. MariaDB es un sistema de gestión de bases de datos relacional de código abierto. En el archivo [MariaDB_createDB.md](MariaDB_createDB.md), encontrarás instrucciones para crear una base de datos y crear un usuario que tenga privilegios a esa base de datos. 22 | 23 | ### Configuración para la ejecución de una Aplicación Spring Boot en EC2. 24 | 25 | En el archivo [SpringBoot_App_installation_guide.md](SpringBoot_App_installation_guide.md), encontrarás instrucciones para configurar una aplicación Spring Boot en una instancia EC2 de AWS. Spring Boot es un framework de desarrollo de aplicaciones Java que simplifica el proceso de creación de aplicaciones basadas en Spring. 26 | 27 | ### Configuración de NGINX como Proxy Inverso. 28 | 29 | En el archivo [NGINX_installation_guide.md](NGINX_installation_guide.md), encontrarás una guía detallada para configurar NGINX como un servidor proxy inverso en una instancia EC2 de AWS. NGINX es un servidor web ligero, rápido y de alto rendimiento que se puede utilizar para enrutar el tráfico web hacia múltiples servidores backend. 30 | 31 | ## Contribución. 32 | 33 | ¡Siéntete libre de contribuir al repositorio! Si tienes alguna mejora, corrección de errores o nuevas guías que te gustaría añadir, ¡no dudes en hacerlo! Simplemente haz un fork del repositorio, realiza tus cambios y envía un pull request. 34 | 35 | Esperamos que encuentres útiles las guías y la información proporcionada en este repositorio. Si tienes alguna pregunta o necesitas ayuda adicional, no dudes en abrir un issue. 36 | 37 | ¡Gracias por tu interés y contribuciones! 38 | 39 | -------------------------------------------------------------------------------- /SpringBoot_App_installation_guide.md: -------------------------------------------------------------------------------- 1 | # Configuración para la ejecución de una Aplicación Spring Boot en AWS EC2. 2 | 3 | ## ¿Qué es Spring Boot? 4 | 5 | Spring Boot es framework de código abierto para crear aplicaciones Java de manera rápida y con un mínimo de configuración. Está construido sobre el proyecto Spring Framework y proporciona un conjunto de herramientas y convenciones que simplifican el desarrollo de aplicaciones empresariales. 6 | 7 | ## ¿Qué es una Api Rest? 8 | 9 | Una API REST (Representational State Transfer) es una arquitectura para el diseño de sistemas distribuidos basados en la web. En una API REST, los recursos (como datos o funcionalidades) se representan como URI (Identificadores de Recursos Uniformes) y se pueden acceder a través de operaciones estándar HTTP (GET, POST, PUT, DELETE, etc.). 10 | 11 | Una API REST permite a los desarrolladores crear aplicaciones que pueden comunicarse entre sí a través de Internet de manera flexible y ligera. Facilita la integración y el intercambio de datos entre diferentes sistemas y aplicaciones, lo que resulta en una mayor eficiencia y escalabilidad. 12 | 13 | ## Pasos para instalar OpenJDK y Git en AWS Linux 2023 14 | 15 | ### Paso 1: Conectarse a su instancia de AWS Linux. 16 | 17 | Utilice su cliente SSH favorito para conectarse a su instancia de AWS Linux. 18 | 19 | ```bash 20 | ssh -i your_key.pem ec2-user@your_instance_public_ip 21 | ``` 22 | 23 | Es necesario que tu archivo de clave `.pem` tenga permisos de solo lectura; de lo contrario, podrías encontrarte con el error "Permissions 0644 for your_key.pem are too open". Para resolver este problema, establece permisos de solo lectura para el archivo `.pem`. 24 | 25 | ```bash 26 | chmod 400 your_key.pem 27 | ``` 28 | 29 | El comando `chmod` en sistemas operativos tipo Unix se utiliza para cambiar los permisos de un archivo o directorio. En este comando, 400 especifica que el propietario del archivo (your_key.pem) debe tener permisos de solo lectura, mientras que todos los demás usuarios no tienen ningún permiso. 30 | 31 | ### Paso 2: Actualizar el sistema. 32 | 33 | Antes de instalar cualquier paquete nuevo, es una buena práctica actualizar los paquetes existentes en el sistema. 34 | 35 | ```bash 36 | sudo dnf update 37 | ``` 38 | 39 | ### Paso 3: Instalar OpenJDK. 40 | 41 | Amazon Corretto es una distribución sin costo, multiplataforma y lista para producción de Open Java Development Kit (OpenJDK). Corretto cuenta con soporte a largo plazo que incluirá mejoras de rendimiento y correcciones de seguridad: 42 | 43 | ```bash 44 | sudo dnf install java-17 45 | ``` 46 | 47 | ### Paso 4: Instalar Git y clonar un repositorio. 48 | 49 | Aunque Git y GitHub son herramientas independientes, se complementan entre sí para facilitar la colaboración y el desarrollo de software en equipo. Además, aunque no es necesario, Git y GitHub pueden utilizarse en conjunción con instancias EC2 de Amazon para transferir archivos y desplegar aplicaciones en la nube de AWS de manera eficiente. 50 | 51 | ```bash 52 | sudo dnf install git 53 | ``` 54 | Si no cuentas con un repositorio, puede clonar el siguiente proyecto de Spring Boot `aws-ec2-demo`. 55 | 56 | ```bash 57 | git clone https://github.com/sergiotrrs/aws-ec2-demo.git 58 | ``` 59 | El proyecto `aws-ec2-demo`cuenta con dos perfiles, en el perfil por default usa una base de datos en memoria H2, en el perfil `dev` realiza la conexión con una base de datos en MySQL. 60 | 61 | ## Ejecuta una aplicación de Spring Boot con una base de datos en memoria. 62 | 63 | ### Paso 1: Ejecuta una aplicación usando Gradle o Maven. 64 | 65 | Prueba la aplicación en la instancias EC2, para ello dirígete a la raíz del proyecto clonado y verifica los permisos del archivo gradlew o mvnw. 66 | 67 | ```bash 68 | ls -l gradlew 69 | ``` 70 | El archivo gradlew(o mvnw) deben tener permisos de ejecucíón, de no ser así, cambia los permisos para poder ejecutar el script. 71 | 72 | ```bash 73 | chmod +x gradlew 74 | ``` 75 | 76 | Ejecuta tu aplicación. En caso de que uses Maven ejecuta `./mvnw spring-boot:run`. 77 | 78 | ```bash 79 | ./gradlew bootRun 80 | 81 | ``` 82 | 83 | Para detener la aplicación pulsa las teclas `ctrl + c`. Deten la apliación hasta que hayas terminado con las pruebas que se describe en el siguiente paso. 84 | 85 | ### Paso 2: Realiza pruebas en los endpoints de tu aplicación 86 | 87 | Si has clonado el proyecto anteriormente, puedes realizar el registro de un usuario utilizando el comando cURL. Dado que la terminal SSH está ocupada ejecutando la aplicación Spring Boot, necesitarás abrir otra conexión SSH como se indicó en el [Paso 1: Conectar a tu instancia de AWS Linux](#paso-1-conectar-a-tu-instancia-de-aws-linux). Una vez que hayas abierto otra conexión SSH, ejecuta los siguientes comandos: 88 | 89 | ```bash 90 | curl -d '{"email":"winnie@disney.com","password":"honeyhoney","firstName":"winnie", "lastName":"pooh"}' -H "Content-Type:application/json" localhost:8080/api/v1/users 91 | ``` 92 | ```bash 93 | curl localhost:8080/api/v1/users 94 | ``` 95 | 96 | ## Ejecuta una aplicación de Spring Boot con una base de datos en MySQL o MariaDB 97 | 98 | ### Paso 1: Verificar la existencia de la base de datos en MySQL o MariaDB 99 | 100 | Antes de ejecutar la aplicación de Spring Boot, es importante asegurarse de que la base de datos necesaria esté disponible. Si no tienes una base de datos existente, puedes crear una nueva siguiendo las instrucciones proporcionadas en los tutoriales [MariaDB_installation_guide.md](MariaDB_installation_guide.md) y [MariaDB_createDB.md](MariaDB_createDB.md). 101 | 102 | Para la aplicación `aws-ec2-demo`, asegúrate de crear una base de datos con las siguientes credenciales: 103 | 104 | - **Host name**: localhost 105 | - **Port**: 3306 106 | - **Database**: `my_ecommerce` 107 | - **User name**: mickey_mouse 108 | - **Password**: d1sn3y 109 | 110 | ### Paso 2: Genera el empaquetado(.jar) de tu aplicación. 111 | 112 | Un archivo .jar es un archivo Java que se utiliza para empaquetar y distribuir aplicaciones Java. "JAR" significa "Java ARchive". Cuando ejecutas un archivo .jar de una aplicación Spring Boot, automáticamente se inicia un servidor embebido que ejecuta tu aplicación. Esto significa que no necesitas preocuparte por configurar un servidor web por separado; Spring Boot se encarga de todo por ti. 113 | 114 | Para generar el empaquetado (.jar) de tu aplicación, ejecuta el siguiente comando desde la raíz de tu aplicación. Si estás utilizando Maven, ejecuta `./mvnw clean package`. 115 | 116 | ```bash 117 | ./gradlew build 118 | ``` 119 | 120 | ## Paso 3: Ejecuta el archivo empaquetado de tu aplicación. 121 | 122 | Para ejecutar el archivo empaquetado de tu aplicación, utiliza el siguiente comando desde la raíz de tu aplicación `java -jar springboot_app.jar`. Si estás utilizando variables de entorno, indícalo como se muestra a continuación: 123 | 124 | ```bash 125 | java -jar -Dspring.profiles.active=prod -Dserver.port=8080 -DMYSQLHOST=localhost -DMYSQLDATABASE=my_ecommerce -DMYSQLPORT=3306 -DMYSQLUSER=mickey_mouse -DMYSQLPASSWORD=d1sn3y build/libs/aws-ec2-demo-1.0.0.jar 126 | ``` 127 | 128 | Si usas Maven cambia la ruta del empaquetado a `/target/my-ecommerce-demo-1.0.0.jar`. Puedes probar el funcionamiento de tu aplicación haciendo una consulta HTTP desde otra ventana de comandos conectada a tu instancia EC2. 129 | 130 | ```bash 131 | curl localhost:8080/api/v1/users 132 | ``` 133 | 134 | Deten la ejecución de tu empaquetado presionando las teclas `ctrl + c`. 135 | 136 | ### Paso 4 (opcional): Realiza pruebas a los endpoints de tu aplicación. 137 | 138 | Si la aplicación de Spring Boot está detenida, ejecútala nuevamente como se indicó en el paso anterior. Puedes registrar un nuevo usuario utilizando el comando cURL. Dado que la terminal SSH está ocupada ejecutando la aplicación Spring Boot, necesitarás abrir otra conexión SSH como se indicó en el [Paso 1: Conectar a tu instancia de AWS Linux](#paso-1-conectar-a-tu-instancia-de-aws-linux). 139 | 140 | Una vez que hayas abierto otra conexión SSH, ejecuta los siguientes comandos: 141 | 142 | ```bash 143 | curl -d '{"email":"winnie@disney.com","password":"honeyhoney","firstName":"winnie", "lastName":"pooh"}' -H "Content-Type:application/json" localhost:8080/api/v1/users 144 | ``` 145 | 146 | ```bash 147 | curl localhost:8080/api/v1/users 148 | ``` 149 | 150 | - Si el puerto por defecto(8080) está abierto en la instancia EC2, puedes hacer peticiones http usando Postman escribiendo la URL `http://your_instance_public_ip:8080/api/v1/users` 151 | 152 | - Debido que la conexión se realizará a una base de datos persistente, después de hacer una solicitud POST puedes detener tu aplicación y verificar que los datos agregados seguirán registrados. 153 | 154 | Una vez finalizado las pruebas deten tu aplicación presionando las teclas `ctrl + c`. 155 | 156 | ## Configurar y habilitar el servicio de tu aplicación en la instancia EC2. 157 | 158 | Los siguientes pasos te permiten configurar y habilitar un servicio en un sistema Amazon Linux, lo que asegura que el servicio se inicie automáticamente al arrancar el sistema y que se ejecute según la configuración especificada en el archivo de servicio. 159 | 160 | ### Paso 1: Crear el archivo de servicio. 161 | 162 | Primero, necesitas crear un archivo de servicio en el directorio /etc/systemd/system/ con la extensión .service. 163 | 164 | ```bash 165 | sudo touch /etc/systemd/system/springboot-app.service 166 | ``` 167 | 168 | ### Paso 2: Edita el archivo de servicios. 169 | 170 | El siguiente comando te ayudará a iniciar la configuración del archivo .service. Recuerda escribir correctamente el nombre del archivo creado anteriormente. 171 | 172 | ```bash 173 | sudo tee -a /etc/systemd/system/springboot-app.service </dev/null)) 12 | 13 | determine_build_tool_dir() { 14 | local dir=$1 15 | 16 | [[ -f "$dir/pom.xml" ]] && echo "maven:$dir" && return 17 | [[ -f "$dir/build.gradle" || -f "$dir/build.gradle.kts" ]] && echo "gradle:$dir" && return 18 | 19 | echo "none" 20 | } 21 | 22 | build_jar() { 23 | local tool_dir=($1) 24 | local tool=${tool_dir[0]} 25 | local dir=${tool_dir[1]} 26 | 27 | case $tool in 28 | maven) 29 | mvn -f "$dir/pom.xml" clean package -DskipTests 30 | ;; 31 | gradle) 32 | sudo chmod +x "$dir/gradlew" 33 | "$dir/gradlew" -p "$dir" build -x test 34 | ;; 35 | *) 36 | echo "Unsupported build tool: $tool" 37 | return 1 38 | ;; 39 | esac 40 | 41 | local status=$? 42 | echo "$tool build exited with status $status" 43 | [[ $status -ne 0 ]] && return 1 44 | } 45 | 46 | cp_jar() { 47 | local tool_dir=($1) 48 | local tool=${tool_dir[0]} 49 | local dir=${tool_dir[1]} 50 | local jar_path="" 51 | 52 | case $tool in 53 | maven) 54 | jar_path=$(find "$dir/target" -name "*.jar" ! -name "*-plain.jar" ! -name "*-javadoc.jar" ! -name "*-sources.jar" -print -quit) 55 | ;; 56 | gradle) 57 | jar_path=$(find "$dir/build/libs" -name "*.jar" ! -name "*-plain.jar" -print -quit) 58 | ;; 59 | esac 60 | 61 | [[ -z "$jar_path" ]] && echo "No .jar file was found" && exit 1 62 | cp "$jar_path" /home/ec2-user/app/app.jar && echo "Jar copied succesfully into ~/app/" 63 | } 64 | 65 | [[ -z "${APP_DIRS[0]}" ]] && 66 | echo "App directory not found. Please enter the path to your application's directory:" && 67 | read APP_DIR && APP_DIRS=($APP_DIR) 68 | 69 | for dir in "${APP_DIRS}"; do 70 | tool_dir=($(determine_build_tool_dir "$dir")) 71 | [[ "${tool_dir}" == "none" ]] && 72 | echo "No supported build tool was found in $dir" && continue 73 | 74 | build_jar "${tool_dir[*]}" && echo "Build succesfull for ${tool_dir[*]}" || 75 | { 76 | echo "Build failed for ${tool_dir[*]}" 77 | exit 1 78 | } 79 | cp_jar "${tool_dir[*]}" 80 | done 81 | -------------------------------------------------------------------------------- /init.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # Basic aws spring setup 4 | 5 | echo "Installing necessary packages..." 6 | TABS="------------------------------------" 7 | 8 | REQUIRED_PACKAGES="mariadb105-server java-17 nginx maven" 9 | ## Pckgs 10 | sudo yum update 11 | sudo yum install $REQUIRED_PACKAGES 12 | 13 | echo "Enabling mariadb server" 14 | 15 | sudo systemctl start mariadb && 16 | sudo systemctl enable mariadb 17 | 18 | echo "$TABS" 19 | echo "Enabling mysql secure installation..." 20 | echo "$TABS" 21 | echo "Change necessary information here" 22 | 23 | sudo mysql_secure_installation 24 | 25 | echo "$TABS" 26 | echo "Creating necessary directories..." 27 | 28 | sudo mkdir /etc/nginx/sites-available /etc/nginx/sites-enabled /home/ec2-user/app/ 29 | 30 | echo "$TABS" 31 | echo "You should now clone your Rest API repository and build the .jar file" 32 | echo "You can also clone it and run the jar-build.sh script" 33 | -------------------------------------------------------------------------------- /nginx-conf.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | NGINX_CONF="/etc/nginx/nginx.conf" 4 | PATTERN="include /etc/nginx/conf.d/*.conf;" 5 | INSERT_LINE="include /etc/nginx/sites-enabled/*;" 6 | 7 | sudo sed -i "/^include \/etc\/nginx\/conf.d\/\*.conf;$/a $INSERT_LINE" "$NGINX_CONF" 8 | 9 | if [[ -f "/home/ec2-user/aws-nginx-config/app" ]]; then 10 | sudo cp /home/ec2-user/aws-nginx-config/app /etc/nginx/sites-available/app && 11 | sudo ln -s /etc/nginx/sites-available/app /etc/nginx/sites-enabled/ && 12 | sudo cp /home/ec2-user/aws-nginx-config/app.service /etc/systemd/system/ && 13 | sudo systemctl start nginx && 14 | sudo systemctl enable app.service && 15 | sudo systemctl enable app && 16 | sudo systemctl start app && 17 | sudo systemctl reload nginx 18 | else 19 | echo "Required file /home/ec2-user/aws-nginx-config/app does not exist." 20 | fi 21 | -------------------------------------------------------------------------------- /to-do.md: -------------------------------------------------------------------------------- 1 | # AWS Spring Deploy 2 | 3 | ## To-do 4 | 5 | ### Automate this 6 | 7 | [X] update 8 | [X] install packages 9 | [X] Config mariadb105-server 10 | [X] enable && status mariadb105-server 11 | [X] mysql secure installation 12 | [X] /dir creations 13 | [X] nginx directories 14 | [X] app directory 15 | [X] finding out api directory 16 | [X] gradlew build 17 | [X] Fix switch between maven and gradlew 18 | [X] Setup for maven build 19 | [X] Fix auto jar build directory 20 | [X] Fix ~/app/ creation 21 | [X] Copy jar into app/app.jar 22 | [X] Fix this prev 23 | [X] Add nginx.conf code line `include /etc/nginx/sites-enabled/*;` 24 | [X] Setup for app && app.services 25 | [X] Copy files 26 | [X] link 27 | [ ] 28 | [ ] setup mysql user and db 29 | [X] setup nginx env variables data 30 | [X] setup systemctl 31 | [X] app.service 32 | [X] journalctl -u app.service -xe <-- This just logs" 33 | [ ] Fancy progress bar 34 | --------------------------------------------------------------------------------