Alist自定义编译打包docker镜像
2023年 04月 27 日

如默

说明

最近帮别人搭建alist,需要定制化一些内容,基于源码编译安装,打包成docker镜像,并且发布到dockehub上

步骤

写在最前面,官方的文档十分详细,还有视频教程,请仔细阅读,本文只是补充。

情况说明:本文是在使用GitHubcodespace时报错317内存不够,没办法编译前端,所以无法进行下一步,只能自己在Linux进行编译安装

本文内容是在Windows电脑上,用WSL安装的Ubuntu-22.04,环境配置如下:

OS: Ubuntu-22.04
nodejs: 18.16
git: 2.34.1
golang: 1.19
pnpm: 8.3.1
docker: 20.10.24

上述环境请自行安装配置,本文不在赘述。

1.克隆前后端代码:

# 后端
git clone https://github.com/alist-org/alist.git

# 前端
git clone --recurse-submodules https://github.com/alist-org/alist-web.git

2.进入前端项目文件夹,下载中文语言包并应用,执行:

cd alist-web 
wget https://crowdin.com/backend/download/project/alist/zh-CN.zip 
unzip zh-CN.zip 
node ./scripts/i18n.mjs
rm zh-CN.zip

3.自行修改前端自定义的部分,保存,执行:

pnpm install && pnpm build

4.将打包的dist目录复制到后端项目public文件下,命令行执行参考:

cp -r /前端路径/dist/ /后端路径/public/

5.进入后端项目,开始编译,执行:

appName="alist"
builtAt="$(date +'%F %T %z')"
goVersion=$(go version | sed 's/go version //')
gitAuthor=$(git show -s --format='format:%aN <%ae>' HEAD)
gitCommit=$(git log --pretty=format:"%h" -1)
version=$(git describe --long --tags --dirty --always)
webVersion=$(wget -qO- -t1 -T2 "https://api.github.com/repos/alist-org/alist-web/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g')
ldflags="\
-w -s \
-X 'github.com/alist-org/alist/v3/internal/conf.BuiltAt=$builtAt' \
-X 'github.com/alist-org/alist/v3/internal/conf.GoVersion=$goVersion' \
-X 'github.com/alist-org/alist/v3/internal/conf.GitAuthor=$gitAuthor' \
-X 'github.com/alist-org/alist/v3/internal/conf.GitCommit=$gitCommit' \
-X 'github.com/alist-org/alist/v3/internal/conf.Version=$version' \
-X 'github.com/alist-org/alist/v3/internal/conf.WebVersion=$webVersion' \
"
go build -ldflags="$ldflags" .

如果没有报错的话,会生成一个alist二进制文件,这个就是编译成功的可执行文件

此时最好测试一下编译好的文件是否可以正常运行,执行./alist admin查看管理员密码,执行./alist server即可访问

6.新建一个Dockerfile文件,内容如下:

FROM ubuntu:22.04
LABEL MAINTAINER="rumosky@163.com"
VOLUME /opt/alist/data/
WORKDIR /opt/alist/
COPY alist ./
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENV PUID=0 PGID=0 UMASK=022
EXPOSE 5244
CMD [ "/entrypoint.sh" ]

7.新建一个entrypoint.sh文件,内容如下:

#!/bin/bash

chown -R ${PUID}:${PGID} /opt/alist/

umask ${UMASK}

./alist server --no-prefix
这里补充一下,后来我发现Dockerfile和entrypoint.sh脚本是可以写在一起的,修改后的Dockerfile如下:
FROM ubuntu:22.04
LABEL MAINTAINER="rumosky@163.com"
VOLUME /opt/alist/data/
WORKDIR /opt/alist/
COPY ./alist /opt/alist/
RUN chmod +x /opt/alist/alist
ENV PUID=0 PGID=0 UMASK=022
EXPOSE 5244
ENTRYPOINT ["/bin/bash","-c","chown -R ${PUID}:${PGID} /opt/alist/ && umask ${UMASK} && /opt/alist/alist server --no-prefix"]

这时,只需要Dockerfile就好了

8.制作docker镜像,执行:

docker build -t rumosky/alist:1.0 .

9.在dockerhub或其他私有仓库中新建一个仓库,命名为alist

10.推送镜像到公共仓库,执行:

docker push rumosky/alist:1.0

至此,就可以在任何地方,从dockerhubpull镜像了。

推送时如果提示access deny,需要登录一下,执行docker login,输入用户名和密码即可

本文构建的镜像地址如下,想用的话,随便用

docker pull rumosky/alist:latest

或者使用docker-compose.yml,内容如下:

version: '3.3'
services:
    alist:
        restart: always
        volumes:
            - '/alist/data:/opt/alist/data'
        ports:
            - '5244:5244'
        environment:
            - PUID=0
            - PGID=0
            - UMASK=022
        container_name: alist
        image: 'rumosky/alist:latest'

使用docker-compose up -d启动,使用docker-compose down关闭并删除容器

补充

构建镜像时,最好是用户名/仓库名:tag的格式,这样方便直接推送,但是如果写错了,也可以进行修改,先使用docker images查看当前镜像的ID,然后执行docker tag ID 用户名/仓库名:tag来重命名。

构建镜像时的FROM,可以为golang等内容,这个自行调整,只要能运行即可,最后就是镜像的大小有区别。

结语

alist官方提供了docker构建脚本,如果自定义的话,不要使用,否则会直接生成官方的docker镜像,而不是自行修改的版本。

Alist自定义编译打包docker镜像

温馨提示:

本文最后更新于2023年04月27日,已超过222天没有更新,若内容或图片失效,请留言反馈。

说明

最近帮别人搭建alist,需要定制化一些内容,基于源码编译安装,打包成docker镜像,并且发布到dockehub上

步骤

写在最前面,官方的文档十分详细,还有视频教程,请仔细阅读,本文只是补充。

情况说明:本文是在使用GitHubcodespace时报错317内存不够,没办法编译前端,所以无法进行下一步,只能自己在Linux进行编译安装

本文内容是在Windows电脑上,用WSL安装的Ubuntu-22.04,环境配置如下:

OS: Ubuntu-22.04
nodejs: 18.16
git: 2.34.1
golang: 1.19
pnpm: 8.3.1
docker: 20.10.24

上述环境请自行安装配置,本文不在赘述。

1.克隆前后端代码:

# 后端
git clone https://github.com/alist-org/alist.git

# 前端
git clone --recurse-submodules https://github.com/alist-org/alist-web.git

2.进入前端项目文件夹,下载中文语言包并应用,执行:

cd alist-web 
wget https://crowdin.com/backend/download/project/alist/zh-CN.zip 
unzip zh-CN.zip 
node ./scripts/i18n.mjs
rm zh-CN.zip

3.自行修改前端自定义的部分,保存,执行:

pnpm install && pnpm build

4.将打包的dist目录复制到后端项目public文件下,命令行执行参考:

cp -r /前端路径/dist/ /后端路径/public/

5.进入后端项目,开始编译,执行:

appName="alist"
builtAt="$(date +'%F %T %z')"
goVersion=$(go version | sed 's/go version //')
gitAuthor=$(git show -s --format='format:%aN <%ae>' HEAD)
gitCommit=$(git log --pretty=format:"%h" -1)
version=$(git describe --long --tags --dirty --always)
webVersion=$(wget -qO- -t1 -T2 "https://api.github.com/repos/alist-org/alist-web/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g')
ldflags="\
-w -s \
-X 'github.com/alist-org/alist/v3/internal/conf.BuiltAt=$builtAt' \
-X 'github.com/alist-org/alist/v3/internal/conf.GoVersion=$goVersion' \
-X 'github.com/alist-org/alist/v3/internal/conf.GitAuthor=$gitAuthor' \
-X 'github.com/alist-org/alist/v3/internal/conf.GitCommit=$gitCommit' \
-X 'github.com/alist-org/alist/v3/internal/conf.Version=$version' \
-X 'github.com/alist-org/alist/v3/internal/conf.WebVersion=$webVersion' \
"
go build -ldflags="$ldflags" .

如果没有报错的话,会生成一个alist二进制文件,这个就是编译成功的可执行文件

此时最好测试一下编译好的文件是否可以正常运行,执行./alist admin查看管理员密码,执行./alist server即可访问

6.新建一个Dockerfile文件,内容如下:

FROM ubuntu:22.04
LABEL MAINTAINER="rumosky@163.com"
VOLUME /opt/alist/data/
WORKDIR /opt/alist/
COPY alist ./
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENV PUID=0 PGID=0 UMASK=022
EXPOSE 5244
CMD [ "/entrypoint.sh" ]

7.新建一个entrypoint.sh文件,内容如下:

#!/bin/bash

chown -R ${PUID}:${PGID} /opt/alist/

umask ${UMASK}

./alist server --no-prefix
这里补充一下,后来我发现Dockerfile和entrypoint.sh脚本是可以写在一起的,修改后的Dockerfile如下:
FROM ubuntu:22.04
LABEL MAINTAINER="rumosky@163.com"
VOLUME /opt/alist/data/
WORKDIR /opt/alist/
COPY ./alist /opt/alist/
RUN chmod +x /opt/alist/alist
ENV PUID=0 PGID=0 UMASK=022
EXPOSE 5244
ENTRYPOINT ["/bin/bash","-c","chown -R ${PUID}:${PGID} /opt/alist/ && umask ${UMASK} && /opt/alist/alist server --no-prefix"]

这时,只需要Dockerfile就好了

8.制作docker镜像,执行:

docker build -t rumosky/alist:1.0 .

9.在dockerhub或其他私有仓库中新建一个仓库,命名为alist

10.推送镜像到公共仓库,执行:

docker push rumosky/alist:1.0

至此,就可以在任何地方,从dockerhubpull镜像了。

推送时如果提示access deny,需要登录一下,执行docker login,输入用户名和密码即可

本文构建的镜像地址如下,想用的话,随便用

docker pull rumosky/alist:latest

或者使用docker-compose.yml,内容如下:

version: '3.3'
services:
    alist:
        restart: always
        volumes:
            - '/alist/data:/opt/alist/data'
        ports:
            - '5244:5244'
        environment:
            - PUID=0
            - PGID=0
            - UMASK=022
        container_name: alist
        image: 'rumosky/alist:latest'

使用docker-compose up -d启动,使用docker-compose down关闭并删除容器

补充

构建镜像时,最好是用户名/仓库名:tag的格式,这样方便直接推送,但是如果写错了,也可以进行修改,先使用docker images查看当前镜像的ID,然后执行docker tag ID 用户名/仓库名:tag来重命名。

构建镜像时的FROM,可以为golang等内容,这个自行调整,只要能运行即可,最后就是镜像的大小有区别。

结语

alist官方提供了docker构建脚本,如果自定义的话,不要使用,否则会直接生成官方的docker镜像,而不是自行修改的版本。


那年今日
04月
27日
上一篇
MacOS更新Git
下一篇
Ubuntu安装nodejs
赞 (0)

猜您想看

CentOS7下二进制安装Gitea配合宝塔面板实现反代

最近因为个人原因,在频繁的写和更改代码,代码这种重要的东西,自然是需要多多备份的,但是,由于众所周知的原因,GitHub的上传和拉取速度实在感人,而无论是GitHub还是Gitee,都不能无限制私人仓库,所以准备自建Git,特此记录。

01

联合创新MiniLED显示器M2U一周体验

最近买的AOC显示器出问题了,返厂检修,临时买了一个联合创新的显示器,体验一下。

02

Windows11系统时间显示到秒

Windows11系统时间默认不显示到秒,记录一下

03

哔哩哔哩视频下载方式

最近需要下载哔哩哔哩的视频,发现很多网页版的工具都带有不良插件,遂使用手机版进行下载,特此记录。

04

JMeter压力测试工具初体验

Apache JMeter是Apache组织开发的基于Java的压力测试工具。

05

三星(SAMSUNG)970 EVO Plus使用体验

如题,前一阵子在狗东三星自营420购入一块三星(SAMSUNG)250GB SSD固态硬盘 M.2接口(NVMe协议) 970 EVO Plus,与之前买的西数128G SATA固态一起服役。

06

评论区(2条评论)

我要评论

Vaptcha 初始化中...

leo
LV1
  

需要添加根证书,不然用aria2会报错,可以在docker RUN 里添加
&& apt-get -qq install -y --no-install-recommends ca-certificates curl \
&& apt install curl \

如默
博主
   leo

对,我后来用aria2的时候发现了,忘记更新了,谢谢提醒

回复 0