ONLYOFFICE的core代码研究

一、系统架构

在这里插入图片描述

二、工作原理

ONLYOFFICE主要包括四部分:①前端应用、②前端插件、③前端sdk库、④后台服务

后台服务主要作用是接受文件处理请求,然后对文档进行下载、转码、缓存等操作
前端sdk库起到承上启下的作用,封装对后台服务的操作,并为前端应用和插件提供可访问的API
前端应用会按照用户需求展示页面,并根据用户操作对后台服务发出请求。针对三种文档类型会有三个应用组合,每个应用组合中都有支持内嵌、web、移动端的入口
前端插件提供了方便扩展的在线处理系统的入口,可以按照需求增加各种插件。注意:前端插件会在预览时被禁用

三、二次开发实践

整个ONLYOFFICE都除了文档转码(core)部分为C++开发,其他全部使用Node.js开发

后台的主要服务(DocService,FileConverter,SpellChecker,Metrics)都是通过pkg打包成可执行文件,摆脱node环境的依赖
中文字体的生成的打包会通过 core中编译的工具 allfontsgen 来实现,可以在前端应用的编辑页面中展示中文字体(注意中文字体需要有中文family_name和英文family_name两个字体才可以正常生成中文)

四、自己的感想:

1.初步判断,只有core代码是无法单独运行起来的。虽然只有core部分为C++。Base64.csproj在VS2019上可以运行出一个启动框,可以添加doc文件,但是输出是乱码,button2按钮点了没反应,怀疑是要和其他组件配合。初期Laurent因为我们只负责C++,所以只给了core部分的代码。

2.前端页面:JavaScript、HTML
web服务器:一般是C/C++、Java、PHP多语言共同工作。

3.Node.js介绍

Node.js发布于2009年5月,由Ryan Dahl开发,是一个基于Chrom V8引擎的JavaScript运行环境,使用了一个事件驱动、非阻塞式I/O模型,让JavaScript运行在服务端的开发平台,它让JavaScript成为与PHP、Python、Perl、Ruby等服务端语言平起平坐的脚本语言。

简单的说 Node.js 就是运行在服务端的 JavaScript。Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台。Node.js 是一个事件驱动 I/O 服务端 JavaScript 环境,基于 Google 的 V8 引擎,V8 引擎执行 Javascript 的速度非常快,性能非常好。

4.进程间的通信
不经过内存的方式有两种
临时文件:A进程创建文件,把数据写入文件。B进程从文件中读出数据,删除文件。
②管道: | 管道操作符
本应写在屏幕上的内容,现在写入管道。 A|B。在Linux里用的比较多。



五、github网址

https://github.com/ONLYOFFICE/DocumentServer

六、本文出处

转载自:https://blog.csdn.net/binghe300/article/details/114276251

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安装 Nextcloud: 1. 安装 LAMP 或 LEMP 环境(推荐使用 LEMP) ```bash # 安装 epel-release 和 nginx sudo dnf install -y epel-release sudo dnf install -y nginx # 安装 MariaDB sudo dnf install -y mariadb-server mariadb # 启动 MariaDB sudo systemctl start mariadb # 设置 MariaDB 开机自启 sudo systemctl enable mariadb # 运行 MySQL 安全策略 sudo mysql_secure_installation # 安装 PHP-FPM 和相关的扩展 sudo dnf install -y php-fpm php-opcache php-gd php-mysqlnd php-json php-mbstring php-xml php-zip php-intl php-curl ``` 2. 安装 Nextcloud ```bash # 添加 Nextcloud 的存储库 sudo dnf install -y https://download.nextcloud.com/server/releases/nextcloud-22.2.0-1.noarch.rpm # 安装 Nextcloud sudo dnf install -y nextcloud # 配置 SELinux sudo setsebool -P httpd_can_network_connect_db 1 # 配置 Nginx sudo cp /usr/share/doc/nextcloud-22.2.0-1/nginx.example.conf /etc/nginx/conf.d/nextcloud.conf sudo vi /etc/nginx/conf.d/nextcloud.conf # 在 server {} 块中添加以下内容 location /nextcloud { alias /usr/share/webapps/nextcloud/; try_files $uri $uri/ /nextcloud/index.php?$query_string; location ~ ^/nextcloud/(?:build|tests|config|lib|3rdparty|templates|data)/ { deny all; } location ~ ^/nextcloud/(?:\.|autotest|occ|issue|indie|db_|console) { deny all; } location ~ ^/nextcloud/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) { fastcgi_split_path_info ^(.+\.php)(/.*)$; try_files $fastcgi_script_name =404; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param HTTPS on; fastcgi_param modHeadersAvailable true; fastcgi_param front_controller_active true; fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_intercept_errors on; fastcgi_request_buffering off; fastcgi_read_timeout 300; } } # 重新加载 Nginx 配置 sudo systemctl reload nginx # 配置数据库 sudo mysql -u root -p CREATE DATABASE nextcloud; CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost'; FLUSH PRIVILEGES; exit # 初始化 Nextcloud sudo -u http /usr/bin/php /usr/share/webapps/nextcloud/occ maintenance:install --database "mysql" --database-name "nextcloud" --database-user "nextcloud" --database-pass "password" --admin-user "admin" --admin-pass "password" ``` 3. 配置 HTTPS ```bash # 安装 Certbot sudo dnf install -y certbot python3-certbot-nginx # 获取证书 sudo certbot --nginx -d example.com # 自动更新证书 sudo vi /etc/crontab # 在最后添加以下内容 0 0 1 * * root /usr/bin/certbot renew --quiet && systemctl reload nginx ``` 安装 OnlyOffice: 1. 安装 Docker ```bash # 安装 Docker sudo dnf install -y dnf-plugins-core sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install -y docker-ce docker-ce-cli containerd.io # 启动 Docker sudo systemctl start docker # 设置 Docker 开机自启 sudo systemctl enable docker ``` 2. 安装 OnlyOffice ```bash # 创建目录 sudo mkdir -p /app/onlyoffice/DocumentServer/data # 创建 Docker 网络 sudo docker network create onlyoffice # 运行 OnlyOffice sudo docker run -i -t -d --restart=always --network=onlyoffice --name onlyoffice-document-server -v /app/onlyoffice/DocumentServer/data:/var/www/onlyoffice/Data onlyoffice/documentserver:latest # 配置 Nginx 反向代理 sudo vi /etc/nginx/conf.d/onlyoffice.conf # 添加以下内容 upstream onlyoffice { server 127.0.0.1:80; } server { listen 80; server_name onlyoffice.example.com; # Redirect all HTTP requests to HTTPS with a 301 Moved Permanently response. return 301 https://$host$request_uri; } server { listen 443 ssl http2; server_name onlyoffice.example.com; # SSL configuration ssl_certificate /etc/letsencrypt/live/onlyoffice.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/onlyoffice.example.com/privkey.pem; # SSL session caching ssl_session_cache shared:SSL:10m; ssl_session_timeout 5m; # SSL security ssl_protocols TLSv1.2 TLSv1.3; # OnlyOffice proxy location / { proxy_pass http://onlyoffice; proxy_redirect off; 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; } } # 重新加载 Nginx 配置 sudo systemctl reload nginx ``` 3. 配置 Nextcloud ```bash # 安装 OnlyOffice 应用 sudo -u http php /usr/share/webapps/nextcloud/occ app:install onlyoffice # 配置 OnlyOffice sudo -u http php /usr/share/webapps/nextcloud/occ config:app:set onlyoffice DocumentServerUrl --value="https://onlyoffice.example.com" sudo -u http php /usr/share/webapps/nextcloud/occ config:app:set onlyoffice DocumentServerInternalUrl --value="http://onlyoffice" sudo -u http php /usr/share/webapps/nextcloud/occ config:app:set onlyoffice StorageUrl --value="/nextcloud/remote.php/webdav/" sudo -u http php /usr/share/webapps/nextcloud/occ config:app:set onlyoffice StorageUrl --value="/nextcloud/remote.php/webdav/" sudo -u http php /usr/share/webapps/nextcloud/occ config:app:set onlyoffice DisableConfig --value="false" sudo -u http php /usr/share/webapps/nextcloud/occ config:app:set onlyoffice ForceSave --value="true" sudo -u http php /usr/share/webapps/nextcloud/occ config:app:set onlyoffice Secret --value="secret" sudo -u http php /usr/share/webapps/nextcloud/occ config:app:set onlyoffice JWTSecret --value="jwtsecret" sudo -u http php /usr/share/webapps/nextcloud/occ config:app:set onlyoffice JWTHeader --value="Authorization" sudo -u http php /usr/share/webapps/nextcloud/occ config:app:set onlyoffice VerifyPeerOff --value="true" ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值