我试图在同一台服务器上用不同的ip运行两个django网站,出现了端口繁忙的错误,我修复了端口,但网站没有启动。请告诉我哪里出错了?IP正常,当我进入第二个IP时,我得到了重定向到第一个网站。所有的设置都是为第二个网站指定的。在最后,我加入了第一个网站的nginx设置
这是第二个docker-compose文件和它的设置。我将非常感谢您的帮助
.environment
#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: {}
default.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
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;
感谢@Roman Tokaren和@Oleksandr
这里是@Roman Tokaren提交的英文翻译版本 。
你总是可以对 "正确 "的启动方式争论不休--毕竟有多少人,有多少意见,但我将描述一个例子+--一个 "方便 "和可扩展的配置。为了在这样的配置中工作的 "方便",我建议安装 nginxproxymanager 作为反向代理,并将容器和 nginxproxymanager 合并到一个网络中 - 之后就可以使用GUI将容器端口通过http(s)、tcp、udp转发到外部接口,以及其他一些好处,例如生成SSL证书和自动更新
首先,让我们创建网络本身
docker network create --driver bridge --subnet 172.26.0.0/24 testnet
让我们来配置NPM(nginxproxymanager)--默认情况下,我们将把反向代理视为最后一个网络节点,结果我们将得到