{"id":2829,"date":"2025-03-23T21:44:34","date_gmt":"2025-03-23T12:44:34","guid":{"rendered":"https:\/\/mattyan.net\/blog\/?p=2829"},"modified":"2025-03-23T21:44:34","modified_gmt":"2025-03-23T12:44:34","slug":"nextcloud%e3%81%aecollabora-office%e3%81%ab%e6%97%a5%e6%9c%ac%e8%aa%9e%e3%83%95%e3%82%a9%e3%83%b3%e3%83%88%e5%85%a5%e3%82%8c%e3%81%a6%e3%81%bf%e3%81%9f","status":"publish","type":"post","link":"https:\/\/mattyan.net\/blog\/?p=2829","title":{"rendered":"Nextcloud\u306eCollabora Office\u306b\u65e5\u672c\u8a9e\u30d5\u30a9\u30f3\u30c8\u5165\u308c\u3066\u307f\u305f"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Nextcloud\u306e\u30aa\u30d5\u30a3\u30b9\u30a2\u30d7\u30ea\u306b<a href=\"https:\/\/www.collaboraonline.com\/\">Collabora Office<\/a>\u3068\u3044\u3046\u3082\u306e\u304c\u3042\u3063\u305f\u306e\u3067\u3001\u4eee\u60f3\u74b0\u5883\u306b\u5165\u308c\u3066\u8a66\u3057\u3066\u307f\u305f\u30e1\u30e2\u66f8\u304d\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nextcloud\u306e\u30a2\u30d7\u30ea\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u753b\u9762\u304b\u3089\u300c<a href=\"https:\/\/nextcloud.com\/office\/\">Nextcloud Office<\/a>\u300d\u3068\u300c<a href=\"https:\/\/apps.nextcloud.com\/apps\/richdocumentscode\">Collabora Online &#8211; Built-in CODE Server<\/a>\u300d\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3061\u306a\u307f\u306bnextcloud\u306fpodman\u3067\u30b3\u30f3\u30c6\u30ca\u3092\u52d5\u304b\u3057\u3066\u3001nginx\u3067\u30ea\u30d0\u30fc\u30b9\u30d7\u30ed\u30af\u30b7\u3057\u3066\u308b\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u8a66\u3057\u306b\u8868\u793a<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u304c\u7d42\u308f\u3063\u305f\u3089\u8a2d\u5b9a\u3067\u300c\u30d3\u30eb\u30c8\u30a4\u30f3CODE\u3092\u4f7f\u3046\u300d\u306b\u8a2d\u5b9a\u3057\u3066\u3001\u30d5\u30a1\u30a4\u30eb\u304b\u3089\u9069\u5f53\u306aoffice\u30d5\u30a1\u30a4\u30eb\u306b\u30a2\u30af\u30bb\u30b9\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"550\" src=\"https:\/\/mattyan.net\/blog\/wp-content\/uploads\/2025\/03\/ncoffice_1-1024x550.png\" alt=\"\" class=\"wp-image-2830\" srcset=\"https:\/\/mattyan.net\/blog\/wp-content\/uploads\/2025\/03\/ncoffice_1-1024x550.png 1024w, https:\/\/mattyan.net\/blog\/wp-content\/uploads\/2025\/03\/ncoffice_1-300x161.png 300w, https:\/\/mattyan.net\/blog\/wp-content\/uploads\/2025\/03\/ncoffice_1-768x413.png 768w, https:\/\/mattyan.net\/blog\/wp-content\/uploads\/2025\/03\/ncoffice_1-1536x826.png 1536w, https:\/\/mattyan.net\/blog\/wp-content\/uploads\/2025\/03\/ncoffice_1.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">\u65e5\u672c\u8a9e\u30d5\u30a9\u30f3\u30c8\u304c\u5165\u3063\u3066\u3044\u306a\u3044\u305f\u3081\u3001\u65e5\u672c\u8a9e\u304c\u306a\u3044<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u65e5\u672c\u8a9e\u30d5\u30a9\u30f3\u30c8\u304c\u306a\u3044\u3089\u3057\u304f\u3001\u65e5\u672c\u8a9e\u304c\u307b\u307c\u8868\u793a\u3067\u304d\u306a\u3044\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u6d41\u77f3\u306b\u3053\u308c\u3067\u306f\u56f0\u308b\u306e\u3067\u8abf\u67fb\u3002\u3056\u3063\u304f\u308a\u30b0\u30b0\u3063\u3066\u307f\u305f\u3068\u3053\u308d\u3001\u300c\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u304b\u3051\u3070\u3044\u3044\u300d\u300c\u305f\u3060\u3057\u3001\u30d3\u30eb\u30c8\u30a4\u30f3\u30b5\u30fc\u30d0\u30fc\u3060\u3068\u3061\u3087\u3063\u3068\u9762\u5012\u300d\u3068\u306e\u3053\u3068\u3060\u3063\u305f\u3051\u3069\u3001<code class=\"\" data-line=\"\">custom_apps\/richdocumentscode\/proxy.php<\/code>\u3092\u773a\u3081\u3066\u305f\u3068\u3053\u308d<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-php\" data-line=\"\">\/\/ Remote font config URL (HTTPS only)\n$remoteFontConfig = &quot;&quot;;\nif (isset($_SERVER[&#039;HTTPS&#039;]) &amp;&amp; $_SERVER[&#039;HTTPS&#039;] !== &#039;off&#039;)\n{\n    $remoteFontConfigUrl = escapeshellarg(&quot;https:\/\/&quot; . $_SERVER[&#039;HTTP_HOST&#039;] . preg_replace(&quot;\/richdocumentscode.*$\/&quot;, &quot;richdocuments\/settings\/fonts.json&quot;, $_SERVER[&#039;REQUEST_URI&#039;]));\n    $remoteFontConfig = &quot;--o:remote_font_config.url=&quot; . $remoteFontConfigUrl;\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u3053\u3093\u306a\u611f\u3058\u306e\u30b3\u30fc\u30c9\u304c\u3042\u308a\u3001\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3068\u30d5\u30a9\u30f3\u30c8\u3055\u3048\u6e96\u5099\u3059\u308c\u3070\u3067\u304d\u305d\u3046\u306a\u96f0\u56f2\u6c17\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u898b\u305f\u611f\u3058\u3001<code class=\"\" data-line=\"\">\/cutom_apps\/richdocuments\/settings\/fonts.json<\/code>\u3092\u8aad\u307f\u306b\u884c\u304f\u3088\u3046\u306a\u306e\u3067\u3001<code class=\"\" data-line=\"\">richdocuments<\/code>\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u4ee5\u4e0b\u306bsettings\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u3063\u3066\u3001\u4ee5\u4e0b\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3092\u4fdd\u5b58<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-json\" data-line=\"\">{\n    &quot;kind&quot;: &quot;fontconfiguration&quot;,\n    &quot;server&quot;: &quot;192.168.122.17&quot;,\n    &quot;fonts&quot;: [\n        {\n            &quot;uri&quot;: &quot;https:\/\/192.168.122.17\/custom_apps\/richdocuments\/fonts\/TakaoGothic.ttf&quot;\n        }\n    ]\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u6b21\u306b<code class=\"\" data-line=\"\">custom_apps\/richdocuments\/fonts\/TakaoGothic.ttf<\/code>\u3092\u8aad\u3080\u3088\u3046\u306b\u6307\u5b9a\u3057\u3066\u308b\u306e\u3067\u3001\u305d\u3053\u306b\u30d5\u30a9\u30f3\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u914d\u7f6e\u3002\u30d5\u30a9\u30f3\u30c8\u306f\u4f55\u304b\u3068\u3088\u304f\u4f7f\u3063\u3066\u308b<a href=\"https:\/\/launchpad.net\/takao-fonts\">Takao\u30d5\u30a9\u30f3\u30c8<\/a>\u3092\u4f7f\u7528\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u3061\u3087\u3063\u3068\u56f0\u3063\u305f<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e00\u5fdc\u3053\u308c\u3060\u3051\u3067\u65e5\u672c\u8a9e\u304c\u8868\u793a\u3067\u304d\u308b\u304b\u3068\u601d\u3063\u305f\u3051\u3069\u3001\u56f0\u3063\u305f\u3053\u3068\u306b\u8868\u793a\u3067\u304d\u306a\u3044\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3042\u308c\u3053\u308c\u8abf\u3079\u305f\u611f\u3058\u3001nginx\u307e\u3067\u306fhttps\u306a\u3093\u3060\u3051\u3069nginx\u304b\u3089php\u307e\u3067\u304chttp\u901a\u4fe1\u306a\u306e\u3067<code class=\"\" data-line=\"\">$_SERVER[&#039;HTTPS&#039;]<\/code>\u304con\u306b\u306a\u3089\u305a\u3001\u30d5\u30a9\u30f3\u30c8\u8a2d\u5b9a\u3092\u898b\u306b\u884c\u304b\u306a\u3044\u3089\u3057\u3044\u3002<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"412\" height=\"283\" src=\"https:\/\/mattyan.net\/blog\/wp-content\/uploads\/2025\/03\/net.png\" alt=\"\" class=\"wp-image-2831\" srcset=\"https:\/\/mattyan.net\/blog\/wp-content\/uploads\/2025\/03\/net.png 412w, https:\/\/mattyan.net\/blog\/wp-content\/uploads\/2025\/03\/net-300x206.png 300w\" sizes=\"auto, (max-width: 412px) 100vw, 412px\" \/><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">\u3061\u3087\u3063\u3068\u7720\u3044\u76ee\u64e6\u3063\u3066\u8abf\u3079\u305f\u3051\u3069\u3069\u3046\u306b\u3082\u3046\u307e\u304f\u3044\u304b\u306a\u304b\u3063\u305f\u306e\u3067<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-diff\" data-line=\"\">*** proxy.php \n--- custom_apps\/richdocumentscode\/proxy.php\n***************\n*** 80,85 ****\n--- 80,86 ----\n\n      \/\/ Remote font config URL (HTTPS only)\n      $remoteFontConfig = &quot;&quot;;\n+     $_SERVER[&#039;HTTPS&#039;] = &#039;on&#039;;\n      if (isset($_SERVER[&#039;HTTPS&#039;]) &amp;&amp; $_SERVER[&#039;HTTPS&#039;] !== &#039;off&#039;)\n      {\n          $remoteFontConfigUrl = escapeshellarg(&quot;https:\/\/&quot; . $_SERVER[&#039;HTTP_HOST&#039;] . preg_replace(&quot;\/richdocumentscode.*$\/&quot;, &quot;richdocuments\/settings\/fonts.json&quot;, $_SERVER[&#039;REQUEST_URI&#039;]));<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u76f4\u524d\u3067\u7121\u7406\u3084\u308aon\u306b\u3057\u3066nextcloud\u3092\u518d\u8d77\u52d5\u3057\u3066\u30c6\u30b9\u30c8\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"550\" src=\"https:\/\/mattyan.net\/blog\/wp-content\/uploads\/2025\/03\/ncoffice_2-1024x550.png\" alt=\"\" class=\"wp-image-2832\" srcset=\"https:\/\/mattyan.net\/blog\/wp-content\/uploads\/2025\/03\/ncoffice_2-1024x550.png 1024w, https:\/\/mattyan.net\/blog\/wp-content\/uploads\/2025\/03\/ncoffice_2-300x161.png 300w, https:\/\/mattyan.net\/blog\/wp-content\/uploads\/2025\/03\/ncoffice_2-768x413.png 768w, https:\/\/mattyan.net\/blog\/wp-content\/uploads\/2025\/03\/ncoffice_2-1536x826.png 1536w, https:\/\/mattyan.net\/blog\/wp-content\/uploads\/2025\/03\/ncoffice_2.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">\u65e5\u672c\u8a9e\u30d5\u30a9\u30f3\u30c8\u304c\u8aad\u307f\u8fbc\u307e\u308c\u3066\u3001\u65e5\u672c\u8a9e\u304c\u8868\u793a\u53ef\u80fd\u306b<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u306a\u3093\u3068\u304bTakao\u30d5\u30a9\u30f3\u30c8\u304c\u8aad\u307f\u8fbc\u307e\u308c\u3066\u3001\u65e5\u672c\u8a9e\u304c\u8868\u793a\u53ef\u80fd\u306b\u306a\u3063\u305f\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u3042\u3068\u306f\u3053\u308c\u3092\u30e1\u30a4\u30f3\u306e\u30b5\u30fc\u30d0\u30fc\u306b\u5165\u308c\u3066\u30c6\u30b9\u30c8\u3060\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nextcloud\u306e\u30aa\u30d5\u30a3\u30b9\u30a2\u30d7\u30ea\u306bCollabora Office\u3068\u3044\u3046\u3082\u306e\u304c\u3042\u3063\u305f\u306e\u3067\u3001\u4eee\u60f3\u74b0\u5883\u306b\u5165\u308c\u3066\u8a66\u3057\u3066\u307f\u305f\u30e1\u30e2\u66f8\u304d\u3002 \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb Nextcloud\u306e\u30a2\u30d7\u30ea\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u753b\u9762\u304b\u3089\u300cNextcloud Offi &hellip; <a href=\"https:\/\/mattyan.net\/blog\/?p=2829\" class=\"more-link\">\u7d9a\u304d\u3092\u8aad\u3080 <span class=\"screen-reader-text\">Nextcloud\u306eCollabora Office\u306b\u65e5\u672c\u8a9e\u30d5\u30a9\u30f3\u30c8\u5165\u308c\u3066\u307f\u305f<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-2829","post","type-post","status-publish","format-standard","hentry","category-3"],"_links":{"self":[{"href":"https:\/\/mattyan.net\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2829","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mattyan.net\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mattyan.net\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mattyan.net\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mattyan.net\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2829"}],"version-history":[{"count":3,"href":"https:\/\/mattyan.net\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2829\/revisions"}],"predecessor-version":[{"id":2835,"href":"https:\/\/mattyan.net\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2829\/revisions\/2835"}],"wp:attachment":[{"href":"https:\/\/mattyan.net\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2829"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mattyan.net\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2829"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mattyan.net\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2829"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}