1 year ago

#384557

test-img

littlejiver

Docker Compose with custom django app, ngnix, postgres, certbot, and letsencrypt

I am building my first customs Docker with Docker compose and I feel I am very close to finishing it but I have having an issue with what seem to be the entrypoint

FYI i am tryng to deploy a django app with postgres, nginx, certbot, letsencrypt

this is what I am seeing:

certbot_1 | /data/entrypoint.sh: exec: line 14: certbot: not found nginx_1 | /data/entrypoint.sh: exec: line 14: run: not found

EDIT: I was able to make them run with the editted code but Ngnix exits with a code 0 and I don't know why and wont run

I have tried changing path with no luck

I am not sure what I am doing wrong

any advice you can provide would be great!

docker compose file:

version: '3.8'

services:
  web:
    build: .
    command: gunicorn FleetOptimal.wsgi:application --bind 0.0.0.0:8000
    environment:
    - TZ=America/Toronto
    volumes:
      - /home/littlejiver/src/FleetOptimal/FleetOptimal/FleetOptimal/:/manage/
      - /home/littlejiver/src/FleetOptimal/FleetOptimal/:/data/
      - /home/littlejiver/src/FleetOptimal/FleetOptimal/FleetOptimal/staticfiles/:/static_volume/
      - /home/littlejiver/src/FleetOptimal/FleetOptimal/FleetOptimal/images/:/media_volume/
    expose:
      - 8000
    env_file:
      - ./.env.dev
    depends_on:
      - db

  db:
    image: postgres:13.0-alpine 
    volumes:
      - /home/littlejiver/docker/postgres/postgres_data:/postgres_data/
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Canada/Toronto
      - POSTGRES_USER=someusername
      - POSTGRES_PASSWORD=@somepassword
      - POSTGRES_DB=somedb

  nginx-proxy:
    tty: true
    image: nginx:latest
    container_name: nginx-proxy
    build: .
    command: nginx -g "daemon off"
    restart: always
    environment:
      - NGINX_DOCKER_GEN_CONTAINER=nginx-proxy-letsencrypt
    ports:
      - 443:443
      - 80:80
    volumes:
      - /home/littlejiver/src/FleetOptimal/FleetOptimal/:/data/
      - /home/littlejiver/src/FleetOptimal/FleetOptimal/FleetOptimal/staticfiles/:/static_volume/
      - /home/littlejiver/src/FleetOptimal/FleetOptimal/FleetOptimal/images/:/media_volume/
      - certs:/etc/nginx/certs
      - html:/usr/share/nginx/html
      - vhost:/etc/nginx/vhost.d
      - /var/run/docker.sock:/tmp/docker.sock:ro
    depends_on:
      - web

  nginx-proxy-letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    env_file:
      - ./.env.dev
    environment:
      - NGINX_DOCKER_GEN_CONTAINER=nginx-proxy-letsencrypt
    volumes:
      - /home/littlejiver/src/FleetOptimal/FleetOptimal/:/data/
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - certs:/etc/nginx/certs
      - html:/usr/share/nginx/html
      - vhost:/etc/nginx/vhost.d
      - acme:/etc/acme.sh
    depends_on:
      - nginx-proxy


volumes:
  postgres_data:
  static_volume:
  media_volume:
  certs:
  html:
  vhost:
  acme:

DockerFile for Ngnix:

FROM nginx:latest
COPY vhost.d/default /etc/nginx/vhost.d/default
COPY custom.conf /etc/nginx/conf.d/custom.conf

DockerFile for Web:

   ###########
# BUILDER #
###########

# pull official base image
FROM python:3.9.6-alpine as builder

# set work directory
WORKDIR /manage

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1

# install psycopg2 dependencies
RUN apk update \
    && apk add postgresql-dev gcc python3-dev musl-dev

# lint
RUN apk add zlib-dev jpeg-dev gcc musl-dev
RUN pip install --upgrade pip
# RUN pip install flake8==3.9.2
COPY . .
# RUN flake8 --ignore=E501,F401 /manage

# install dependencies
COPY ./requirements.txt .
RUN pip wheel --no-cache-dir --no-deps --wheel-dir /usr/src/app/wheels -r requirements.txt


 



   #########
        # FINAL #
        #########
        
        # pull official base image
        FROM python:3.9.6-alpine
        
        # create directory for the app user
        
        # create the app user
        RUN addgroup -S littlejiver && adduser -S littlejiver -G littlejiver
        
        # create the appropriate directories
        ENV HOME=/manage
        ENV APP_HOME=/manage
        WORKDIR $APP_HOME
        
        # install dependencies
        RUN apk add zlib-dev jpeg-dev gcc musl-dev
        COPY --from=builder /usr/src/app/wheels /wheels
        COPY --from=builder /manage/requirements.txt .
        RUN pip install --no-cache /wheels/*
        
        # copy entrypoint.prod.sh
        COPY ./entrypoint.sh .
        RUN sed -i 's/\r$//g'  $APP_HOME/entrypoint.sh
        RUN chmod +x  $APP_HOME/entrypoint.sh
        
        # copy project
        COPY . $APP_HOME
        
        # chown all the files to the app user
        RUN chown -R littlejiver:littlejiver $APP_HOME
        
        # change to the app user
        USER littlejiver
        
        WORKDIR /manage
        
        # run entrypoint.prod.sh
        ENTRYPOINT ["sh", "/data/entrypoint.sh"]

entrypoint.sh

#!/bin/sh

    if [ "$DATABASE" = "postgres" ]
    then
        echo "Waiting for postgres..."
    
        while ! nc -z $SQL_HOST $SQL_PORT; do
          sleep 0.1
        done
    
        echo "PostgreSQL started"
    fi
    
    exec "$@"

Thanks -littlejiver

roughly based of this guide:

docker

nginx

lets-encrypt

certbot

entry-point

0 Answers

Your Answer

Accepted video resources