mac使用docker部署nextcloud-aio并为本地域名添加https支持(未成功)
请注意这是一次未成功的经历。想要在本地部署一个nextcloud talk,奈何nextcloud talk必须使用https,因此必须使用域名。如果不管https,直接在本地添加hosts或者使用本地DNS也不行,必须要用合法的SSL证书。
注意
请注意这是一次未成功的经历
基本原理是使用Caddy进行一个本地的反向代理。Caddy服务器是一个开源的,使用 Golang 编写,支持 HTTP/2 的 Web 服务端。它使用Golang 标准库提供HTTP 功能。 Caddy 一个显著的特性是默认启用HTTPS。它是第一个无需额外配置即可提供HTTPS 特性的Web 服务器。
假设域名为
peacecloud.local
或者你想一个局域网用的名称,必须含.号。生成证书,在当前文件夹执行命令
openssl req -x509 -newkey rsa:2048 -nodes -keyout test.key -out test.pem -days 3650
注意会提示需要输入必要的信息,执行完毕会在当前路径生成test.key和test.pem。
- 配置代理
在当前文件夹中,新建一个文件命名为Caddyfile
,文件内容如下,注意替换其中的域名为你的域名,localhost:11000为实际需要访问的地址:
https://peacecloud.local:443 {
tls /etc/caddy/pem.pem /etc/caddy/key.key
reverse_proxy localhost:11000
}
2
3
4
- 通过docker启动candy,安装代理
docker run -d --name caddy --network host --restart always -v $PWD/Caddyfile:/etc/caddy/Caddyfile -v $PWD/test.pem:/etc/caddy/pem.pem -v $PWD/test.key:/etc/caddy/key.key -v caddy_data:/data caddy
- 启动nextcloud-aio
docker run --init --sig-proxy=false --name nextcloud-aio-mastercontainer --restart always --publish 8080:8080 --env APACHE_PORT=11000 --env APACHE_IP_BINDING=0.0.0.0 --env SKIP_DOMAIN_VALIDATION=true --volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config --volume /var/run/docker.sock:/var/run/docker.sock:ro nextcloud/all-in-one:latest
注意以上命令并不适用于MACOS,如果是MAC,需要把/var/run/docker.sock
替换为/var/run/docker.sock.raw
。
注意
特别注意: docker desktop mac版和windows版不支持network_mode: host
。
# 直接使用docker-compose文件
version: "3.8"
services:
caddy:
image: caddy:alpine
restart: unless-stopped
container_name: caddy
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./caddydata:/data
- ./pem.pem:/etc/caddy/pem.pem
- ./key.key:/etc/caddy/key.key
networks:
- nextcloud-aio
nextcloud:
image: nextcloud/all-in-one:latest
restart: unless-stopped
container_name: nextcloud-aio-mastercontainer
ports:
- "8080:8080"
environment:
- APACHE_PORT=11000
- APACHE_IP_BINDING=0.0.0.0
- SKIP_DOMAIN_VALIDATION=true
volumes:
- nextcloud_aio_mastercontainer:/mnt/docker-aio-config
- /var/run/docker.sock.raw:/var/run/docker.sock:ro
depends_on:
- caddy
volumes:
nextcloud_aio_mastercontainer:
name: nextcloud_aio_mastercontainer
networks:
nextcloud-aio:
external: true
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# 失败原因
nextcloud必须要有https证书,且不支持自签证书。使用自签证书之后,加入talk的时候会说internal error,查看日志一堆curl的错误,都是说证书的问题。
- 02
- containerd高版本换源,containerd换源无效问题11-07
- 03
- apt-get使用代理11-05