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日,已超过364天没有更新,若内容或图片失效,请留言反馈。

说明

最近帮别人搭建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)

猜您想看

  • 漫步者M230无线蓝牙音箱入手体验

    之前用的是漫步者U20,是一个90块的小音箱,只有3W,用了四年,最近有刺啦声,加上后面的线感觉很乱,就换了M230蓝牙音箱。

    2022年10月25日
  • Nikon Z5 24-70 F4 S 套机入手体验

    最近看到尼康Z5降价了,正好之前的7200D也用了五年,想换个全画幅了,购入体验一下。

    2021年09月10日
  • 2020年秋招小结

    2020秋招已经基本结束,除了少数银行之类的企业还在等最后的通知,在这几个月里,忙前忙后,在此小结一下。

    2020年12月26日
  • Windows下宝塔面板快速搭建LNMP/LAMP环境

    宝塔面板类似于wamp,xampp等一键集成环境。但是宝塔面板操作更简单,更新更快。

    2018年12月22日
  • 2019 单反 or 微单?

    如题,最近时长有想买单反的人,在问我究竟该买单反还是微单? 解释的多了,就想记录一下,方便查阅。

    2019年06月18日
  • Python爬取妹子图(针对某个图册)

    网上大多数的脚本都是随机从首页爬取,这个脚本是自己选择想要的集合,爬取全部内容。

    2020年07月06日

评论区(2条评论)

我要评论

Vaptcha 初始化中...

leo
LV1
  

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

如默
博主
   leo

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