起源

高中开始一直有一个 Sony Walkman A55 ,里面放着不同平台聚合的喜欢的歌,但是一到大学就难受了,一个一半手机大小的砖一直要带着跑来跑去。但是在每个设备上都同步一遍几十G的音乐不现实,所以想着怎么在云端搭一个私人音乐库,所有新歌只需要在上面传一次就行。

选择

  1. SMB 。这是我一开始的选择,也是我认为最理想的。因为这样我就可以用 foobox 无缝切换,手机再搞个支持 SMB 的文件浏览器就实现了这个功能。

但是暴露 SMB 竟然成为了最麻烦的地方,由于 445 端口成为众多病毒的攻击点,运营商基本关闭了公网 445 端口,所以要暴露,必须在服务端和客户端各转发一次端口,而 Windows 又无法修改 SMB 的默认端口。所以这个计划真的要实行也很麻烦了。

  1. WebDav FTP ,最大的弱点就是没有支持良好的播放器,暴露倒是不难。
  2. Web Player ,所以只能找私人音乐库的在线播放器,最终找到了开源中还算不错的 koel (虽然功能其实也挺简陋的,性能可能因为 PHP 写的,也不太行)。

所需

  • 安装了小钢炮的 N1 (armbian openwrt 都可以,只要能装 docker)
  • 一个外接硬盘,并且已经挂载(自带8G Flash太小了)

目标

  • 完整的 koel 安装,使用轻量的 sqlite 数据库,官方推荐的 docker-compose 用的 mysqlN1 可能会跑不动
  • 白嫖钉钉内网穿透暴露公网
  • 写个 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: admin@koel.dev
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

最后修改:2021 年 12 月 09 日 11 : 15 PM