和ChatGPT关于Swing music的一场对话(上篇)
什么是 Swing Music ?
Swing Music
是一款漂亮的自托管音乐播放器,适用于您的本地音频文件。就像一个更酷的Spotify
…但带上你自己的音乐。
第一次在 reddit
上看到 Swing Music
,就被其 UI
吸引了
但源码站点的releases
中只有 windows
和 linux
的版本
老苏不是程序员,但作为一个爱折腾的人,岂能轻易放弃,何不借助最近火的一塌糊涂的 ChatGPT
,让其协助完成 Docker
版呢?于是就有了下面👇的一场对话
与 ChatGPT 的对话
以下只记录了对话的要点,不是事无巨细的完整记录。整个对话断断续续进行了 2
天,其中包含了老苏查资料、编译、测试的时间
服务端
首先当然是看官方的安装手册了
说实话没看懂,虽然之前折腾过 python
的项目,但是 poetry
是什么鬼?
于是老苏向 ChatGPT
提了第一个问题
- Q:如何将下面这段命令改编为
Dockerfile
git clone https://github.com/geoffrey45/swingmusic.gitcd swingmusic# install dependencies using poetry
poetry install# start the app
poetry run python manage.py
ChatGPT
很快就做出了响应,看起来是不是头头是道的?不仅给了代码,还有详细的解释
- A:将上述命令编写为
Dockerfile
的步骤如下:
- 创建一个名为
Dockerfile
的文件,将以下内容复制到文件中:
FROM python:3.8-slim-buster# 更换国内源
RUN 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# 安装 Git 和 Poetry
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
文件
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/*# 安装 Git 和 Poetry
RUN apt-get update && \ apt-get install -y git curlRUN 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 pyinstaller && \
RUN pip install --upgrade pip && \ poetry installEXPOSE 1970
# 启动应用
CMD ["poetry", "run", "python", "manage.py"]
客户端
如法炮制,让 ChatGPT
将客户端的安装过程转为 Dockerfile
文件
- Q:如何将下面这段命令改编为
Dockerfile
git clone https://github.com/geoffrey45/swing-client.gitcd swing-client# Install dependencies
yarn install# Start the development server
yarn dev# Build the project
yarn build
ChatGPT
同样很快就有了回应
- A:以下是将这段命令编写成
Dockerfile
的示例:
FROM node:latestRUN apt-get update && apt-get install -y gitRUN git clone https://github.com/geoffrey45/swing-client.git /appWORKDIR /appRUN yarn installRUN yarn buildEXPOSE 3000CMD ["yarn", "start"]
在该 Dockerfile
中,我们使用了 Node.js
的官方镜像作为基础镜像,并安装了 Git
。接着,我们克隆了 Swing
客户端的代码并将其复制到 Docker
容器中的 /app
目录下。然后,我们在 /app
目录中运行了 yarn install
、yarn build
命令来安装依赖和构建项目。最后,我们暴露了容器的 3000
端口并在容器启动时运行了 yarn start
命令。
接下来,老苏要求改为多阶段,采用阿里的源等多次反复之后,得到了下面的 Dockerfile
# 第一阶段:构建应用
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 /appWORKDIR /appRUN yarn installRUN yarn build# 第二阶段:运行应用
FROM node:latest# 设置淘宝镜像源
RUN npm config set registry https://registry.npm.taobao.org/COPY --from=builder /app /appWORKDIR /appEXPOSE 3000CMD ["yarn", "start"]
构建镜像
如果你不想自己构建,可以跳过,直接阅读下一章节
在这个项目中,老苏还是有贡献的 😂 ,对 ChatGPT
给的代码进行了融合、编译和调试,最终的 Dockerfile
是下面这样的
#前端构建
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/* # 安装 Git
RUN apt-get update && \ apt-get install -y git # 设置yarn镜像为国内镜像
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 # 删除 yarn.lock,否则改源没有用
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/* # 安装 Git 和 Poetry
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 pyinstaller && \
RUN pip install --upgrade pip && \ poetry install EXPOSE 1970
ENV XDG_CONFIG_HOME=/data # 替换 localhost 为 0.0.0.0,否则容器外无法访问
RUN sed -i "s@localhost@0.0.0.0@g" /app/app/settings.py # 启动应用
CMD ["poetry", "run", "python", "manage.py"]
构建镜像和容器运行的基本命令如下👇
# 新建目录
mkdir swingmusic# 进入目录
cd swingmusic# 创建 Dockerfile 文件
touch Dockerfile# 构建镜像
docker 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
相关文章:

和ChatGPT关于Swing music的一场对话(上篇)
什么是 Swing Music ? Swing Music 是一款漂亮的自托管音乐播放器,适用于您的本地音频文件。就像一个更酷的 Spotify …但带上你自己的音乐。 第一次在 reddit 上看到 Swing Music,就被其 UI 吸引了 但源码站点的releases 中只有 windows 和 …...

java版工程项目管理系统源码 Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分离 功能清单
ava版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下: 首页 工作台:待办工作、消息通知、预警信息,点击可进入相应的列表 项目进度图表:选择(总体或单个)项目显示1…...

debian 10 扩展分区容量
debian 10 扩展分区容量1、扩展分区原因2、添加一块磁盘3、命令记录3.1、新增加的磁盘是/dev/sdb3.2、使用磁盘/dev/sdb 创建物理卷3.3、 把物理卷/dev/sdb加入到卷组debian-vg中3.4、查看物理卷、逻辑卷3.5、扩展逻辑卷/tmp3.6、逻辑卷组debian-vg 空余空间被用掉10g 还剩90g可…...

【无功优化】基于改进遗传算法的电力系统无功优化研究【IEEE30节点】(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

LeetCode 218. 天际线问题
城市的 天际线 是从远处观看该城市中所有建筑物形成的轮廓的外部轮廓。给你所有建筑物的位置和高度,请返回 由这些建筑物形成的 天际线 。 每个建筑物的几何信息由数组 buildings 表示,其中三元组 buildings[i] [lefti, righti, heighti] 表示…...

Logstash:使用自定义正则表达式模式
有时 Logstash Grok 没有我们需要的模式。 幸运的是我们有正则表达式库:Oniguruma。在很多时候,如果 Logstash 所提供的正则表达不能满足我们的需求,我们选用定制自己的表达式。 定义 Logstash 是一种服务器端数据处理管道,可同时…...
常见的一致性问题及解决
什么是一致性 一致性问题主要是因为分布式系统中的多个节点之间可能存在网络延迟、故障等原因导致的。具体而言,分布式系统中的数据一致性问题可以分为以下几种类型: 强一致性:指在任何时间点,所有节点中的数据都是一致的。这种…...
vue下载文件
注意请求时加入:responseType: bloburl:写全了,因为前后端端口号不同downloadImage(imgUrl) {let formData new FormData();formData.append(fileName, this.getFilename(imgUrl)); // 用于后端下载文件的路径axios.post(http://localhost:8…...

人人都是数据分析师-数据分析之数据图表可视化(下)
当前的BI报表、运营同学的汇报报告中数据图表大多为 表格、折线图、柱状图和饼图,但是实际上还有很多具有代表性的可视化图表,因此将对常见的可视化图表进行介绍,希望这些图表可视化方法能够更好的提供数据的可用性。 人人都是数据分析师-数…...

考勤、充电,绑身份,你的人员定位系统就缺它了!
我们做人脸识别智能发卡充电柜是要解决什么问题? (1)工地、港口等场景,人员流动大,管理难 在工地、港口等场景,人员组成通常比较复杂。有来自施工方、客户、各劳务队、各管理层的人员,以及来自…...

RocketMQ水平扩展及负载均衡详解
文章目录 Broker端水平扩展Broker负载均衡commit logProducer负载均衡Consumer负载均衡集群模式广播模式RocketMQ是一个分布式具有高度可扩展性的消息中间件。本文旨在探索在broker端,生产端,以及消费端是如何做到横向扩展以及负载均衡的。 Broker端水平扩展 Broker负载均衡…...
java接口笔记
关键字:interface 定义形式:interface 接口名 { 接口体 } 细节: 1.接口里的方法可以为抽象方法,静态方法,默认方法(default 关键字) 2.接口里的方法只能是public ,可以不用写&a…...

安利安利-向大家推荐一个超级牛的etcd管理工具-EtcdKeeperFyne
etcd介绍 关于etcd的介绍大家可以看下这篇文章 etcd 开源仓库地址:EtcdKeeperFyne EtcdKeeperFyne 今天主要是向大家推荐一款使用起来特别方便的Etcd管理工具 EtcdKeeperFyne,具体运行起来的界面如下: 推荐原因 使用简单安装简单&…...
数字经济系列讲座-数字化平台(商业购物平台)
数字经济系列讲座 文章目录 钱的流向退货成本research questionLiterature review现金流发生在平台内侧平台商业模式转型Modelmodel 假设四种情形标记符利润函数&效用函数&平台效益模型构建利润对比图结论future directions讲座题目 To Adopt or not? The Impacts of…...
python3中collections模块详解
collections模块简介 collections包含了一些特殊的容器,针对Python内置的容器,例如list、dict、set和tuple,提供了另一种选择; namedtuple,可以创建包含名称的tuple; deque,类似于list的容器&a…...
护网面试题2.0
1.CSS和CSRF区别 通俗点讲的话: XSS通过构造恶意语句获取对方cookie, CSRF通过构造恶意链接利用对方cookie,但看不到cookie XSS比CSRF更加容易发生,但CSRF比XSS攻击危害更大 2.XSS原理 XSS(Cross-Site Scripting&…...

学习计算机组成原理第1天(计算机发展历程)
计算机发展历程计算机硬件发展计算机软件的发展经典例题计算机硬件发展 计算机的四代变化 1)第一代计算机(1946-1957年)电子管时代。特点:逻辑元件采用电子管;使用机器语言进行编程;主存用延迟线或磁鼓存储…...
二维字符数组与char** 关系 段错误打印
如下为错误,打印断错误。 具体原因参考 http://c.biancheng.net/view/2022.html 二维字符数组与char** 关系 原因: char a[2][20] ; 这是一个二维字符数组。 二维字符数组,这里相当于是两个一维字符串数组。这两个数组在内存的存放位置可以…...

从url输入到页面呈现发生了什么
从url输入到页面呈现发生了什么 1.URL解析 encodeURI / decodeURI 对整个URL的编码:处理空格/中文 let url "http://https://blog.csdn.net/api/ ?lx1&name科比&fromhttp://www.baidu.com/"; console.log(encodeURI(url));encodeURICompone…...

vue之--使用TypeScript
搭配 TypeScript 使用 Vue 像 TypeScript 这样的类型系统可以在编译时通过静态分析检测出很多常见错误。这减少了生产环境中的运行时错误,也让我们在重构大型项目的时候更有信心。通过 IDE 中基于类型的自动补全,TypeScript 还改善了开发体验和效率。…...

智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...

ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...