Navidrome&Music Tag
背景
因为没钱买会员,也不想去各个平台找版权音乐,干脆把网上盗版资源整合进个人歌单蒜鸟,建立个人音乐站,感兴趣的欢迎来听🤗
Navidrome(同此站点用户信息)
简介
What is Navidrome?
Navidrome allows you to enjoy your music collection from anywhere, by making it available through a modern Web UI and through a wide range of third-party compatible mobile apps, for both iOS and Android devices.
Navidrome is open source software distributed free of charge under the terms of the GNU GPL v3 license.

简单来说,这就是私有音乐播放软件,完全的 Web 界面,不需要下载任何客户端,只需打开网页即可畅听你的音乐库。但前提是你得有一个空间去存放你音乐。
Navidrome可以按专辑、歌手分类,甚至可以加入电台,功能十分强大。

但是,因为极简风格,Navidrome本身并不具有编辑音乐功能,你不能通过 Navidrome 向你的音乐库上传、删除文件等,你需要自己把音乐文件上传至服务器,而且,不是按文件夹分类的,因为是按元数据识别的,需要你有一个良好整理的音乐库;同时安全防护几乎没有,需要加反代防止暴力破解。
我使用Music Tag来管理我的音乐文件。其核心功能是补全歌曲的元数据如歌曲的标题,专辑,艺术家,歌词,封面等信息,通过MusicTag,我们可以批量的一键修改和添加指定歌曲的标签。支持LAC, APE, WAV, AIFF, WV, TTA, MP3, MP4, M4A, OGG, MPC, OPUS, WMA, DSF, DFF等,并且标签源包括了网易云、QQ歌曲、虾米、酷我、酷狗、iTunes、Last. fm、VGMdb、brainz等国内外主流歌曲平台,尤其是对中文歌曲的支持更好。
Docker Compose 部署
示例 Compose 配置如下:
music_tag:
image: xhongc/music_tag_web:latest
container_name: music_tag
ports:
- "8002:8001"
volumes:
- ./navidrome-data/music:/app/media
- ./tag-data:/app/data
environment:
- TZ=Asia/Shanghai
restart: unless-stopped
navidrome:
image: deluan/navidrome:latest
ports:
- 4533:4533
restart: unless-stopped
environment:
- TZ=Asia/Shanghai
- ND_LOGLEVEL=info
- ND_DEFAULTLANGUAGE=zh-Hans
- ND_ENABLECOVERANIMATION=false
- ND_ENABLEDOWNLOADS=false
- ND_ENABLEEXTERNALSERVICES=false
- ND_ENABLEGRAVATAR=false
- ND_ENABLEREPLAYGAIN=false
- ND_ENABLESHARING=false
- ND_ENABLESTARRATING=false
- ND_ENABLETRANSCODINGCONFIG=false
- ND_ENABLEUSEREDITING=false
- ND_LASTFM_ENABLED=false
- ND_LISTENBRAINZ_ENABLED=false
- ND_MAXSIDEBARPLAYLISTS=300
- ND_PASSWORDENCRYPTIONKEY=USE_YOUR_OWN_KEY
- ND_SCANNER_GROUPALBUMRELEASES=true
volumes:
- ./navidrome-data/data:/data
- ./navidrome-data/music:/music:ro那一大坨environment具体配置如下,有需求可以添加
ND_CONFIGFILE
外部配置文件路径
默认值:"./navidrome.toml"
ND_MUSICFOLDER(在配置文件中:MusicFolder)
音乐库路径,可以为制度文件夹
默认值:"./music"
ND_DATAFOLDER(在配置文件中:DataFolder)
Navidrome 数据保存路径
默认值:"./data"
ND_CACHEFOLDER(在配置文件中:CacheFolder)
缓存数据(转码、元数据封面图等)保存路径
默认值:"<DataFolder>/cache"
ND_LOGLEVEL(在配置文件中:LogLevel)
日志等级,可用选项: error, warn, info, debug, trace
默认值:"info"
ND_ADDRESS(在配置文件中:Address)
绑定地址,可以为 IPv4 或 IPv6,支持 Unix Socket 如 unix:/path/to/file
默认值:0.0.0.0 和 :: (绑定全部IP)
ND_BASEURL(在配置文件中:BaseUrl)
设置 BaseURL,在使用反向代理时很有用,示例: /music, https://music.example.com
默认值:Empty
ND_PORT(在配置文件中:Port)
监听端口
默认值:4533
ND_ENABLEINSIGHTSCOLLECTOR(在配置文件中:EnableInsightsCollector)
允许收集使用数据以优化产品体验
默认值:true
ND_ALBUMPLAYCOUNTMODE(在配置文件中:AlbumPlayCountMode)
设置专辑播放次数计算方式,设为"normalized"时用专辑播放次数除以专辑音轨数后的结果作为专辑播放次数
默认值:"absolute"
ND_AUTHREQUESTLIMIT(在配置文件中:AuthRequestLimit)
在 AuthWindowLength 时间单一IP允许的最大登录失败次数,设为0时禁用登录频率限制
默认值:5
ND_AUTHWINDOWLENGTH(在配置文件中:AuthWindowLength)
登录频率限制时间窗口,与上一项搭配使用实现“阻止20s内登录失败5次的IP继续访问此服务器”
默认值:"20s"
ND_AUTOIMPORTPLAYLISTS(在配置文件中:AutoImportPlaylists)
是否自动导入 .m3u 播放列表
默认值:true
ND_DEFAULTPLAYLISTPUBLICVISIBILITY(在配置文件中:DefaultPlaylistPublicVisibility)
将导入的播放列表自动设为所有用户可访问的播放列表
默认值:false
ND_ARTISTARTPRIORITY(在配置文件中:ArtistArtPriority)
歌手/演奏家图像来源
默认值:artist.*, album/artist.*, external
ND_COVERARTPRIORITY(在配置文件中:CoverArtPriority)
专辑/音轨封面图来源,embedded 代表从音频文件内嵌标签数据搜索
默认值:cover.*, folder.*, front.*, embedded, external
ND_COVERJPEGQUALITY(在配置文件中:CoverJpegQuality)
专辑/音轨封面图质量
默认值:75
ND_DEFAULTDOWNSAMPLINGFORMAT(在配置文件中:DefaultDownsamplingFormat)
当客户端请求转码时所使用的转码格式(若指定 maxBitrate 则可不指定格式)
默认值:opus
ND_DEFAULTLANGUAGE(在配置文件中:DefaultLanguage)
默认系统语言,简体中文设为 zh-Hans(注意大小写敏感)
默认值:"en"
ND_DEFAULTTHEME(在配置文件中:DefaultTheme)
默认 Web 界面主题
默认值:Dark
ND_ENABLEARTWORKPRECACHE(在配置文件中:EnableArtworkPrecache)
是否启用音乐库新增音乐文件时预加载图像(若不启用则在读取到对应歌曲/专辑时才会加载其图像)
默认值:true
ND_ENABLECOVERANIMATION(在配置文件中:EnableCoverAnimation)
Web 界面音乐播放时的封面旋转动画
默认值:true
ND_ENABLEDOWNLOADS(在配置文件中:EnableDownloads)
是否允许从 Web 界面下载音乐/专辑/播放列表,建议关闭
默认值:true
ND_ENABLEEXTERNALSERVICES.(在配置文件中:EnableExternalServices)
启用外部拓展集成,包括匿名数据收集以及自动更换登录界面背景,建议禁用
默认值:true
ND_ENABLEFAVOURITES(在配置文件中:EnableFavourites)
是否允许从 Web 界面星标或收藏 歌曲/专辑/艺术家
默认值:true
ND_ENABLEGRAVATAR(在配置文件中:EnableGravatar)
启用 Gravatar 用户头像,需要用户填写邮件地址,建议禁用
默认值:false
ND_ENABLELOGREDACTING(在配置文件中:EnableLogRedacting)
记录日志时对用户敏感信息(如 token 或密码等)进行脱敏处理
默认值:true
ND_ENABLEMEDIAFILECOVERART(在配置文件中:EnableMediaFileCoverArt)
当播放器请求音轨封面时,设置为 true 返回音轨封面,为 false 时返回专辑封面
默认值:true
ND_ENABLEREPLAYGAIN(在配置文件中:EnableReplayGain)
允许 Web 界面使用播放增益,建议禁用
默认值:true
ND_ENABLESHARING(在配置文件中:EnableSharing)
允许创建分享链接
默认值:false
ND_ENABLESTARRATING(在配置文件中:EnableStarRating)
是否在 Web 界面启用5星评分机制
默认值:true
ND_ENABLETRANSCODINGCONFIG(在配置文件中:EnableTranscodingConfig)
允许在 Web 界面修改转码设置
默认值:false
ND_ENABLEUSEREDITING(在配置文件中:EnableUserEditing)
允许一般用户修改自己的用户信息以及修改密码
默认值:true
ND_FFMPEGPATH(在配置文件中:FFmpegPath)
ffmpeg 可执行文件路径,如果你要使用特定版本的 ffmpeg 或者 Navidrome 报错无法定位系统 ffmpeg 时可设置此项
默认值:Empty (search in the PATH)
ND_GATRACKINGID(在配置文件中:GATrackingID)
设置 Google Analytics 信息,格式必须为 UA-XXXXXXXX
默认值:Empty (disabled)
ND_HTTPSECURITYHEADERS_CUSTOMFRAMEOPTIONSVALUE(在配置文件中:HTTPSecurityHeaders.CustomFrameOptionsValue)
设置 X-Frame-Options,如"SAMEORIGIN",按需设置
默认值:"DENY"
ND_IGNOREDARTICLES(在配置文件中:IgnoredArticles)
自动索引禁用词列表,比如以“%”或一些奇葩符号开头的音乐/专辑名可以在这里禁用他们防止他们出现在快速索引列表里
默认值:"The El La Los Las Le Les Os As O A"
ND_IMAGECACHESIZE(在配置文件中:ImageCacheSize)
媒体图像缓存大小,设为0时禁用媒体图像缓存
默认值:"100MB"
ND_JUKEBOX_ENABLED(在配置文件中:Jukebox.Enabled)(注意,关于点唱机模式请参阅 https://www.navidrome.org/docs/usage/jukebox/)
是否启用点唱机模式,即在服务器端播放音频(你可以把 Navidrome 接入家庭音响来远程遥控播放音乐)
默认值:false
ND_JUKEBOX_ADMINONLY(在配置文件中:Jukebox.AdminOnly)
(点唱机模式相关)默认只有管理员可以在服务器端播放音乐,禁用此项则所有用户都可以在服务器端播放音乐
默认值:true
Jukebox.Devices(此项只能使用配置文件设置,不能通过环境变量设置)
(点唱机模式相关)服务器端可用的音频设备列表
默认值:Empty(自动检测)
ND_JUKEBOX_DEFAULT(在配置文件中:Jukebox.Default)
(点唱机模式相关)如果服务器端可用音频设备存在多个,则需在此配置要默认使用的播放设备
默认值:Empty (auto detect)
ND_LASTFM_ENABLED(在配置文件中:LastFM.Enabled)
是否启用 Last.fm 集成
默认值:true
ND_LASTFM_APIKEY(在配置文件中:LastFM.ApiKey)
Last.fm API Key,默认为空不启用
默认值:Empty
ND_LASTFM_SECRET(在配置文件中:LastFM.Secret)
Last.fm API Secret,默认为空不启用
默认值:Empty
ND_LASTFM_LANGUAGE(在配置文件中:LastFM.Language)
Last.fm 电台语言选项
默认值:"en"
ND_LISTENBRAINZ_ENABLED(在配置文件中:ListenBrainz.Enabled)
是否启用 ListenBrainz(在线音乐元数据库)集成
默认值:true
ND_LISTENBRAINZ_BASEURL(在配置文件中:ListenBrainz.BaseURL)
设置 ListenBrainz(在线音乐元数据库)的地址,如果你有自建类似服务比如 Maloja 则可以在此设置。
默认值:https://api.listenbrainz.org/1/
ND_MAXSIDEBARPLAYLISTS(在配置文件中:MaxSidebarPlaylists)
设置 Web 界面侧边栏最大能显示的播放列表数,该数字过大可能会影响 Web 界面性能。
默认值:100
ND_MPVPATH(在配置文件中:MPVPath)
(点唱机模式相关)mpv 可执行文件路径
默认值:Empty (search in PATH)
ND_MPVCMDTEMPLATE(在配置文件中:MPVCmdTemplate)
(点唱机模式相关)调用 mpv 的命令行模板
默认值:mpv --audio-device=%d --no-audio-display --pause %f --input-ipc-server=%s
ND_PASSWORDENCRYPTIONKEY(在配置文件中:PasswordEncryptionKey)
密码加密密钥
默认值:-
ND_PLAYLISTSPATH(在配置文件中:PlaylistsPath)
搜索并自动导入播放列表的路径,可以是文件夹或资源路径,路径必须是相对于 MusicFolder 的才能识别
默认值:".:**/**" (meaning MusicFolder and all its subfolders)
ND_PREFERSORTTAGS(在配置文件中:PreferSortTags)
允许使用 Sort_* 标签来在 Web 界面中对歌曲进行排序
默认值:false
ND_PROMETHEUS_ENABLED(在配置文件中:Prometheus.Enabled)
启用 Prometheus 性能数据监测
默认值:false
ND_PROMETHEUS_METRICSPATH(在配置文件中:Prometheus.MetricsPath)
Prometheus 性能数据监测端点
默认值:"/metrics"
ND_RECENTLYADDEDBYMODTIME(在配置文件中:RecentlyAddedByModTime)
使用文件的“修改时间”进行排序生成“最近添加”歌单,设置为否则使用 Navidrome 导入时间进行排序
默认值:false
ND_REVERSEPROXYUSERHEADER(在配置文件中:ReverseProxyUserHeader)
通过反代访问时,若使用三方身份登录时的用户身份识别字段设置,参照 https://www.navidrome.org/docs/usage/security/#reverse-proxy-authentication
默认值:"Remote-User"
ND_REVERSEPROXYWHITELIST(在配置文件中:ReverseProxyWhitelist)
通过反代访问 Navidrome 时反代服务器白名单列表,格式为使用英文逗号分隔的CIDR,不设置默认为 “deny all”
默认值:Empty
ND_SCANNER_EXTRACTOR(在配置文件中:Scanner.Extractor)
元数据解析实现,可以使用 taglib 或者 ffmpeg
默认值:"taglib"
ND_SCANNER_GENRESEPARATORS(在配置文件中:Scanner.GenreSeparators)
类型标签分隔符设置,如果音乐存在类型标签则多个类型是使用什么作为分隔的
默认值:";/,"
ND_SCANNER_GROUPALBUMRELEASES(在配置文件中:Scanner.GroupAlbumReleases)
专辑分组策略,true 则将同艺术家+专辑名的专辑分组为同一张专辑,false 将会识别发行日期,若不同发行日期将会分成独立的专辑
默认值:false
ND_SCANSCHEDULE(在配置文件中:ScanSchedule)
音乐库新增文件扫描时间计划,格式为 cron 表达式,设为0时禁用新增文件扫描
默认值:"@every 1m"
ND_SEARCHFULLSTRING(在配置文件中:SearchFullString)
启用按字搜索,默认按词搜索
默认值:false
ND_SESSIONTIMEOUT(在配置文件中:SessionTimeout)
会话时间,当用户会话无活动指定时间后注销会话
默认值:"24h"
ND_SHAREURL(在配置文件中:ShareURL)
用于分享时的服务器地址
默认值:Empty (使用服务器地址)
ND_SMARTPLAYLISTREFRESHDELAY(在配置文件中:SmartPlaylistRefreshDelay)
只能播放列表的自动刷新间隔
默认值:"5s"
ND_SPOTIFY_ID(在配置文件中:Spotify.ID)
Spotify Clietn ID,需要从 Spotify 获取艺术家图像时设置
默认值:Empty
ND_SPOTIFY_SECRET(在配置文件中:Spotify.Secret)
Spotify Client Secret,需要从 Spotify 获取艺术家图像时设置
默认值:Empty
ND_SUBSONICARTISTPARTICIPATIONS(在配置文件中:SubsonicArtistParticipations)
当查询指定艺术家的专辑时,包括该艺术家参演的专辑(如 V.A. 这种一群人合作发行的专辑)
默认值:false
ND_TLSCERT(在配置文件中:TLSCert)
TLS certificate 文件路径,需要包含 signature chain
默认值:Empty (disable TLS)
ND_TLSKEY(在配置文件中:TLSKey)
TLS key 文件路径
默认值:Empty (disable TLS)
ND_TRANSCODINGCACHESIZE(在配置文件中:TranscodingCacheSize)
转码缓存大小,设置0禁用转码缓存
默认值:"100MB"
ND_UILOGINBACKGROUNDURL(在配置文件中:UILoginBackgroundUrl)
自定义登陆界面背景图像,可设置为链接
默认值:随机 Unsplash.com 图像,如果之前禁用了外部集成则只会使用内置图像
ND_UIWELCOMEMESSAGE(在配置文件中:UIWelcomeMessage)
在登录界面显示欢迎信息
默认值:Empty
ND_UNIXSOCKETPERM(在配置文件中:UnixSocketPerm)
Unix Socket 文件权限,一般无需设置
默认值:"0660"docker拉取以后,通过服务器ip+8002/4533访问,记得开防火墙。
PicImpact
PicImpact 是一个支持自部署的摄影作品展示网站,基于 Next.js + Hono.js 开发。
瀑布流相册展示图片,支持实况照片(Live Photos),基于 LivePhotosKit JS 开发。
支持地图模组标记图片,根据图片经纬度标记在地图上。
图片存储兼容 S3 API、Cloudflare R2、Open List API。
图片支持绑定标签,并且可通过标签进行交互,筛选标签下所有图片。
支持输出 RSS,可以使用 Follow 订阅,并支持订阅源所有权验证。
支持批量自动化上传,上传图片时会生成 0.3 倍率的压缩图片,以提供加载优化。
支持 Vercel 部署、Node.js 部署、Docker 等容器化部署。
需要postgres配套以及对应的储存桶。
Docker Compose 部署
示例 Compose 配置如下:
picimpact-db:
image: postgres:15-alpine
container_name: picimpact-db
restart: unless-stopped
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pswd
POSTGRES_DB: picimpact_db
volumes:
- picimpact-pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U picimpact"]
interval: 10s
timeout: 5s
retries: 5
picimpact:
networks:
- halo-net
image: besscroft/picimpact:latest
container_name: picimpact
restart: unless-stopped
ports:
- "3002:3000" # 宿主机 3002 端口映射到容器 3000,避免和 umami 的 3000 冲突
environment:
DATABASE_URL: postgres://picimpact:picimpact_pass@picimpact-db:5432/picimpact_db
DIRECT_URL: postgres://picimpact:picimpact_pass@picimpact-db:5432/picimpact_db
BETTER_AUTH_SECRET: A_RanDoM_PasS
BETTER_AUTH_URL: https://domain.com # 域名
BETTER_AUTH_PASSKEY_RP_ID: domain.com
BETTER_AUTH_PASSKEY_RP_NAME: PicImpact
depends_on:
picimpact-db:
condition: service_healthy
alist:
image: xhofe/alist:latest
container_name: alist
restart: unless-stopped
ports:
- "5244:5244"
volumes:
- ./alist-data:/opt/alist/data # 这才是正确的数据持久化路径
environment:
- PUID=0
- PGID=0
- UMASK=022在alist中按需选择如下配置:


配置好后,在picimpact中导入token,alist的token在其他-令牌中。

随后便可展示你的作品。至于为什么我不用r2或者s3储存策略,那纯粹是因为不会配置。
