起源
高中开始一直有一个 Sony Walkman A55
,里面放着不同平台聚合的喜欢的歌,但是一到大学就难受了,一个一半手机大小的砖一直要带着跑来跑去。但是在每个设备上都同步一遍几十G的音乐不现实,所以想着怎么在云端搭一个私人音乐库,所有新歌只需要在上面传一次就行。
选择
SMB
。这是我一开始的选择,也是我认为最理想的。因为这样我就可以用foobox
无缝切换,手机再搞个支持SMB
的文件浏览器就实现了这个功能。
但是暴露 SMB
竟然成为了最麻烦的地方,由于 445
端口成为众多病毒的攻击点,运营商基本关闭了公网 445
端口,所以要暴露,必须在服务端和客户端各转发一次端口,而 Windows
又无法修改 SMB
的默认端口。所以这个计划真的要实行也很麻烦了。
WebDav
FTP
,最大的弱点就是没有支持良好的播放器,暴露倒是不难。Web Player
,所以只能找私人音乐库的在线播放器,最终找到了开源中还算不错的koel
(虽然功能其实也挺简陋的,性能可能因为PHP
写的,也不太行)。
所需
- 安装了小钢炮的
N1
(armbian
openwrt
都可以,只要能装docker
) - 一个外接硬盘,并且已经挂载(自带8G Flash太小了)
目标
- 完整的
koel
安装,使用轻量的sqlite
数据库,官方推荐的docker-compose
用的mysql
,N1
可能会跑不动 - 白嫖钉钉内网穿透暴露公网
- 写个
golang
小脚本批量导入Sony A55
的歌单
安装
踩了不少坑,一定要按顺序操作
把官方提供的 https://github.com/koel/docker 跑起来
docker run -d --name koel -v 媒体目录(外接硬盘挂载点):/music -p 本地端口:80 hyzual/koel
# docker run -d --name koel -v /media/music:/music -p 7777:80 hyzual/koel
进入小钢炮 docker
控制面板,进入容器内部命令行,以下均在容器内执行
安装 vim
,编辑 .env
文件
apt-get install -y vim && vi .env
修改为以下内容
# 不要随便动KEY
APP_KEY=rUvKWgs38Fe/jJfnzWHVJEBg4gRBRlvUe392MsWMgIc=
DB_CONNECTION=sqlite-persistent
# 数据库位置
DB_DATABASE=/var/www/html/database/data.db
APP_NAME=Koel
# 指定容器内的读取目录
MEDIA_PATH=/music
APP_ENV=production
APP_DEBUG=true
# 同步目录歌曲时内存限制 MB
MEMORY_LIMIT=512
# hyzual/koel镜像自带ffmpeg
FFMPEG_PATH=/usr/bin/ffmpeg
# 输出比特率
OUTPUT_BIT_RATE=320
# 允许下载
ALLOW_DOWNLOAD=true
创建数据库
touch database/data.db
给予文件夹权限
chmod -R 777 .
初始化 koel
php artisan koel:init --no-assets
重新生成 APP_KEY
php artisan key:generate --force
打开 <ip>:<port>
,默认账号密码如下:
Email: [email protected]
Password: KoelIsCool
成功登录!记得修改默认密码
同步媒体文件夹
php artisan koel:sync
重建搜索索引
php artisan koel:search:import
设置管理员密码
php artisan koel:admin:change-password
内网穿透
以下在 ssh
小钢炮后台操作
下载钉钉内网穿透 arm64
版及配置文件: https://github.com/open-dingtalk/pierced/tree/113bab7e397a6471775f6534f4b277961b7a345f/linux_arm
通过各种途径上传到小钢炮中
安装 screen
https://www.right.com.cn/forum/thread-801304-1-1.html
启动 ding
./ding -config=./ding.cfg -subdomain=<子域名> <启动容器的宿主机端口号>
# ./ding -config=./ding.cfg -subdomain=mykoel 7777
# Ctrl + A + D
然后就可以从外网访问了
迁移歌单
TODO