{"id":5995,"date":"2025-09-11T14:00:45","date_gmt":"2025-09-11T06:00:45","guid":{"rendered":"https:\/\/benson80.eu.org\/?p=5995"},"modified":"2025-09-11T14:03:17","modified_gmt":"2025-09-11T06:03:17","slug":"navidrome-filebrowser-frp-%e4%bd%bf%e7%94%a8%e6%8c%87%e5%8d%97-ubuntu-wsl","status":"publish","type":"post","link":"https:\/\/benson80.eu.org\/?p=5995","title":{"rendered":"Navidrome + FileBrowser + FRP \u4f7f\u7528\u6307\u5357 (Ubuntu WSL)"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">1\ufe0f\u20e3 \u524d\u7f6e\u6761\u4ef6<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Windows \u4e0a\u5df2\u5b89\u88c5 WSL (Ubuntu 20.04\/22.04\/24.04 \u90fd\u884c)<\/li>\n\n\n\n<li>\u5df2\u7ecf\u5b89\u88c5 Docker<\/li>\n\n\n\n<li>\u6709\u4e00\u53f0\u516c\u7f51 VPS \u4f5c\u4e3a <strong>FRP \u670d\u52a1\u7aef<\/strong>\uff08\u9700\u5148\u90e8\u7f72\u597d <code>frps<\/code>\uff09<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">2\ufe0f\u20e3 \u90e8\u7f72 Navidrome<\/h2>\n\n\n\n<p>\u521b\u5efa\u6570\u636e\u76ee\u5f55\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">mkdir -p ~\/navidrome\/music ~\/navidrome\/data<\/pre>\n\n\n\n<p>\u8fd0\u884c Navidrome\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">docker run -d \\<br>  --name navidrome \\<br>  --restart=unless-stopped \\<br>  -p 4533:4533 \\<br>  -v ~\/navidrome\/music:\/music \\<br>  -v ~\/navidrome\/data:\/data \\<br>  -e ND_LOGLEVEL=info \\<br>  -e ND_SCANINTERVAL=1m \\<br>  deluan\/navidrome:latest<\/pre>\n\n\n\n<p>\u8bbf\u95ee\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">http:\/\/127.0.0.1:4533<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">3\ufe0f\u20e3 \u90e8\u7f72 FileBrowser<\/h2>\n\n\n\n<p>\u521b\u5efa\u76ee\u5f55\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">mkdir -p ~\/filebrowser<\/pre>\n\n\n\n<p>\u8fd0\u884c FileBrowser\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">docker run -d \\<br>  --name filebrowser \\<br>  --restart=unless-stopped \\<br>  -p 8081:80 \\<br>  -v ~\/navidrome\/music:\/srv \\<br>  -v ~\/filebrowser\/filebrowser.db:\/database.db \\<br>  -v ~\/filebrowser\/.filebrowser.json:\/.filebrowser.json \\<br>  -u $(id -u):$(id -g) \\<br>  filebrowser\/filebrowser:latest<\/pre>\n\n\n\n<p>\u8bbf\u95ee\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">http:\/\/127.0.0.1:8081<\/pre>\n\n\n\n<p>\u9ed8\u8ba4\u8d26\u53f7\u5bc6\u7801\uff1a<code>admin \/ \u968f\u673a\u751f\u6210\u5bc6\u7801<\/code><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4\ufe0f\u20e3 \u5b89\u88c5 FRP \u5ba2\u6237\u7aef (frpc)<\/h2>\n\n\n\n<p>\u8fdb\u5165 <code>\/root<\/code> \u76ee\u5f55\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">cd \/root<\/pre>\n\n\n\n<p>\u4e0b\u8f7d\u5e76\u89e3\u538b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">wget https:\/\/github.com\/fatedier\/frp\/releases\/download\/v0.64.0\/frp_0.64.0_linux_amd64.tar.gz<br>tar -xzf frp_0.64.0_linux_amd64.tar.gz<br>mv frp_0.64.0_linux_amd64 frp<br>cd frp<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">5\ufe0f\u20e3 \u914d\u7f6e frpc.toml<\/h2>\n\n\n\n<p>\u7f16\u8f91\u914d\u7f6e\u6587\u4ef6\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">nano \/root\/frp\/frpc.toml<\/pre>\n\n\n\n<p>\u5185\u5bb9\u793a\u4f8b\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[common]<br>server_addr = \"\u4f60\u7684VPS\u516c\u7f51IP\"<br>server_port = 7000<br># token = \"\u81ea\u5b9a\u4e49token\"   # \u5982\u679c\u670d\u52a1\u7aef\u914d\u7f6e\u4e86 token\uff0c\u8981\u52a0\u4e0a<br><br>[navidrome]<br>type = \"tcp\"<br>local_ip = \"127.0.0.1\"<br>local_port = 4533<br>remote_port = 4533<br><br>[filebrowser]<br>type = \"tcp\"<br>local_ip = \"127.0.0.1\"<br>local_port = 8081<br>remote_port = 8081<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">6\ufe0f\u20e3 \u521b\u5efa systemd \u670d\u52a1<\/h2>\n\n\n\n<p>\u65b0\u5efa frpc \u670d\u52a1\u6587\u4ef6\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">nano \/etc\/systemd\/system\/frpc.service<\/pre>\n\n\n\n<p>\u5185\u5bb9\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">[Unit]<br>Description=FRP Client Service<br>After=network.target<br><br>[Service]<br>Type=simple<br>ExecStart=\/root\/frp\/frpc -c \/root\/frp\/frpc.toml<br>Restart=on-failure<br><br>[Install]<br>WantedBy=multi-user.target<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">7\ufe0f\u20e3 \u542f\u52a8\u5e76\u8bbe\u7f6e\u81ea\u542f<\/h2>\n\n\n\n<pre class=\"wp-block-preformatted\">systemctl daemon-reload<br>systemctl enable frpc<br>systemctl start frpc<\/pre>\n\n\n\n<p>\u68c0\u67e5\u72b6\u6001\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">systemctl status frpc<\/pre>\n\n\n\n<p>\u5982\u679c\u6210\u529f\uff0c\u5e94\u8be5\u663e\u793a <code>Active: active (running)<\/code>\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">8\ufe0f\u20e3 \u5916\u7f51\u8bbf\u95ee<\/h2>\n\n\n\n<p>\u5047\u8bbe VPS \u516c\u7f51 IP \u662f <code>1.2.3.4<\/code>\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Navidrome:http:\/\/1.2.3.4:4533<\/li>\n\n\n\n<li>FileBrowser:http:\/\/1.2.3.4:8081<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">9\ufe0f\u20e3 \u53ef\u9009\u4f18\u5316<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u52a0\u5bc6\u4f20\u8f93<\/strong>\uff1a\u5728 <code>[common]<\/code> \u91cc\u52a0 <code>tls_enable = true<\/code><\/li>\n\n\n\n<li><strong>HTTPS<\/strong>\uff1a\u5efa\u8bae\u5728 VPS \u4e0a\u914d\u5408 Nginx Proxy Manager\uff0c\u505a\u57df\u540d\u89e3\u6790 + \u81ea\u52a8\u8bc1\u4e66<\/li>\n\n\n\n<li><strong>\u5b89\u5168\u6027<\/strong>\uff1a\u4e00\u5b9a\u8981\u8bbe\u7f6e <code>token<\/code>\uff0c\u907f\u514d\u522b\u4eba\u63a5\u5165\u4f60\u7684 FRP \u670d\u52a1<\/li>\n<\/ul>\n\n\n\n<p>\u8fd9\u6837\u914d\u7f6e\u540e\uff0c\u4f60\u5728 Windows WSL \u7684 Ubuntu \u91cc\u8dd1 <strong>Navidrome + FileBrowser<\/strong>\uff0c\u901a\u8fc7 FRP \u5ba2\u6237\u7aef\u8fde\u5230\u516c\u7f51 VPS\uff0c\u5c31\u80fd\u7528\u624b\u673a\u968f\u65f6\u8bbf\u95ee\u4e86 \ud83c\udfb6<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>1\ufe0f\u20e3 \u524d\u7f6e\u6761\u4ef6 2\ufe0f\u20e3 \u90e8\u7f72 Navidrome &hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20,12],"tags":[],"class_list":["post-5995","post","type-post","status-publish","format-standard","hentry","category-docker","category-12"],"_links":{"self":[{"href":"https:\/\/benson80.eu.org\/index.php?rest_route=\/wp\/v2\/posts\/5995","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/benson80.eu.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/benson80.eu.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/benson80.eu.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/benson80.eu.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5995"}],"version-history":[{"count":2,"href":"https:\/\/benson80.eu.org\/index.php?rest_route=\/wp\/v2\/posts\/5995\/revisions"}],"predecessor-version":[{"id":5997,"href":"https:\/\/benson80.eu.org\/index.php?rest_route=\/wp\/v2\/posts\/5995\/revisions\/5997"}],"wp:attachment":[{"href":"https:\/\/benson80.eu.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5995"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/benson80.eu.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5995"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/benson80.eu.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5995"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}