什么是 Swing Music ?
Swing Music
是一款漂亮的自托管音乐播放器,适用于您的本地音频文件。就像一个更酷的 Spotify
……但带上你自己的音乐。
第一次在 reddit
上看到 Swing Music
,就被其 UI
吸引了
但源码站点的releases
中只有 windows
和 linux
的版本
老苏不是程序员,但作为一个爱折腾的人,岂能轻易放弃,何不借助最近火的一塌糊涂的 ChatGPT
,让其协助完成 Docker
版呢?于是就有了下面👇的一场对话
与 ChatGPT 的对话 以下只记录了对话的要点,不是事无巨细的完整记录。整个对话断断续续进行了 2
天,其中包含了老苏查资料、编译、测试的时间
服务端 首先当然是看官方的安装手册了
说实话没看懂,虽然之前折腾过 python
的项目,但是 poetry
是什么鬼?
于是老苏向 ChatGPT
提了第一个问题
Q:如何将下面这段命令改编为 Dockerfile
1 2 3 4 5 6 7 8 9 git clone https://github.com/geoffrey45/swingmusic.git cd swingmusicpoetry install poetry run python manage.py
ChatGPT
很快就做出了响应,看起来是不是头头是道的?不仅给了代码,还有详细的解释
A:将上述命令编写为 Dockerfile
的步骤如下:
创建一个名为 Dockerfile
的文件,将以下内容复制到文件中:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 FROM python:3.8 -slim-busterRUN sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list RUN sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list RUN apt-get clean RUN apt-get update && \ apt-get install -y git && \ curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python RUN git clone https://github.com/geoffrey45/swingmusic.git /app WORKDIR /app RUN poetry install --no-dev CMD ["poetry" , "run" , "python" , "manage.py" ]
Dockerfile
基于 Python 3.8
官方镜像构建,安装了 Git
和 Poetry
,从 GitHub
上下载了 geoffrey45/swingmusic
项目的代码,安装了项目依赖,并在容器启动时启动了应用程序。
在命令行中进入包含 Dockerfile
文件的目录,并执行以下命令构建 Docker 镜像: docker build -t my-swingmusic-app .
其中,my-swingmusic-app
是您为该 Docker
镜像指定的名称。
构建完成后,可以使用以下命令启动 Docker
容器: docker run --name my-swingmusic-container my-swingmusic-app
其中,my-swingmusic-container
是您为该 Docker
容器指定的名称。
希望这些步骤能够帮助您将上述命令编写为 Dockerfile
,并成功构建和运行 Docker
容器。
接来下老苏让 ChatGPT
改了阿里源、 python
的版本,同时根据编译的情况做了修正,最后得到了可以编译过的服务端的 Dockerfile
文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 FROM python:3.11 -slim-buster RUN sed -i "s@http://deb.debian.org@http://mirrors.aliyun.com@g" /etc/apt/sources.list RUN cat /etc/apt/sources.list RUN rm -Rf /var/lib/apt/lists/* RUN apt-get update && \ apt-get install -y git curl RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py | python - ENV PATH /root/.local/bin:$PATH RUN git clone https://ghproxy.com/github.com/geoffrey45/swingmusic.git /app WORKDIR /app RUN pip install --upgrade pip && \ poetry install EXPOSE 1970 CMD ["poetry" , "run" , "python" , "manage.py" ]
客户端 如法炮制,让 ChatGPT
将客户端的安装过程转为 Dockerfile
文件
Q:如何将下面这段命令改编为 Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 git clone https://github.com/geoffrey45/swing-client.git cd swing-clientyarn install yarn dev yarn build
ChatGPT
同样很快就有了回应
A:以下是将这段命令编写成 Dockerfile
的示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 FROM node:latestRUN apt-get update && apt-get install -y git RUN git clone https://github.com/geoffrey45/swing-client.git /app WORKDIR /app RUN yarn install RUN yarn build EXPOSE 3000 CMD ["yarn" , "start" ]
在该 Dockerfile
中,我们使用了 Node.js
的官方镜像作为基础镜像,并安装了 Git
。接着,我们克隆了 Swing
客户端的代码并将其复制到 Docker
容器中的 /app
目录下。然后,我们在 /app
目录中运行了 yarn install
、yarn build
命令来安装依赖和构建项目。最后,我们暴露了容器的 3000
端口并在容器启动时运行了 yarn start
命令。
接下来,老苏要求改为多阶段,采用阿里的源等多次反复之后,得到了下面的 Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 FROM node:latest as builderRUN apt-get update && apt-get install -y git RUN npm config set registry https://registry.npm.taobao.org/ RUN git clone https://github.com/geoffrey45/swing-client.git /app WORKDIR /app RUN yarn install RUN yarn build FROM node:latestRUN npm config set registry https://registry.npm.taobao.org/ COPY --from=builder /app /app WORKDIR /app EXPOSE 3000 CMD ["yarn" , "start" ]
构建镜像
如果你不想自己构建,可以跳过,直接阅读下一章节
在这个项目中,老苏还是有贡献的 😂 ,对 ChatGPT
给的代码进行了融合、编译和调试,最终的 Dockerfile
是下面这样的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 FROM node:latest as builder RUN sed -i "s@http://deb.debian.org@http://mirrors.aliyun.com@g" /etc/apt/sources.list RUN cat /etc/apt/sources.list RUN rm -Rf /var/lib/apt/lists/* RUN apt-get update && \ apt-get install -y git RUN yarn config set registry https://registry.npm.taobao.org --global && \ yarn config set disturl https://npm.taobao.org/dist --global RUN git clone https://github.com/geoffrey45/swing-client.git /app RUN rm -Rf /app/yarn.lock WORKDIR /app RUN yarn install && \ yarn build FROM python:3.11 -slim-buster MAINTAINER laosu<wbsu2003@gmail.com> RUN sed -i "s@http://deb.debian.org@http://mirrors.aliyun.com@g" /etc/apt/sources.list RUN cat /etc/apt/sources.list RUN rm -Rf /var/lib/apt/lists/* RUN apt-get update && \ apt-get install -y git curl RUN curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py | python - ENV PATH /root/.local/bin:$PATH RUN git clone https://github.com/geoffrey45/swingmusic.git /app COPY --from=builder /app/dist/. /app/client/. WORKDIR /app RUN pip install --upgrade pip && \ poetry install EXPOSE 1970 ENV XDG_CONFIG_HOME=/data RUN sed -i "s@localhost@0.0.0.0@g" /app/app/settings.py CMD ["poetry" , "run" , "python" , "manage.py" ]
构建镜像和容器运行的基本命令如下👇
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 mkdir swingmusiccd swingmusictouch Dockerfiledocker build -t wbsu2003/swingmusic:v1 . docker run -d \ --name swingmusic \ -p 1970:1970 \ -v $(pwd )/data:/data \ -v $(pwd )/music:/music \ wbsu2003/swingmusic:v1
下篇进入 Swing Music
的安装、使用环节,咱们周三不见不散。
参考文档
swing-opensource/swingmusic: Swing Music is a beautiful, self-hosted music player for your local audio files. Like a cooler Spotify … but bring your own music. 地址:https://github.com/swing-opensource/swingmusic
swing-opensource/swingmusic-client: Browser-based client for the swing music player: (https://github.com/swing-opensource/swingmusic ). Powered by VueJS, Typescript, Pinia and Axios 地址:https://github.com/swing-opensource/swingmusic-client