Nginx

docker-compose 與 nginx 和 nextcloud FPM 停止接受 https 連接

  • June 30, 2021

我有一個相當標準的設置,使用 nginx 作為 Web 前端(帶有 https 證書等)和 nextcloud FPM 後端;整個安裝的流量非常低,因為我是唯一一個使用它的人。

在某一時刻 https 停止工作,來自外部的每個連接都會導致超時或連接被拒絕;在這種情況下,似乎 nextcloud 正在工作,而 nginx 沒有。我認為這可能與我的主機上的一些節能有關,但事實並非如此,因為同一主機上的所有其他容器都可以正常工作;有趣的是,有一種簡單的方法可以讓它再次工作,那就是在主機上打開一個 shell 並執行以下操作:

cd $NEXTCLOUD_DIRECTORY

其中 NEXTCLOUD_DIRECTORY 是應用程序的基本目錄,docker-compose.yml 文件和數據目錄都在其中(位於 $HOME/docker/nextcloud-letsencrypt)。

我只是不明白為什麼會發生這種情況以及為什麼該操作是一種解決方案…

這是我的撰寫文件:

version: '3'
 services:
   nginx:
     image: nginx:alpine
     ports:
       - "80:80"
       - "127.0.0.1:8443:443"
     volumes:
       - ./data/nginx:/etc/nginx/conf.d
       - ./data/certbot/conf:/etc/letsencrypt
       - ./data/certbot/www:/var/www/certbot
       - ./data/nextcloud/www:/var/www/html:ro
       - ./data/nextcloud/apps:/var/www/html/custom_apps:ro
     restart: unless-stopped
     command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"
   certbot:
     image: certbot/certbot
     volumes:
       - ./data/certbot/conf:/etc/letsencrypt
       - ./data/certbot/www:/var/www/certbot
     entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
     restart: unless-stopped
   cloud-db:
     container_name: ${DB_CONTAINER_NAME}
     image: mariadb:${DB_IMAGE_TAG}
     restart: unless-stopped
     command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
     volumes:
       ...
     environment:
       MYSQL_DATABASE: ${MYSQL_DATABASE}
       MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
       MYSQL_USER: ${MYSQL_USER}
       MYSQL_PASSWORD: ${MYSQL_PASSWORD}
   app:
    image: nextcloud:21-fpm-alpine
    links:
      - cloud-db
    user: "1000:1004"
    volumes:
      - ./data/nextcloud/www:/var/www/html
      - ./data/nextcloud/apps:/var/www/html/custom_apps
      - ./data/nextcloud/config:/var/www/html/config
      - /mnt/usb/shared/nextcloud:/var/www/html/data
      - /mnt/usb/Expansion_2/serie:/mnt/serie:ro
      - /mnt/usb/archivio/archivio:/mnt/archivio:ro
    restart: unless-stopped

./data 位於根 FS 中,在使用者 1000 的主目錄中。

/mnt/usb/shared/nextcloud 在 ext4 USB 驅動器上(ext4 預設值,nofail 0 0),R/W 給使用者

/mnt/usb/Expansion_2 是另一個通過 NC 服務的 ex4 USB 驅動器(ext4 預設值,nofail 0 0)(它們在 NC 中註冊為外部儲存)

似乎解決方案是使用 restart:always 而不是“除非停止”。我真的不知道為什麼我需要它,因為沒有人停止容器,所以它們應該無限期地執行,就像我在同一台機器上使用“除非停止”並無限期地保持下去的許多其他容器一樣。

引用自:https://serverfault.com/questions/1067402