Recientemente implementé mi propia aplicación Django en producción. El sitio web se llama videiro.com y fue desarrollado en django HTML/CSS/JS Tailwind.
Estoy usando un servidor Debian 12 que expondrá mi aplicación a través de túneles de Cloudflare. Todos los archivos estáticos se entregan a través de nginx y gunicorn ejecuta el proyecto Django.
En esta guía te mostraré cómo configuro esto.
Lo primero que tendrás que hacer es abrir el settings.py y cambiar lo siguiente
Debug = False ALLOWED_HOSTS = ['yourdomain.tld'] CSRF_COOKIE_SECURE = True CSRF_TRUSTED_ORIGINS = [ 'yourdomain.tld', ]
También debes cambiar SECRET_KEY a una cadena larga y aleatoria, que nunca debes compartir con nadie.
Después de eso, crea un nuevo archivo llamado .gitignore y pega lo siguiente:
db.sqlite3 *.pyc
Esto asegurará que la base de datos no se cargue en nuestro servidor y que tampoco se carguen archivos pyc.
Ahora puedes subir tu proyecto a un nuevo repositorio de github (o repositorio de gitea). Si no desea que todos tengan acceso a su código fuente, asegúrese de configurar el repositorio como privado.
Si quieres asegurarte de que tu código fuente permanezca privado, te recomiendo que configures una instancia de gitea autohospedada, lee Selfhost tu propia instancia de gitea: alternativa liviana y autohospedada a github, para aprender cómo hacerlo.
git init git branch -M main git add . git commit -m "initial commit" git remote add origin https://... git push -u origin main
Ahora que lo hemos hecho, debes iniciar sesión en tu servidor
Antes de configurar cualquier cosa, asegúrese de no permitir ningún inicio de sesión ssh con contraseña. Siga Cómo proteger ssh con autenticación basada en claves para proteger su servidor de ese tipo de ataques.
Inicia sesión en tu servidor
ssh [email protected]
Asegúrate de que tus paquetes tengan datos actualizados
sudo apt update && sudo apt upgrade
Ahora instale python, pip, git y nginx
sudo apt install python3 python3-pip git nginx
Ahora clona tu proyecto en tu directorio de inicio.
git clone https://... cd my-project
Una vez que estés dentro, instala lo siguiente:
pip install django django-crispy-forms whitenoise
Ahora intenta ejecutar el proyecto:
python3 manage.py runserver
si recibe un error que indica que falta un paquete, instálelo y vuelva a ejecutarlo.
Ahora configuraremos gunicorn
Primero instálalo
pip install gunicorn
Ahora crea un nuevo archivo llamado gunicorn.service con tu editor de texto favorito:
sudo vim /etc/systemd/system/gunicorn.service
Y pega lo siguiente:
[Unit] Description=gunicorn daemon After=network.target [Service] User=YOURUSER Group=www-data WorkingDirectory=/home/YOURUSER/PROJECT ExecStart=/path/to/gunicorn --access-logfile - --workers 3 --bind 127.0.0.1:8000 PROJECTNAME.wsgi:application [Install] WantedBy=multi-user.target
Cambia TUUSUARIO por tu usuario.
Para encontrar el camino a gunicorn, corre:
which gunicorn
Y el nombre de tu proyecto es el nombre de la carpeta dentro de tu proyecto que contiene el archivo settings.py.
Ahora ejecute los siguientes comandos para iniciar y habilitar gunicorn (iniciar al arrancar)
sudo systemctl daemon-reload sudo systemctl start gunicorn.service sudo systemctl enable gunicorn.service
Ahora, si te diriges a 127.0.0.1:8000, deberías ver tu proyecto ejecutándose.
Pero aún no hemos terminado
Ahora necesitamos servir nuestro contenido estático a través de nginx.
Primero cree un nuevo archivo de configuración nginx con su editor de texto favorito:
sudo vim /etc/nginx/sites-available/PROJECT
Cambia PROYECTO por lo que quieras
Ahora pega el siguiente contenido:
server { listen 80; server_name YOURDOMAIN; location /static/ { alias /var/www/staticfiles/; } location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
Simplemente cambie SUDOMINIO por el dominio en el que se alojará.
Crea un enlace simbólico para habilitar tu sitio web:
sudo ln -s /etc/nginx/sites-available/PROJECT /etc/nginx/sites-enabled/
Iniciar y habilitar nginx:
sudo systemctl start nginx sudo systemctl enable nginx
Lo primero que tendrás que hacer es ingresar a tu proyecto (django)
cd project
Ahora ejecuta el siguiente comando:
python3 manage.py collectstatic
Esto creará una nueva carpeta llamada archivos estáticos
Ahora para configurar los archivos estáticos tenemos dos opciones:
Haré la segunda opción:
Primero cree un nuevo archivo llamado staticfiles en /var/www
sudo mkdir -p /var/www/staticfiles
Ahora copia todos los archivos estáticos de tu proyecto allí:
sudo cp staticfiles/* /var/www/staticfiles
Ahora cd en /var/www
cd /var/www
Cambiar la propiedad de todos los archivos
sudo chown www-data:www-data staticfiles sudo chown www-data:www-data staticfiles/*
Reiniciar el servicio nginx:
sudo systemctl restart nginx
Ahora si te diriges a:
127.0.0.1
¡Deberías ver tu sitio web ejecutándose con todos los archivos estáticos disponibles!
Ahora para que su sitio web sea accesible públicamente.
Para hacer esto necesitarás una cuenta de Cloudflare y un dominio apuntado a Cloudflare.
Primero dirígete al Panel de confianza cero
En Redes, haga clic en Túneles y luego en Crear un túnel
Una vez creado, debe instalar y ejecutar un conector, siga las instrucciones en la página para su configuración específica.
Después de ejecutar el conector, debes hacer clic en la pestaña Nombre de host público y Agregar un nombre de host público.
Ahora deberías ver algo como esto:
Completa la información como la tengo. El tipo de servicio debe ser HTTP y la URL debe ser 127.0.0.1:80 o localhost:80
Ahora, si te diriges al dominio que especificaste, deberías ver tu aplicación en funcionamiento.
¡Felicidades!
Si disfrutaste esta publicación y quieres apoyar mi trabajo (en su mayoría no remunerado), puedes donar aquí.
Únete aquí
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3