gpt4 book ai didi

docker - 在Nginx/nginx代理容器中使用Nextcloud以及其他服务

转载 作者:行者123 更新时间:2023-12-02 19:35:28 25 4
gpt4 key购买 nike

我正在尝试使nextcloud:fpm docker图像与nginx docker图像加neginx-proxy docker图像一起运行,并尝试从同一nginx图像提供netxcloud(用于instace sonarr等)之外的多种服务。

为了做到这一点,我想配置所有东西,以便在尝试使用http//my-server.com/nextcloud时出现nexcloud,当我执行``http // my-server.com / sonarr`时,我去了声纳服务。

我创建了一个目录,如:nginx,其中包含与Nginx相关的所有内容。
nginx nextcloud`内部,我在其中配置nexcloud。

nginx中,docker-compose.yml为:

version: '2'
services:
proxy:
image: jwilder/nginx-proxy
container_name: proxy
ports:
- 80:80
- 443:443
volumes:
- /mnt/server/proxy/conf.d:/etc/nginx/conf.d
- /mnt/server/proxy/vhost.d:/etc/nginx/vhost.d
- /mnt/server/proxy/html:/usr/share/nginx/html
- /mnt/server/proxy/certs:/etc/nginx/certs:ro
- /var/run/docker.sock:/tmp/docker.sock:ro
networks:
- proxy-tier
restart: always

letsencrypt-companion:
image: alastaircoote/docker-letsencrypt-nginx-proxy-companion
container_name: letsencrypt-companion
volumes_from:
- proxy
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- /mnt/server/proxy/certs:/etc/nginx/certs:rw
restart: always

web:
# image: nginx:alpine
image: nginx
container_name: nginx-webserver
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- /mnt/server/nextcloud:/var/www/html/nextcloud/
external_links:
- nextcloud
environment:
- VIRTUAL_HOST=my-server.com
- VIRTUAL_NETWORK=nginx-proxy
- VIRTUAL_PORT=80
- LETSENCRYPT_HOST=my-server.com
- LETSENCRYPT_EMAIL=myemail@google.com
networks:
- proxy-tier
restart: always

networks:
proxy-tier:
external:
name: nginx-proxy

nginx.conf:
user www-data;

events {
worker_connections 768;
}

http {
upstream docker-nextcloud {
server nextcloud:9000;
}

server {
listen 80;

location /nextcloud {
proxy_pass http://docker-nextcloud;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
server_name_in_redirect on;
}

nextcloud目录下,我的 docker-compose.yml:
version: '2'
services:
nextcloud:
image: nextcloud:fpm
container_name: nextcloud
links:
- db
volumes:
- /mnt/server/nextcloud:/var/www/html/nextcloud/
- /mnt/server/nextcloud/apps:/var/www/html/nextcloud/apps/
- /mnt/server/nextcloud/config:/var/www/html/nextcloud/config/
- /mnt/server/nextcloud/data:/var/www/html/nextcloud/data/
networks:
- proxy-tier
restart: always

db:
image: postgres
container_name: db
volumes:
- /mnt/server/nextcloud/db:/var/lib/postgresql/
environment:
- POSTGRES_DB=nextcloud
- POSTGRES_USER=nextcloud
- POSTGRES_PASSWORD=somepassword
networks:
- proxy-tier
restart: always

networks:
proxy-tier:
external:
name: nginx-proxy

这一切都会失败,并在 nginx docker容器日志中显示以下消息:
2017/08/19 15:05:09 [error] 8#8: *3 recv() failed (104: Connection reset by peer) while reading response header from upstream, client:
172.18.0.6, server: , request: "GET /nextcloud/ HTTP/1.1", upstream: "http://172.18.0.4:9000/nextcloud/", host: "my-server.com"
172.18.0.6 - - [19/Aug/2017:15:05:09 +0000] "GET /nextcloud/ HTTP/1.1" 502 173 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0"

最佳答案

以下几行确实是危险的,我建议不要在未记录的内容之外做任何其他卷映射:

  - /mnt/server/nextcloud:/var/www/html/nextcloud/
- /mnt/server/nextcloud/apps:/var/www/html/nextcloud/apps/
- /mnt/server/nextcloud/config:/var/www/html/nextcloud/config/
- /mnt/server/nextcloud/data:/var/www/html/nextcloud/data/

其背后的原因是入口点脚本对所有文件执行rsync到 /var/www/html,并删除它们未排除的所有内容。结果,rsync脚本尝试删除 /var/www/html/nextcloud及其所有数据。

如果版本不同,它实际上是如何在内部工作的:将所有文件从一个文件夹复制到/ var / www / html ,并删除,除少数排除文件夹(例如/ data)外。这就是为什么它找不到所需的文件的原因:它们仅复制到/ var / www / html,而不复制到期望的位置/ var / www / html / nextcloud。

我将以下选项视为解决方法:
  • 使用nextcloud:apache图像,仅使用nginx作为反向代理来重写它:
    location /nextcloud/ {
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_pass http://nextcloud:80; # nexcloud is the name of the container
    client_max_body_size 1000M;
    rewrite ^/nextcloud(/.*)$ $1 break;
    }
  • 使用两个nginx系统(在不同的端口或不同的实例上):一个像extcloud这样使用nextcloud:fpm的系统将侦听/,而另一个重写/nextcloud的系统(请参阅上一点的配置)

  • 修改nginx以使用fpm并重写它看起来确实非常痛苦,您需要确保各种重写不会重叠。我尝试了一些方法,但效果不佳,因此我自己放弃了这种方法。使用默认设置的好处是可以使用Nextcloud推荐的nginx配置,这在两个版本之间可能有所不同。

    关于docker - 在Nginx/nginx代理容器中使用Nextcloud以及其他服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45773247/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com