简体   繁体   中英

AWS ElasticBeanstalk failed to deploy Django/Postgres app

I'm having a hard time deploying my app built with Django, Postgres, DjangoQ, Redis and ES on AWS Elastic Beanstalk, using docker-compose.yml.

I've used EB CLI (eb init, eb create) to do it and it shows the environment is successfully launched but I still have the following problem.

  1. On the EC2 instance, there is no postgres, djangoq and ec containers built like it says in the docker-compose file as below. Only django, redis and ngnix containers are found on the ec2 instance.

  2. The environment variables that I specified in the docker-compose.yml file aren't being configured to the django container on EC2, so I can't run django there.

I'm pretty lost and am not sure where to even start to fix the problems here.. Any insight will be very much appreciated..

version: '3'
services:
  django:
    build:
      context: .
      dockerfile: docker/Dockerfile
    command: gunicorn --bind 0.0.0.0:5000 etherscan_project.wsgi:application
    env_file: .env
    volumes:
      - $PWD:/srv/app/:delegated
    depends_on:
      - redis
      - db
      - es

  django-q:
    build:
      context: .
      dockerfile: docker/Dockerfile
    command: >
      sh -c "python manage.py makemigrations && 
             python manage.py migrate &&
             python manage.py qcluster"
    env_file: .env
    volumes:
      - $PWD:/srv/app/:delegated
    depends_on:
      - redis
      - db
      - django
      - es

  db:
    image: postgres:latest
    expose:
      - 5432
    env_file: .env
    volumes:
      - ./docker/volumes/postgres:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U $POSTGRES_DB"]
      interval: 10s
      timeout: 5s
      retries: 5

  redis:
    image: redis:latest
    expose: 
      - 6379
    ports: 
      - 6379:6379
    volumes: 
      - ./docker/volumes/redis:/data
    
  nginx:
    container_name: nginx
    image: nginx:1.13
    ports:
      - 80:80
    depends_on:
      - db
      - django
      - redis
    volumes:
      - ./docker/nginx:/etc/nginx/conf.d
      - $PWD:/srv/app/:delegated
    
  es:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.13.4
    ports: 
      - 9200:9200
      - 9300:9300
    expose:
      - 9200
      - 9300
    environment: 
      - discovery.type=single-node 
      - xpack.security.enabled=false
    ulimits: 
      memlock:
        soft: -1
        hard: -1
    volumes:
      - ./docker/volumes/es:/usr/share/elasticsearch/data 

volumes:
  app-files:
    driver_opts:
      type: nfs
      device: $PWD
      o: bind

can you confirm that your environment variables are being used correctly? A common mistake with EB and docker-compsoe is that it is assumed that your.env file works the same way in EB as it does in docker-compose when it does not. I have made that mistake before. Check out the docs https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker.container.console.html#docker-env-cfg.env-variables

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM