---
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 內設定 代理伺服器