🔐로그인하면 문서 작성, 프로젝트 게시, ZIP 기반 버전 업로드, 브랜치 생성 기능을 사용할 수 있습니다. 로그인하러 가기
비교 대상 선택
추가 0줄 삭제 0줄 변경 0줄 동일 190줄
r2 고아링크삭제
2026-04-17 19:24

#운영 #NSFW

요약

이 문서는 Ubuntu에서 T2Editor 9.1.0의 NSFWJS 브라우저 필터를 self-hosted 방식으로 배포할 때 필요한 운영 절차를 정리합니다. 기본 전제는 vendor/ 아래에 TensorFlow.js, backend 스크립트, NSFWJS, MobileNetV2Mid 모델을 직접 배치하는 것입니다.

설치 대상 예시

이 문서는 아래 설치 위치를 예시로 사용합니다.

text
/var/www/html/plugin/editor/t2editor/

웹 경로는 보통 아래처럼 맞춰야 합니다.

php
define('T2EDITOR_URL', '/plugin/editor/t2editor');

준비

필요 패키지 예시:

bash
sudo apt update sudo apt install -y curl git

권장 디렉터리 구조

text
/plugin/editor/t2editor/vendor/ tfjs/ tfjs-backend-webgl/ tfjs-backend-webgpu/ tfjs-backend-wasm/ nsfwjs/ nsfwjs/models/mobilenet_v2_mid/

수동 설치 예시

bash
sudo mkdir -p /var/www/html/plugin/editor/t2editor/vendor/{tfjs,tfjs-backend-webgl,tfjs-backend-webgpu,tfjs-backend-wasm,nsfwjs,nsfwjs/models} cd /var/www/html/plugin/editor/t2editor/vendor sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@4.22.0/dist/tf.min.js \ -o tfjs/tf.min.js sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-webgl@4.22.0/dist/tf-backend-webgl.min.js \ -o tfjs-backend-webgl/tf-backend-webgl.min.js sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-webgpu@4.22.0/dist/tf-backend-webgpu.min.js \ -o tfjs-backend-webgpu/tf-backend-webgpu.min.js sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tf-backend-wasm.min.js \ -o tfjs-backend-wasm/tf-backend-wasm.min.js sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tfjs-backend-wasm.wasm \ -o tfjs-backend-wasm/tfjs-backend-wasm.wasm sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tfjs-backend-wasm-simd.wasm \ -o tfjs-backend-wasm/tfjs-backend-wasm-simd.wasm sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tfjs-backend-wasm-threaded-simd.wasm \ -o tfjs-backend-wasm/tfjs-backend-wasm-threaded-simd.wasm sudo curl -L https://cdn.jsdelivr.net/npm/nsfwjs@2.4.2/dist/nsfwjs.min.js \ -o nsfwjs/nsfwjs.min.js

모델 폴더는 배포 방식에 따라 수동 복사 또는 저장소에서 별도 수집해 배치합니다.

퍼미션 예시

bash
sudo chown -R www-data:www-data /var/www/html/plugin/editor/t2editor/vendor sudo find /var/www/html/plugin/editor/t2editor/vendor -type d -exec chmod 755 {} \; sudo find /var/www/html/plugin/editor/t2editor/vendor -type f -exec chmod 644 {} \;

설정 점검

editor.lib.php에서 아래 값이 실제 설치 위치와 맞는지 확인합니다.

php
define('T2EDITOR_URL', '/plugin/editor/t2editor'); define('T2_NSFW_RUNTIME_ASSET_BASE', T2EDITOR_URL . '/vendor'); define('T2_NSFW_BROWSER_MODEL', 'MobileNetV2Mid'); define('T2_NSFW_BROWSER_MODEL_TYPE', 'graph'); define('T2_NSFW_BROWSER_MODEL_URL', T2_NSFW_RUNTIME_ASSET_BASE . '/nsfwjs/models/mobilenet_v2_mid/model.json'); define('T2_NSFW_BROWSER_BACKEND_PRIORITY', 'webgpu,webgl,wasm,cpu');

동작 확인

아래 URL이 브라우저 또는 curl -I에서 200 응답이어야 합니다.

text
/plugin/editor/t2editor/vendor/tfjs/tf.min.js /plugin/editor/t2editor/vendor/tfjs-backend-webgpu/tf-backend-webgpu.min.js /plugin/editor/t2editor/vendor/tfjs-backend-wasm/tfjs-backend-wasm.wasm /plugin/editor/t2editor/vendor/nsfwjs/nsfwjs.min.js /plugin/editor/t2editor/vendor/nsfwjs/models/mobilenet_v2_mid/model.json

문제 해결

증상: 계속 loading만 보임

  • 모델 파일 또는 backend 스크립트가 404인지 확인
  • window.T2EDITOR_NSFW_RUNTIME_ASSETS가 올바른지 확인
  • 콘솔에서 import 오류가 없는지 확인

증상: WebGPU가 선택되지 않음

  • 브라우저가 WebGPU를 지원하는지 확인
  • WebGPU backend 스크립트가 실제로 로드되는지 확인
  • 너무 오래된 브라우저나 보안 정책 이슈가 없는지 확인

증상: WebGPU는 실패하고 CPU로만 감

  • webgl 또는 wasm 스크립트 누락 여부 확인
  • WASM 바이너리 3종이 모두 배치되었는지 확인
  • 폴백 순서 설정이 잘못되지 않았는지 확인
주의

운영에서 가장 흔한 실수는 “파일은 복사했는데 T2EDITOR_URL을 기존 기본값으로 둔 상태”입니다. 이 경우 파일이 서버에 있어도 브라우저는 전혀 다른 URL을 요청합니다.

수정 요약

이 문서가 다루는 9.1.0 운영 포인트는 아래와 같습니다.

  • CDN 의존이 아닌 self-hosted 구조
  • vendor 중심 정적 자산 배치
  • WebGPU 우선, WebGL/WASM/CPU 폴백
  • 모델 파일까지 포함한 정적 경로 검증
r3 정정 (2026-09-28, T2WIKI 편집): 표시용 판본 표기 복원. 원문은 리비전 이력에 남아 있습니다.
2026-09-28 19:18

#운영 #NSFW

요약

이 문서는 Ubuntu에서 T2Editor 9.1.0의 NSFWJS 브라우저 필터를 self-hosted 방식으로 배포할 때 필요한 운영 절차를 정리합니다. 기본 전제는 vendor/ 아래에 TensorFlow.js, backend 스크립트, NSFWJS, MobileNetV2Mid 모델을 직접 배치하는 것입니다.

설치 대상 예시

이 문서는 아래 설치 위치를 예시로 사용합니다.

text
/var/www/html/plugin/editor/t2editor/

웹 경로는 보통 아래처럼 맞춰야 합니다.

php
define('T2EDITOR_URL', '/plugin/editor/t2editor');

준비

필요 패키지 예시:

bash
sudo apt update sudo apt install -y curl git

권장 디렉터리 구조

text
/plugin/editor/t2editor/vendor/ tfjs/ tfjs-backend-webgl/ tfjs-backend-webgpu/ tfjs-backend-wasm/ nsfwjs/ nsfwjs/models/mobilenet_v2_mid/

수동 설치 예시

bash
sudo mkdir -p /var/www/html/plugin/editor/t2editor/vendor/{tfjs,tfjs-backend-webgl,tfjs-backend-webgpu,tfjs-backend-wasm,nsfwjs,nsfwjs/models} cd /var/www/html/plugin/editor/t2editor/vendor sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@4.22.0/dist/tf.min.js \ -o tfjs/tf.min.js sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-webgl@4.22.0/dist/tf-backend-webgl.min.js \ -o tfjs-backend-webgl/tf-backend-webgl.min.js sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-webgpu@4.22.0/dist/tf-backend-webgpu.min.js \ -o tfjs-backend-webgpu/tf-backend-webgpu.min.js sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tf-backend-wasm.min.js \ -o tfjs-backend-wasm/tf-backend-wasm.min.js sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tfjs-backend-wasm.wasm \ -o tfjs-backend-wasm/tfjs-backend-wasm.wasm sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tfjs-backend-wasm-simd.wasm \ -o tfjs-backend-wasm/tfjs-backend-wasm-simd.wasm sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tfjs-backend-wasm-threaded-simd.wasm \ -o tfjs-backend-wasm/tfjs-backend-wasm-threaded-simd.wasm sudo curl -L https://cdn.jsdelivr.net/npm/nsfwjs@2.4.2/dist/nsfwjs.min.js \ -o nsfwjs/nsfwjs.min.js

모델 폴더는 배포 방식에 따라 수동 복사 또는 저장소에서 별도 수집해 배치합니다.

퍼미션 예시

bash
sudo chown -R www-data:www-data /var/www/html/plugin/editor/t2editor/vendor sudo find /var/www/html/plugin/editor/t2editor/vendor -type d -exec chmod 755 {} \; sudo find /var/www/html/plugin/editor/t2editor/vendor -type f -exec chmod 644 {} \;

설정 점검

editor.lib.php에서 아래 값이 실제 설치 위치와 맞는지 확인합니다.

php
define('T2EDITOR_URL', '/plugin/editor/t2editor'); define('T2_NSFW_RUNTIME_ASSET_BASE', T2EDITOR_URL . '/vendor'); define('T2_NSFW_BROWSER_MODEL', 'MobileNetV2Mid'); define('T2_NSFW_BROWSER_MODEL_TYPE', 'graph'); define('T2_NSFW_BROWSER_MODEL_URL', T2_NSFW_RUNTIME_ASSET_BASE . '/nsfwjs/models/mobilenet_v2_mid/model.json'); define('T2_NSFW_BROWSER_BACKEND_PRIORITY', 'webgpu,webgl,wasm,cpu');

동작 확인

아래 URL이 브라우저 또는 curl -I에서 200 응답이어야 합니다.

text
/plugin/editor/t2editor/vendor/tfjs/tf.min.js /plugin/editor/t2editor/vendor/tfjs-backend-webgpu/tf-backend-webgpu.min.js /plugin/editor/t2editor/vendor/tfjs-backend-wasm/tfjs-backend-wasm.wasm /plugin/editor/t2editor/vendor/nsfwjs/nsfwjs.min.js /plugin/editor/t2editor/vendor/nsfwjs/models/mobilenet_v2_mid/model.json

문제 해결

증상: 계속 loading만 보임

  • 모델 파일 또는 backend 스크립트가 404인지 확인
  • window.T2EDITOR_NSFW_RUNTIME_ASSETS가 올바른지 확인
  • 콘솔에서 import 오류가 없는지 확인

증상: WebGPU가 선택되지 않음

  • 브라우저가 WebGPU를 지원하는지 확인
  • WebGPU backend 스크립트가 실제로 로드되는지 확인
  • 너무 오래된 브라우저나 보안 정책 이슈가 없는지 확인

증상: WebGPU는 실패하고 CPU로만 감

  • webgl 또는 wasm 스크립트 누락 여부 확인
  • WASM 바이너리 3종이 모두 배치되었는지 확인
  • 폴백 순서 설정이 잘못되지 않았는지 확인
주의

운영에서 가장 흔한 실수는 “파일은 복사했는데 T2EDITOR_URL을 기존 기본값으로 둔 상태”입니다. 이 경우 파일이 서버에 있어도 브라우저는 전혀 다른 URL을 요청합니다.

수정 요약

이 문서가 다루는 9.1.0 운영 포인트는 아래와 같습니다.

  • CDN 의존이 아닌 self-hosted 구조
  • vendor 중심 정적 자산 배치
  • WebGPU 우선, WebGL/WASM/CPU 폴백
  • 모델 파일까지 포함한 정적 경로 검증
라인 단위 비교
이전 새 버전
1 --- 1 ---
2 title: 운영: Ubuntu에서 NSFWJS self-hosted + WebGPU 설치 2 title: 운영: Ubuntu에서 NSFWJS self-hosted + WebGPU 설치
3 document_id: ops-nsfwjs-selfhost-webgpu-ubuntu 3 document_id: ops-nsfwjs-selfhost-webgpu-ubuntu
4 slug: ops-nsfwjs-selfhost-webgpu-ubuntu 4 slug: ops-nsfwjs-selfhost-webgpu-ubuntu
5 target_editor_version: 9.1.0 5 target_editor_version: 9.1.0
6 document_type: ops-guide 6 document_type: ops-guide
7 doc_type: ops-guide 7 doc_type: ops-guide
8 target_readers: [웹마스터, 개발자, AI agent] 8 target_readers: [웹마스터, 개발자, AI agent]
9 importance: High 9 importance: High
10 dependency: High 10 dependency: High
11 core_type: Guide 11 core_type: Guide
12 stability: [Stable Anchor, Version-Bound] 12 stability: [Stable Anchor, Version-Bound]
13 stable_anchor: 13 stable_anchor:
14 - vendor 디렉터리 구조 14 - vendor 디렉터리 구조
15 - T2EDITOR_URL 기반 경로 조립 15 - T2EDITOR_URL 기반 경로 조립
16 version_bound: 16 version_bound:
17 - MobileNetV2Mid 모델 폴더명 17 - MobileNetV2Mid 모델 폴더명
18 - TensorFlow.js backend 파일명 18 - TensorFlow.js backend 파일명
19 related_docs: 19 related_docs:
20 - guide-nsfwjs-overview 20 - guide-nsfwjs-overview
21 - config-nsfwjs-runtime-settings 21 - config-nsfwjs-runtime-settings
22 - migration-legacy-nsfw-to-nsfwjs 22 - migration-legacy-nsfw-to-nsfwjs
23 related_files: 23 related_files:
24 - 9.1.0/t2editor/editor.lib.php 24 - 9.1.0/t2editor/editor.lib.php
25 - 9.1.0/t2editor/config/nsfw_api_browser.js 25 - 9.1.0/t2editor/config/nsfw_api_browser.js
26 related_functions: [] 26 related_functions: []
27 related_classes_modules: 27 related_classes_modules:
28 - NSFWFilterAPI 28 - NSFWFilterAPI
29 related_features: 29 related_features:
30 - self-hosted 배포 30 - self-hosted 배포
31 - WebGPU 폴백 31 - WebGPU 폴백
32 - 정적 자산 검증 32 - 정적 자산 검증
33 related_ui: [] 33 related_ui: []
34 change_risk: 운영 서버 경로와 문서 경로가 불일치하면 모델 로딩이 실패하므로, 설정 변경 전에 실제 설치 위치를 먼저 고정해야 합니다. 34 change_risk: 운영 서버 경로와 문서 경로가 불일치하면 모델 로딩이 실패하므로, 설정 변경 전에 실제 설치 위치를 먼저 고정해야 합니다.
35 reading_order: 21 35 reading_order: 21
36 summary: Ubuntu 환경에서 NSFWJS, TensorFlow.js, 모델 파일을 self-hosted 방식으로 설치하고 점검하는 절차를 안내합니다. 36 summary: Ubuntu 환경에서 NSFWJS, TensorFlow.js, 모델 파일을 self-hosted 방식으로 설치하고 점검하는 절차를 안내합니다.
37 description: WebGPU 우선 폴백 구조를 쓰는 브라우저 NSFW 필터를 Ubuntu + Apache/Nginx 계열 환경에 배치하기 위한 운영 문서입니다. 37 description: WebGPU 우선 폴백 구조를 쓰는 브라우저 NSFW 필터를 Ubuntu + Apache/Nginx 계열 환경에 배치하기 위한 운영 문서입니다.
38 tags: [Ubuntu, self-hosted, NSFWJS, WebGPU, TensorFlow.js, 운영] 38 tags: [Ubuntu, self-hosted, NSFWJS, WebGPU, TensorFlow.js, 운영]
39 version_tag: 9.1.0 39 version_tag: 9.1.0
40 maintenance_difficulty: Medium 40 maintenance_difficulty: Medium
41 test_requirement: High 41 test_requirement: High
42 ai_agent_risk: Medium 42 ai_agent_risk: Medium
43 source_basis: [현재 코드 분석 기반] 43 source_basis: [현재 코드 분석 기반]
44 beginner_section_included: false 44 beginner_section_included: false
45 webmaster_section_included: true 45 webmaster_section_included: true
46 developer_section_included: true 46 developer_section_included: true
47 --- 47 ---
48   48  
49 [목차] 49 [목차]
50   50  
51 [[분류:운영]] 51 [[분류:운영]]
52 [[분류:NSFW]] 52 [[분류:NSFW]]
53   53  
54 [note(요약)] 54 [note(요약)]
55 이 문서는 Ubuntu에서 T2Editor 9.1.0의 NSFWJS 브라우저 필터를 **self-hosted** 방식으로 배포할 때 필요한 운영 절차를 정리합니다. 55 이 문서는 Ubuntu에서 T2Editor 9.1.0의 NSFWJS 브라우저 필터를 **self-hosted** 방식으로 배포할 때 필요한 운영 절차를 정리합니다.
56 기본 전제는 `vendor/` 아래에 TensorFlow.js, backend 스크립트, NSFWJS, `MobileNetV2Mid` 모델을 직접 배치하는 것입니다. 56 기본 전제는 `vendor/` 아래에 TensorFlow.js, backend 스크립트, NSFWJS, `MobileNetV2Mid` 모델을 직접 배치하는 것입니다.
57 [/note] 57 [/note]
58   58  
59 # 설치 대상 예시 59 # 설치 대상 예시
60   60  
61 이 문서는 아래 설치 위치를 예시로 사용합니다. 61 이 문서는 아래 설치 위치를 예시로 사용합니다.
62   62  
63 ```text 63 ```text
64 /var/www/html/plugin/editor/t2editor/ 64 /var/www/html/plugin/editor/t2editor/
65 ``` 65 ```
66   66  
67 웹 경로는 보통 아래처럼 맞춰야 합니다. 67 웹 경로는 보통 아래처럼 맞춰야 합니다.
68   68  
69 ```php 69 ```php
70 define('T2EDITOR_URL', '/plugin/editor/t2editor'); 70 define('T2EDITOR_URL', '/plugin/editor/t2editor');
71 ``` 71 ```
72   72  
73 ## 준비 73 ## 준비
74   74  
75 필요 패키지 예시: 75 필요 패키지 예시:
76   76  
77 ```bash 77 ```bash
78 sudo apt update 78 sudo apt update
79 sudo apt install -y curl git 79 sudo apt install -y curl git
80 ``` 80 ```
81   81  
82 ## 권장 디렉터리 구조 82 ## 권장 디렉터리 구조
83   83  
84 ```text 84 ```text
85 /plugin/editor/t2editor/vendor/ 85 /plugin/editor/t2editor/vendor/
86 tfjs/ 86 tfjs/
87 tfjs-backend-webgl/ 87 tfjs-backend-webgl/
88 tfjs-backend-webgpu/ 88 tfjs-backend-webgpu/
89 tfjs-backend-wasm/ 89 tfjs-backend-wasm/
90 nsfwjs/ 90 nsfwjs/
91 nsfwjs/models/mobilenet_v2_mid/ 91 nsfwjs/models/mobilenet_v2_mid/
92 ``` 92 ```
93   93  
94 ## 수동 설치 예시 94 ## 수동 설치 예시
95   95  
96 ```bash 96 ```bash
97 sudo mkdir -p /var/www/html/plugin/editor/t2editor/vendor/{tfjs,tfjs-backend-webgl,tfjs-backend-webgpu,tfjs-backend-wasm,nsfwjs,nsfwjs/models} 97 sudo mkdir -p /var/www/html/plugin/editor/t2editor/vendor/{tfjs,tfjs-backend-webgl,tfjs-backend-webgpu,tfjs-backend-wasm,nsfwjs,nsfwjs/models}
98   98  
99 cd /var/www/html/plugin/editor/t2editor/vendor 99 cd /var/www/html/plugin/editor/t2editor/vendor
100   100  
101 sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@4.22.0/dist/tf.min.js \ 101 sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@4.22.0/dist/tf.min.js \
102 -o tfjs/tf.min.js 102 -o tfjs/tf.min.js
103   103  
104 sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-webgl@4.22.0/dist/tf-backend-webgl.min.js \ 104 sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-webgl@4.22.0/dist/tf-backend-webgl.min.js \
105 -o tfjs-backend-webgl/tf-backend-webgl.min.js 105 -o tfjs-backend-webgl/tf-backend-webgl.min.js
106   106  
107 sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-webgpu@4.22.0/dist/tf-backend-webgpu.min.js \ 107 sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-webgpu@4.22.0/dist/tf-backend-webgpu.min.js \
108 -o tfjs-backend-webgpu/tf-backend-webgpu.min.js 108 -o tfjs-backend-webgpu/tf-backend-webgpu.min.js
109   109  
110 sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tf-backend-wasm.min.js \ 110 sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tf-backend-wasm.min.js \
111 -o tfjs-backend-wasm/tf-backend-wasm.min.js 111 -o tfjs-backend-wasm/tf-backend-wasm.min.js
112   112  
113 sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tfjs-backend-wasm.wasm \ 113 sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tfjs-backend-wasm.wasm \
114 -o tfjs-backend-wasm/tfjs-backend-wasm.wasm 114 -o tfjs-backend-wasm/tfjs-backend-wasm.wasm
115   115  
116 sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tfjs-backend-wasm-simd.wasm \ 116 sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tfjs-backend-wasm-simd.wasm \
117 -o tfjs-backend-wasm/tfjs-backend-wasm-simd.wasm 117 -o tfjs-backend-wasm/tfjs-backend-wasm-simd.wasm
118   118  
119 sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tfjs-backend-wasm-threaded-simd.wasm \ 119 sudo curl -L https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-wasm@4.22.0/dist/tfjs-backend-wasm-threaded-simd.wasm \
120 -o tfjs-backend-wasm/tfjs-backend-wasm-threaded-simd.wasm 120 -o tfjs-backend-wasm/tfjs-backend-wasm-threaded-simd.wasm
121   121  
122 sudo curl -L https://cdn.jsdelivr.net/npm/nsfwjs@2.4.2/dist/nsfwjs.min.js \ 122 sudo curl -L https://cdn.jsdelivr.net/npm/nsfwjs@2.4.2/dist/nsfwjs.min.js \
123 -o nsfwjs/nsfwjs.min.js 123 -o nsfwjs/nsfwjs.min.js
124 ``` 124 ```
125   125  
126 모델 폴더는 배포 방식에 따라 수동 복사 또는 저장소에서 별도 수집해 배치합니다. 126 모델 폴더는 배포 방식에 따라 수동 복사 또는 저장소에서 별도 수집해 배치합니다.
127   127  
128 ## 퍼미션 예시 128 ## 퍼미션 예시
129   129  
130 ```bash 130 ```bash
131 sudo chown -R www-data:www-data /var/www/html/plugin/editor/t2editor/vendor 131 sudo chown -R www-data:www-data /var/www/html/plugin/editor/t2editor/vendor
132 sudo find /var/www/html/plugin/editor/t2editor/vendor -type d -exec chmod 755 {} \; 132 sudo find /var/www/html/plugin/editor/t2editor/vendor -type d -exec chmod 755 {} \;
133 sudo find /var/www/html/plugin/editor/t2editor/vendor -type f -exec chmod 644 {} \; 133 sudo find /var/www/html/plugin/editor/t2editor/vendor -type f -exec chmod 644 {} \;
134 ``` 134 ```
135   135  
136 ## 설정 점검 136 ## 설정 점검
137   137  
138 `editor.lib.php`에서 아래 값이 실제 설치 위치와 맞는지 확인합니다. 138 `editor.lib.php`에서 아래 값이 실제 설치 위치와 맞는지 확인합니다.
139   139  
140 ```php 140 ```php
141 define('T2EDITOR_URL', '/plugin/editor/t2editor'); 141 define('T2EDITOR_URL', '/plugin/editor/t2editor');
142 define('T2_NSFW_RUNTIME_ASSET_BASE', T2EDITOR_URL . '/vendor'); 142 define('T2_NSFW_RUNTIME_ASSET_BASE', T2EDITOR_URL . '/vendor');
143 define('T2_NSFW_BROWSER_MODEL', 'MobileNetV2Mid'); 143 define('T2_NSFW_BROWSER_MODEL', 'MobileNetV2Mid');
144 define('T2_NSFW_BROWSER_MODEL_TYPE', 'graph'); 144 define('T2_NSFW_BROWSER_MODEL_TYPE', 'graph');
145 define('T2_NSFW_BROWSER_MODEL_URL', T2_NSFW_RUNTIME_ASSET_BASE . '/nsfwjs/models/mobilenet_v2_mid/model.json'); 145 define('T2_NSFW_BROWSER_MODEL_URL', T2_NSFW_RUNTIME_ASSET_BASE . '/nsfwjs/models/mobilenet_v2_mid/model.json');
146 define('T2_NSFW_BROWSER_BACKEND_PRIORITY', 'webgpu,webgl,wasm,cpu'); 146 define('T2_NSFW_BROWSER_BACKEND_PRIORITY', 'webgpu,webgl,wasm,cpu');
147 ``` 147 ```
148   148  
149 ## 동작 확인 149 ## 동작 확인
150   150  
151 아래 URL이 브라우저 또는 `curl -I`에서 200 응답이어야 합니다. 151 아래 URL이 브라우저 또는 `curl -I`에서 200 응답이어야 합니다.
152   152  
153 ```text 153 ```text
154 /plugin/editor/t2editor/vendor/tfjs/tf.min.js 154 /plugin/editor/t2editor/vendor/tfjs/tf.min.js
155 /plugin/editor/t2editor/vendor/tfjs-backend-webgpu/tf-backend-webgpu.min.js 155 /plugin/editor/t2editor/vendor/tfjs-backend-webgpu/tf-backend-webgpu.min.js
156 /plugin/editor/t2editor/vendor/tfjs-backend-wasm/tfjs-backend-wasm.wasm 156 /plugin/editor/t2editor/vendor/tfjs-backend-wasm/tfjs-backend-wasm.wasm
157 /plugin/editor/t2editor/vendor/nsfwjs/nsfwjs.min.js 157 /plugin/editor/t2editor/vendor/nsfwjs/nsfwjs.min.js
158 /plugin/editor/t2editor/vendor/nsfwjs/models/mobilenet_v2_mid/model.json 158 /plugin/editor/t2editor/vendor/nsfwjs/models/mobilenet_v2_mid/model.json
159 ``` 159 ```
160   160  
161 ## 문제 해결 161 ## 문제 해결
162   162  
163 ### 증상: 계속 loading만 보임 163 ### 증상: 계속 loading만 보임
164 - 모델 파일 또는 backend 스크립트가 404인지 확인 164 - 모델 파일 또는 backend 스크립트가 404인지 확인
165 - `window.T2EDITOR_NSFW_RUNTIME_ASSETS`가 올바른지 확인 165 - `window.T2EDITOR_NSFW_RUNTIME_ASSETS`가 올바른지 확인
166 - 콘솔에서 import 오류가 없는지 확인 166 - 콘솔에서 import 오류가 없는지 확인
167   167  
168 ### 증상: WebGPU가 선택되지 않음 168 ### 증상: WebGPU가 선택되지 않음
169 - 브라우저가 WebGPU를 지원하는지 확인 169 - 브라우저가 WebGPU를 지원하는지 확인
170 - WebGPU backend 스크립트가 실제로 로드되는지 확인 170 - WebGPU backend 스크립트가 실제로 로드되는지 확인
171 - 너무 오래된 브라우저나 보안 정책 이슈가 없는지 확인 171 - 너무 오래된 브라우저나 보안 정책 이슈가 없는지 확인
172   172  
173 ### 증상: WebGPU는 실패하고 CPU로만 감 173 ### 증상: WebGPU는 실패하고 CPU로만 감
174 - `webgl` 또는 `wasm` 스크립트 누락 여부 확인 174 - `webgl` 또는 `wasm` 스크립트 누락 여부 확인
175 - WASM 바이너리 3종이 모두 배치되었는지 확인 175 - WASM 바이너리 3종이 모두 배치되었는지 확인
176 - 폴백 순서 설정이 잘못되지 않았는지 확인 176 - 폴백 순서 설정이 잘못되지 않았는지 확인
177   177  
178 [warning] 178 [warning]
179 운영에서 가장 흔한 실수는 “파일은 복사했는데 `T2EDITOR_URL`을 기존 기본값으로 둔 상태”입니다. 179 운영에서 가장 흔한 실수는 “파일은 복사했는데 `T2EDITOR_URL`을 기존 기본값으로 둔 상태”입니다.
180 이 경우 파일이 서버에 있어도 브라우저는 전혀 다른 URL을 요청합니다. 180 이 경우 파일이 서버에 있어도 브라우저는 전혀 다른 URL을 요청합니다.
181 [/warning] 181 [/warning]
182   182  
183 ## 수정 요약 183 ## 수정 요약
184   184  
185 이 문서가 다루는 9.1.0 운영 포인트는 아래와 같습니다. 185 이 문서가 다루는 9.1.0 운영 포인트는 아래와 같습니다.
186   186  
187 - CDN 의존이 아닌 self-hosted 구조 187 - CDN 의존이 아닌 self-hosted 구조
188 - vendor 중심 정적 자산 배치 188 - vendor 중심 정적 자산 배치
189 - WebGPU 우선, WebGL/WASM/CPU 폴백 189 - WebGPU 우선, WebGL/WASM/CPU 폴백
190 - 모델 파일까지 포함한 정적 경로 검증 190 - 모델 파일까지 포함한 정적 경로 검증
✏ 이 상태를 참고해 편집
T2WIKI · 기술 통합 위키 & 프로젝트 허브 · 나무위키 + Markdown 완벽 지원 · SQLite · PHP 8.2 · 소개 · 문법 안내