Instalar Postgres + Django + Nginx + Gunicorn
Instalar Postgres + Django + Nginx + Gunicorn
Instalando dependências
Na primeira etapa, você instalará dependências de pacote para sua instalação do
framework web Django, isso inclui os seguintes pacotes:
• Servidor PostgreSQL: Por padrão, o Django usa SQLite, e este exemplo mostrará
como usar o PostgreSQL como o banco de dados para seu projeto Django.
• Supervisor: É um gerenciador de processos, e você executará seu aplicativo
Django com Gunicorn e Supervisor.
• Servidor web Nginx: Este exemplo mostrará como usar o Nginx como um proxy
reverso para seu projeto Django. Isso permite que seu projeto Django acessível
através de um nome de domínio local
Primeiro, execute o comando apt abaixo para atualizar e atualizar o índice do pacote.
sudo apt update -y
Sudo apt upgrade -y
adduser django
usermod -aG adm django
nano /etc/pam.d/su
Adicione a linha “auth required pam_whell.so group=adm”
echo $PATH /usr/local/sbin:/local/sbin:/usr/bin:/sbin:/bin
groups django
exit
su django
usermod -aG sudo django
Em seguida, execute o seguinte comando para criar um novo ambiente virtual Python
chamado venv no diretório do projeto atual /home/django/.
python3 -m venv venv
Em seguida, ative-o usando o comando abaixo. Uma vez que o ambiente virtual é
ativado, seu prompt atual se tornará como (venv) django@hostname:.
source venv/bin/activate
Dentro do ambiente virtual venv, execute o comando pip abaixo para instalar o
framework web Django. Isso instalará o Django em seu ambiente virtual Python, não
em todo o sistema.
django-admin –version
A saída a seguir confirma que o Django 4.2.4 está instalado dentro do ambiente virtual
venv via gerenciador de pacotes Pip Python.
Execute o comando pip abaixo para instalar o pacote Python psycopg2 em seu
ambiente virtual. Este é o driver Python que será usado pelo Django para se conectar
ao servidor de banco de dados PostgreSQL.
pip install psycopg2
exit
Agora execute o seguinte comando para efetuar login no shell do PostgreSQL.
Execute as seguintes consultas para criar um novo banco de dados e usuário para seu
projeto Django. O exemplo a seguir criará um novo banco de dados djangodb, o
usuário django e a senha django.
Antes de criar o projeto Django, faça login no seu usuário e ative o ambiente virtual
venv.
su - django
cd django; source venv/bin/activate
Para criar um novo projeto Django, execute o comando django-admin abaixo. Nesse
caso, você criará um novo testapp de projeto em seu diretório de trabalho atual.
Depois que o projeto for criado, o novo diretório wotelsapp será criado em seu
diretório de trabalho.
Em seguida, execute o seguinte comando para gerar um segredo aleatório para o seu
projeto Django. Certifique-se de copiar a saída, porque você vai usá-lo para proteger
sua instalação do Django.
python3 -c 'from django.core.management.utils import
get_random_secret_key; print(get_random_secret_key())'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'djangodb',
'USER': 'django',
'PASSWORD': 'p4ssw0rd',
'HOST': '127.0.0.1',
'PORT': '5432',
}
}
Por fim, adicione o parâmetro STATIC_ROOT para definir um diretório para armazenar
arquivos estáticos.
Antes de migrar o banco de dados, execute o comando a seguir para garantir que
você tenha a configuração adequada do banco de dados dentro da pasta
/home/django/.
python3 manage.py check --database default
Se não houver erro, execute o seguinte comando para migrar o banco de dados.
python3 manage.py makemigrations
python3 manage.py migrate
Se tudo correr bem, você verá o processo de migração do banco de dados assim:
Por fim, execute o seguinte comando para gerar arquivos estáticos para seu projeto
Django. Depois que o comando for executado, o novo diretório estático será criado e
arquivos estáticos serão gerados nele.
python3 manage.py collectstatic
Abaixo está a saída ao gerar arquivos estáticos.
Run the following command to create the admin user for your Django project.
python3 manage.py createsuperuser (apenas dar enter para
permanecer com o usurario django)
Once the admin user is created, run the command below to run your Django project.
python3 manage.py runserver 0.0.0.0:8080
Depois que o comando for executado, seu projeto Django será executado em seu
endereço IP local na porta 8080.
Agora abra seu navegador da Web e visite o endereço IP do servidor seguido pela
porta 8080, http://51.89.184.56:8080/. Se a instalação do Django for bem-sucedida, você
verá a página padrão do Django index.html como a seguinte:
Instalando o Gunicorn
Dentro do ambiente virtual venv, execute o comando pip abaixo para instalar o
gunicorn.
pip install gunicorn
Agora execute o seguinte comando para desativar o ambiente virtual venv e voltar
para o seu usuário root.
deactivate
exit
[program:wotelsapp]
command=/bin/bash -c 'source /home/bob/testdjango/venv/bin/activate;
gunicorn -t 3000 --workers 3 --bind
unix:unix:/home/bob/testdjango/testapp.sock testapp.wsgi:application
-w 2'
directory=/home/bob/testdjango
user=bob
group=www-data
autostart=true
autorestart=true
stdout_logfile=/home/bob/testdjango/testapp.log
stderr_logfile=/home/bob/testdjango/error.log
Salve e saia quando finalizado.
Lastly, run the following command to restart the supervisor service and apply the
changes. Then, verify the supervisor's service to ensure that the service is running.
Execute the supervisorctl command below to check the application status that running
within the supervisor.
sudo supervisorctl status
Por fim, verifique seu aplicativo Django através do comando curl abaixo.
curl --unix-socket /home/django/wotelsapp.sock 127.0.0.1
Se tudo correr bem, você deve ver o código fonte da página index.html do seu projeto
Django.
Configurando o Nginx como um proxy reverso para Django
Agora que seu projeto Django está sendo executado em segundo plano, o próximo
passo é configurar o Nginx como um proxy reverso para o Django. O exemplo a seguir
usará um nome de domínio local.
Crie uma nova configuração de bloco de servidor Nginx /etc/nginx/sites-
available/django usando o seguinte editor nano.
sudo nano /etc/nginx/sites-available/django
server {
listen 80;
server_name first-django.dev;
location @django {
proxy_set_header Host $http_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;
proxy_pass http://unix:/home/django/wotelsapp.sock ;
}
}
Salve e saia do arquivo quando terminar.
Você deve obter a sintaxe de saída é ok - teste é bem-sucedido quando você tem
sintaxe Nginx adequada.
Com isso, seu projeto Django é acessível através de um nome de domínio local.