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:

...

Regístrate o inicia sesión para leer el resto del contenido.

Aportes 49

Preguntas 6

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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.

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

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

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 “gunicorn_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=“my_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’t 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
–name $NAME
–workers $NUM_WORKERS
–user=$USER --group=$GROUP
–bind=$SOCKFILE
–log-level=debug
–log-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[‘fail_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, ‘ROOT_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(“The 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