{"id":7146,"date":"2026-02-05T21:56:36","date_gmt":"2026-02-05T12:56:36","guid":{"rendered":"https:\/\/appbay.org\/?p=7146"},"modified":"2026-02-07T22:07:08","modified_gmt":"2026-02-07T13:07:08","slug":"vps-caddy-jitsi-meet-%e8%a8%ad%e5%ae%9a%e3%83%a1%e3%83%a2","status":"publish","type":"post","link":"https:\/\/appbay.org\/?p=7146","title":{"rendered":"VPS Caddy Jitsi Meet \u8a2d\u5b9a\u30e1\u30e2"},"content":{"rendered":"<p>\u793e\u5185\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u306bMattermost\u3092\u5229\u7528\u3057\u3066\u3044\u308b\u304c\u3001\u4f1a\u8a71\u306a\u3089\u4e00\u77ac\u3067\u6e08\u3080\u5185\u5bb9\u3067\u3082\u3001\u30c6\u30ad\u30b9\u30c8\u30d9\u30fc\u30b9\u3060\u3068\u6642\u9593\u304c\u304b\u304b\u3063\u3066\u3057\u307e\u3046\u3002<\/p>\n<p>\u304b\u3068\u3044\u3063\u3066Zoom\u3084Meet\u3092\u7acb\u3061\u4e0a\u3052\u308b\u307b\u3069\u3067\u306f\u306a\u3044\u3068\u3044\u3046\u5834\u9762\u306e\u305f\u3081\u306b\u624b\u8efd\u306b\u547c\u3073\u51fa\u305b\u308bJitsi\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u5c0e\u5165\u3059\u308b\u3053\u3068\u306b\u3057\u305f\u3002<\/p>\n<h2>Caddy<\/h2>\n<p>\u30fb\u5171\u901a\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u4f5c\u6210<br \/>\ndocker network create localproxy<\/p>\n<p>\u30fb\u30d5\u30a9\u30eb\u30c0\u6e96\u5099<br \/>\ncd \/home<br \/>\nmkdir caddy<br \/>\ncd caddy<\/p>\n<p>\u30fbCaddyfile<\/p>\n<p>vim Caddyfile<\/p>\n<pre class=\"lang:default decode:true\"># Jitsi Meet\r\njitsi.\u25cf\u25cf\u25cf.com {\r\n    reverse_proxy jitsi-web:80\r\n\r\n    # WebSocket\u5bfe\u5fdc\r\n    @websockets {\r\n        header Connection *Upgrade*\r\n        header Upgrade websocket\r\n    }\r\n    reverse_proxy @websockets jitsi-web:80\r\n}\r\n\r\n# Mattermost (Phase 2\u3067\u8ffd\u52a0)\r\n# mattermost.\u25cf\u25cf\u25cf.com {\r\n#     reverse_proxy mattermost:8065\r\n# }\r\n\r\n# MeshCentral (Phase 2\u3067\u8ffd\u52a0\u30fbIP\u5236\u9650\u4ed8\u304d)\r\n# meshcentral.\u25cf\u25cf\u25cf.com {\r\n#     @allowed remote_ip \u8a31\u53efIP\r\n#     handle @allowed {\r\n#         reverse_proxy meshcentral:443\r\n#     }\r\n#     respond \"Forbidden\" 403\r\n# }<\/pre>\n<p>\u30fbdocker-compose.yml<\/p>\n<p>vim docker-compose.yml<\/p>\n<pre class=\"lang:default decode:true\">services:\r\n  caddy:\r\n    image: caddy:2\r\n    restart: unless-stopped\r\n    ports:\r\n      - \"80:80\"\r\n      - \"443:443\"\r\n    volumes:\r\n      - .\/Caddyfile:\/etc\/caddy\/Caddyfile\r\n      - .\/data:\/data\r\n      - .\/config:\/config\r\n    networks:\r\n      - localproxy\r\n\r\nnetworks:\r\n  localproxy:\r\n    external: true<\/pre>\n<p>\u30fb\u30b3\u30f3\u30c6\u30ca\u8d77\u52d5<br \/>\ndocker compose up -d<\/p>\n<h2>Jitsi Meet<\/h2>\n<p>\u30fb\u30d5\u30a9\u30eb\u30c0\u6e96\u5099<br \/>\ncd \/home<br \/>\nmkdir jitsi<br \/>\ncd jitsi<\/p>\n<p>\u30fbdocker-compose.yml<\/p>\n<p>vim docker-compose.yml<\/p>\n<pre class=\"lang:default decode:true\">services:\r\n  # Jitsi Web (\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9)\r\n  web:\r\n    image: jitsi\/web:stable-9823\r\n    container_name: jitsi-web\r\n    restart: unless-stopped\r\n    environment:\r\n      - XMPP_SERVER=prosody\r\n      - JICOFO_AUTH_USER=focus\r\n      - XMPP_DOMAIN=meet.jitsi\r\n      - XMPP_AUTH_DOMAIN=auth.meet.jitsi\r\n      - XMPP_MUC_DOMAIN=muc.meet.jitsi\r\n      - XMPP_INTERNAL_MUC_DOMAIN=internal-muc.meet.jitsi\r\n      - XMPP_BOSH_URL_BASE=http:\/\/prosody:5280\r\n      - TZ=Asia\/Tokyo\r\n      - PUBLIC_URL=https:\/\/jitsi.\u25cf\u25cf\u25cf.com\r\n      - ENABLE_LOBBY=1\r\n      - ENABLE_PREJOIN_PAGE=1\r\n      - ENABLE_AUTH=1\r\n      - AUTH_TYPE=jwt\r\n      - ENABLE_GUESTS=1\r\n      - JWT_APP_ID=mattermost\r\n      - JWT_APP_SECRET=\u25cf\u25cf\u25cf\r\n      - JWT_ACCEPTED_ISSUERS=mattermost\r\n      - JWT_ACCEPTED_AUDIENCES=\r\n    volumes:\r\n      - .\/web-config:\/config\r\n      - .\/web-crontabs:\/var\/spool\/cron\/crontabs\r\n      - .\/web-transcripts:\/usr\/share\/jitsi-meet\/transcripts\r\n    networks:\r\n      - meet.jitsi\r\n      - localproxy\r\n    depends_on:\r\n      - prosody\r\n\r\n  # Prosody (XMPP\u30b5\u30fc\u30d0\u30fc)\r\n  prosody:\r\n    image: jitsi\/prosody:stable-9823\r\n    restart: unless-stopped\r\n    environment:\r\n      - XMPP_DOMAIN=meet.jitsi\r\n      - XMPP_AUTH_DOMAIN=auth.meet.jitsi\r\n      - XMPP_MUC_DOMAIN=muc.meet.jitsi\r\n      - XMPP_INTERNAL_MUC_DOMAIN=internal-muc.meet.jitsi\r\n      - JICOFO_AUTH_USER=focus\r\n      - JICOFO_AUTH_PASSWORD=\u25cf\u25cf\u25cf\r\n      - JVB_AUTH_USER=jvb\r\n      - JVB_AUTH_PASSWORD=\u25cf\u25cf\u25cf\r\n      - TZ=Asia\/Tokyo\r\n      - PUBLIC_URL=https:\/\/jitsi.\u25cf\u25cf\u25cf.com\r\n      - ENABLE_AUTH=1\r\n      - AUTH_TYPE=jwt\r\n      - ENABLE_GUESTS=1\r\n      - ENABLE_LOBBY=1\r\n      - JWT_APP_ID=mattermost\r\n      - JWT_APP_SECRET=\u25cf\u25cf\u25cf\r\n      - JWT_ACCEPTED_ISSUERS=mattermost\r\n      - JWT_ACCEPTED_AUDIENCES=\r\n    volumes:\r\n      - .\/prosody-config:\/config\r\n      - .\/prosody-plugins:\/prosody-plugins-custom\r\n    networks:\r\n      - meet.jitsi\r\n\r\n  # Jicofo (\u4f1a\u8b70\u30d5\u30a9\u30fc\u30ab\u30b9)\r\n  jicofo:\r\n    image: jitsi\/jicofo:stable-9823\r\n    restart: unless-stopped\r\n    environment:\r\n      - XMPP_SERVER=prosody\r\n      - XMPP_DOMAIN=meet.jitsi\r\n      - XMPP_AUTH_DOMAIN=auth.meet.jitsi\r\n      - XMPP_MUC_DOMAIN=muc.meet.jitsi\r\n      - XMPP_INTERNAL_MUC_DOMAIN=internal-muc.meet.jitsi\r\n      - JICOFO_AUTH_USER=focus\r\n      - JICOFO_AUTH_PASSWORD=\u25cf\u25cf\u25cf\r\n      - TZ=Asia\/Tokyo\r\n      - ENABLE_AUTH=1\r\n      - AUTH_TYPE=jwt\r\n      - ENABLE_LOBBY=1\r\n    volumes:\r\n      - .\/jicofo-config:\/config\r\n    networks:\r\n      - meet.jitsi\r\n    depends_on:\r\n      - prosody\r\n\r\n  # JVB (\u30d3\u30c7\u30aa\u30d6\u30ea\u30c3\u30b8)\r\n  jvb:\r\n    image: jitsi\/jvb:stable-9823\r\n    restart: unless-stopped\r\n    ports:\r\n      - \"10000:10000\/udp\"\r\n    environment:\r\n      - XMPP_SERVER=prosody\r\n      - XMPP_DOMAIN=meet.jitsi\r\n      - XMPP_AUTH_DOMAIN=auth.meet.jitsi\r\n      - XMPP_MUC_DOMAIN=muc.meet.jitsi\r\n      - XMPP_INTERNAL_MUC_DOMAIN=internal-muc.meet.jitsi\r\n      - JVB_AUTH_USER=jvb\r\n      - JVB_AUTH_PASSWORD=\u25cf\u25cf\u25cf\r\n      - JVB_PORT=10000\r\n      - JVB_ADVERTISE_IPS=\u25cf\u25cf\u25cf\r\n      - TZ=Asia\/Tokyo\r\n      - PUBLIC_URL=https:\/\/jitsi.\u25cf\u25cf\u25cf.com\r\n    volumes:\r\n      - .\/jvb-config:\/config\r\n    networks:\r\n      - meet.jitsi\r\n    depends_on:\r\n      - prosody\r\n\r\nnetworks:\r\n  meet.jitsi:\r\n    driver: bridge\r\n  localproxy:\r\n    external: true\r\n<\/pre>\n<p>\u30fb\u30b3\u30f3\u30c6\u30ca\u8d77\u52d5<br \/>\ndocker compose up -d<\/p>\n<p>\u30fbufw<br \/>\nufw allow 10000\/udp<\/p>\n<h2>DNS<\/h2>\n<p>jitsi.\u25cf\u25cf\u25cf.com\u306eA\u30ec\u30b3\u30fc\u30c9\u3092\u30b5\u30fc\u30d0\u30fcIP\u30a2\u30c9\u30ec\u30b9\u306b\u5411\u3051\u308b\u3002<\/p>\n<h2>Mattermost<\/h2>\n<p>https:\/\/github.com\/mattermost-community\/mattermost-plugin-jitsi<\/p>\n<p>Releases\u304b\u3089tar.gz\u3092\u30c0\u30a6\u30f3\u30ed\u30fc\u30c9\u3002<br \/>\n\u30b7\u30b9\u30c6\u30e0\u30b3\u30f3\u30bd\u30fc\u30eb&gt;\u30d7\u30e9\u30b0\u30a4\u30f3\u7ba1\u7406&gt;\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u30a2\u30c3\u30d7\u30ed\u30fc\u30c9\u3059\u308b<\/p>\n<p>\u30d7\u30e9\u30b0\u30a4\u30f3\u3092\u6709\u52b9\u306b\u3059\u308b&gt;\u8a2d\u5b9a<\/p>\n<p>Jitsi Server URL\uff1ahttps:\/\/jitsi.\u25cf\u25cf\u25cf.com<br \/>\nEmbed Jitsi video inside Mattermost\uff1a\u7121\u52b9<br \/>\nShow pre-join page\uff1a\u6709\u52b9<br \/>\nJitsi Meeting Names\uff1aRandom<br \/>\nUse JWT Authentication for Jitsi:\u6709\u52b9<br \/>\nApp ID for JWT Authentication\uff1amattermost<br \/>\nApp Secret for JWT Authentication\uff1aJitsi\u3068\u540c\u3058\u79d8\u5bc6\u9375<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u793e\u5185\u30b3\u30df\u30e5\u30cb\u30b1\u30fc\u30b7\u30e7\u30f3\u306bMattermost\u3092\u5229\u7528\u3057\u3066\u3044\u308b\u304c\u3001\u4f1a\u8a71\u306a\u3089\u4e00\u77ac\u3067\u6e08\u3080\u5185\u5bb9\u3067\u3082\u3001\u30c6\u30ad\u30b9\u30c8\u30d9\u30fc\u30b9\u3060\u3068\u6642\u9593\u304c\u304b\u304b\u3063\u3066\u3057\u307e\u3046\u3002 \u304b\u3068\u3044\u3063\u3066Zoom\u3084Meet\u3092\u7acb\u3061\u4e0a\u3052\u308b\u307b\u3069\u3067\u306f\u306a\u3044\u3068\u3044\u3046\u5834\u9762\u306e\u305f\u3081\u306b\u624b\u8efd\u306b\u547c\u3073\u51fa\u305b\u308bJ &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/appbay.org\/?p=7146\" class=\"more-link\"><span class=\"screen-reader-text\">&#8220;VPS Caddy Jitsi Meet \u8a2d\u5b9a\u30e1\u30e2&#8221; \u306e<\/span>\u7d9a\u304d\u3092\u8aad\u3080<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[145],"class_list":["post-7146","post","type-post","status-publish","format-standard","hentry","category-1","tag-linux"],"_links":{"self":[{"href":"https:\/\/appbay.org\/index.php?rest_route=\/wp\/v2\/posts\/7146","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/appbay.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/appbay.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/appbay.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/appbay.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7146"}],"version-history":[{"count":15,"href":"https:\/\/appbay.org\/index.php?rest_route=\/wp\/v2\/posts\/7146\/revisions"}],"predecessor-version":[{"id":7166,"href":"https:\/\/appbay.org\/index.php?rest_route=\/wp\/v2\/posts\/7146\/revisions\/7166"}],"wp:attachment":[{"href":"https:\/\/appbay.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7146"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/appbay.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7146"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/appbay.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7146"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}