2
respostas

Upload não está sendo feito no bucket da AWS

Estou tentando subir os arquivos estáticos pra AWS, mas quando rodo o comando 'python manage.py collectstatic' o upload não acontece

As configurações estão atualmente assim:

## AWS Configuração

AWS_ACCESS_KEY_ID = str(os.getenv('ACCESS_KEY_ID_AWS_S3_BUCKET'))

AWS_SECRET_ACCESS_KEY = str(os.getenv('SECRET_KEY_AWS_S3_BUCKET'))

AWS_STORAGE_BUCKET_NAME = str(os.getenv('S3_BUCKET_NAME'))

AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com'

AWS_DEFAULT_ACL = 'public-read'

AWS_S3_OBJECT_PARAMETERS = {
    'CacheControl': 'max-age=86400'
}

AWS_LOCATION = 'static'

AWS_QUERYSTRING_AUTH = False

AWS_HEADERS = {
    'Access-Control-Allow-Origin': '*',
}

# Static files (CSS, JavaScript, Images)


DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3StaticStorage'


STATIC_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/static/'

STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'setup/static')
]

STATIC_ROOT = os.path.join(BASE_DIR, 'static')



#Media
# Media

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

MEDIA_URL = f'https://{AWS_S3_CUSTOM_DOMAIN}/media/'

E quando eu rodo o comando simplesmente isso aparece no terminal

(.venv) PS C:\Users\jpira\Desktop\Jh\Alura Estudos\Python Django_Templates> python manage.py collectstatic

You have requested to collect static files at the destination
location as specified in your settings:

    C:\Users\jpira\Desktop\Jh\Alura Estudos\Python Django_Templates\static

This will overwrite existing files!
Are you sure you want to do this?

Type 'yes' to continue, or 'no' to cancel: yes

0 static files copied to 'C:\Users\jpira\Desktop\Jh\Alura Estudos\Python Django_Templates\static', 178 unmodified.
(.venv) PS C:\Users\jpira\Desktop\Jh\Alura Estudos\Python Django_Templates>

Dessa forma a aplicação inteira fica quebrada, faltando todo o estilo e as imagens E os aquivos não aparecem no bucket

2 respostas

Olá, Jonathas. Tudo bem?

O Django está tentando copiar os arquivos estáticos para o diretório local especificado em STATIC_ROOT ao invés de enviá-los para o S3. Isso pode estar acontecendo por algumas razões. Aqui estão algumas sugestões que podem te ajudar a resolver o problema:

  1. Verifique as Variáveis de Ambiente: Veja se as variáveis de ambiente ACCESS_KEY_ID_AWS_S3_BUCKET, SECRET_KEY_AWS_S3_BUCKET e S3_BUCKET_NAME estão corretamente configuradas e acessíveis no ambiente onde o Django está sendo executado. Você pode testar isso imprimindo essas variáveis no terminal ou no código para garantir que estão corretas.

  2. Dependências: Veja e garanta que o pacote django-storages[boto3] esteja instalado na sua virtual environment. Você pode verificar isso executando pip freeze e procurando por django-storages e boto3.

  3. Configuração do STATICFILES_STORAGE: Na sua configuração, você está usando storages.backends.s3boto3.S3StaticStorage para STATICFILES_STORAGE. Veja se a configuração está correta e se o pacote django-storages está atualizado. Algumas versões podem ter diferenças nas classes de armazenamento.

  4. Permissões do Bucket: Verifique se o bucket S3 tem as permissões corretas para permitir uploads. Isso pode incluir permissões para a chave de acesso que você está usando.

Se depois de verificar todos esses pontos o problema persistir, pode ser útil tentar rodar o comando collectstatic com a flag --dry-run para ver o que exatamente o Django está tentando fazer sem realmente fazer o upload, o que pode te dar mais pistas sobre onde está o problema.

Espero ter ajudado e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!

Obrigado pela resposta Renan

1 Verifiquei as variáveis de ambiente colocando print no console, elas estão corretas

2 e 3 Aqui está meu requirements.txt onde coloquei o pip freeze:

asgiref==3.8.1
boto3==1.36.18
botocore==1.36.18
certifi==2025.1.31
cffi==1.17.1
charset-normalizer==3.4.1
cryptography==44.0.0
Django==5.1.5
django-allauth==65.3.1
django-storages==1.14.4
idna==3.10
jmespath==1.0.1
oauthlib==3.2.2
pillow==11.1.0
pycparser==2.22
PyJWT==2.10.1
python-dateutil==2.9.0.post0
python-dotenv==1.0.1
requests==2.32.3
requests-oauthlib==2.0.0
s3transfer==0.11.2
six==1.17.0
sqlparse==0.5.3
tzdata==2025.1
urllib3==2.3.0

4 Coloquei um usuário no IAM da AWS com essa permissãoInsira aqui a descrição dessa imagem para ajudar na acessibilidade