
A causa del cierre de los planes gratuitos de heroku muchos de los proyectos tuvieron que desaparecer o que ser migrados a otras plataformas; el contar con un recurso gratuito para poder publicar nuestros proyectos nos ha ayudado a muchos a experimentar y a crecer como desarrolladores.

Y ahora que no tenemos a esta plataforma, ¿qué podemos hacer para poder tener nuestros proyectos?,
En este post experimentaremos con Railway, que se ha vuelto popular en los últimos años, tendiendo una propuesta bastante interesante para nosotros, aun así, hay un gran número de alternativas a las que podemos acceder, te dejaremos otro post donde hemos hablado de otras opciones para subir nuestras aplicaciones

En Hola Mundo tenemos nuestra Academia, en donde disponemos de diversos cursos para prepararnos para ser desarrolladores, y en algunos de estos se hizo uso de Heroku como plataforma para poder subir nuestras apps. Pero por la razón anteriormente comentada necesitamos buscar mas opciones, y lo que haremos el día de hoy es subir uno de nuestros proyectos desarrollados en Python con el framework de flask a railway.
Consideraciones a tener en cuenta
⚠️ Tendrás que abrirte una cuenta en railway y conectar una cuenta de Github, he notado en varios compañeros que han intentado hacer este proceso que no les permite verificar su cuenta de gitHub, esto por la antigüedad de sus cuentas, posiblemente si comienzas a utilizar estas herramientas puede marcarte dicho inconveniente, hasta ahora la plataforma indica que solo está esa forma o agregando un medio de pago a railway. Como yo he tenido cuenta en ambas plataformas por mucho tiempo no he tenido nunca problemas, pero en tu caso podría pasarte.
Además, Railway mensualmente nos proporcionara un saldo gratuito de 5 dólares, con el que tendremos disponibles 500 horas de usode una máquina sencilla, estas cuentan desde que el proyecto queda activo y se descontaran por cada hora activa que tengas un proyecto funcionando.

Así que ten esto en mente cuando subas un proyecto, ya que puede quedarse sin funcionamiento si acabas con tu número de horas mensuales.
Dicho esto, comenzamos:
Preparando nuestro Proyecto
Nuestro proyecto del curso es una MailerApp y cuando tengas el resultado final que quieras subir a producción tendremos que seguir los siguientes pasos con nuestro proyecto:
1) Agregar variable de entorno para el puerto en el proyecto
En el caso de que uses una base de datos MySQL, hay que agregar una variable de entorno llamada PORT, ya que esta variara en cada caso segun lo designe railway.
En app.config.from_mapping() en el archivo __init__.py y en g.db = mysql.connector.connect() en el archivo db.py agregamos la variable de entorno. Se deben de ver asi:
Para el archivo __init__.py
app.config.from_mapping(
...
DATABASE_PORT=os.environ.get('FLASK_DATABASE_PORT')
)
Para el archivo db.py
g.db = mysql.connector.connect(
...
port=current_app.config["DATABASE_PORT"],
)
2) Instalar guincorn
Este es un servidor que nos permitirá servir nuestra aplicación, en este caso usaremos un comando para que nuestra aplicación funcione en producción. En mi caso que uso comandos Linux me toca ejecutar el comando
pip3 install gunicorn
3) Obtener el archivo requirements.txt
Este archivo es necesario para que, al momento de subir nuestro proyecto a producción, cuente con los módulos necesarios para su funcionamiento. Es la lista de módulos que se instalaran en el servidor cuando hagamos el despliegue.
Primero tendremos que tener nuestro ambiente virtual activado y usaremos el comando:
pip3 freeze > requirements.txt
Asegúrate que el archivo requirements.txt tenga los módulos que has instalado, puedes ver que algunos que no instalaste se encuentran en este archivo, ya que los módulos a veces necesitan de otros para funcionar, pero asegúrate que tengas los necesarios para correr tu app.
4) Archivo Procfile
Vamos a necesitar un archivo adicional, este es : Profcile, este archivo va a contener los comandos necesarios que se necesitan ejecutar en nuestro proyecto de flask, para generarlo es muy fácil, debemos usa el siguiente comando:
echo "web: flask init-db && gunicorn app:'create_app()'" > Procfile
Este comando generará el archivo correspondiente y tendrá el siguiente contenido:
web: flask init-db && gunicorn app:'create_app()'
Ahora que hicimos todo este proceso, deberíamos tener la siguiente estructura de archivos:

Si todo esta listo, sigamos.
Creando nuestro repositorio y subiéndolo a la nube con git y github.
Ahora con la ayuda de la herramienta git, vamos a crear nuestro repositorio, aqui te dejaremos los comandos necesarios para subir tu proyecto, pero si no sabes como funciona git pero te interesa aprenderlo, te recomendamos nuestro curso git: sin fronteras, para dominar esta herramienta.
Pero antes de siquiera ejecutar comandos, tenemos que hacer algo sumamente importante, crear nuestro archivo .gitignore, este archivo contendrá la lista de todos los archivos que no queremos subir al repositorio, tales como las variables de entorno o la cache de Python que contiene la información de nuestro proyecto cuando lo usamos en el servidor de desarrollo. Tu archivo deberá de verse de la siguiente manera:
venv/
.env
*.pyc
__pycache__/
instance
Creando nuestro repositorio local
Ahora que esta creado el archivo .gitignore, podemos iniciar nuestro repositorio local con git, utilizaremos los siguientes comandos:
git init
Seguido de:
git add .
Y al final :
git commit -m “Listo para hacer Despliegue”
Con estos comandos tendremos el repositorio listo de manera local.
Subiendo el repositorio a github
Para subirlo a la nube utilizaremos github, el cual nos permite albergar nuestros proyectos y subirlo con el controlador de versiones git. Si no tienes una cuenta es el momento para crearla, y una vez que la tengas tendrás que crear un repositorio, con la sesión iniciado haremos click en el boton verde que dice «New» para crear un nuevo repositorio:

Le colocaremos nombre a nuestro proyecto.

Seguido de hacer click en «Create repository»

Ahora nos dara una nueva ventana como la siguiente,

En la que copiaremos la dirección que nos da esta página, una vez que tengas el repositorio y esta dirección, habrá que agregar esté repositorio remoto a nuestro proyecto.
Lo haremos con el siguiente comando:
git remote add origin <link copiado de tu repositorio>
Ahora ya tienes vinculado tu repositorio de github en la nube con tu repositorio local. Lo siguiente es subir tus cambios a la nube, hacemos:
git push origin master
ó (Esto depende de cómo se llame tu rama principal)
git push origin main
Ahora ya tienes tu proyecto en la nube, con esto hemos terminado esta parte.
Crear la base de datos
Este proyecto hace uso de una base de datos MySQL, afortunadamente railway cuenta con múltiples ventajas, y una de ellas es la de levantar una base de datos MySQL con mucha facilidad, es solo ir a un nuevo proyecto y seleccionando una nueva base de datos MySQL,

Aquí se esta creando la base de datos:

Y aquí ha quedado lista.

Si damos click podremos ver información sobre el proyecto:

Con esto obtendremos una base de datos sin tablas creadas y tendremos a nuestra disposición todas las variables necesarias que después requerirá nuestro proyecto de Flask.

Hacer despliegue del proyecto
Siguiendo casi el mismo proceso, pero ahora en lugar de seleccionar una base de datos, seleccionaremos Deploy from GitHub repo. Claro que tendremos que conectar nuestra cuenta de github, cuando la tengamos conectada buscaremos nuestro repositorio.

Una vez conectada la cuenta podras buscar entre tus repostorios, buscaremos al que subimos todos los cambios.

Una vez que lo seleccionemos tendremos dos opciones deploy Now o Add variables, elegiremos la segunda opción ya que nuestra aplicación en este caso requiere de variables de entorno para poder funcionar, si no las colocamos correctamente nuestra aplicación tendrá un error.

Al final debemos tener todas estas variables (para el caso de este proyecto, tu deberás colocar las necesarias para que tu aplicación funcione) Solamente FLASK_APP es totalmente necesaria y tendrá que tener el nombre de tu app. Las otras varaibles dependen de tu proyecto.
Recuerda que las variables de la base de datos las obtendremos de nuestro base de datos creada en railway

Con todo esto listo tendremos nuestra aplicación funcionando. Primero comenzara a hacer el deploy, hay que esperar un poco.

Cuando veamos active posiblemente ya este funcionando, hay que esperar unos minutos a que acabe de configurar, con esto podremos acceder a la URL que vemos arriba para poder visualizar el proyecto.

Asi se va a ver el proyecto en producción y quedaria todo listo. 😃 👍

Aprende a construir este proyecto
Como mencionamos al principio este es un proyecto del curso Python: HTML, CSS, Flask y MySQL, sí quieres aprender a construir este proyecto da click aquí, y para ver a ver todos los cursos de la Academia de Hola Mundo, con los cuales podrás formarte como un excelente desarrollador has click aqui donde podrás ver todos los cursos.
Por último, no olvides golpear al botón de me gusta de este post, suscribirte a este blog y seguirnos en todas las redes como youtube, twitter e Instagram.
¡Hasta la próxima!, y chao mundo
Comments (2)
7 alternativas a heroku para tus desplegar tus proyectos – Hola Mundosays:
enero 31, 2023 at 10:56 am[…] Si quieres ver un ejemplo de como desplegar una app, en este caso del framework de python «flask», hemos escrito un tutorial sobre este proceso, has click aquí para ver el post. […]
Alexsays:
febrero 3, 2023 at 1:36 pmSaben como se puede solucionar el error al Verificar la Cuenta de Github? (sin añadir método de pago)