Implantação de Django com uWSGI, Nginx, MySQL e Redis em Ubuntu 18.04 na Tencent Cloud

Arquitetura do Sistema

O fluxo de solicitações segue este caminho: o navegader anvia uma requisição HTTP ao Nginx, que encaminha via socket para o uWSGI, que então se comunica com o Django através do protocolo WSGI. O Nginx é responsável pelo gerenciamento de recursos estáticos e balanceamento de carga, enquanto o uWSGI atua como um servidor intermediário para processar e distribuir as requisições dinâmicas.

  1. Conexão SSH e Configuração Inicial

1.1 Habilitar Acesso Root via SSH

# Definir senha para o usuário root
sudo passwd root

# Editar o arquivo de configuração do SSH
sudo nano /etc/ssh/sshd_config
# Alterar a linha:
PermitRootLogin no  para  PermitRootLogin yes

# Reiniciar o serviço SSH
sudo systemctl restart sshd

1.2 Instalação do Servidor SSH

# Verificar se o SSH está instalado
sudo systemctl status ssh

# Instalar o OpenSSH Server
sudo apt update
sudo apt install openssh-server

# Configurar e reiniciar
sudo nano /etc/ssh/sshd_config
# Garanta que 'PermitRootLogin' esteja como 'yes'
sudo systemctl restart sshd
  1. Ambiente Python

O Ubuntu 18.04 já inclui Python 2 e Python 3. Verifique a versão com python3 --version.

  1. Instalação do pip3 e Fonte de Pacotes

# Instalar o pip3
sudo apt install python3-pip

# Configurar uma fonte de pacotes mais rápida
mkdir -p ~/.config/pip
cat > ~/.config/pip/pip.conf << EOF
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
trusted-host = mirrors.aliyun.com
EOF
  1. Configuração de Ambientes Virtuais

# Instalar ferramentas para ambientes virtuais
sudo pip3 install virtualenv virtualenvwrapper

# Configurar o diretório de ambientes
echo 'export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3' >> ~/.bashrc
echo 'export WORKON_HOME=~/envs' >> ~/.bashrc
echo 'export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv' >> ~/.bashrc
echo 'source /usr/local/bin/virtualenvwrapper.sh' >> ~/.bashrc

# Aplicar as alterações
source ~/.bashrc

# Criar um ambiente virtual exemplo
mkvirtualenv meu_projeto_env
  1. Preparação do Projeto Django

5.1 Transferência do Projeto

# Usando scp para copiar a pasta do projeto
scp -r /caminho/local/projeto usuario@ip_remoto:/caminho/remoto/

# Ou via Git (se o projeto estiver em um repositório)
git clone https://github.com/seuusuario/seurepositorio.git

5.2 Instalação de Dependências

# Ative o ambiente virtual correspondente
workon meu_projeto_env

# Instale as dependências a partir de um arquivo
pip install -r requirements.txt
  1. Docker (Opcional)

6.1 Instalação do Docker

sudo apt update
sudo apt install docker.io docker-compose
sudo systemctl start docker
sudo systemctl enable docker

6.2 Configuração de Espelhos

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
EOF
sudo systemctl restart docker
  1. Instalação e Configuração do MySQL

7.1 Instalação

sudo apt update
sudo apt install mysql-server

7.2 Configuração de Segurança

sudo mysql_secure_installation
# Siga as instruções: defina uma senha root, remova usuários anônimos, etc.

7.3 Acesso e Usuários Remotos

# Acessar o MySQL como root
sudo mysql -u root -p

# Dentro do MySQL:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'nova_senha';
FLUSH PRIVILEGES;

# Criar um usuário para acesso remoto
CREATE USER 'app_user'@'%' IDENTIFIED BY 'senha_forte';
GRANT ALL PRIVILEGES ON nome_banco.* TO 'app_user'@'%';
FLUSH PRIVILEGES;

# Editar configuração para permitir conexões externas
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# Comente ou altere a linha: bind-address = 127.0.0.1 para bind-address = 0.0.0.0
sudo systemctl restart mysql
  1. Instalação e Configuração do Redis

8.1 Instalação

sudo apt update
sudo apt install redis-server

8.2 Ajustes Básicos

sudo nano /etc/redis/redis.conf
# Altere a linha 'supervised no' para 'supervised systemd'
# Para proteção com senha, descomente 'requirepass' e defina uma senha.
sudo systemctl restart redis-server
  1. Configuração do uWSGI

9.1 Instalação

pip3 install uwsgi

9.2 Arquivo de Configuração (uwsgi_projeto.ini)

[uwsgi]
; Defina o socket para comunicação com o Nginx (não usar http para produção)
socket = 127.0.0.1:8001
; Caminho absoluto para a pasta do projeto (onde está manage.py)
chdir = /caminho/absoluto/do/projeto
; Caminho para o módulo WSGI do Django
module = nome_do_projeto.wsgi:application
; Especifica o ambiente virtual
home = /caminho/absoluto/do/ambiente/virtual
; Número de processos e threads
processes = 4
threads = 2
; Ativa o modo mestre
master = true
; Salva o PID do processo
pidfile = /tmp/uwsgi_projeto.pid
; Desativa buffering para melhor desempenho com o Nginx
buffer-size = 32768
; Cria um log
daemonize = /var/log/uwsgi/projeto.log
  1. Configuração do Nginx

10.1 Instalação

sudo apt update
sudo apt install nginx
sudo systemctl start nginx
sudo systemctl enable nginx

10.2 Bloco de Servidor para o Django

# Crie um novo arquivo de configuração
sudo nano /etc/nginx/sites-available/meu_projeto

# Cole o seguinte conteúdo (ajustando os caminhos):
server {
    listen 80;
    server_name seu_dominio.com ou ip_do_servidor;

    location / {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8001;
    }

    location /static/ {
        alias /caminho/absoluto/do/projeto/static/;
    }

    location /media/ {
        alias /caminho/absoluto/do/projeto/media/;
    }

    # Opcional: log de erros
    error_log /var/log/nginx/meu_projeto_error.log;
    access_log /var/log/nginx/meu_projeto_access.log;
}

# Ative o site e teste a configuração
sudo ln -s /etc/nginx/sites-available/meu_projeto /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
  1. Executando o Projeto

# Inicie o uWSGI usando o arquivo de configuração
uwsgi --ini /caminho/para/uwsgi_projeto.ini

# Para gerenciar o processo (parar/reiniciar)
uwsgi --stop /tmp/uwsgi_projeto.pid
uwsgi --reload /tmp/uwsgi_projeto.pid

# Verifique os serviços
sudo systemctl status nginx
sudo systemctl status redis-server
sudo systemctl status mysql

Tags: ubuntu-18.04 Django uwsgi nginx MySQL

Publicado em 7-8 04:04