Docker快速部署Koel

Koel是一个开源的基于Web的音频流服务,我们可以用它来自建自己的音乐服务器。

用来搭建的机器内存最好有1GB,512M可能会出现幺蛾子问题。

部署我这里就直接用docker梭哈了,首先安装nginx/certbot/docker和一些需要用到的软件:

apt -y install curl nginx python-certbot-nginx
curl -sSL https://get.docker.com/ | sh
systemctl enable --now nginx docker

安装docker-compose:

curl -L https://github.com/docker/compose/releases/download/1.27.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

新建一个目录进入到这个目录内:

mkdir -p /opt/koel && cd /opt/koel

新建一个docker-compose.yml:

nano docker-compose.yml

写入如下配置:

version: '3.5'

services:
  koel:
    image: hyzual/koel
    depends_on:
      - koel-database
    ports:
      - "127.0.0.1:5000:80"
    environment:
      FORCE_HTTPS: 1
      MEMORY_LIMIT: 512
      DB_CONNECTION: mysql
      DB_HOST: koel-database
      DB_USERNAME: koel
      DB_PASSWORD: password
      DB_DATABASE: koel
    volumes:
      - koel_music:/music
      - koel_covers:/var/www/html/public/img/covers
    restart: unless-stopped

  koel-database:
    image: mysql/mysql-server:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: koel
      MYSQL_USER: koel
      MYSQL_PASSWORD: password
    volumes:
      - koel_db:/var/lib/mysql
    restart: unless-stopped

volumes:
  koel_db:
    driver: local
  koel_music:
    driver: local
  koel_covers:
    driver: local

注:所有password字段改为一个高强度的密码。此外,如果暴露的5000端口已经被占用了,你可以任意改一个别的端口。

up起来即可:

docker-compose up -d

确认所有容器都是up状态:

docker-compose ps

之后执行下面的命令创建管理员账号:

docker-compose exec koel php artisan koel:init

流程如下:

Your name [Koel Admin]:
> 设置你的用户名

Your email address [admin@koel.com]:
> 设置你的邮箱

Your desired password:
> 设置你的管理员密码

Again, just to be sure:
> 设置你的管理员密码

Media path [/music]:
> 直接回车

这步执行到最后不出意外会报错:

Oops! Koel installation or upgrade didn't finish successfully.

原因是前端资源已经在容器内构建好了,这里就不用再构建了,所以会报错。错误可以直接忽略。

这个容器镜像的维护者提到过此问题,我只是翻译一下:

https://hub.docker.com/r/hyzual/koel/

接下来新建nginx配置文件用于反向代理:

nano /etc/nginx/conf.d/koel.conf

写入如下配置:

server {
   listen 80;
   server_name koel.imlala.best; # 换成你的域名
   client_max_body_size 0;

location / {
   proxy_pass       http://127.0.0.1:5000;
   proxy_set_header Host $host;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header X-Forwarded-Proto $scheme;
   }
}

最后使用certbot签一个ssl证书:

certbot --nginx

访问你的域名,应该能看到登录界面,尝试登录:

如果登录不进去,再把下面这个命令执行一次,让它重新生成一个JWT_SECRET:

docker-compose exec koel php artisan koel:init

实际上后续你更新了容器或者删除了容器后,重新启一个新的容器时都要把这个命令执行一次。

登录进去后,你可以在Web界面上传音乐:

也可以直接把音乐存到如下目录:

/var/lib/docker/volumes/koel_koel_music/_data

通过Web页面上传的音乐可以直接播放,自己存到目录内的音乐需要先扫描才能播放。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注