当前位置: 首页 > news >正文

和ChatGPT关于Swing music的一场对话(上篇)

在这里插入图片描述

什么是 Swing Music ?

Swing Music 是一款漂亮的自托管音乐播放器,适用于您的本地音频文件。就像一个更酷的 Spotify …但带上你自己的音乐。

第一次在 reddit 上看到 Swing Music,就被其 UI 吸引了

在这里插入图片描述

但源码站点的releases 中只有 windowslinux 的版本

在这里插入图片描述

老苏不是程序员,但作为一个爱折腾的人,岂能轻易放弃,何不借助最近火的一塌糊涂的 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 的步骤如下:
  1. 创建一个名为 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 官方镜像构建,安装了 GitPoetry,从 GitHub 上下载了 geoffrey45/swingmusic 项目的代码,安装了项目依赖,并在容器启动时启动了应用程序。

  1. 在命令行中进入包含 Dockerfile 文件的目录,并执行以下命令构建 Docker 镜像:

    docker build -t my-swingmusic-app .

    其中,my-swingmusic-app 是您为该 Docker 镜像指定的名称。

  2. 构建完成后,可以使用以下命令启动 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 installyarn 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 &#xff1f; Swing Music 是一款漂亮的自托管音乐播放器&#xff0c;适用于您的本地音频文件。就像一个更酷的 Spotify …但带上你自己的音乐。 第一次在 reddit 上看到 Swing Music&#xff0c;就被其 UI 吸引了 但源码站点的releases 中只有 windows 和 …...

java版工程项目管理系统源码 Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分离 功能清单

ava版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&#xff09;项目显示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代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

LeetCode 218. 天际线问题

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

Logstash:使用自定义正则表达式模式

有时 Logstash Grok 没有我们需要的模式。 幸运的是我们有正则表达式库&#xff1a;Oniguruma。在很多时候&#xff0c;如果 Logstash 所提供的正则表达不能满足我们的需求&#xff0c;我们选用定制自己的表达式。 定义 Logstash 是一种服务器端数据处理管道&#xff0c;可同时…...

常见的一致性问题及解决

什么是一致性 一致性问题主要是因为分布式系统中的多个节点之间可能存在网络延迟、故障等原因导致的。具体而言&#xff0c;分布式系统中的数据一致性问题可以分为以下几种类型&#xff1a; 强一致性&#xff1a;指在任何时间点&#xff0c;所有节点中的数据都是一致的。这种…...

vue下载文件

注意请求时加入&#xff1a;responseType: bloburl&#xff1a;写全了&#xff0c;因为前后端端口号不同downloadImage(imgUrl) {let formData new FormData();formData.append(fileName, this.getFilename(imgUrl)); // 用于后端下载文件的路径axios.post(http://localhost:8…...

人人都是数据分析师-数据分析之数据图表可视化(下)

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

考勤、充电,绑身份,你的人员定位系统就缺它了!

我们做人脸识别智能发卡充电柜是要解决什么问题&#xff1f; &#xff08;1&#xff09;工地、港口等场景&#xff0c;人员流动大&#xff0c;管理难 在工地、港口等场景&#xff0c;人员组成通常比较复杂。有来自施工方、客户、各劳务队、各管理层的人员&#xff0c;以及来自…...

RocketMQ水平扩展及负载均衡详解

文章目录 Broker端水平扩展Broker负载均衡commit logProducer负载均衡Consumer负载均衡集群模式广播模式RocketMQ是一个分布式具有高度可扩展性的消息中间件。本文旨在探索在broker端,生产端,以及消费端是如何做到横向扩展以及负载均衡的。 Broker端水平扩展 Broker负载均衡…...

java接口笔记

关键字&#xff1a;interface 定义形式&#xff1a;interface 接口名 { 接口体 } 细节&#xff1a; 1.接口里的方法可以为抽象方法&#xff0c;静态方法&#xff0c;默认方法&#xff08;default 关键字&#xff09; 2.接口里的方法只能是public &#xff0c;可以不用写&a…...

安利安利-向大家推荐一个超级牛的etcd管理工具-EtcdKeeperFyne

etcd介绍 关于etcd的介绍大家可以看下这篇文章 etcd 开源仓库地址&#xff1a;EtcdKeeperFyne EtcdKeeperFyne 今天主要是向大家推荐一款使用起来特别方便的Etcd管理工具 EtcdKeeperFyne&#xff0c;具体运行起来的界面如下&#xff1a; 推荐原因 使用简单安装简单&…...

数字经济系列讲座-数字化平台(商业购物平台)

数字经济系列讲座 文章目录 钱的流向退货成本research questionLiterature review现金流发生在平台内侧平台商业模式转型Modelmodel 假设四种情形标记符利润函数&效用函数&平台效益模型构建利润对比图结论future directions讲座题目 To Adopt or not? The Impacts of…...

python3中collections模块详解

collections模块简介 collections包含了一些特殊的容器&#xff0c;针对Python内置的容器&#xff0c;例如list、dict、set和tuple&#xff0c;提供了另一种选择&#xff1b; namedtuple&#xff0c;可以创建包含名称的tuple&#xff1b; deque&#xff0c;类似于list的容器&a…...

护网面试题2.0

1.CSS和CSRF区别 通俗点讲的话&#xff1a; XSS通过构造恶意语句获取对方cookie&#xff0c; CSRF通过构造恶意链接利用对方cookie&#xff0c;但看不到cookie XSS比CSRF更加容易发生&#xff0c;但CSRF比XSS攻击危害更大 2.XSS原理 XSS&#xff08;Cross-Site Scripting&…...

学习计算机组成原理第1天(计算机发展历程)

计算机发展历程计算机硬件发展计算机软件的发展经典例题计算机硬件发展 计算机的四代变化 1&#xff09;第一代计算机&#xff08;1946-1957年&#xff09;电子管时代。特点&#xff1a;逻辑元件采用电子管&#xff1b;使用机器语言进行编程&#xff1b;主存用延迟线或磁鼓存储…...

二维字符数组与char** 关系 段错误打印

如下为错误&#xff0c;打印断错误。 具体原因参考 http://c.biancheng.net/view/2022.html 二维字符数组与char** 关系 原因&#xff1a; char a[2][20] ; 这是一个二维字符数组。 二维字符数组&#xff0c;这里相当于是两个一维字符串数组。这两个数组在内存的存放位置可以…...

从url输入到页面呈现发生了什么

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

vue之--使用TypeScript

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

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比

目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...

给网站添加live2d看板娘

给网站添加live2d看板娘 参考文献&#xff1a; stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下&#xff0c;文章也主…...

Oracle11g安装包

Oracle 11g安装包 适用于windows系统&#xff0c;64位 下载路径 oracle 11g 安装包...

git: early EOF

macOS报错&#xff1a; Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...