Recientemente, me encargué de la instalación de un servidor de Python en un ambiente de producción en un servidor ya utilizado por PHP y Apache. Antes de realizar la actualización global de paquetes, fue necesario llevar a cabo un análisis del sistema subyacente. Afortunadamente, Python cuenta con ambientes virtuales que facilitan la tarea y evitan conflictos con otros paquetes instalados en el sistema. Además, es esencial considerar tanto el ambiente de producción como el de desarrollo. Después de varios intentos utilizando Flask, decidí probar con FastAPI debido a su mejor documentación y facilidad de uso, lo cual simplificaría la creación de la arquitectura del sistema.
La forma de hacerlo puede ser crear un ambiente de pruebas y luego pasarlo a producción aunque se debe tener en cuenta que si no es posible realizar actualizaciones de forma libre como en mi caso, lo mejor seria revisar los paquetes disponibles en los repositorios con la finalidad de tener una copia fiel del ambiente con sus versiones tanto en producción como en pruebas.
Windows y Linux
Los ambientes de pruebas en Windows y Linux son un tanto diferentes, dentro del ambiente virtual de Python no deberíamos de preocuparnos si manejamos la misma versión de dependencias, pero al exterior de este si es muy diferente, debo decir que Linux en su gran mayoría es mas fácil de manejar, en cuanto a Windows se requiere ejecutar ambientes que simulen la consola de Linux.
Windows y la consola de Linux
Para crear ambientes de pruebas en Windows puedo darte dos opciones, la primera es descargar una consola que nos de una interfaz similar a la de Linux, en estos casos tenemos cmder o la consola de git, en esta situación debes considerar que los comandos son similares a Linux pero el sistema en el que trabajas sigue siendo Windows, por lo que todos estos comandos debes ejecutarlos en la versión de Windows.
Sistemas WSL, es una característica de Windows que permite ejecutar un sistema operativo Linux dentro de Windows. Con WSL, se pueden ejecutar comandos y aplicaciones de Linux en una ventana de la consola de Windows sin la necesidad de una máquina virtual o un sistema operativo dual. Sin embargo, considera esto como fuera del ambiente de Windows por lo que las conexiones y el modo de trabajo serán muy similares al trabajo remoto.
Paso 1:Copia de seguridad del sistema
Antes de comenzar, es esencial crear una copia de seguridad de todos los archivos y configuraciones existentes en el servidor. De esta manera, en caso de que algo salga mal, podremos volver a la configuración anterior de manera sencilla.
Paso 2: Actualizar paquetes
Una vez que hayamos realizado la copia de seguridad, debemos actualizar todos los paquetes del sistema. Esto se puede hacer utilizando apt-update o yum update, dependiendo del sistema operativo que estemos utilizando.
Paso 3: Instalar Python
Antes de instalar Python, es importante verificar si ya existe alguna versión instalada en el sistema. En Linux, esto se puede hacer ejecutando el comando
Python –versión
<ins>Windows</ins>py --version
Si la versión instalada no es la deseada, se pueden seguir varios caminos: borrar la versión existente e instalar una nueva (no recomendado si ya el servidor no esta dedicado a python), instalar otra versión con un usuario diferente o instalar en paralelo con la ya existente
<ins>Para instalar Python solo debes ejecutar el comando</ins>yum install python3.
apt-get install python3.
En Windows solo descarga el ejecutable desde el sitio web
*Se escribe Python3 por que en el momento de escribir este manual la versión mas actual estaba en 3.11
Paso4: Ambiente virtual
Recuerda que parte de los grandes beneficios de trabajar con Python son sus ambientes virtuales lo que permite encapsular todas sus dependencias y librerías sin afectar el ambiente globalPython3 -m venv env
*Windowspy -m venv env
env es el nombre por convencion
<ins>Activamos nuestro ambiente</ins>Source env/bin/actívate
<ins>Para Windows es</ins>env\Scripts\activate
<ins>Para desactivar seria</ins>deactivate
Paso5: dependencias de Python
En este paso debemos verificar que tenemos la versión mas actual de PIP preferentemente, aunque dependiendo de la situación la que se requiera, recuerda que pip es nuestro administrador de paquetes, por lo que este paso es fundamental para no tener problemas de compatibilidad.yum -y install python-pip
apt-get install python-pip
*WindowsPython -m pip install –upgrade pip
<ins>Instalamos FastApi</ins>pip install fastapi
<ins>Instalamos uvicorn (uvicorn es nuestro servidor del tipo ASGI)</ins>pip install “uvicorn[standard]”
Paso6: Preparamos el main.py
Este archivo lo utilizamos como enrutador para servir las solicitudes http
from fastapi import FastAPI
app = FastAPI()
@app.get('/')
defget_home():
return"HOLA MUNDO"@app.get('/asincrono')
defget_test_asinrono():
return {'HOLA':'MUNDO'}
paso 7 Arrancando el servidor
Cuando terminamos de instalar las dependencias y crear nuestro main.py solo nos queda arrancar nuestro servidor de uvicorn.uvicorn main:app –reload
Ahora prueba las direcciones en tu navegador
http://localhost:8000/asincrono
http://localhost:8000
Sin embargo este servidor solo se utilizara para pruebas, si estamos en un ambiente de producción lo lógico es que queramos dirigirlo a nuestro nombre de dominio con la dirección https, para esto tenemos que usar la siguiente instrucciónuvicorn main:app --host [Mihost.com](http://Mihost.com) --ssl-certfile /etc/ssl/ssl.crt/certificado.crt --ssl-keyfile /etc/ssl/ssl.key/keyCorrespondienteAlCertificado.key
Recuerda tener configurado tus DNS, verificar los puertos disponibles y abiertos, y las direcciones donde estas guardando los certificados, la bandera reload es opcional pero considera también el como realizaras tus actualizaciones ya que tendrás que parar el servidor para realizar estos updates
Paso8 Creando nuestra lista de requerimientos
Finalmente, debemos crear nuestra lista de requerimientos para transportarlo a cualquier ambiente donde sea necesario, por ejemplo para desarrollar en local. Para ello, utilizamos los siguientes comandos:
<ins>Crear los requerimientos</ins>pip freeze > requerimientos.txt
Al tenerlos, solo debes transportarlos y colocarlos en la carpeta donde desees configurar tu servidor. Utilizar un servicio como GitHub es una buena idea, ya que permite transportar todo el proyecto completo y así solo tendrás que repetir los pasos hasta el número 3 para asegurarte de tener la versión correcta de Python.
pip install -r requerimientos.txt
Lista de recursos y lecturas
https://fastapi.tiangolo.com/
https://fastapi.tiangolo.com/tutorial/
si estas interesado en flask y como correrlo desde un servidor como apache esta lectura te puede servir
https://flask.palletsprojects.com/en/2.2.x/deploying/
si tienes cuenta de Platzi te recomiendo el curso de “Curso de Python: PIP y Entornos Virtuales” explican varios de los puntos mencionados