使用裸机 nginx 配置 nextcloud-fpm docker-compose

我正在尝试在我的服务器上安装 Nextcloud。 nginx服务直接安装在裸机上(Ubuntu)

我从在 https://github.com/nextcloud/docker/tree/master/.examples/docker-compose/with-nginx-proxy/postgres/fpm 找到的 docker-compose 开始

version: '3.8'

services:
  postgres-nextcloud:
    image: postgres:alpine
    restart: always
    ports:
      - 5435:5432
    volumes:
      - postgres-nextcloud-data:/var/lib/postgresql/data
    env_file:
      - db.env

  redis-nextcloud:
    image: redis:alpine
    restart: always

  nextcloud:
    image: nextcloud:fpm-alpine
    restart: always
    ports:
      - 8083:9000
    volumes:
      - /var/www/cloud.domain.com:/var/www/html
    environment:
      - POSTGRES_HOST=postgres-nextcloud
      - REDIS_HOST=redis-nextcloud
      - POSTGRES_PORT=5432
    env_file:
      - db.env
    depends_on:
      - postgres-nextcloud
      - redis-nextcloud

  web:
    build: ./web
    restart: always
    volumes:
      - /var/www/cloud.domain.com:/var/www/html:ro
    environment:
      - VIRTUAL_HOST=cloud.domain.com
      - LETSENCRYPT_HOST=cloud.domain.com
      - LETSENCRYPT_EMAIL=dev@domain.com
    depends_on:
      - nextcloud
    networks:
      - proxy-tier
      - default

  cron:
    image: nextcloud:fpm-alpine
    restart: always
    volumes:
      - /var/www/cloud.domain.com:/var/www/html
    entrypoint: /cron.sh
    depends_on:
      - postgres-nextcloud
      - redis-nextcloud

但是根据我对网络服务器的了解,我还没有找到正确配置我的“本地”nginx 的方法。

我有许多其他网站,应用程序已经在使用这个 nginx 实例所有不同的配置都在 sites-available 目录中 Nextcloud 项目的配置名为 cloud.mydomain.com

使用这个 nginx 配置,我只得到一个未找到的文件。页

server {
  root /var/www/cloud.domain.com;
  server_name cloud.domain.com www.cloud.domain.com;

  index index.html index.htm index.php;

  charset utf-8;

  location / {
      try_files $uri $uri/ /index.php?$query_string;
      gzip_static on;
  }

  location = /favicon.ico { access_log off; log_not_found off; }
  location = /robots.txt  { access_log off; log_not_found off; }

  error_page 404 /index.php;

  location ~ .php$ {
      try_files $uri =404;
      fastcgi_split_path_info ^(.+.php)(/.+)$;
      fastcgi_pass localhost:8083;
      fastcgi_index index.php;
      include fastcgi_params;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      fastcgi_param PATH_INFO $fastcgi_path_info;
  }

  error_log  /var/log/nginx/error.log;
  access_log /var/log/nginx/access.log;

  listen [::]:443 ssl; # managed by Certbot
  listen 443 ssl; # managed by Certbot
  ssl_certificate /etc/letsencrypt/live/cloud.domain.com/fullchain.pem; # managed by Certbot
  ssl_certificate_key /etc/letsencrypt/live/cloud.domain.com/privkey.pem; # managed by Certbot
  include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
  ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

server {
  if ($host = www.cloud.domain.com) {
      return 301 https://$host$request_uri;
  } # managed by Certbot

  if ($host = cloud.domain.com) {
      return 301 https://$host$request_uri;
  } # managed by Certbot

  server_name cloud.domain.com www.cloud.domain.com;

  listen 80;
  listen [::]:80;
  return 404; # managed by Certbot
}

我知道 -fpm app 需要一个代理,但我真的不明白如何将它链接到我现有的 nginx 设置。 nginx 不在 docker 容器中运行。

谢谢你的时间!

stack overflow Configure nextcloud-fpm docker-compose with bare metal nginx
原文答案

答案:

作者头像

我知道的一种方法是在另一个容器中安装另一个 nginx,然后将这两个容器放在 docker 的一个网络中......

使用你的裸机 nginx 作为反向代理,然后将流量转发到容器中的 nginx 就可以了。

另一种方法是使用内置 Apache 服务器附带的镜像 nextcloud:latest。它实际上是内置 Web 服务器的第一种方式。

我听说有一些方法可以通过在 docker-compose 文件中设置网络模式来配置您的 docker 映像,使其表现得像安装在裸机(具有自己的公共 IP)上的服务,但我认为在 docker 中包含另一个 nginx 服务器更容易。 .

无论哪种方式,您在裸机上的现有服务都不会受到影响。