Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

383
Vistas
¿Cómo ejecuto varios sitios en el mismo servidor usando docker y nginx?

Estoy tratando de ejecutar dos sitios en django en el mismo servidor con una IP diferente, ocurre un error de que el puerto está ocupado, arreglé los puertos, pero el sitio no se inicia. Dime donde esta el error por favor Ip trabajo, cuando voy a la segunda ip obtengo redireccionamientos al primer sitio. Todos los ajustes se especificaron para el segundo sitio. Al final, agregué la configuración nginx del primer sitio

Este es el segundo archivo docker-compose y su configuración. te agradeceria mucho tu ayuda

.env

 #Django # Should be one of dev, prod MODE=prod PORT=8008 #postgres DB_NAME=xxx DB_USER=xxx DB_HOST=xxx DB_PASSWORD=xxxx DB_PORT=5432 POSTGRES_PASSWORD=mysecretpassword #WSGI WSGI_PORT=8008 WSGI_WORKERS=4 WSGI_LOG_LEVEL=debug # Celery CELERY_NUM_WORKERS=2 # Email EMAIL_HOST_USER=xxxx EMAIL_HOST_PASSWORD=xxxx

docker-compose.yml

 version: '3' services: backend: build: ./ container_name: site_container restart: always command: ./commands/start_server.sh ports: - "${PORT}:${WSGI_PORT}" volumes: - ./src:/srv/project/src - ./commands:/srv/project/commands - static_content:/var/www/site env_file: - .env depends_on: - postgres postgres: image: postgres:12 volumes: - pg_data:/var/lib/postgresql/data env_file: - .env # environment: # - DJANGO_SETTINGS_MODULE=app.settings.${MODE} nginx: image: nginx:1.19 volumes: - ./nginx:/etc/nginx/conf.d - static_content:/var/www/site ports: - 81:80 - 444:443 env_file: - .env depends_on: - backend volumes: pg_data: {} static_content: {}

predeterminado.conf

 server { listen 80 default_server; server_name 183.22.332.12; location /static/ { root /var/www/site; } location /media/ { root /var/www/site; } location / { proxy_set_header Host $host; proxy_pass http://backend:8010; } }

default.conf para el primer sitio

 server { #listen 80 default_server; listen 443 ssl http2; listen [::]:443 ssl http2; server_name site1 ip_site1; ssl_certificate /etc/letsencrypt/live/site1/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/site1/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/site1/chain.pem; location /static/ { root /var/www/artads; } location /media/ { root /var/www/artads; } location / { proxy_set_header Host $host; proxy_pass http://backend:8008; } } server { listen 80 default_server; server_name ip_site2 site2; location /static/ { root /var/www/gdr_mr; } location /media/ { root /var/www/gdr_mr; } location / { proxy_set_header Host $host; proxy_pass http://backend:8013; } } server { listen 80; listen [::]:80; server_name www.site1 site1; location / { return 301 https://site1$request_uri; } }

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Si está ejecutando dos servidores virtuales con diferentes IP en la misma máquina, querrá especificar la dirección IP en la directiva de escucha:

 server { listen 192.168.1.1:80; server_name example.net www.example.net; ... } server { listen 192.168.1.2:80; server_name example.com www.example.com; ... }

Puede encontrar más información sobre cómo nginx procesa las solicitudes aquí: http://nginx.org/en/docs/http/request_processing.html

over 4 years ago · Santiago Trujillo Denunciar

0

Si desea ejecutar más de un sitio en un servidor, puede

  1. usar ip diferente
  2. usa un port diferente
  3. usa un domain diferente
  4. use una ruta diferente y reescríbala ...

Puede elegir uno de los mejores consejos de la lista.

En su configuración, elige una IP diferente y el mismo puerto, pero configura todo el sitio por defecto y no escucha la IP diferente

 server{ listen ip:port; }

Por lo general, IP simplemente se omite.

O puede una ip y un puerto diferente.

 server{ listen port1; }
 server{ listen port2; }

O puede una ip y un puerto pero un dominio diferente.

 server{ listen port; server_name 1.a.com; }
 server{ listen port; server_name 2.a.com; }
over 4 years ago · Santiago Trujillo Denunciar

0

Gracias a @Roman Tokaren y @Oleksandr

Aquí la versión traducida al inglés enviada por @Roman Tokaren aquí


Siempre se puede discutir mucho sobre el lanzamiento "correcto"; después de todo, cuántas personas, tantas opiniones, pero describiré un ejemplo + - de una configuración "conveniente" y escalable. Por la "conveniencia" de trabajar en una configuración de este tipo, sugeriría instalar nginxproxymanager como un proxy inverso y combinar contenedores y nginxproxymanager en una sola red, después de lo cual será posible reenviar puertos de contenedores a través de http (s), tcp, udp a una interfaz externa que utiliza la GUI, así como una serie de otras ventajas, como la generación de certificados SSL y su renovación automática


Primero, creemos la red en sí.

 docker network create --driver bridge --subnet 172.26.0.0/24 testnet

Configuremos NPM ( nginxproxymanager ) - por defecto consideraremos el proxy inverso como el último nodo de red, como resultado obtendremos

 version: "3" services: app: image: 'jc21/nginx-proxy-manager:latest' networks: testnet: ipv4_address: 172.26.0.254 restart: always ports: # Public HTTP Port: - '80:80' # Public HTTPS Port: - '443:443' # Admin Web Port: - '81:81' environment: # These are the settings to access your db DB_MYSQL_HOST: "172.26.0.253" DB_MYSQL_PORT: 3306 DB_MYSQL_USER: "user" DB_MYSQL_PASSWORD: "pwd" DB_MYSQL_NAME: "npm" volumes: - ./data/nginx-proxy-manager:/data - ./letsencrypt:/etc/letsencrypt depends_on: - db db: image: yobasystems/alpine-mariadb:latest restart: always networks: testnet: ipv4_address: 172.26.0.253 environment: MYSQL_ROOT_PASSWORD: "pwd" MYSQL_DATABASE: "npm" MYSQL_USER: "user" MYSQL_PASSWORD: "pwd" volumes: - ./data/mariadb:/var/lib/mysql networks: testnet: external: true

Y configurar el propio contenedor.

 version: '3' services: backend: build: ./ container_name: site_container restart: always command: ./commands/start_server.sh networks: testnet: ipv4_address: 172.26.0.2 volumes: - ./src:/srv/project/src - ./commands:/srv/project/commands - static_content:/var/www/site env_file: - .env depends_on: - postgres postgres: image: postgres:12 volumes: - pg_data:/var/lib/postgresql/data env_file: - .env # environment: # - DJANGO_SETTINGS_MODULE=app.settings.${MODE} networks: testnet: external: true volumes: pg_data: {} static_content: {}

Después de eso, llevamos a cabo la configuración inicial de NPM de acuerdo con las instrucciones y agregamos el host

Configuración de dominio

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda