Skip to content

Commit

Permalink
Merge pull request #727 from frlda/main
Browse files Browse the repository at this point in the history
Docker构建支持更新
  • Loading branch information
Shawnsdaddy authored Feb 7, 2025
2 parents 86ae3cf + 10446ba commit 18abb9b
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 32 deletions.
62 changes: 36 additions & 26 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,47 +1,57 @@
FROM ubuntu:22.04 AS ubuntu-base

# 部署教程参考https://www.cnblogs.com/frinda/p/18702822
# 设置环境变量以避免tzdata的交互式提示
ENV DEBIAN_FRONTEND noninteractive
ENV DEBIAN_FRONTEND=noninteractive

# 安装必要的系统库
RUN apt-get update && \
# 替换APT源为阿里云镜像源,提高下载速度,安装系统依赖和 Python 3.12
RUN sed -i 's|http://archive.ubuntu.com/ubuntu/|https://mirrors.aliyun.com/ubuntu/|g' /etc/apt/sources.list && \
sed -i 's|http://security.ubuntu.com/ubuntu|https://mirrors.aliyun.com/ubuntu|g' /etc/apt/sources.list && \
apt-get update && \
apt-get install -y software-properties-common && \
add-apt-repository ppa:deadsnakes/ppa && \
apt-get update && \
apt-get install -y python3.8 python3.8-venv python3.8-tk python3.8-dev python3-pip \
build-essential libgirepository1.0-dev gcc libcairo2-dev pkg-config libzbar0 adb git \
libgtk-3-dev gir1.2-webkit2-4.1 gir1.2-appindicator3-0.1 gobject-introspection tk8.6 \
xvfb \
dbus \
&& rm -rf /var/lib/apt/lists/*



# 使用官方Node.js 18镜像作为基础镜像构建前端
apt-get install -y python3.12 python3.12-venv python3.12-tk python3.12-dev python3-pip \
build-essential libgirepository1.0-dev gcc libcairo2-dev fish nano wget pkg-config libzbar0 adb git \
libgtk-3-dev gir1.2-webkit2-4.1 gir1.2-appindicator3-0.1 gobject-introspection tk8.6 \
xvfb dbus && \
rm -rf /var/lib/apt/lists/*

# 设置 Python 3.12 为默认 Python 版本
RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.12 1 && \
update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.12 1 && \
update-alternatives --set python3 /usr/bin/python3.12 && \
update-alternatives --set python /usr/bin/python3.12

# 使用官方 Node.js 18 镜像作为基础镜像构建前端
FROM node:18 AS node-base
WORKDIR /app/ui

# 安装前端依赖并构建
COPY ui/package*.json ./
COPY ui/package*.json ./
COPY ui/. .
RUN npm ci
RUN npm run build --no-update-notifier

RUN npm config set registry https://registry.npmmirror.com && \
npm ci --verbose && \
npm run build --no-update-notifier


# 合并阶段,使用Python环境为基础,将构建好的前端加入
# 将 Ubuntu 基础镜像作为最终运行镜像
FROM ubuntu-base AS final
WORKDIR /app

# 复制前端构建产出
COPY --from=node-base /app/ui/dist ./ui/dist
COPY . .

# 设置 pip 国内镜像源
RUN python3.12 -m ensurepip --upgrade && \
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/

# 设置Python虚拟环境并安装依赖
RUN python3.8 -m venv venv

RUN pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/

RUN . venv/bin/activate && pip install --upgrade pip && pip install -r requirements.txt && pip install pycairo PyGObject
# 设置 Python 虚拟环境并安装依赖
RUN python3.12 -m venv venv && \
. venv/bin/activate && \
pip install --upgrade pip && \
pip install -r requirements.txt && \
pip install pycairo PyGObject

# 运行应用
ENTRYPOINT ["/bin/bash", "/app/entrypoint.sh"]
ENTRYPOINT ["/bin/bash", "/app/entrypoint.sh"]
29 changes: 23 additions & 6 deletions entrypoint.sh
Original file line number Diff line number Diff line change
@@ -1,14 +1,31 @@
#!/bin/bash

ln -s ui/dist .
# 清理 Xvfb 锁文件,防止容器因为异常关闭而重启失败
if [ -f /tmp/.X99-lock ]; then
echo "Cleaning up Xvfb lock file"
rm -f /tmp/.X99-lock
fi

# 启动Xvfb
# 启动 Xvfb
echo "Starting Xvfb on DISPLAY=:99"
Xvfb :99 -screen 0 1280x1024x24 &
sleep 2

export DISPLAY=":99"
# 检查 Xvfb 是否正常运行
if ! xdpyinfo -display :99 >/dev/null 2>&1; then
echo "Xvfb failed to start"
exit 1
fi

# 等待Xvfb启动完成
sleep 5
# 设置 DISPLAY 环境变量
export DISPLAY=:99
echo "DISPLAY is set to $DISPLAY"

# 启动应用
# 创建符号链接
if [ ! -L "./dist" ]; then
ln -s ui/dist ./dist
fi

# 启动mower应用
echo "Starting application..."
dbus-run-session -- ./venv/bin/python /app/webview_ui.py

0 comments on commit 18abb9b

Please sign in to comment.