静看光阴荏苒
不管不顾不问不说也不念

OpenCloud:开源文件共享与协作平台

不知道大伙还记得ownCloud吗,一个用PHP写的网盘程序,Nextcloud就是它的分支项目。

由于ownCloud的性能饱受诟病,所以ownCloud的开发团队几年前就用Go重写了一个ownCloud Infinite Scale(oCIS),我之前还写过一篇部署的文章,但是当时oCIS的完成度还比较低,缺少很多功能。

转眼间又是几年时间过去了,oCIS也有一个分支了,就是今天要给大伙介绍的:OpenCloud。我部署试了一下,完成度很高了,用在生产环境完全没问题,所以特地写篇文章推荐一下,个人网盘又多了一个新的选择。

下面简单列出目前OpenCloud拥有的功能(摘自项目页面):

🚀 快速、简单、干净的用户界面
⌨️ 用于快速选择文件的键盘快捷键
🖱️ 拖放支持
🔍 强大的搜索功能,可按名称、全文、OCR、文件类型、日期或标签进行搜索
🔄 可靠、容错的文件同步
🔗 灵活的共享选项
🌐 通过公开链接共享文件
🗂️工作区:专用项目文件夹,旨在简化团队协作
🛠️ 与 Markdown 编辑器(ToastUI)和 Web Office(Collabora)等工具集成
🕒 文件历史记录可跟踪更改并恢复以前的版本
📱 多设备同步,可在所有设备上离线访问

开始部署前,我们需要做一些准备工作:

1.一台内存至少4GB的服务器。(如果不部署clamav反病毒软件、apache-tika全文搜索,内存只需1-2GB)

以下是我部署的全部服务所需的内存,供参考:

其中clamav反病毒软件的部署目前没有得到官方的支持,文中的部署方法是我自己琢磨出来的,但是我估计后续和官方实装的部署方法应该大差不差=-=

2.服务器的这些端口不能被其他程序占用:

80/443/9200/9300/9980

其中80/443端口给主机的NGINX使用,用于配置反向代理。

3.添加3个域名解析A记录:

cloud.example.com
collabora.example.com
wopiserver.example.com

系统这块我使用的是Debian13,安装NGINX:

apt -y update
apt -y install curl nginx python3-certbot-nginx

安装Docker:

curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

克隆这个OpenCloud Compose存储库:

cd /opt
git clone https://github.com/opencloud-eu/opencloud-compose.git
cd opencloud-compose

复制一份环境变量配置文件并编辑:

cp .env.example .env
nano .env

这里只列出必须要修改的内容,其它没有在这里列出的内容可以保持默认值:

#INSECURE=true
COMPOSE_FILE=docker-compose.yml:weboffice/collabora.yml:external-proxy/opencloud.yml:external-proxy/collabora.yml:search/tika.yml:radicale/radicale.yml:antivirus/clamav.yml
OC_DOMAIN=cloud.example.com
INITIAL_ADMIN_PASSWORD=yourpassword
OC_CONFIG_DIR=/opt/opencloud-compose/opencloud_config
OC_DATA_DIR=/opt/opencloud-compose/opencloud_data
START_ADDITIONAL_SERVICES="notifications,antivirus"
COLLABORA_DOMAIN=collabora.example.com
WOPISERVER_DOMAIN=wopiserver.example.com
COLLABORA_ADMIN_USER=imlala
COLLABORA_ADMIN_PASSWORD=yourpassword
ANTIVIRUS_MAX_SCAN_SIZE=512MB
CLAMAV_DOCKER_TAG=stable_base
RADICALE_DATA_DIR=/opt/opencloud-compose/radicale_data

1.OC_DOMAIN、COLLABORA_DOMAIN、WOPISERVER_DOMAIN修改为你的域名。

2.INITIAL_ADMIN_PASSWORD设置你的OpenCloud管理员密码。管理员的默认用户名是:admin。

3.COLLABORA_ADMIN_USER、COLLABORA_ADMIN_PASSWORD设置你的COLLABORA管理员用户名和密码。

4.如果不使用clamav反病毒功能,删除COMPOSE_FILE内的如下内容:

COMPOSE_FILE=docker-compose.yml:weboffice/collabora.yml:external-proxy/opencloud.yml:external-proxy/collabora.yml:search/tika.yml:radicale/radicale.yml:antivirus/clamav.yml

修改START_ADDITIONAL_SERVICES的值为如下内容:

START_ADDITIONAL_SERVICES="notifications"

注释掉如下内容:

ANTIVIRUS_MAX_SCAN_SIZE=512MB
CLAMAV_DOCKER_TAG=stable_base

5.如果不使用apache-tika全文搜索功能,删除如下配置:

COMPOSE_FILE=docker-compose.yml:weboffice/collabora.yml:external-proxy/opencloud.yml:external-proxy/collabora.yml:search/tika.yml:radicale/radicale.yml:antivirus/clamav.yml

6.如果不使用radicale的日历、联系人功能,删除如下配置:

COMPOSE_FILE=docker-compose.yml:weboffice/collabora.yml:external-proxy/opencloud.yml:external-proxy/collabora.yml:search/tika.yml:radicale/radicale.yml:antivirus/clamav.yml

注释掉如下内容:

RADICALE_DATA_DIR=/opt/opencloud-compose/radicale_data

创建所需的目录/给予正确的权限:

mkdir /opt/opencloud-compose/opencloud_config
mkdir /opt/opencloud-compose/opencloud_data
mkdir /opt/opencloud-compose/radicale_data # 不使用radicale可不创建
chown -R 1000:1000 opencloud_config
chown -R 1000:1000 opencloud_data
chown -R 1000:1000 radicale_data # 不使用radicale可不执行

配置clamav反病毒,创建一个名为antivirus的目录并在目录内新建一个名为clamav.yml的compose配置文件:

mkdir /opt/opencloud-compose/antivirus && cd /opt/opencloud-compose/antivirus && nano clamav.yml

写入如下内容:

services:
  opencloud:
    environment:
      ANTIVIRUS_SCANNER_TYPE: "clamav"
      ANTIVIRUS_CLAMAV_SOCKET: "/var/run/clamav/clamd.sock"
      ANTIVIRUS_MAX_SCAN_SIZE_MODE: ${ANTIVIRUS_MAX_SCAN_SIZE_MODE:-partial}
      ANTIVIRUS_MAX_SCAN_SIZE: ${ANTIVIRUS_MAX_SCAN_SIZE:-100MB}
      POSTPROCESSING_STEPS: "virusscan"
      STORAGE_USERS_DATA_GATEWAY_URL: http://opencloud:9200/data
    volumes:
      - "clamav-socket:/var/run/clamav"
  clamav:
    image: clamav/clamav:${CLAMAV_DOCKER_TAG:-latest}
    networks:
      opencloud-net:
    volumes:
      - "clamav-socket:/tmp"
      - "clamav-db:/var/lib/clamav"
    logging:
      driver: ${LOG_DRIVER:-local}
    restart: always
volumes:
  clamav-socket:
  clamav-db:

启动:

docker compose up -d

启动之后collaboration服务的容器可能会不正常,一直重启,但是没关系这是预期行为,等到我们配置好反向代理后就会恢复。

现在就来配置反向代理,新建NGINX站点配置文件:

nano /etc/nginx/sites-available/opencloud

写入如下内容:

server {
    listen 80;
    server_name cloud.example.com;
    client_max_body_size 0;

    location / {
        proxy_pass http://127.0.0.1:9200;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

server {
    listen 80;
    server_name collabora.example.com;
    client_max_body_size 0;

    location / {
        proxy_pass http://127.0.0.1:9980;
        proxy_set_header Host $host;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
    }
}

server {
    listen 80;
    server_name wopiserver.example.com;
    client_max_body_size 0;

    location / {
        proxy_pass http://127.0.0.1:9300;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

启用站点:

ln -s /etc/nginx/sites-available/opencloud /etc/nginx/sites-enabled/opencloud

签发SSL证书:

certbot --nginx --email example@lala.im --agree-tos --no-eff-email

两个WebUI将在如下网址提供访问:

https://cloud.example.com
https://collabora.example.com/browser/dist/admin/admin.html

使用管理员账号登录:

简单测试一下功能是否正常,全文搜索功能,新建一个docx文档,输入一段文字保存,在搜索栏搜索文档内的文字,可以搜到结果:

clamav防护测试,新建一个txt文本文件,输入测试代码,点击保存,弹出通知:

查看clamav日志:

docker compose -f docker-compose.yml -f /opt/opencloud-compose/antivirus/clamav.yml logs -f clamav

也可以看到日志内显示了相关的内容,说明配置正常:

总的来说OpenCloud还是非常不错的,我感觉要是能加个离线下载功能(aria2、qbittorrent)就更完美了。OpenCloud目前还在积极开发中,潜力很大,值得期待!

赞(2)
未经允许不得转载:荒岛 » OpenCloud:开源文件共享与协作平台
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

分享创造快乐

广告合作资源投稿