关键词:
【中文标题】如何使用 docker 和 nginx 在同一台服务器上运行多个站点?【英文标题】:How do I run multiple sites on the same server using docker and nginx? 【发布时间】:2021-11-09 15:54:44 【问题描述】:我试图在同一台服务器上以不同的 ip 在 django 上运行两个站点,出现端口繁忙的错误,我修复了端口,但站点无法启动。请告诉我错误在哪里? ip 工作,当我转到第二个 ip 时,我会重定向到第一个站点。为第二个站点指定了所有设置。最后,我添加了第一个站点的nginx设置
这是第二个 docker-compose 文件及其设置。非常感谢您的帮助
.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:
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;
【问题讨论】:
在 Django 上运行两个站点是什么意思?您必须使用相同的 Django 后端进行前端吗?如果您能更好地解释您的情况,那将有所帮助。另外,请提供您遇到的错误和有效的撰写文件 @NoamYizraeli 不,有 2 个不同的项目 @Oleksandr 似乎您在 8013 和 8008 运行两个站点,您需要确保两个应用程序中的 UWSGI 都没有使用该端口。 您是否在同一个 docker 容器中运行这两个 django 项目? 如果有人需要答案,在俄文版ru.***.com/questions/1329007/… 【参考方案1】:感谢@Roman Tokaren 和@Oleksandr
这里是@Roman Tokaren here提交的英文翻译版
对于“正确”的发布,您总是可以争论很多——毕竟,有多少人,有多少意见,但我将描述一个示例 + - 一个“方便”且可扩展的配置。为了在这种配置下工作的“方便”,我建议安装nginxproxymanager作为反向代理并将容器和nginxproxymanager组合到一个网络中——之后可以通过http(s)转发容器端口, tcp、udp 到使用 GUI 的外部接口以及许多其他好东西,例如 SSL 证书的生成及其自动更新
首先,让我们自己创建网络
docker network create --driver bridge --subnet 172.26.0.0/24 testnet
让我们配置 NPM (nginxproxymanager) - 默认情况下,我们会将反向代理视为最后一个网络节点,结果我们会得到
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
并配置容器本身
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:
之后我们根据instructions进行NPM的初始配置并添加主机
【讨论】:
【参考方案2】:如果你想在一台服务器上运行多个站点,你可以
-
使用不同的
ip
使用不同的port
使用不同的domain
使用不同的路径并重写
...
您可以选择最重要的提示之一。
在您的配置中,您选择不同的 ip 和相同的端口,但您将所有站点设置为默认值,而不是监听不同的 ip
server
listen ip:port;
通常只是省略 IP。
或者你可以一个ip和不同的端口。
server
listen port1;
server
listen port2;
或者你可以一个ip和一个端口但是不同的域。
server
listen port;
server_name 1.a.com;
server
listen port;
server_name 2.a.com;
【讨论】:
【参考方案3】:如果您在同一台机器上运行两个具有不同 IP 的虚拟服务器,您需要在监听指令中指定 IP 地址:
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;
...
更多关于nginx
如何处理请求的信息可以在这里找到:http://nginx.org/en/docs/http/request_processing.html
【讨论】:
如何在 Docker 上使用 Nginx 和 Django 提供静态文件?
】如何在Docker上使用Nginx和Django提供静态文件?【英文标题】:HowtoservestaticfilesusingNginxandDjangoonDocker?【发布时间】:2017-11-1918:32:04【问题描述】:我已经在***上阅读了一些关于此问题的帖子,但无法解决我的问题,正如标题所说... 查看详情
如何在同一台服务器上运行 ngrok 和 apache/nginx?
】如何在同一台服务器上运行ngrok和apache/nginx?【英文标题】:Howtorunngrokandapache/nginxonsameserver?【发布时间】:2017-04-2304:28:37【问题描述】:ngrok使用80端口,apache或nginx也使用80端口。我想在一台服务器上运行ngrok和web并使用端口8... 查看详情
如何在同一个域中使用 Nginx 和 Gunicorn 运行 Django 和 Wordpress?
】如何在同一个域中使用Nginx和Gunicorn运行Django和Wordpress?【英文标题】:HowtorunDjangoandWordpressusingNginxandGunicornatthesamedomain?【发布时间】:2017-08-2109:29:56【问题描述】:我有一个在域上运行的Django应用程序,例如www.example.com我想... 查看详情
AWS ECS 使用 docker 和 nginx,如何将我的 nginx 配置放入容器中?
】AWSECS使用docker和nginx,如何将我的nginx配置放入容器中?【英文标题】:AWSECSusingdockerandngnix,howtogetmynginxconfigintothecontainer?【发布时间】:2018-02-1808:27:53【问题描述】:我正在尝试使用Nginx、unicorn和Django在AWS中设置ECS集群。我已... 查看详情
如何在opensuse中的同一台机器上的VM和docker之间共享目录?
】如何在opensuse中的同一台机器上的VM和docker之间共享目录?【英文标题】:HowtosharedirectorybetweenVManddockeronsamemachineinopensuse?【发布时间】:2017-11-2904:20:11【问题描述】:我知道如何在docker和host甚至VM和host之间建立一个共享目录,... 查看详情
使用 docker 和 nginx 仅在 localhost 上限制 jenkins
...想使用jenkins在生产环境中构建这个应用程序。我不确定如何将 查看详情
docker中的nginx反向代理
...yindocker【发布时间】:2018-10-1009:13:10【问题描述】:我在使用nginx时遇到了一个小问题。首先,我只是将nginx和portainer作为容器运行。Portainer在端口9000上运行,并且容器位于同一个docker网络上,因此这不是可见性问题。Nginx暴露... 查看详情
Vue Js Nginx Docker 连接到后端
...端通信,当我调用时,我需要指定后端服务端口和端点。如何使用nginx和docker,然后在使用nginx和docker之后,应用程序如何与后端通信?最终我需要在Kubernetes集群上部署前端和后端服 查看详情
在 phpmyadmin 上找不到 404 - nginx docker
...inxdocker【发布时间】:2021-09-2602:41:04【问题描述】:我想使用docker和nginx在同一个域上运行phpmyadmin和我的API,如:api=>localhost:8888/phpmyadmin=>localhost:8888/phpmyadmin/phpmyadm 查看详情
如何使用多个节点应用程序设置 nginx 反向代理
】如何使用多个节点应用程序设置nginx反向代理【英文标题】:Howtosetupnginxreverseproxywithmultiplenodeapps【发布时间】:2019-08-1703:53:30【问题描述】:我有两个想要在同一个域上运行的Vue.js应用程序(例如,https://localhost:8080/app1和https... 查看详情
在 Docker 上使用 Nginx、uWSGI 和 Postgres 配置 Django
】在Docker上使用Nginx、uWSGI和Postgres配置Django【英文标题】:ConfiguringDjangowithNginx,uWSGIandPostgresonDocker【发布时间】:2016-04-1123:44:30【问题描述】:我正在尝试使用Nginx、uWSGI和Postgres在Docker上设置Django应用程序。我找到了这篇关于为... 查看详情
如何在 docker env 中使用 nginx 反向代理通信 UI 和后端应用程序
】如何在dockerenv中使用nginx反向代理通信UI和后端应用程序【英文标题】:HowtocommunicateUIandbackendapplicationusingngnixreverseproxyindockerenv【发布时间】:2020-09-2612:27:00【问题描述】:我有一个UI应用程序(Angular应用程序)和一个后端应... 查看详情
在 Docker 中使用 React 和 Nginx 授权 Spotify
】在Docker中使用React和Nginx授权Spotify【英文标题】:AuthorizeSpotifyusingReactandNginxinDocker【发布时间】:2019-08-0513:25:48【问题描述】:我正在构建具有以下结构的dockerizedRESTAPI应用程序:../web/nginx/dev.confDockerfile-devclient/build/conf/Dockerfil... 查看详情
使用 Nginx 和 Docker 部署 React 和 Django
】使用Nginx和Docker部署React和Django【英文标题】:deployReactandDjangowithNginxandDocker【发布时间】:2021-03-1608:34:51【问题描述】:我正在尝试使用Nginx和Docker部署我的React构建和DjangoAPI。我对部署仍然很陌生,并且从未托管过会投入生... 查看详情
如何使用 nginx-proxy 与 wordpress docker 容器一起运行 phpmyadmin?
】如何使用nginx-proxy与wordpressdocker容器一起运行phpmyadmin?【英文标题】:Howtorunphpmyadminalongwithwordpressdockercontainerusingnginx-proxy?【发布时间】:2021-01-2802:52:10【问题描述】:我正在尝试使用Nginx-Proxy在UbuntuVPS上的docker容器内运行WordP... 查看详情
如何使用 Docker 从 Nginx 服务器提供 HTML 文件
】如何使用Docker从Nginx服务器提供HTML文件【英文标题】:HowtoServeHTMLFilesfromaNginxServerUsingDocker【发布时间】:2018-05-1423:01:51【问题描述】:问题我有一个在docker中运行的Nginx容器。它被配置为监听端口http://localhost:80。当我在浏览... 查看详情
使用 nginx 和 docker 测试本地子域
】使用nginx和docker测试本地子域【英文标题】:testinglocalsubdomainwithnginxanddocker【发布时间】:2019-01-2612:03:20【问题描述】:我正在尝试在我的Mac上本地设置一个简单的Web堆栈。nginx作为反向代理reactweb应用#1将在localhost上提供服务r... 查看详情
使用 EBS 部署多容器 docker 环境(flask 和 nginx)
】使用EBS部署多容器docker环境(flask和nginx)【英文标题】:Deployingmulticontainerdockerenvironment(flask&nginx)withEBS【发布时间】:2017-03-2314:56:39【问题描述】:以下代码在使用docker-compose在本地运行时有效。但是,当我将Flask和nginx容... 查看详情