/todos-server-actions

Post-It App, post and delete resourses in DB. Next14, Server Actions, AWS, GitHub Actions, Postgresql

Primary LanguageTypeScript

Repositorio de la aplicación de notas

Este repositorio contiene el código fuente de una aplicación de notas que utiliza server actions de Next.js 14. La aplicación permite a los usuarios crear y eliminar notas, y se conecta a una base de datos para almacenar la información. De despliega en un servidor Ubuntu en Lightsail de AWS utilizando CI/CD con GitHub Actions.

Requisitos

  • Node.js 14 o superior
  • Base de datos compatible (postgresql)
  • ORM Prisma
  • Servidor remoto Ubuntu para despliegue

Configuración

  1. Clona este repositorio en tu máquina local:

    git clone https://github.com/tu-usuario/todos-server-actions.git
    
  2. Instala las dependencias del proyecto y sincroniza la base de datos:

    cd todos-server-actions
    npm install
    npx prisma migrate dev
    
    
  3. Configura las variables de entorno:

    Crea un archivo .env en la raíz del proyecto y define las siguientes variables:

    NEXT_PUBLIC_DATABASE_URL=
    

Uso

  1. Inicia el servidor de desarrollo:

    npm run dev

    Esto iniciará la aplicación en http://localhost:3000.

  2. Accede a la aplicación en tu navegador web y comienza a crear tus notas.

Despliegue

Este proyecto se puede desplegar en un servidor Ubuntu en Lightsail de AWS utilizando CI/CD. Asegúrate de tener configurado tu entorno de CI/CD para que se ejecute automáticamente cuando se realicen cambios en el repositorio.

Configuración de CI/CD

  1. Crea un archivo .env en la raíz del proyecto y define las siguientes variables:

    NEXT_PUBLIC_DATABASE_URL=
    
  2. Crea una nueva instancia de servidor en Lightsail (AWS), EC2 (AWS), o tu proveedor de computación de la nube preferido - también puedes ocupar un hosting compartido o VPS y configura tu entorno de CI/CD para que se ejecute automáticamente cuando se realicen cambios en el repositorio.

  3. Crea una instancia de base de datos en tu proveedor de servicios de base de datos postgresql preferido (por ejemplo, AWS RDS, Google Cloud SQL, etc.).

Configuración de Ubuntu server

  1. Instalar apache2

    sudo apt update
    sudo apt install apache2
  2. Ajustar el firewall

    sudo ufw app list
    sudo ufw allow 'Apache'
    sudo ufw status
  3. Comprobar el estado de apache2

    sudo systemctl status apache2
  4. Redirigir el tráfico desde un subdominio a un puerto específico en tu servidor

Primero, necesitas habilitar los módulos proxy y proxy_http en Apache. Puedes hacerlo ejecutando los siguientes comandos:

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo systemctl restart apache2
  1. Configurar el VirtualHost A continuación, necesitas crear o modificar el archivo de configuración del virtual host para tu subdominio. Por ejemplo, si tu subdominio es app.tudominio.com, el archivo de configuración podría llamarse app.tudominio.com.conf. Este archivo generalmente se encuentra en /etc/apache2/sites-available/. Crea o edita este archivo:
sudo nano /etc/apache2/sites-available/app.tudominio.com.conf

Añade:

<VirtualHost *:80>
    ServerName app.tudominio.com

    ProxyPreserveHost On
    ProxyRequests Off
    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/

    <Proxy *>
        Order allow,deny
        Allow from all
    </Proxy>
    
    ErrorLog ${APACHE_LOG_DIR}/app.tudominio.com_error.log
    CustomLog ${APACHE_LOG_DIR}/app.tudominio.com_access.log combined
</VirtualHost>
  1. Habilitar el sitio
sudo a2ensite app.tudominio.com.conf
sudo systemctl restart apache2

Configuración de dominio/subdominio en tu proveedor de dominios

  1. Configura el dominio/subdominio en tu proveedor de dominios para que apunte a la dirección IP de tu servidor.

Obtener certificado SSL con Let's Encrypt

  1. Instalar certbot
sudo apt install letsencrypt
  1. Obtener el certificado SSL
sudo systemctl status certbot.timer
  1. Servidor independiente para obtener el certificado SSL
sudo certbot certonly --standalone --agree-tos --preferred-challenges http -d domain-name.com

### Configuración de pm2

1. Instalar pm2 de manera global. pm2 es un administrador de procesos de producción para aplicaciones Node.js con un balanceador de carga integrado.

```bash
npm install pm2 -g
  1. Iniciar la aplicación con pm2
pm2 start npm --name "app-name" -- start
  1. Verficar que la aplicación se está ejecutando
pm2 list
  1. Configurar pm2 para que se inicie automáticamente al arrancar el servidor
pm2 startup
  1. Guardar la configuración actual de pm2
pm2 save

GitHub Actions

  1. Crea un archivo .github/workflows/main.yml en la raíz del proyecto y define el siguiente flujo de trabajo:

  2. En settings del repositorio en GitHub, crea un runner y sigue las instrucciones para conectar tu instancia de ubuntu con el runner y configura las variables de entorno.

Contribución

Si deseas contribuir a este proyecto, por favor sigue los siguientes pasos:

  1. Crea un fork de este repositorio. FORK
  2. Crea una rama con el nombre de tu nueva funcionalidad: git checkout -b nueva-funcionalidad.
  3. Realiza tus cambios y realiza un commit: git commit -m "Agrega nueva funcionalidad".
  4. Envía tus cambios al repositorio remoto: git push origin nueva-funcionalidad.
  5. Abre un pull request en este repositorio.

Licencia

Este proyecto está bajo la Licencia MIT. Consulta el archivo LICENSE para más detalles.