Deploy de uma aplicação Django no Pythonanywhere

Links da documentação oficial:

https://docs.djangoproject.com/pt-br/1.11/intro/reusable-apps/

Para baixar o código como está até agora, acesse o meu github no link abaixo:
https://github.com/toticavalcanti/django_course/tree/deploy

Deploy do Projeto no Pythonanywhere

Deploy do Projeto no Pythonanywhere

DEPLOY

Comandos usados na aula:

Para criar o ambiente virtual dentro do pythonanywhere.

mkvirtualenv --python=/usr/bin/python3.6 myenv

Para clonar o projeto do github para dentro do pythonanywhere, você deve trocar o nome da branch para master, onde tá com a cor verde e o endereço do seu repositório, onde tá marcado com a cor laranja, para o endereço do seu repositório no seu github.

git clone -b deploy git@github.com:toticavalcanti/django_course.git

Para instalar as dependências, inclusive a app Polls.

pip install -r requirements.txt

Para coletar os arquivos estáticos do projeto, css, html, js…

python manage.py collectstatic

Para fazer as migrations

python manage.py migrate

Para fazer criar um super usuário

python manage.py createsuperuser

Existem três arquivos na pasta settings:

  • production.py que é a configuração para um servidor de produção
  • local.py que é a configuração para um servidor de desenvolvimento
  • base.py que é uma duplicata de local.py para que outros desenvolvedores possam usá-lo em suas máquinas. 

Isso significa que o python manage.py runserver será executado com sua configuração production.py por padrão.

O base.py é importado para incluir quaisquer configurações ausentes acidentalmente, mas o production.py sobrescreverá quaisquer configurações necessárias à produção.

CONTEÚDOS DOS ARQUIVOS DA PASTA django_course/mysite/settings/

Conteúdo do __init__.py


from .base import *

from .production import *

try:
    from .local import *
except:
    pass

O que o __init__.py faz é sobrescrever production.py se local.py estiver presente. Isso significa que você terá que atualizar o seu arquivo .gitignore para ter o local.py incluído, para que você não faça o push dele para o servidor, ou github.

Conteúdo do base.py


"""
Django settings for mysite project.

Generated by 'django-admin startproject' using Django 2.2.dev20180724223558.

For more information on this file, see
https://docs.djangoproject.com/en/dev/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/dev/ref/settings/
"""

import os

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/dev/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '&^cby$$v@)@sl*xh03kw(w5bp&b3x#9g=-(l5a4zu$%qn%3ga-'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = ['127.0.0.1:8000']


# Application definition

INSTALLED_APPS = [
    'polls.apps.PollsConfig',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'mysite.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'mysite.wsgi.application'


# Database
# https://docs.djangoproject.com/en/dev/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'db_mysite',
        'USER': 'django',
        'PASSWORD': '123456',
        'HOST': 'localhost',   # Or an IP Address that your DB is hosted on
        'PORT': '3306',
    }
}


# Password validation
# https://docs.djangoproject.com/en/dev/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]


# Internationalization
# https://docs.djangoproject.com/en/dev/topics/i18n/

LANGUAGE_CODE = 'pt-br'

TIME_ZONE = 'America/Sao_Paulo'

USE_I18N = True

USE_L10N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/dev/howto/static-files/

STATIC_URL = '/static/'

Conteúdo do production.py


"""
Django settings for mysite project.

Generated by 'django-admin startproject' using Django 2.2.dev20180724223558.

For more information on this file, see
https://docs.djangoproject.com/en/dev/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/dev/ref/settings/
"""

import os

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/dev/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = os.environ.get('SECRET_KEY', '&^cby$$v@)@sl*xh03kw(w5bp&b3x#9g=-(l5a4zu$%qn%3ga-')

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = ['toticavalcanti.pythonanywhere.com', '127.0.0.1', 'localhost','polls-research.herokuapp.com', '.polls.com']


# Application definition

INSTALLED_APPS = [
    'polls',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'mysite.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'mysite.wsgi.application'


# Database
# https://docs.djangoproject.com/en/dev/ref/settings/#databases

DATABASES = {
    # 'default': {
    #     'ENGINE': 'django.db.backends.mysql',
    #     'NAME': 'db_mysite',
    #     'USER': 'django',
    #     'PASSWORD': '123456',
    #     'HOST': 'localhost',   # Or an IP Address that your DB is hosted on
    #     'PORT': '3306',
    # }
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

# add this
import dj_database_url
db_from_env = dj_database_url.config()
DATABASES['default'].update(db_from_env)
#DATABASES['default']['CONN_MAX_AGE'] = 500

# Password validation
# https://docs.djangoproject.com/en/dev/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]


# Internationalization
# https://docs.djangoproject.com/en/dev/topics/i18n/

LANGUAGE_CODE = 'pt-br'

TIME_ZONE = 'America/Sao_Paulo'

USE_I18N = True

USE_L10N = True

USE_TZ = True


STATIC_URL = '/static/'
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/dev/howto/static-files/
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.9/howto/static-files/
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

# Extra places for collectstatic to find static files.
#STATICFILES_DIRS = (
#    os.path.join(os.path.normpath(BASE_DIR), "static"),

#)

Para baixar o código como está até agora, acesse o meu github no link abaixo:
https://github.com/toticavalcanti/django_course/tree/deploy

AULA  28

AULA  30

Todas as Aulas da App Polls

Página Principal

OBRIGADO E BONS ESTUDOS

 

Aula 29 – Deploy Django no Pythonanywhere

About The Author
-

5 Comentários

  • Denny Erikson
    Reply

    Massa!!! Cara era isso que estava precisando pra desmistificar o deploy da aplicação Django, estava com problemas para consertar alguns erros que ocorria na versão 2.7 do python. Segui essa forma e funcionou perfeitamente. Muito obrigado.

    • toticavalcanti
      Reply

      Que legal Denny, fico feliz que as aulas te ajudaram. Sucesso e bons estudos 🙂 \O/

  • Adriel Werlich
    Reply

    Boa tarde toticavalcanti estou com um probleminha na hora de rodar o site… ele tá dando uma msg de erro. Eu estive seguindo os passos q vc colocou no tutorial…

    no log ele está dizendo q não está encontrando o django, mas quando eu vou no bash da venv eu consigo fazer a importação do django…

    • toticavalcanti
      Reply

      Fala Adriel, blz? Estranho esse erro, você conseguiu rodar algum comando com o manage.py?

  • Hamilton
    Reply

    Saudações Toti. Estou tendo erro de acesso ao banco de dados. A mensagem de erro é (2002, “Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’ (2)”)
    Sabe me dizer o que estou fazendo de errado e como corrigir?
    Desde já agradeço.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>