opa, estou com um problema na execução desse comando:
- docker-compose run web python manage.py makemigrations
o erro basicamente é ... 'decouple.UndefinedValueError: SECRET_KEY not found. Declare it as envvar or define a default value'.
opa, estou com um problema na execução desse comando:
o erro basicamente é ... 'decouple.UndefinedValueError: SECRET_KEY not found. Declare it as envvar or define a default value'.
Olá Mateus, tudo bem? Você poderia colocar aqui o log completo do erro? E também colocar o conteúdo do seu arquivo docker-compose.yml
e também do seu arquivo env
? Pra gente poder verificar corretamente, de ante mão, o seu arquivo env
deve está da seguinte forma:
[config]
# Secret configuration
SECRET_KEY = <hash-aqui>
# conf
DEBUG=True
# Database
DB_NAME = "todo_dev"
DB_USER = "devops_dev"
DB_PASSWORD = "mestre"
DB_HOST = "db"
DB_PORT = "3309"
Fico aguardando retorno!
Traceback (most recent call last): File "manage.py", line 15, in execute_from_command_line(sys.argv) File "/usr/local/lib/python3.6/site-packages/django/core/management/init.py", line 381, in execute_from_command_line utility.execute() File "/usr/local/lib/python3.6/site-packages/django/core/management/init.py", line 325, in execute settings.INSTALLED_APPS File "/usr/local/lib/python3.6/site-packages/django/conf/init.py", line 57, in getattr self.setup(name) File "/usr/local/lib/python3.6/site-packages/django/conf/init.py", line 44, in _setup self.wrapped = Settings(settings_module) File "/usr/local/lib/python3.6/site-packages/django/conf/init.py", line 107, in init mod = importlib.import_module(self.SETTINGS_MODULE) File "/usr/local/lib/python3.6/importlib/init.py", line 126, in import_module return bootstrap.gcd_import(name[level:], package, level) File "", line 994, in gcdimport File "", line 971, in findand_load File "", line 955, in findand_load_unlocked File "", line 665, in loadunlocked File "", line 678, in exec_module File "", line 219, in callwith_frames_removed File "/usr/src/app/to_do/settings.py", line 25, in SECRET_KEY = config('SECRET_KEY') File "/usr/local/lib/python3.6/site-packages/decouple.py", line 197, in call return self.config(args, **kwargs) File "/usr/local/lib/python3.6/site-packages/decouple.py", line 85, in call return self.get(args, **kwargs) File "/usr/local/lib/python3.6/site-packages/decouple.py", line 70, in get raise UndefinedValueError('{} not found. Declare it as envvar or define a default value.'.format(option)) decouple.UndefinedValueError: SECRET_KEY not found. Declare it as envvar or define a default value.
version: '3'
services: db: image: mysql:5.7 ports:
- '3309:3306'
environment:
MYSQL_DATABASE: 'todo_dev'
MYSQL_USER: 'devops_dev'
MYSQL_PASSWORD: 'mestre'
MYSQL_ROOT_PASSWORD: 'senha'
web: image: jnlucas/minha-imagem:latest volumes:
- ./env:/usr/src/app/to_do/.env
ports:
- "8009:8000"
depends_on:
- db
Mateus, o erro na verdade é no Python, ele não está conseguindo encontrar o valor da variável SECRET_KEY
que é definada no arquivo env
, porém vi que alguns problemas estavam relacionados a porta do MySQL, sendo assim você poderia colocar o bind de portas do MySQL para 3306:3306
deixando o arquivo da seguinte forma:
version: '3'
services:
db:
image: mysql:5.7
ports:
- '3306:3306'
environment:
MYSQL_DATABASE: 'todo_dev'
MYSQL_USER: 'devops_dev'
MYSQL_PASSWORD: 'mestre'
MYSQL_ROOT_PASSWORD: 'senha'
web:
image: aluracursos/django_todolist_image_build
volumes:
- ./env:/usr/src/app/to_do/.env
ports:
- "8000:8000"
depends_on:
- db
E também alterar a porta no arquivo env
ficando da seguinte forma:
[config]
# Secret configuration
SECRET_KEY = 'r*5ltfzw-61ksdm41fuul8+hxs$86yo9%k1%k=(!@=-wv4qtyv'
# conf
DEBUG=True
# Database
DB_NAME = "todo_dev"
DB_USER = "devops_dev"
DB_PASSWORD = "mestre"
DB_HOST = "db"
DB_PORT = "3306"
E altera o nome do arquivo env
para .env
.
E fala pra gente o resultado!
Opa Jonilson blz? Infelizmente o erro persiste mesmo após trocar de porta e renomear a .env :/
Vi em outro tópico que você está usando o WSL (Windows for Linux) para fazer o curso correto? Como posteriormente será necessário usar o docker in docker, acho que pode não ser viável concluir os estudos usando o WSL. Recomendo fortemente a utilização de algum sistema Linux como mencionei no outro tópico.
Boa Noite Jonilson,No caso acredito que nesse problema não esteja relacionado ao WSL, consegui resolver o problema acima, porém acusou um outro erro encadeado, ligado ao HOST da qual estou tentando acessar meu banco, segue o seguinte trecho do erro:
No caso quando eu tiro o DB_HOST do .gitlab-ci.yml ele acusa erro na variável DB_HOST="db", configurada na .env. Fora isso não entendi muito bem o do porque configurar no arquivo .gitlab-ci.yml como DB_HOST='mysql' e seguir a mesma referência para ela no .env porém com valor diferentes, no caso o DB apontando para o container no gitlab-ci.yml. Não seria viável colocar DB_HOST='db' também no .gitlab-ci.yml como configuração?
Que legal que conseguiu resolver o outro problema. Bem sobre isso é bastante estranho mesmo, porém essa variável DB_HOST é que a aplicação Python vai utilizar e sobre escreve a variável DB_HOST do arquivo env, e porque colocamos o nome mysql
no gitlab-ci.yml é porque o container criado terá esse nome. No caso quando você coloca DB_HOST: 'mysql'
no arquivo gitlab-ci.yml é que é retornado esse erro? E qual é a imagem que você está utilizando no gitlab-ci.yml? Eu sugiro você fazer o build da sua imagem, depois subir pro Docker Hub e usar a sua própria imagem, acho que isso deve corrigir.
Bom dia Jonilson, bom notei que aqui você está utilizando
Porém no curso ele pede para criar nossa própria imagem, no caso o que foi que eu fiz, até mesmo para configurar o runner do gitlab, enfim vou passar o estado dos meus arquivos atualmente:
* gitlab-ci.yml
image: docker:stable
stages:
- pre-build
- build
- test
- deploy
build-docker:
services:
- docker:dind
before_script:
- docker info
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
stage: pre-build
script:
- docker build -t minha-imagem .
- docker tag minha-imagem msant0/minha-imagem:latest
- docker push msant0/minha-imagem:latest
build-project:
image: msant0/minha-imagem:latest
services:
- docker:dind
- mysql:5.7
variables:
MYSQL_USER: $DB_USER
MYSQL_PASSWORD: $DB_PASSWORD
MYSQL_DATABASE: $DB_DATABASE
MYSQL_ROOT_PASSWORD: $DB_ROOT_PASSWORD
DB_NAME: $DB_DATABASE
DB_USER: $DB_USER
DB_PASSWORD: $DB_PASSWORD
DB_PORT: '3306'
DB_HOST: mysql
SECRET_KEY: $DB_SECRET_KEY
stage: build
image: msant0/minha-imagem:latest
tags:
- runner-build
dependencies:
- build-docker
script:
- python manage.py makemigrations
- python manage.py migrate
test-project:
stage: test
services:
- docker:dind
- mysql:5.7
variables:
MYSQL_USER: $DB_USER
MYSQL_PASSWORD: $DB_PASSWORD
MYSQL_DATABASE: $DB_DATABASE
MYSQL_ROOT_PASSWORD: $DB_ROOT_PASSWORD
DB_NAME: $DB_DATABASE
DB_USER: $DB_USER
DB_PASSWORD: $DB_PASSWORD
DB_PORT: '3306'
DB_HOST: 'db'
SECRET_KEY: $DB_SECRET_KEY
dependencies:
- build-project
tags:
- runner-build
script:
- python -m unittest setUp
* .env
[config]
# Secret configuration
SECRET_KEY = 'r*5ltfzw-61ksdm41fuul8+hxs$86yo9%k1%k=(!@=-wv4qtyv'
# conf
DEBUG=True
# Database
DB_NAME = "todo_dev"
DB_USER = "devops_dev"
DB_PASSWORD = "mestre"
DB_HOST = "db"
DB_PORT = "3306"
*docker-compose.yml
version: '3'
services:
db:
image: mysql:5.7
ports:
- '3306:3306'
environment:
MYSQL_DATABASE: 'todo_dev'
MYSQL_USER: 'devops_dev'
MYSQL_PASSWORD: 'mestre'
MYSQL_ROOT_PASSWORD: 'senha'
web:
image: aluracursos/django_todolist_image_build
volumes:
- ./env:/usr/src/app/to_do/.env
ports:
- "8000:8000"
depends_on:
- db
Bem Mateus, sobre o seu arquivo gitlab-ci.yml
, tenho algumas considerações, primeiro acho que você deve usar a imagem docker:19.03.0
e docker:19.03.0-dind
, pra evitar um erro posterior, que até já respondi alguns tópicos com esse erro. Outra coisa, que não sei se esse é o motivo do problema é que no seu build-project
você colocou a image
duas vezes, então remove uma tenta novamente. E eu também utilizei uma imagem que eu mesmo criei, só não fiz isso no passo para executar o docker-compose. Tenta usando esse código no arquivo gitlab-ci.yml
:
image: docker:19.03.0
stages:
- pre-build
- build
- test
- deploy
build-docker:
services:
- docker:19.03.0-dind
before_script:
- docker info
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD
stage: pre-build
script:
- docker build -t minha-imagem .
- docker tag minha-imagem msant0/minha-imagem:latest
- docker push msant0/minha-imagem:latest
build-project:
image: msant0/minha-imagem:latest
services:
- docker:19.03.0-dind
- mysql:5.7
variables:
MYSQL_USER: $DB_USER
MYSQL_PASSWORD: $DB_PASSWORD
MYSQL_DATABASE: $DB_DATABASE
MYSQL_ROOT_PASSWORD: $DB_ROOT_PASSWORD
DB_NAME: $DB_DATABASE
DB_USER: $DB_USER
DB_PASSWORD: $DB_PASSWORD
DB_PORT: '3306'
DB_HOST: mysql
SECRET_KEY: $DB_SECRET_KEY
stage: build
tags:
- runner-build
dependencies:
- build-docker
script:
- python manage.py makemigrations
- python manage.py migrate
test-project:
stage: test
services:
- docker:dind
- mysql:5.7
variables:
MYSQL_USER: $DB_USER
MYSQL_PASSWORD: $DB_PASSWORD
MYSQL_DATABASE: $DB_DATABASE
MYSQL_ROOT_PASSWORD: $DB_ROOT_PASSWORD
DB_NAME: $DB_DATABASE
DB_USER: $DB_USER
DB_PASSWORD: $DB_PASSWORD
DB_PORT: '3306'
DB_HOST: 'db'
SECRET_KEY: $DB_SECRET_KEY
dependencies:
- build-project
tags:
- runner-build
script:
- python -m unittest setUp
E fala pra gente o resultado!
Mesmo com os ajustes, está apresentando o seguinte erro:
Verifiquei os arquivos do curso e está exatamente a mesma configuração no DB_HOST, já estou perdendo um pouco as esperanças com esse curso :/
Consegui resolver o erro na pipeline, por tentativa e erro coloquei o DB_HOST na .env como 'mysql' e ele não reclamou no stage de build. Mesmo assim ficando diferente do que foi passado pelo instrutor!