Перейти к содержанию

Запуск

Запуск с помощью Docker Compose

  1. Создайте файл docker-compose.yml.

    version: '3.9'
    
    services:
        postgres_db:
            image: postgres:16-alpine
            container_name: postgres
            restart: unless-stopped
            security_opt:
                - no-new-privileges
            read_only: true
            tmpfs:
                - /run/postgresql
                - /tmp
            environment:
                POSTGRES_DB: ${DATABASE_NAME}
                POSTGRES_USER: ${DATABASE_USER}
                POSTGRES_PASSWORD: ${DATABASE_PASSWORD}
            volumes:
                - postgres_data:/var/lib/postgresql/data
            ports:
                - "5432:5432"
    
        web:
            image: cr.yandex/crp8p3a3l1ri2431n3ce/protector/protector-backend-poc:latest
            container_name: web
            restart: unless-stopped
            environment:
                - SECRET_KEY=${SECRET_KEY}
                - DEBUG=${DEBUG}
                - DATABASE_NAME=${DATABASE_NAME}
                - DATABASE_USER=${DATABASE_USER}
                - DATABASE_PASSWORD=${DATABASE_PASSWORD}
                - DATABASE_HOST=${DATABASE_HOST}
                - DATABASE_PORT=${DATABASE_PORT}
            volumes:
                - static_volume:/app/static
                - media_volume:/app/media
            depends_on:
                - postgres_db
    
        nginx:
            image: nginx:alpine
            container_name: nginx
            restart: unless-stopped
            security_opt:
                - no-new-privileges
            read_only: true
            tmpfs:
                - /run:mode=770,size=1k,uid=101,gid=101
                - /tmp
                - /var/cache/nginx/
            ports:
                - "80:80"
                - "443:443"
            volumes:
                - static_volume:/app/static
                - media_volume:/app/media
                - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
                - ./nginx/fullchain.pem:/etc/nginx/certs/fullchain.pem
                - ./nginx/privkey.pem:/etc/nginx/certs/privkey.pem
            depends_on:
                - web
    
        protector-ui:
            image: cr.yandex/crp8p3a3l1ri2431n3ce/protector/protector-ui:latest
            container_name: protector-ui
            restart: unless-stopped
            security_opt:
                - no-new-privileges
            read_only: false
            tmpfs:
                - /run:mode=770,size=1k,uid=101,gid=101
                - /tmp
                - /var/cache/nginx/
            volumes:
                - ./conf.cfg:/usr/share/nginx/html/config/conf.cfg
    
    volumes:
        postgres_data:
        static_volume:
        media_volume:
    

    Примечание

    В случае отсутствия сертификатов и использования обычного HTTP, в файле docker-compose.yml следует закомментировать выделенные строчки:

    nginx:
        ...
        volumes:
            - static_volume:/app/static
            - media_volume:/app/media
            - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
            - ./nginx/fullchain.pem:/etc/nginx/certs/fullchain.pem
            - ./nginx/privkey.pem:/etc/nginx/certs/privkey.pem      
    
  2. Создайте файл .env.

    Пример файла .env:

    SECRET_KEY=your-super-secret-key
    DEBUG=True
    DATABASE_NAME=django_db
    DATABASE_USER=django_user
    DATABASE_PASSWORD= your-super-secret-password
    DATABASE_HOST=postgres_db
    DATABASE_PORT=5432
    
  3. Создайте файл nginx.conf. Для этого:

    a. Создайте директорию /opt/cryptex/nginx/.

    mkdir -p /opt/cryptex/nginx/
    

    b. Внутри созданной папки создайте файл nginx.conf.

    Пример файла nginx.conf:

    server {
        listen 80;
        server_name _;
    
        return 301 https://$host$request_uri;
    }
    
    server {
            listen 443 ssl;
            server_name _;
    
            client_max_body_size 2048M;
    
            ssl_certificate /etc/nginx/certs/fullchain.pem;
            ssl_certificate_key /etc/nginx/certs/privkey.pem;
    
            ssl_protocols TLSv1.2 TLSv1.3;
            ssl_ciphers HIGH:!aNULL:!MD5;
    
            location /static/ {
                alias /app/static/;
            }
    
            location /media/ {
                alias /app/media/;
            }
    
            location / {
                proxy_pass http://protector-ui:8000;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
            }
    
            location ^~ /api/ {
                proxy_pass http://web:8000;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
            }
    
            location ^~ /schema/ {
                proxy_pass http://web:8000;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
            }
    
            location ^~ /swagger/ {
                proxy_pass http://web:8000;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
            }
    
    }
    

    Примечание

    В случае отсутствия сертификатов и использования обычного HTTP, в файле nginx.conf следует закомментировать строчки, связанные с HTTPS:

    listen 443 ssl;
    ssl_certificate /etc/ssl/certs/ssl-cert/fullchain1.pem; # managed by Certbot
    ssl_certificate_key /etc/ssl/certs/ssl-cert/privkey1.pem; # managed by Certbot
    if ($scheme != "https") {
        return 301 https://$host$request_uri;
    }
    
  4. Перейдите в директорию, в которой располагается файл docker-compose.yml, и запустите Систему.

    docker-compose up -d