--- tags: 環路硬碟, NextCloud, Docker, 社區網路, SSL, Https wts: title: '在社區網路內 Windows 架設 NextCloud' --- # 在社區網路內 Windows 架設 NextCloud (Docker/SSL) ## 環境: * Windows 10 / Docker * 要與社區網路公司申請網域名 (mapping 會跳轉到你的 AP 分亨器)。 * 要與社區網路公司申請開通 80 / 443 port * 在 AP 分亨器上設置固定的 ip 給要架設 nextcloud 的電腦 * 在 AP 分亨器上設置 NAT/虛擬伺服器 的對應 (或 DMZ) * 80 -> 192.168.1.101/8080 (範例, 192.168.1.101 即是要建立 nextcloud 的電腦) * 443 -> 192.168.1.101/443 ## 安裝 Docker Desktop [https://docs.docker.com/desktop/install/windows-install/] ## 參考 Github 上的 NextCloud [https://github.com/nextcloud/docker] * 移到下方的 [HTTPS - SSL encryption] 中有一個 example source code [https://github.com/nextcloud/docker/tree/master/.examples] * yam file 內容修改如下, 其中修改說明如下: * volumes 直接改為 OS 下的路徑避免 docker 重建時資料不見 (ex: ./@data, ./nextcloud ....),其中與範例不同的是將 proxy 目錄改為 @proxy * 承上,下方 vloumes 都可以註解(原方式是可以在 docker run 時給予設定) * 如 github 上說明設定 MYSQL_ROOT_PASSWORD, VIRTUAL_HOST, LETSENCRYPT_HOST, LETSENCRYPT_EMAIL, ports 的對應 ``` version: '3' services: db: image: mariadb:10.6 command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW restart: always volumes: - ./db:/var/lib/mysql:Z environment: - MYSQL_ROOT_PASSWORD=password - MARIADB_AUTO_UPGRADE=1 - MARIADB_DISABLE_UPGRADE_BACKUP=1 env_file: - db.env redis: image: redis:alpine restart: always app: image: nextcloud:apache restart: always volumes: - ./@data:/var/www/html/data:z - ./nextcloud:/var/www/html:z - ./@apps:/var/www/html/apps environment: - VIRTUAL_HOST=yourdomain - LETSENCRYPT_HOST=yourdomain - LETSENCRYPT_EMAIL=youremail - MYSQL_HOST=db - REDIS_HOST=redis env_file: - db.env depends_on: - db - redis networks: - proxy-tier - default cron: image: nextcloud:apache restart: always volumes: - ./nextcloud:/var/www/html:z entrypoint: /cron.sh depends_on: - db - redis proxy: build: ./@proxy restart: always ports: - 8080:80 - 443:443 labels: com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy: "true" volumes: - ./certs:/etc/nginx/certs:z,ro - ./vhost.d:/etc/nginx/vhost.d:z - ./html:/usr/share/nginx/html:z - /var/run/docker.sock:/tmp/docker.sock:z,ro networks: - proxy-tier # depends_on: # - omgwtfssl letsencrypt-companion: image: nginxproxy/acme-companion restart: always volumes: - ./certs:/etc/nginx/certs:z - ./acme:/etc/acme.sh:z - ./vhost.d:/etc/nginx/vhost.d:z - ./html:/usr/share/nginx/html:z - /var/run/docker.sock:/var/run/docker.sock:z,ro networks: - proxy-tier depends_on: - proxy # self signed # omgwtfssl: # image: paulczar/omgwtfssl # restart: "no" # volumes: # - ./certs:/certs # environment: # - SSL_SUBJECT=yourdomain # - CA_SUBJECT=my@example.com # - SSL_KEY=./certs/yourdomain.key # - SSL_CSR=./certs/yourdomain.csr # - SSL_CERT=./certs/yourdomain.crt # networks: # - proxy-tier #volumes: # db: # nextcloud: # certs: # acme: # vhost.d: # html: networks: proxy-tier: ``` * 依 github 上說明建立 * 不是指令執行完畢馬上可用,可能要等一些時間 ``` docker-compose up -d ``` 常用指令 ``` docker-compose up -d docker ps -a docker-compose down docker-compose stop docker-compose start docker-compose rm docker system prune -a docker logs xxxxx -f ``` * 修改 nextcloud config * 在 nextcloud\config\config.php trusted_domains 中允許 yourdomain ``` 'trusted_domains' => array ( 0 => 'yourdomain', 1 => '192.168.1.101', ), ``` 改為走 https ``` 'overwrite.cli.url' => 'https://yourdomain', 'overwriteprotocol' => 'https',#修改協定 ``` * 內部 wifi 設備 (電腦) 無法連到 yourdomain 解決方法 * windows : 在 hosts file 中建立 mapping 即可 ``` 192.168.1.101 yourdomain (sakurazhan254-1.tc.kingnet.net.tw) * 內部 wifi 設備 (手機, 以 iphone 為例) [參考](https://www.minwt.com/mac/22141.html) * 在主機上安裝 Charles * 在手機上 wifi 內設定 代理伺服器