最近使用1Panel部署Next-Whois遇到不少坑,特意记录部署过程。以下是详细过程,供大家参考!

1.准备工作

在开始部署前,请确保已完成以下准备工作:

  1. 环境准备

    • 已安装并配置 1Panel 面板
    • 已完成 Redis 服务的安装
  2. 源码获取

    • 已下载最新版 next-whois 项目源码
  3. 应用部署

    • 已完成 next-whois 的基础部署
    • 已配置域名反向代理

2.详细操作步骤

  1. 初始化应用目录

    • 创建专用目录用于存放 next-whois 应用文件
  2. 同步项目源码

    • 获取最新版 next-whois 源码并同步至应用目录
  3. 配置文件准备

    • 新建 docker-compose.yml 编排文件
    • 修改以下关键文件配置:

      • Dockerfile:调整构建参数
      • next.config.js:更新应用配置
  4. 容器化部署

    • 执行 Docker 服务编排与部署

3.部署开始

  • 在1Panel面板后台,路径/opt/1panel/apps/next-whois文件夹下建立next-whois文件夹,为了保持与1Panel其他应用mu'lu一致,所以路径套娃两个next-whois文件夹。路径为:/opt/1panel/apps/next-whois/next-whois

下载同步next-whois应用源码

  • 手动下载:访问 https://github.com/zmh-program/next-whois,点击 "Code" → "Download ZIP",将压缩包保存到本地。 找到已下载的 next-whois-main.zip
    文件,上传后解压至目标文件夹(next-whois)。

Git 克隆方式(推荐)

同步完后目录列表图片
next-whois应用目录

新建docker-compose.yml文件,内容:

services:
  next-whois:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: next-whois-app
    restart: unless-stopped
    ports:
      - "3005:3000"
    environment:
      NODE_ENV: production
      NEXT_PUBLIC_SITE_TITLE: "7CE.NET Whois - 域名查询工具"
      NEXT_PUBLIC_SITE_DESCRIPTION: "轻量级且美观的Whois查询工具"
      NEXT_PUBLIC_SITE_KEYWORDS: "whois,域名查询,domain,ip查询,7CE,7CE.NET"
      NEXT_PUBLIC_HISTORY_LIMIT: -1
      NEXT_PUBLIC_MAX_WHOIS_FOLLOW: 0
      NEXT_PUBLIC_MAX_IP_WHOIS_FOLLOW: 5
      REDIS_HOST: redis
      REDIS_PORT: 6379
      REDIS_PASSWORD: you_password
      REDIS_DB: 0
      REDIS_CACHE_TTL: 3600
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3000"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
    networks:
      - 1panel-network
networks:
  1panel-network:
    external: true

修改Dockerfile文件,内容:

# Multi-stage build for Next.js application
FROM node:18-alpine AS base
# Install dependencies only when needed
FROM base AS deps
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
RUN apk add --no-cache libc6-compat
WORKDIR /app
# Install pnpm globally
RUN npm install -g pnpm
# Copy package files
COPY package.json pnpm-lock.yaml* ./
RUN pnpm install --frozen-lockfile
# Rebuild the source code only when needed
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
# Install pnpm in builder
RUN npm install -g pnpm
# Build the application
RUN pnpm build
# Production image, copy all the files and run next
FROM base AS runner
WORKDIR /app
ENV NODE_ENV production
# Install curl for health check
RUN apk add --no-cache curl
# Install pnpm
RUN npm install -g pnpm
# Create a non-root user
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
# Copy built application
COPY --from=builder /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
USER nextjs
EXPOSE 3000
ENV PORT 3000
ENV HOSTNAME "0.0.0.0"
# Health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
  CMD curl -f http://localhost:3000 || exit 1
CMD ["node", "server.js"]

修改next.config.js文件,内容:

/** @type {import('next').NextConfig} */
const nextConfig = {
  i18n: {
    locales: ['en', 'zh', 'zh-tw', 'de', 'ru', 'ja', 'fr', 'ko'],
    defaultLocale: 'en',
  },
  // Enable standalone output for Docker
  output: 'standalone',
  // Optimize images
  images: {
    domains: [],
    unoptimized: true,
  },
  // Compress responses
  compress: true,
  // Enable react strict mode
  reactStrictMode: true,
  // Experimental features
  experimental: {
    // Enable server components
    serverComponentsExternalPackages: ['whois-raw', 'ioredis', 'node-rdap'],
  },
}
module.exports = nextConfig 

选择docker-compose.yml部署应用
编排部署Docker应用
部署流程
1. 访问 1Panel 管理后台 2. 导航至:容器 → 编排 → 路径选择 3. 定位并加载 docker-compose.yml 配置文件 4. 保存配置并启动容器编排 5.完成部署

如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!

标签: Docker, 1Panel, 运维

添加新评论