用于在2025年启动Discourse稳定分支(v3.3.3)的Dockerfile(Apple/M1)

你好!

几天前我开始学习 Discourse,但找不到适用于 Apple/M 芯片的 Dockerfile。所以我自己创建了一个,并想与任何也想控制自己镜像的人分享。

此外,通过这篇帖子,我想了解 Discourse 和社区是如何运作的。我希望你觉得我的帖子有帮助。欢迎你对我的 Dockerfile 提供任何反馈/想法/问题。

我的 Dockerfile 适用于 Apple/M 芯片,但可以轻松修改

# https://meta.discourse.org/t/install-discourse-on-ubuntu-or-debian-for-development/14727/1
# bash <(wget -qO- https://raw.githubusercontent.com/discourse/install-rails/main/linux)
# https://github.com/discourse/discourse/blob/main/docs/DEVELOPER-ADVANCED.md

FROM ruby:3.2-bookworm

ARG PROJECT_PATH=${PROJECT_PATH:-discourse}

# 安装依赖项
#
# build-essential - 用于编译软件的必备构建工具
# libxslt1-dev - XSLT 处理库
# libcurl4-openssl-dev - 支持 SSL 的 HTTP 请求库
# libksba8 - 加密功能库
# libksba-dev - 加密功能库
# libreadline-dev - GNU readline 库(交互式命令行)
# libssl-dev - SSL/TLS 支持库
# zlib1g-dev - 压缩库
# libsnappy-dev - Snappy 压缩库
# libyaml-dev - YAML 解析库
# libpq-dev - 用于数据库连接的 PostgreSQL 客户端库
# postgresql-client - 用于与远程 PostgreSQL 数据库交互的 PostgreSQL 客户端
# telnet - 用于测试网络服务的工具
# nano - 命令行文本编辑器
# git - Git 版本控制系统
# net-tools - 用于诊断和测试网络连接的实用程序
# dnsutils - DNS 查询工具
# iputils-ping - 用于 ping 主机和测试连接性的实用程序
# curl - 用于通过 URL 传输数据的 curl 命令行工具
# wget - 用于下载文件的 wget 命令行工具
# tzdata - 用于管理时区的时区数据
# advancecomp - 用于优化 PNG 和 MNG 文件的工具
# jhead - 用于显示和操作 Exif 数据的工具
# jpegoptim - 用于优化 JPEG 文件的工具
# libjpeg-turbo-progs - 用于优化 JPEG 文件的工具
# optipng - 用于优化 PNG 文件的工具
# pngcrush - 用于优化 PNG 文件的工具
# pngquant - 用于优化 PNG 文件的工具
# gnupg2 - 用于安全通信和数据存储的 GNU Privacy Guard
# libjpeg-dev - JPEG 库的开发文件
# libpng-dev - PNG 库的开发文件
# libtiff-dev - TIFF 库的开发文件
# libwebp-dev - WebP 库的开发文件
# libxml2-dev - XML 库的开发文件
# libltdl-dev - libtool 库的开发文件
# libfreetype6-dev - FreeType 库的开发文件
# liblcms2-dev - Little CMS 库的开发文件
# liblqr-1-0-dev - Liquid Rescale 库的开发文件
# libfftw3-dev - Fastest Fourier Transform in the West 库的开发文件
# ghostscript - PostScript 语言和 PDF 的解释器
#
RUN apt-get update -qq && apt-get install -y \
    build-essential \
    libxslt1-dev \
    libcurl4-openssl-dev \
    libksba8 \
    libksba-dev \
    libreadline-dev \
    libssl-dev \
    zlib1g-dev \
    libsnappy-dev \
    libyaml-dev \
    libpq-dev \
    postgresql-client \
    telnet \
    nano \
    git \
    net-tools \
    dnsutils \
    iputils-ping \
    curl \
    wget \
    tzdata \
    advancecomp \
    jhead \
    jpegoptim \
    libjpeg-turbo-progs \
    optipng \
    pngcrush \
    pngquant \
    gnupg2 \
    libjpeg-dev \
    libpng-dev \
    libtiff-dev \
    libwebp-dev \
    libxml2-dev \
    libltdl-dev \
    libfreetype6-dev \
    liblcms2-dev \
    liblqr-1-0-dev \
    libfftw3-dev \
    ghostscript \
    && rm -rf /var/lib/apt/lists/*

# 工作目录
#
WORKDIR /tmp

# 下载并安装 ImageMagick 7
RUN cd /tmp && wget https://imagemagick.org/download/ImageMagick.tar.gz && \
    tar xvzf ImageMagick.tar.gz && \
    cd ImageMagick-* && \
    ./configure && \
    make && \
    make install && \
    ldconfig /usr/local/lib && \
    cd .. && \
    rm -rf ImageMagick* && \
    magick --version

# OXIPNG - 优化 PNG 文件 (ARM64)
# 选择你的特定平台并安装所需的包
# https://github.com/shssoichiro/oxipng/releases/
RUN wget https://github.com/shssoichiro/oxipng/releases/download/v9.1.3/oxipng_9.1.3-1_arm64.deb
RUN dpkg -i oxipng_9.1.3-1_arm64.deb

SHELL ["/bin/bash", "-c"]

# 安装 NodeJS 和 PNPM 和 YARN
#
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
RUN source /root/.nvm/nvm.sh && nvm install lts/hydrogen --default

# RUN source /root/.nvm/nvm.sh && \
#     corepack enable pnpm && \
#     corepack use pnpm@9

RUN source /root/.nvm/nvm.sh && \
    npm install -g yarn

# 工作目录
#
WORKDIR /app

# 安装 RUBY ON RAILS 依赖项
#
RUN gem install bundler -v 2.5.9

COPY ${PROJECT_PATH}/Gemfile /app/Gemfile
COPY ${PROJECT_PATH}/Gemfile.lock /app/Gemfile.lock

RUN bundle install --frozen

# 安装 NODEJS 依赖项
#
RUN source /root/.nvm/nvm.sh && npm install -g svgo

COPY ${PROJECT_PATH}/package.json   /app/package.json
COPY ${PROJECT_PATH}/patches        /app/patches

RUN source /root/.nvm/nvm.sh && yarn -v

运行容器后,你可以使用简单的命令启动项目

bin/ember-cli -u

编码愉快!

2 个赞