153 lines
5.7 KiB
HTML
153 lines
5.7 KiB
HTML
<!-- 34 -->
|
|
<!-- apache ambiente virtual con venv -->
|
|
<p>Para subir un proyecto a Apache HTTP Server que está hecho con Flask y VENV, debemos movernos mediante la terminal a
|
|
la ruta donde se almacenan los proyectos:</p>
|
|
<pre><i class="bi bi-copy"> Copiar código</i>
|
|
<code class="code_lightMode">cd /var/www/
|
|
</code></pre>
|
|
|
|
<p>Clonamos el proyecto a desplegar</p>
|
|
<pre><i class="bi bi-copy"> Copiar código</i>
|
|
<code contenteditable="true" class="code_lightMode"># sudo git clone user_serv@ip.del.serv.git:[puerto_si_no_es_el_22]/ruta/al/repositorio
|
|
sudo git clone usr1@192.160.11.29:/home/git_server/repos/ejemplo.com
|
|
</code></pre>
|
|
|
|
<p>
|
|
Una vez clonado el repositorio, nos movemos a la carpeta ejemplo.com, creamos un entorno virtual (VENV) e instalamos
|
|
todas las dependencias listadas en requirements.txt (esto es una buena práctica). Todo lo anterior debe realizarse con
|
|
permisos de superusuario:
|
|
</p>
|
|
<pre><i class="bi bi-copy"> Copiar código</i>
|
|
<code contenteditable="true" class="code_lightMode"># Entramos en modo superusuario
|
|
sudo su
|
|
|
|
# Nos cambiamos al directorio del proyecto a desplegar
|
|
cd /var/www/ejemplo.com
|
|
|
|
# Iniciamos una instancia de VENV (entorno virtual)
|
|
python3 -m venv .venv
|
|
|
|
# Activamos el nuevo entorno virtual
|
|
source .venv/bin/activate
|
|
|
|
# Instalamos todas las dependencias necesarias
|
|
pip install -r requirements.txt
|
|
|
|
# Una vez instaladas las dependencias, podemos desactivar el entorno virtual con:
|
|
deactivate
|
|
|
|
# Salimos del modo superusuario
|
|
exit
|
|
</code></pre>
|
|
<p>
|
|
Dentro del proyecto, asegúrate de que exista un archivo con la extensión .wsgi, cuyo contenido debe ser similar al
|
|
siguiente, considera: <br>
|
|
<ul>
|
|
<li>Nombre del proyecto.</li>
|
|
<li><a class="link" data-bs-toggle="modal" data-bs-target="#python_version">Versión de Python.</a></li>
|
|
</ul>
|
|
|
|
</p>
|
|
<pre><i class="bi bi-copy"> Copiar código</i>
|
|
<code contenteditable="true" class="code_lightMode"># 1. sys: Se usa para manipular el entorno del sistema y agregar rutas a sys.path.
|
|
import sys
|
|
|
|
# 2. logging: Se usa para registrar eventos y errores, facilitando la depuración.
|
|
import logging
|
|
|
|
# 3. Ruta de Linux al proyecto Flask
|
|
sys.path.insert(0, '/var/www/ejemplo.com')
|
|
|
|
# 4. Ruta de Linux al entorno virtual (verifica la versión de Python en el servidor)
|
|
sys.path.insert(0, '/var/www/ejemplo.com/.venv/lib/python3.11/site-packages')
|
|
|
|
# 5. Configuración de logs
|
|
logging.basicConfig(stream=sys.stderr, level=logging.DEBUG)
|
|
|
|
# 6. Importamos la aplicación principal de Flask
|
|
from main import app as application
|
|
</code></pre>
|
|
|
|
<p>
|
|
Nos movemos al directorio de configuración de Apache:
|
|
</p>
|
|
<pre><i class="bi bi-copy"> Copiar código</i>
|
|
<code class="code_lightMode">cd /etc/apache2/sites-available/
|
|
</code></pre>
|
|
|
|
<p>
|
|
Creamos el archivo de configuración con extensión .conf
|
|
</p>
|
|
<pre><i class="bi bi-copy"> Copiar código</i>
|
|
<code contenteditable="true" class="code_lightMode"># ejemplo
|
|
sudo nano ejemplo.com.conf
|
|
</code></pre>
|
|
|
|
<p>
|
|
Dentro del archivo debemos incluir una configuración similar a la siguiente. Consideraciones:
|
|
<ul>
|
|
<li>Ruta de tu proyecto</li>
|
|
<li>Nombre del proceso: Debe ser único y no repetirse en futuros proyectos, o el servicio de Apache se detendrá
|
|
(app-ejemplo).
|
|
</li>
|
|
<li><a class="link" data-bs-toggle="modal" data-bs-target="#linux_num_hilos">Hilos del procesador [threads=6].</a>
|
|
</li>
|
|
</ul>
|
|
</p>
|
|
<pre><i class="bi bi-copy"> Copiar código</i>
|
|
<code contenteditable="true" class="code_lightMode"># Se recomienda NO usar el puerto 80 por seguridad.
|
|
# Si decides usar otro puerto, asegúrate de abrirlo en el firewall.
|
|
Listen 8084
|
|
|
|
<VirtualHost *:8084>
|
|
ServerAdmin tu-email@email.com
|
|
ServerName ejemplo.com
|
|
ServerAlias ejemplo.com
|
|
DocumentRoot /var/www/ejemplo.com
|
|
|
|
WSGIDaemonProcess app-ejemplo user=www-data group=www-data threads=6 python-home=/var/www/ejemplo.com/.venv
|
|
WSGIScriptAlias / /var/www/ejemplo.com/ejemplo.com.wsgi
|
|
|
|
# dentro de tu proyecto debe existir la carpeta log para que dentro de esa se almacenen los logs
|
|
ErrorLog /var/www/ejemplo.com/log/error.log
|
|
CustomLog /var/www/ejemplo.com/log/access.log combined
|
|
|
|
<Directory /var/www/ejemplo.com>
|
|
WSGIProcessGroup app-ejemplo
|
|
WSGIApplicationGroup %{GLOBAL}
|
|
#Order deny,allow
|
|
Require all granted
|
|
</Directory>
|
|
|
|
</VirtualHost>
|
|
</code></pre>
|
|
<p>Para verificar la sintaxis del archivo de configuración, ejecuta:</p>
|
|
<pre><i class="bi bi-copy"> Copiar código</i>
|
|
<code>sudo apachectl configtest
|
|
# si todo esta bien deberas ver el mensaje: Syntax OK
|
|
</code></pre>
|
|
|
|
<p>Para aplicar los cambios, recarga el servicio de Apache:</p>
|
|
<pre><i class="bi bi-copy"> Copiar código</i>
|
|
<code>sudo systemctl reload apache2</code></pre>
|
|
|
|
<p>Finalmente, abre un navegador y coloca la IP del servidor de Apache. Si configuraste un puerto diferente al 80, debes
|
|
indicarlo:</p>
|
|
<pre><i class="bi bi-copy"> Copiar código</i>
|
|
<code contenteditable="true">192.160.11.35:8084</code></pre>
|
|
|
|
<p>Si al recargar Apache aparecen errores o el sitio no carga en el navegador, revisa los logs de Apache o los del
|
|
proyecto:</p>
|
|
<pre><i class="bi bi-copy"> Copiar código</i>
|
|
<code># Logs de Apache
|
|
sudo journalctl -u apache2 --no-pager --lines=50
|
|
|
|
# Logs del proyecto Flask
|
|
cat /var/www/ejemplo.com/log/error.log</code></pre>
|
|
|
|
<div class="alert alert-info" role="alert">
|
|
<span><i class="bi bi-pen-fill"></i> Recomendación:</span>
|
|
<p>El en repositorio de Git guarda los archivos de configuración <b>.wsgi</b> y <b>.conf</b> para que no los estes
|
|
creando cada vez que
|
|
despliegas cambios dentro del proyecto.</p>
|
|
</div> |