mirror of
https://gitee.com/ShopeX/ECShopX
synced 2026-05-13 01:45:56 +08:00
101 lines
3.5 KiB
Docker
101 lines
3.5 KiB
Docker
FROM registry.cn-hangzhou.aliyuncs.com/shopex_company/ecshopex-php:ecx-8.2.29-fpm-alpine3.22
|
||
|
||
ARG NODE_VERSION=16.20.2
|
||
ARG NODE_DIST_BASE=https://nodejs.org/dist
|
||
ARG NODE_MUSL_DIST_BASE=https://unofficial-builds.nodejs.org/download/release
|
||
|
||
# 安装 MySQL、Redis、Nginx、Supervisor 和 Node.js
|
||
# 基础镜像已包含 PHP 8.2 和 FPM,只需安装其他服务
|
||
RUN apk add --no-cache \
|
||
# MySQL (MariaDB)
|
||
mariadb \
|
||
mariadb-client \
|
||
# Redis
|
||
redis \
|
||
# Nginx
|
||
nginx \
|
||
# Supervisor
|
||
supervisor \
|
||
# 其他工具
|
||
bash \
|
||
curl \
|
||
tzdata \
|
||
ca-certificates \
|
||
python3 \
|
||
make \
|
||
g++ \
|
||
xz \
|
||
libstdc++ \
|
||
libc6-compat \
|
||
&& ARCH="$(uname -m)" \
|
||
&& case "$ARCH" in \
|
||
x86_64) NODE_ARCH=x64 ;; \
|
||
aarch64) NODE_ARCH=arm64 ;; \
|
||
*) echo "unsupported architecture: $ARCH (need x86_64 or aarch64)" >&2; exit 1 ;; \
|
||
esac \
|
||
&& if [ "$NODE_ARCH" = "x64" ]; then \
|
||
NODE_TARBALL_URL="${NODE_MUSL_DIST_BASE}/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-x64-musl.tar.xz"; \
|
||
else \
|
||
NODE_TARBALL_URL="${NODE_DIST_BASE}/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-${NODE_ARCH}.tar.xz"; \
|
||
fi \
|
||
&& echo "Installing Node from ${NODE_TARBALL_URL}" \
|
||
&& curl -fsSL "${NODE_TARBALL_URL}" \
|
||
| tar -xJ -C /usr/local --strip-components=1 \
|
||
&& rm -rf /var/cache/apk/* \
|
||
&& npm config set registry https://registry.npmmirror.com \
|
||
&& node --version && npm --version
|
||
|
||
# 设置时区
|
||
ENV TZ=Asia/Shanghai
|
||
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
|
||
|
||
# 创建必要的目录和用户
|
||
RUN mkdir -p /var/log/supervisor \
|
||
&& mkdir -p /etc/supervisor/conf.d \
|
||
&& mkdir -p /var/lib/mysql \
|
||
&& mkdir -p /var/run/mysqld \
|
||
&& mkdir -p /var/lib/redis \
|
||
&& mkdir -p /var/log/redis \
|
||
&& mkdir -p /var/run/redis \
|
||
&& mkdir -p /var/log/nginx \
|
||
&& mkdir -p /var/log/php-fpm \
|
||
&& mkdir -p /run/php \
|
||
&& mkdir -p /var/lib/nginx/tmp/client_body \
|
||
&& mkdir -p /var/lib/nginx/tmp/proxy \
|
||
&& mkdir -p /var/lib/nginx/tmp/fastcgi \
|
||
&& mkdir -p /var/lib/nginx/tmp/uwsgi \
|
||
&& mkdir -p /var/lib/nginx/tmp/scgi \
|
||
&& mkdir -p /data/httpd/ECShopX \
|
||
&& mkdir -p /data/httpd/ECShopX_admin-frontend \
|
||
&& mkdir -p /data/httpd/ECShopX_mobile-frontend \
|
||
&& mkdir -p /data/httpd/ECShopX_desktop-frontend \
|
||
&& (id -u redis >/dev/null 2>&1 || adduser -D -s /sbin/nologin redis) \
|
||
&& (id -u www-data >/dev/null 2>&1 || (addgroup -g 82 www-data && adduser -D -s /sbin/nologin -u 82 -G www-data www-data)) \
|
||
&& chown -R redis:redis /var/lib/redis /var/log/redis /var/run/redis \
|
||
&& chown -R www-data:www-data /var/log/php-fpm /run/php /var/lib/nginx /var/log/nginx
|
||
|
||
# 只复制配置文件(项目代码通过 volumes 挂载)
|
||
COPY docker-dev/supervisord.conf /etc/supervisor/conf.d/supervisord.conf
|
||
COPY docker-dev/docker-entrypoint.sh /usr/bin/entrypoint.sh
|
||
COPY docker-dev/nginx.conf /etc/nginx/nginx.conf
|
||
COPY docker-dev/php-fpm.conf /tmp/php-fpm-custom.conf
|
||
COPY docker-dev/mysql.cnf /etc/my.cnf
|
||
|
||
# 创建 MySQL 配置链接
|
||
RUN mkdir -p /etc/mysql && \
|
||
(ln -sf /etc/my.cnf /etc/mysql/my.cnf 2>/dev/null || true)
|
||
|
||
# 设置权限
|
||
RUN chmod +x /usr/bin/entrypoint.sh \
|
||
&& chown -R mysql:mysql /var/lib/mysql \
|
||
&& chown -R mysql:mysql /var/run/mysqld
|
||
|
||
# 工作目录
|
||
WORKDIR /data/httpd
|
||
|
||
# 暴露端口
|
||
EXPOSE 80 3306 6379
|
||
|
||
ENTRYPOINT ["/usr/bin/entrypoint.sh"]
|
||
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf", "-n"]
|