[快速筆記]_NEXTCLOUD AIO 架設筆記
NEXTCLOUD架設的方法有好幾種,不過相對整合性高的docker架法,其實配上Nginx有一些眉角在
不過官方Github wiki文件其實有寫到,我這邊挑一下我自己的環境來講重點
基本上架構是A機器跟B機器
A機器上跑Nginx當作反向代理,然後透過網域來反向代理引導至B機器
而且這個方法似乎一定需要有一個外部domain name,沒有的話…我也不知道怎麼做XDD
大概是跟現在常常對網外分享的需求大增所做的因應吧?
拉回正題,這邊先講一下B機器的設置方式:
沒裝dokcer的裝一下
curl -fsSL get.docker.com | sudo sh
接著如果跟我依樣想用Nginx反向代理到內網的其他機器,可以用這段指令起docer
參考:https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md#2-use-this-startup-command
sudo docker run \
--sig-proxy=false \
--name nextcloud-aio-mastercontainer \
--restart always \
--publish 8080:8080 \
-e APACHE_PORT=11000 \
--volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \
--volume /var/run/docker.sock:/var/run/docker.sock:ro \
nextcloud/all-in-one:latest
然後防火牆這段引用:https://bynss.com/linux/1009545.html
- 验证 UFW 是否已启动并正在运行。
$ sudo ufw status
UFW 防火墙表应显示,如果状态是inactive
允许 SSH 端口22
并启动防火墙。$ sudo ufw allow 22/tcp && sudo ufw enable
- 允许 Nextcloud 主容器端口
8080
.$ sudo ufw allow 8080/tcp
- 允许 Nextcloud Talk 容器端口。
$ sudo ufw allow 3478/tcp && sudo ufw allow 3478/udp
- 允许 HTTP 端口
80
.$ sudo ufw allow 80/tcp
- 允许端口上的 HTTPS
443
.$ sudo ufw allow 443/tcp
- 因為是Proxy模式,記得開11000(或你自己想改的port) port $ sudo ufw allow 11000/tcp
- 重新启动防火墙以保存更改。
$ sudo ufw reload
基本上B server這裡告一段落,就是這麼簡單。
接著是A server這邊的Nginx設置
我這邊花了一點時間搞,後來發現還是配官方的範例微調比較ok:
https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md#nginx
先這樣新增一下NEXTCLOUD的站點 for Nginx,記得要改一下你要入口的domain name,例如nextcloud.AMDYES.tw
sudo nano /etc/nginx/sites-available/your_domain
然後填入proxy相關設定,注意黃色的部分
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
listen [::]:80; # comment to disable IPv6
if ($scheme = "http") {
return 301 https://$host$request_uri;
}
listen 443 ssl http2;
listen [::]:443 ssl http2; # comment to disable IPv6
server_name nextcloud.AMDYES.tw;
location / {
resolver localhost;
proxy_pass http://192.168.1.110:11000$request_uri;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 0;
# Websocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
ssl_certificate /etc/letsencrypt/live/nextcloud.AMDYES.tw/fullchain.pem; # managed by certbot on host machine
ssl_certificate_key /etc/letsencrypt/live/nextcloud.AMDYES.tw/privkey.pem; # managed by certbot on host machine
ssl_session_timeout 1d;
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
}
存檔後,我們要來用Let’s encrypte 的自動SSL renew程式來幫我們申請憑證
這段一樣借用前人的文章:https://bynss.com/linux/1009545.html
生成 SSL 证书
Nextcloud AIO 需要有效的 SSL 证书才能在您的域上运行。 使用 Certbot 生成免费的 Let’s Encrypt 证书并将其添加到您的 Nginx 配置文件中,如以下步骤所述。
- 验证 Snap 守护程序是否是最新的。
$ sudo snap install core; sudo snap refresh core
- 安装 Certbot Let’s Encrypt 工具。
$ sudo snap install --classic certbot
- 启用系统范围的 Certbot 命令。
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
- 为您的域生成新的 SSL 证书。 代替
nextcloudaio.example.com
使用您的有效域名和[email protected]
使用您的实际电子邮件地址。$ sudo certbot --nginx -d nextcloudaio.example.com -m [email protected] --agree-tos
- 测试 SSL 证书自动续订。
$ sudo certbot renew --dry-run
- 验证您的 Nginx 文件是否包含 Certbot 添加的新 SSL 配置。
$ cat
/etc/nginx/sites-available/your_domain
然後做一下軟連接(參考文章:https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-20-04)
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/
檢查一下設定檔有沒有錯誤
sudo nginx -t
重啟Nginx
sudo systemctl restart nginx
之後可以輸入B機器的ip:8080進去config
config基本上就按畫面操作,記得看清楚在下一步,有一些default password需要先存起來,不然忘了就得重新把container砍了重做…
這邊也提供了一下快速重頭來的指令
sudo docker stop nextcloud-aio-mastercontainer;
sudo docker stop nextcloud-aio-domaincheck;
sudo docker container prune;
sudo docker network rm nextcloud-aio;
sudo docker volume prune
另外要注意的是如果NEXTCLOUD第一次初始化的時候會需要花一點時間,所以當domain_check過了之後
會依照你的需求去勾選要安裝的套件等等,裝越多等越久,裝好之後假設Apach或者Nextcloud都還在Starting,請耐心等待…
之後請用你前面做的domain name進入站台~就算安裝告一段落
Leave a comment
很抱歉,必須登入網站才能發佈留言。