Configurar el servidor

34/37

Lectura

Es una buena pr谩ctica al conectarnos por primera vez a nuestro servidor actualizar los paquetes del Sistema Operativo con los siguientes comandos:

sudo apt-get update && sudo apt-get upgrade

Configuraci贸n inicial del servidor

  1. Creamos un nuevo usuario sin directorio home que tenga la capacidad de correr algunos comandos de s煤per usuario:

sudo useradd -g sudo -M <username>

  1. Le asignamos una contrase帽a segura al nuevo usuario:

sudo passwd <username>

  1. Iniciamos sesi贸n con el nuevo usuario:

su <username>

  1. Por 煤ltimo vamos a instalar las dependencias de python, postgress, git y nginix con el siguiente comando:

sudo apt-get install python3-pip python3-dev postgresql postgresql-contrib libpq-dev git nginx

Configurar PostgreSQL

Primero iniciamos sesi贸n con el usuario postgres usando el comando sudo su postgres y despu茅s escribimos psql para entrar al shell interactivo de PostgreSQL donde configuramos lo siguiente:

  1. Creamos una base de datos: CREATE DATABASE platzi;

  2. Creamos un usuario para la base de datos: CREATE USER freddier WITH PASSWORD 鈥榗vander<3鈥;

  3. Le damos permisos al usuario sobre la base de datos: GRANT ALL PRIVILEGES ON DATABASE platzi TO freddier;

Hecho esto, salimos del shell escribiendo \q seguido de exit para salir de la sesi贸n de postgres.

Configurar el proyecto

  1. Clonar el proyecto de Github:

git clone [https://github.com/pablotrinidad/platzigram.git](https://github.com/pablotrinidad/platzigram.git) platzi

  1. Instalar virtualenv:

sudo pip3 install virtualenv

  1. Crear entorno virtual:

virtualenv -p $(which python3) .venv

  1. Activar entorno virtual:

source .venv/bin/activate

  1. Instalar dependencias para Pillow:

sudo apt-get install libjpeg-dev

  1. Ir al folder del proyecto:

cd platzi

  1. Instalar dependencias de python del proyecto:

pip install -r requirements/prod.txt

  1. Agregar algunas variables de entorno al archivo ~/.bashrc para probar localmente que todo est茅 funcionando:

vim ~/.bashrc

Las variables deben lucir algo similar a lo siguiente:

export PLATZI_SECRET_KEY="random_key:aasdafasf"
export PLATZI_DB_NAME="platzi"
export PLATZI_DB_USER="freddier"
export PLATZI_DB_PASSWORD="cvander<3"
export PLATZI_DB_PORT="5432"
export PLATZI_DB_HOST="localhost"
export DJANGO_SETTINGS_MODULE="platzi.settings.prod"
  1. Leemos las variables:

source ~/.bashrc

  1. Editamos la variable **ALLOWED_HOSTS **del archivo de settings de producci贸n:

vim platzi/settings/prod.py

La variable tendr谩 algo como lo siguiente, donde gatos.io ser谩 tu dominio o IP:

ALLOWED_HOSTS = [鈥檊atos.io鈥橾

Hacer un Sanity Check

Hasta este punto el proyecto debe ser capaz de escribir a la base de datos adem谩s de servirse usando el servidor de desarrollo y gunicorn. Prob茅moslo:

  1. Reflejar el modelo de Django en PostgreSQL: ./manage.py migrate
  2. Crear un s煤per usuario: ./manage.py createsuperuser
  3. Correr servidor de desarrollo: ./manage.py runserver 0.0.0.0:8000
  4. Correr gunicorn: gunicorn platzi.wsgi -b 0.0.0.0:8000

Si todo funcion贸 correctamente, los pasos 3 y 4 debieron mostrar tu sitio en la URL o IP en el puerto 8000.

Configurar Nginx

  1. Iniciar sesi贸n como s煤per usuario: sudo su -
  2. Ir al directorio de Nginx: cd /etc/nginx/
  3. Borrar los antiguos archivos de configuraci贸n: rm sites-*/default
  4. Crear un nuevo archivo vim sites-available/app con el siguiente contenido:
upstream django_app {
    server 127.0.0.1:8000;
}

server {

    listen 80;
    server_name demo.gatos.io;

    access_log /var/log/nginx/app.log;
    error_log /var/log/nginx/app.error.log;

    location /static {
        autoindex on;
        alias /home/platzi/platzi/staticfiles/;
    }

    location /media {
        autoindex on;
        alias /home/platzi/platzi/media/;
    }

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;

        proxy_pass http://django_app;
    }

}
  1. Enlazar los archivos: ln -s /etc/nginx/sites-available/app /etc/nginx/sites-enabled/
  2. Reiniciar Nginx: service nginx restart

Configurar Gunicorn

  1. Regresamos a la sesi贸n de Platzi: exit
  2. Creamos directorios para los scripts y los logs: mkdir deploy logs
  3. Creamos un script dentro de deploy vim deploy/gunicorn_start con un contenido similar al siguiente:
#!/bin/bash

NAME="platzi"
VIRTUALENV="/home/platzi/venv/"
DJANGODIR="/home/platzi/platzi/"
USER=platzi
GROUP=sudo
NUM_WORKERS=3
DJANGO_WSGI_MODULE=platzi.wsgi

echo "Starting $NAME as `whoami`"

cd $VIRTUALENV
source bin/activate
cd $DJANGODIR

export PLATZI_SECRET_KEY="&[email protected]&1v)a!%=ext=-7zuqewv+#^qu^63g)a([email protected]"

export PLATZI_DB_NAME="platzi"
export PLATZI_DB_USER="cvander"
export PLATZI_DB_PASSWORD="adminadmin123"
export PLATZI_DB_PORT="5432"
export PLATZI_DB_HOST="localhost"

export DJANGO_SETTINGS_MODULE="platzi.settings.prod"

export PYTHONPATH=$DJANGODIR:$PYTHONPATH

exec gunicorn ${DJANGO_WSGI_MODULE} \
        --workers $NUM_WORKERS \
        --user=$USER --group=$GROUP \
        --log-level=debug \
        --bind=127.0.0.1:8000
  1. Hacer el script ejecutable: chmod +x deploy/gunicorn_start
  2. Probar el script: deploy/gunicorn_start

Mientras el script est茅 corriendo, el proyecto estar谩 viviendo en la IP en el puerto 80.

Crear un servicio

  1. Iniciar sesi贸n como s煤per usuario: sudo su -
  2. Ir al directorio de los servicios: cd /etc/init
  3. Crear el servicio vim platzi.conf con el siguiente contenido:
# platzi

# description "Platzi Linux Service"
# authon "Pablo Trinidad"

start on startup

script
    exec /home/platzi/deploy/gunicorn_start
end script
  1. Iniciar servicio: service platzi start

Por 煤ltimo regresamos al directorio que contiene el proyecto y ejecutamos: ./manage.py collectstatic

Aportes 49

Preguntas 6

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

debieron hacer un video explicativo de esto, no sean flojos.

Que tremendo fiasco!! Sacan x cantidad de cursos al mes y no son capaces dedicarle unos videos extra para el deploy del proyecto de Django. Me disculpo con las personas que s铆 entendieron a la perfecci贸n todo este material escrito y que pudiera ofenderles mi comentario.

Para que pagamos por esto si son los mismo tutoriales que se pueden encontrar en miles de p谩ginas, es uno de los aspectos donde mas podemos batallar y pasan de hacer un video, aveces me decepcionan Platzi

En mi opini贸n esta parte debi贸 haber sido en v铆deo y deber铆an agregar los procedimientos para windows.
Saludos.

Buen curso hasta ahora, pero falta actualizarlo hasta una versi贸n actual de Django (a d铆a de hoy: 3.1.7) y explicar mejor la parte de despliegue de la aplicaci贸n en v铆deo. 隆Vamos Platzi s茅 que pueden hacer algo mucho mejor!

Para los que tengan problema al momento de crear el archivo del servicio paltzigram.conf
Yo lo solucione as铆, estoy ocupando una t2.nano en AWS con Ubuntu 18.4

  1. Creo el archivo del servicio en
/etc/systemd/system
  1. Creo mi archivo con extension .service
    Y escrib铆 todo esto:
[Unit]
Description=Marttgram service
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=marttcode
ExecStart=/home/marttcode/deploy/gunicorn_start

[Install]
WantedBy=multi-user.target
  1. Al final active el servicio con
systemctl start marttgram
  1. Checa el estatus de tu servicio con
systemctl status marttgram

Con eso debe bastar .-.

Invito al al equipo de Platzi que modifiquen el este post; la verdad si deja que desear de la calidad que dicen tener. E visto mejores articulos en la plataforma y mejor explicados.
Y si, deber铆an de colocar el link del video de deploy de Pablo Trinidad que se hizo varios a帽os; digo, no van a hacer otro nuevo.
Saludos.

Me gustar铆a que en una actualizaci贸n de este curso profundizaran en el porqu茅 y para qu茅 funciona cada parte de lo que se entreg贸 arriba. Una de las cosas que siempre me ha gustado de Platzi es que explican todo aunque sea obvio el porqu茅 hacen X cosa, ya que en todo internet es f谩cil buscar qu茅 se debe de hacer pero nunca profundizan en las razones detr谩s de cada l铆nea de c贸digo. Espero que Platzi no sea as铆, ya que me parece parte de su encanto.

Y donde queda la explicaci贸n de gunicorn

驴Y lo de windows?

Bacana la explicaci贸n y detallada, pero alguien tiene un docker para hacer el montaje en producci贸n

es por esto que herramientas como docker son la mejor opci贸n.

En servicios de Computing cloud como DigitalOcean ya vienen templates (plantillas) que te dan todo un entorno preparado para solo hacer deploy de la app. Yo lo uso para Django (y funciona con otras tecnologias como Ruby On Rails, NodeJS, Laravel y m谩s) y viene con todo configurado y tambi茅n lo puedo configurar.

Para todos aquellos que est谩n perdidos, as铆 como yo, primero lean la clase 36 (https://platzi.com/clases/1318-django/12535-preparacion-del-vps-en-aws/), para preparar el servidor y despu茅s leen esta, creo que se confundieron y pusieron al rev茅s las clases.
Saludos a todos

Este curso ha sido de luces y sombras, mas sombras diria yo.

requirements/prod.txt este fichero que se corre con pip para instalar dependencias nunca lo explicaron en el curso. tengo la duda. como lo configuro o cual es el objetivo de su existencia

Que es Gunicorn?

Alguien sabe para que sirve esta l铆nea de c贸digo? en el directorio 鈥済unicorn_start鈥

export PYTHONPATH=$DJANGODIR:$PYTHONPATH

holas! Pregunta, todos mis proyectos los deployamos con UWSGI, podria reemplazarze con Unicorn? porque se recomienda ese servicio?

Ser铆a bueno que recomienden usar supervisor

Si a alguien le es util, hice el tutorial de implementaci贸n para servidores CentOS

https://platzi.com/tutoriales/1318-django/3302-instalar-un-proyecto-de-django-en-un-servidor-centos/```

SI a alguien le sirve, he hecho el tutorial de implementaci贸n en servidores CentOS

https://platzi.com/tutoriales/1318-django/3302-instalar-un-proyecto-de-django-en-un-servidor-centos/

no se puede visualizar bien el contenido del artculo鈥 馃槮

Estoy presentando el siguiente error y no logro solucionarlo. esta parte del curso debi贸 ser por medio de v铆deo y no texto.

Traceback (most recent call last):
  File "./manage.py", line 21, in <module>
    main()
  File "./manage.py", line 17, in main
    execute_from_command_line(sys.argv)
  File "/home/lgalagarza/.venv/lib/python3.6/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
    utility.execute()
  File "/home/lgalagarza/.venv/lib/python3.6/site-packages/django/core/management/__init__.py", line 375, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/lgalagarza/.venv/lib/python3.6/site-packages/django/core/management/__init__.py", line 224, in fetch_command
    klass = load_command_class(app_name, subcommand)
  File "/home/lgalagarza/.venv/lib/python3.6/site-packages/django/core/management/__init__.py", line 36, in load_command_class
    module = import_module('%s.management.commands.%s' % (app_name, name))
  File "/home/lgalagarza/.venv/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "/home/lgalagarza/.venv/lib/python3.6/site-packages/django/core/management/commands/migrate.py", line 14, in <module>
    from django.db.migrations.autodetector import MigrationAutodetector
  File "/home/lgalagarza/.venv/lib/python3.6/site-packages/django/db/migrations/autodetector.py", line 11, in <module>
    from django.db.migrations.questioner import MigrationQuestioner
  File "/home/lgalagarza/.venv/lib/python3.6/site-packages/django/db/migrations/questioner.py", line 9, in <module>
    from .loader import MigrationLoader
  File "/home/lgalagarza/.venv/lib/python3.6/site-packages/django/db/migrations/loader.py", line 8, in <module>
    from django.db.migrations.recorder import MigrationRecorder
  File "/home/lgalagarza/.venv/lib/python3.6/site-packages/django/db/migrations/recorder.py", line 9, in <module>
    class MigrationRecorder:
  File "/home/lgalagarza/.venv/lib/python3.6/site-packages/django/db/migrations/recorder.py", line 22, in MigrationRecorder
    class Migration(models.Model):
  File "/home/lgalagarza/.venv/lib/python3.6/site-packages/django/db/models/base.py", line 87, in __new__
    app_config = apps.get_containing_app_config(module)
  File "/home/lgalagarza/.venv/lib/python3.6/site-packages/django/apps/registry.py", line 249, in get_containing_app_config
    self.check_apps_ready()
  File "/home/lgalagarza/.venv/lib/python3.6/site-packages/django/apps/registry.py", line 131, in check_apps_ready
    settings.INSTALLED_APPS
  File "/home/lgalagarza/.venv/lib/python3.6/site-packages/django/conf/__init__.py", line 57, in __getattr__
    self._setup(name)
  File "/home/lgalagarza/.venv/lib/python3.6/site-packages/django/conf/__init__.py", line 44, in _setup
    self._wrapped = Settings(settings_module)
  File "/home/lgalagarza/.venv/lib/python3.6/site-packages/django/conf/__init__.py", line 126, in __init__
    raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")
django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.

Por si estaban tan perdidos como yo les dejo este POST de como llevar Django a Producci贸n (por razones fuera de mi control uso MS SQL SERVER, si tu tambi茅n lo usas aqui esta la soluci贸n)

Notas
Suponiendo que el usuario sobre el que lo estoy instalando es el usuario Administrator.

my_project_root
----+my_project
----+settings
-----prod.py
-----wsgi.py
----+media
----+static
-----templates
-----manage.py
-----requirements.txt

my_project_root= Nombre dela carpeta ra铆z proyecto
my_project = nombre del proyecto
my_virtualenv = Nombre del entorno virtual

Crear las carpetas en Home
Para este ejercicio crear carpetas en home

sudo mkdir virtual sudo mkdir virtual/my_virtualenv sudo mkdir webapps sudo mkdir gunicorn sudo mkdir gunicon/run sudo mkdir gunicon/logs

| la ruta completa ser铆a: /home/administrator/virtual

Instalar python 3 .7

sudo apt-get install software-properties-common sudo add-apt-repository ppa:deadsnakes/ppa sudo apt-get update sudo apt-get install python3.7 python-dev python3.7-dev build-essential

INSTALAR Microsoft ODBC Driver 17 for SQL Server
Necesario para la conexion con SQL SERVER

`sudo su
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -

#Download appropriate package for the OS version
#Choose only ONE of the following, corresponding to your OS version

#Ubuntu 16.04
curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list

#Ubuntu 18.04
curl https://packages.microsoft.com/config/ubuntu/18.04/prod.list > /etc/apt/sources.list.d/mssql-release.list

#Ubuntu 19.10
curl https://packages.microsoft.com/config/ubuntu/19.10/prod.list > /etc/apt/sources.list.d/mssql-release.list

exit
sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install msodbcsql17`

INSTALAR virtualenv
Aqu铆 crearemos los entornos virtuales.

sudo apt-get install virtualenv

Instalar unixodbc
Necesario para la conexi贸n con un odbc

sudo apt-get install unixodbc-dev

Crear instancia virtaulenv con python 3.7
En muchas ocasiones el Sistema Operativo trae una versi贸n de python que no queremos usar y es la que utiliza virtualenv para crear sus librerias asi que hay que definir la versi贸n de python que nosotros queremos. Aqu铆 le definimos a virtualenv que version de python usar

virtualenv -p /usr/bin/python3.7 /home/administrator/virtual/my_virtualenv/

Iniciar Entorno Virtual
cd /home/administrator/virtual/my_virtualenv/ source bin/activate
| Esta es la ruta donde est谩 el entorno virtual

clonar nuestro proyecto de git
cd /home/administrator/webapps/ git clone < url de git>
ejemplo:
git clone https://github.com/miproyecto.git

Instalar requerimientos
cd /home/administrator/webapps/my_project_root pip install -r requirements.txt Instalar Gunicorn pip install gunicorn

Iniciar Gunicorn
gunicorn my_project.wsgi:application --bind localhost:8000

Crear Archivo de inicio Gunicorn
cd /home/administrator/gunicorn/ mkdir gunicorn_service sudo vim gunicorn_service

Pegar esto dentro del archivo modificando My_project_root, My_project y My_virtualenv

`#!/bin/bash

NAME=鈥渕y_project鈥 # Name of the application
DJANGODIR=/home/administrator/webapps/my_project_root # Django project directory
SOCKFILE=localhost:8000 # we will communicte using this unix socket USER=administrator # the user to run as GROUP=administrator # the group to run as NUM_WORKERS=3 # how many worker processes should Gunicorn spawn
DJANGO_SETTINGS_MODULE=my_project.settings # which settings file should Django use
DJANGO_WSGI_MODULE=my_project.wsgi # WSGI module name

echo "Starting $NAME as whoami"

<h1>Activate the virtual environment</h1>

cd $DJANGODIR
Source /home/administrator/virtual/my_virtualenv/bin/activate export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH

<h1>Create the run directory if it doesn鈥檛 exist</h1>

#RUNDIR=$(dirname $SOCKFILE)
#test -d $RUNDIR || mkdir -p $RUNDIR

<h1>Start your Django Unicorn</h1> <h1>Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon)</h1>

exec /home/administrator/virtual/my_virtualenv/bin/gunicorn ${DJANGO_WSGI_MODULE}:application
鈥搉ame $NAME
鈥搘orkers $NUM_WORKERS
鈥搖ser=$USER --group=$GROUP
鈥揵ind=$SOCKFILE
鈥搇og-level=debug
鈥搇og-file=-`

Dar permiso de ejecuci贸n al archivo
chmod +x gunicorn_service
Probar que el archivo de conf funcione
./gunicorn_service

Instalar Supervisor
sudo apt-get install supervisor

Crear archivo de configuraci贸n
cd /home/administrator/gunicorn/ sudo vim my_project_gunicorn_supervisor.conf

En el archivo pergar:

[program:my_project_service] command = /home/administrator/gunicorn/gunicorn_service ; Command to start app user = administrator ; User to run as stdout_logfile = /home/administrator/gunicorn/logs/gunicorn_supervisor.log ; Where to write log messages redirect_stderr = true ; Save stderr in the same log environment=LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8

Enviar el archivo de configuraci贸n a supervisor y actualizar

sudo cp my_project_gunicorn_supervisor.conf /etc/supervisor/conf.d/
sudo service supervisor start sudo supervisorctl update sudo supervisorctl reload

Instalar NGINX

sudo apt-get install nginx sudo service nginx start
Eliminar el sitio por default
sudo rm /etc/nginx/sites-enabled/default sudo service nginx restart

Crear Archivo de configuraci贸n
cd /home/administrator/gunicorn/ sudo vim my_project_nginx
Pegar en el Documento:

`upstream my_project_server {

<h1>fail_timeout=0 means we always retry an upstream even if it failed</h1> <h1>to return a good HTTP response (in case the Unicorn master nukes a</h1> <h1>single worker for timing out).</h1>

server localhost:8000 fail_timeout=0;
}

server {

listen 80;
server_name my_project.com;

client_max_body_size 4G; 

access_log /home/administrator/gunicorn/logs/nginx-access.log; 
error_log /home/administrator/gunicorn/logs/nginx-error.log; 

location /static/ {
alias /home/administrator/webapps/my_project_root/static/;
}

location /media/ {
alias /home/administrator/webapps/my_project_root/media/;
}

location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;

   # Try to serve static files from nginx, no point in making an 
   # *application* server like Unicorn/Rainbows! serve static files. 
   if (!-f $request_filename) { 
        proxy_pass http://my_project_server;
       break; 
   } 

}
}
`
Enviar el archivo de configuraci贸n a NGINX y actualizar

sudo cp my_project_nginx /etc/nginx/sites-available sudo ln -s /etc/nginx/sites-available/my_project_nginx /etc/nginx/sites-enabled/
Supervisor Restart
sudo supervisorctl reload

Nginx Restart
sudo service nginx restart

Referencias
https://www.youtube.com/watch?v=JjwbXZwOst0

Esta lecci贸n definitivamente necesita formato y edici贸n.

Hola, alguien me podr铆a ayudar, he seguido este articulo y el video (https://platzi.com/clases/24-comunidad-platzi/4027-como-llevar-django-a-produccion/) y todo me funciona bien, hasta que llegu茅 donde se crea el archivo

vim platzi.conf

escribo y guardo todo, finalmente hago:

service platzi start y me aparece lo siguiente: 
Failed to start platzi.service: Unit platzi.service not found.

Por lo que estuve leyendo puede ser por la versi贸n del servidor linux que estoy usando. Me di cuenta que el profesor ocupa Ubuntu 14 en el video y yo estoy ocupando Ubuntu 16.04, cambi贸 la sintaxis? si es as铆 como deber铆a ser escrito el archivo .conf?

As铆 es como lo tengo escrito ahora, como lo escribi贸 Pablo

# platzi

# description "Platzi linux service"
# author "Pablo Trinidad"

start on startup

script
    exec /home/platzi/deploy/gunicorn_start
end script

si alguien me ayuda ser铆a genial, gracias a todos

Les dejo una guia de como hacer deployment a heroku que es el que estoy haciendo

https://www.youtube.com/watch?v=6DI_7Zja8Zc

Para google cloud:

https://www.youtube.com/watch?v=8Vxo0P_P8TU

Si alguno se topa con el error de la contrase帽a del postgres tienen que cambiar el tipo de encriptaci贸n de la contrase帽a de md5 a sha-256. Ac谩 les dejo el link de como lo resolv铆.

https://documentation.tricentis.com/qtest/10400/en/content/qtest_onpremise/server_administration/change_postgresql_password_authentication_scram-sha-256.htm

Quisiera conocer mas de estos m茅todos de encriptaci贸n ya que es una parte importante de las ciencias de computaci贸n, a帽adir茅 un curso o libro de criptograf铆a a mi lista de amazon.

Si les interesa alojar en aws ac谩 les dejo un link de como hacerlo, yo por ahora estoy haciendo de heroku que es el mas sencillo:

https://www.youtube.com/watch?v=hbavPcLnq28
https://www.youtube.com/watch?v=51YwXvJ9LOE

A ver, puedo buscar por mi cuenta una m谩quina virtual y ver c贸mo setear el entorno para poder hacer todo esto, pero pues me parece un poco feo haber realizado todo el curso en Windows, y de cara al final, obviarlo completamente sin una clase o secci贸n dedicada a los que estamos en windows. Alternativas y formas de llegar a linux en windows hay, pero que no haya habido ninguna menci贸n, gu铆a o link al respecto me fastidia bastante.

Yo tuve muchos problemas con el comando source para activar en .venv.

Pero el problema fue por como se creo el usuario

A mi me funciono mas:

adduser usuario

y dar permisos sudo:

usermod -aG sudo usuario

Que lastima que no pusieron un video para desplegar el proyecto a producci贸n. La verdad que el de django avanzado el despliegue a prod tambien se queda corto

No, si estaba perdido con la continuidad del desarrollo del proyecto de ejemplo con los videos, jum ahora si mas perdido, falto el video.

Yo no pude user AWS :c pero use Heroku.
Si lo llegan a tener problemas y/o quieren hacer el deploy en heroku les dejo el turorial que me ayudo AQU脥

La cuestion es q los que estamos en Windows nos tocaria usar una maquina virtual para poder mandar a producci贸n por q no usar Heroku o algun otro servidor para que sea m谩s facil la implementaci贸n???

muchas gracias

Al instalar las dependencias para Pillow, 驴No se puede hacer desde el archivo requirements.txt utilizando pip3 install -r?

que onda, podrian arreglar este deetalle aunque sea por dise帽o

realmente hace falta el video actualizado de Deploy por que en este tutorial quede perdido por en mi windows no encotre Las variables para pegarlas a ~/.bashrc y en tutorial de
@GOLLUM23 no me reconoce el comando mkvirtualenv miapp 鈥 gracias si alguien me aclara hacer ?

Este tipo de art铆culos prometen mucho pero al final s贸lo hacen perder el tiempo, parece que la informaci贸n es buena pero no pueden ni imprimir bien los snippets de c贸digo.

Estoy teniendo problemas al separar el archivo settings.py (base, dev y prod )

Settings/

base.py
[https://www.evernote.com/shard/s550/sh/c0b5a238-8f88-4a13-bc84-d05c8f51be47/9a4b0abcc4b1631a124a4ac5b5664196]

dev.py
[https://www.evernote.com/shard/s550/sh/25621300-f1cb-419c-bd03-b9bcc4068765/f6cb354b94325f920b87ecda14fac1de]
prod.py
[https://www.evernote.com/shard/s550/sh/36b83d46-3af4-4616-a560-3754dceac82b/2c01ad655f9f53df3d14aac41d20235d]

Estoy iniciando el servidor de la siguiente manera:

python manage.py runserver --settings=mysocialbunny.settings.dev

Y al revisar mi website que se esta ejecutando me arroja el siguiente error:

[Errno 2] No such file or directory: '/static'

Como si no encontrara los archivos estaticos de mis templates. El archivo urls.py lo modifique de la siguiente manera:
[https://www.evernote.com/shard/s550/sh/3ad1b4c2-a20e-4f25-b693-1ca6fed0e9d7/2e9b52655eba2c1855eecb01ec9494e2]

Los archivos wsgi.py y manage.py no los modifique. Ya que al iniciar el servidor le estoy asignando la configuraci贸n.

wsgi.py
[https://www.evernote.com/shard/s550/sh/9a82e98d-74a7-42e7-992b-baf0876eab40/ff825ab30e6927bbb745de07ab94142a]

manage.py
[https://www.evernote.com/shard/s550/sh/6409c392-a3d5-4dc0-bae3-c53a33628d3a/e0be4192bd4703991520513324534b44]

Hola comunidad, queria preguntarle que curso puedo hacer para aprender mas sobre la configuracion de servidores y entender mejor este capitulo Gracias de antemano

Quisiera saber tambien como se implementa la aplicacion en windows , pero sera investigar.

tengo este error

Traceback (most recent call last):
File 鈥./manage.py鈥, line 15, in <module>
execute_from_command_line(sys.argv)
File 鈥/home/ubuntu/.venv/lib/python3.5/site-packages/django/core/management/init.py鈥, line 381, in execute_from_command_line
utility.execute()
File 鈥/home/ubuntu/.venv/lib/python3.5/site-packages/django/core/management/init.py鈥, line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File 鈥/home/ubuntu/.venv/lib/python3.5/site-packages/django/core/management/base.py鈥, line 316, in run_from_argv
self.execute(*args, **cmd_options)
File 鈥/home/ubuntu/.venv/lib/python3.5/site-packages/django/core/management/base.py鈥, line 353, in execute
output = self.handle(*args, **options)
File 鈥/home/ubuntu/.venv/lib/python3.5/site-packages/django/core/management/commands/check.py鈥, line 65, in handle
fail_level=getattr(checks, options[鈥榝ail_level鈥橾),
File 鈥/home/ubuntu/.venv/lib/python3.5/site-packages/django/core/management/base.py鈥, line 379, in check
include_deployment_checks=include_deployment_checks,
File 鈥/home/ubuntu/.venv/lib/python3.5/site-packages/django/core/management/base.py鈥, line 366, in _run_checks
return checks.run_checks(**kwargs)
File 鈥/home/ubuntu/.venv/lib/python3.5/site-packages/django/core/checks/registry.py鈥, line 71, in run_checks
new_errors = check(app_configs=app_configs)
File 鈥/home/ubuntu/.venv/lib/python3.5/site-packages/django/core/checks/urls.py鈥, line 35, in check_url_namespaces_unique
if not getattr(settings, 鈥楻OOT_URLCONF鈥, None):
File 鈥/home/ubuntu/.venv/lib/python3.5/site-packages/django/conf/init.py鈥, line 57, in getattr
self._setup(name)
File 鈥/home/ubuntu/.venv/lib/python3.5/site-packages/django/conf/init.py鈥, line 44, in _setup
self._wrapped = Settings(settings_module)
File 鈥/home/ubuntu/.venv/lib/python3.5/site-packages/django/conf/init.py鈥, line 126, in init
raise ImproperlyConfigured(鈥淭he SECRET_KEY setting must not be empty.鈥)
django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.

esta es la parte mas dificil del curso, consideren re-hacer esta clase o dividirla en dos, o hacer el video, aun tomando el curso de terminal se me esta dificultando demasiado

tengo un problema con el archivo gunicorn_start, me podrian decir que estoy haciendo mal y como solucionarlo 馃槖

[email protected]:~/Instagrun/deploy# ./gunicorn_start 
Starting platzigram as root
[2020-03-03 20:59:24 +0000] [2280] [DEBUG] Current configuration:
  proxy_protocol: False
  worker_connections: 1000
  statsd_host: None
  max_requests_jitter: 0
  post_fork: <function post_fork at 0x7fbec02202d0>
  errorlog: -
  enable_stdio_inheritance: False
  worker_class: sync
  ssl_version: 2
  suppress_ragged_eofs: True
  syslog: False
  syslog_facility: user
  when_ready: <function when_ready at 0x7fbec0217f50>
  pre_fork: <function pre_fork at 0x7fbec0220150>
  cert_reqs: 0
  preload_app: False
  keepalive: 2
  accesslog: None
  group: 27
  graceful_timeout: 30
  do_handshake_on_connect: False
  spew: False
  workers: 3
  proc_name: None
  sendfile: None
  pidfile: None
  umask: 0
  on_reload: <function on_reload at 0x7fbec0217dd0>
  pre_exec: <function pre_exec at 0x7fbec02208d0>
  worker_tmp_dir: None
  limit_request_fields: 100
  pythonpath: None
  on_exit: <function on_exit at 0x7fbec02251d0>
  config: None
  logconfig: None
  check_config: False
  statsd_prefix: 
  secure_scheme_headers: {'X-FORWARDED-PROTOCOL': 'ssl', 'X-FORWARDED-PROTO': 'https', 'X-FORWARDED-SSL': 'on'}
  reload_engine: auto
  proxy_allow_ips: ['127.0.0.1']
  pre_request: <function pre_request at 0x7fbec0220a50>
  post_request: <function post_request at 0x7fbec0220b50>
  forwarded_allow_ips: ['127.0.0.1']
  worker_int: <function worker_int at 0x7fbec02205d0>
  raw_paste_global_conf: []
  threads: 1
  max_requests: 0
  chdir: /home
  daemon: False
  user: 999
  limit_request_line: 4094
  access_log_format: %(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"
  certfile: None
  on_starting: <function on_starting at 0x7fbec0217c50>
  post_worker_init: <function post_worker_init at 0x7fbec0220450>
  child_exit: <function child_exit at 0x7fbec0220cd0>
  worker_exit: <function worker_exit at 0x7fbec0220e50>
  paste: None
  default_proc_name: platzigram.wsgi
  syslog_addr: udp://localhost:514
  syslog_prefix: None
  ciphers: TLSv1
  worker_abort: <function worker_abort at 0x7fbec0220750>
  loglevel: debug
  bind: ['127.0.0.1:8000']
  raw_env: []
  initgroups: False
  capture_output: False
  reload: False
  limit_request_field_size: 8190
  nworkers_changed: <function nworkers_changed at 0x7fbec0225050>
  timeout: 30
  keyfile: None
  ca_certs: None
  tmp_upload_dir: None
  backlog: 2048
  logger_class: gunicorn.glogging.Logger
[2020-03-03 20:59:24 +0000] [2280] [INFO] Starting gunicorn 19.7.1
[2020-03-03 20:59:24 +0000] [2280] [DEBUG] Arbiter booted
[2020-03-03 20:59:24 +0000] [2280] [INFO] Listening at: http://127.0.0.1:8000 (2280)
[2020-03-03 20:59:24 +0000] [2280] [INFO] Using worker: sync
[2020-03-03 20:59:24 +0000] [2287] [INFO] Booting worker with pid: 2287
[2020-03-03 20:59:24 +0000] [2287] [ERROR] Exception in worker process
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/gunicorn/arbiter.py", line 578, in spawn_worker
    worker.init_process()
  File "/usr/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 126, in init_process
    self.load_wsgi()
  File "/usr/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 135, in load_wsgi
    self.wsgi = self.app.wsgi()
  File "/usr/lib/python2.7/dist-packages/gunicorn/app/base.py", line 67, in wsgi
    self.callable = self.load()
  File "/usr/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 65, in load
    return self.load_wsgiapp()
  File "/usr/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 52, in load_wsgiapp
    return util.import_app(self.app_uri)
  File "/usr/lib/python2.7/dist-packages/gunicorn/util.py", line 377, in import_app
    __import__(module)
ImportError: No module named platzigram.wsgi
[2020-03-03 20:59:24 +0000] [2287] [INFO] Worker exiting (pid: 2287)
[2020-03-03 20:59:24 +0000] [2280] [INFO] Shutting down: Master
[2020-03-03 20:59:24 +0000] [2280] [INFO] Reason: Worker failed to boot.

Creo que este tipo de cosas debio estar al princio no?

Para editar los archivos desde la terminal, prefiero usar nano, encuentro que es m谩s amigable que vim