[快速筆記]_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

  1. 验证 UFW 是否已启动并正在运行。 $ sudo ufw status UFW 防火墙表应显示,如果状态是 inactive允许 SSH 端口 22 并启动防火墙。 $ sudo ufw allow 22/tcp && sudo ufw enable
  2. 允许 Nextcloud 主容器端口 8080. $ sudo ufw allow 8080/tcp
  3. 允许 Nextcloud Talk 容器端口。 $ sudo ufw allow 3478/tcp && sudo ufw allow 3478/udp
  4. 允许 HTTP 端口 80. $ sudo ufw allow 80/tcp
  5. 允许端口上的 HTTPS 443. $ sudo ufw allow 443/tcp
  6. 因為是Proxy模式,記得開11000(或你自己想改的port) port $ sudo ufw allow 11000/tcp
  7. 重新启动防火墙以保存更改。 $ 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 配置文件中,如以下步骤所述。

  1. 验证 Snap 守护程序是否是最新的。 $ sudo snap install core; sudo snap refresh core
  2. 安装 Certbot Let’s Encrypt 工具。 $ sudo snap install --classic certbot
  3. 启用系统范围的 Certbot 命令。 $ sudo ln -s /snap/bin/certbot /usr/bin/certbot
  4. 为您的域生成新的 SSL 证书。 代替 nextcloudaio.example.com 使用您的有效域名和 user@example.com 使用您的实际电子邮件地址。 $ sudo certbot --nginx -d nextcloudaio.example.com -m user@example.com --agree-tos
  5. 测试 SSL 证书自动续订。 $ sudo certbot renew --dry-run
  6. 验证您的 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

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料