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.
- 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
- Ambiente Python
O Ubuntu 18.04 já inclui Python 2 e Python 3. Verifique a versão com python3 --version.
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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