使用1Panel部署next-whois的实践记录
最近使用1Panel部署Next-Whois遇到不少坑,特意记录部署过程。以下是详细过程,供大家参考!
1.准备工作
在开始部署前,请确保已完成以下准备工作:
环境准备
- 已安装并配置 1Panel 面板
- 已完成 Redis 服务的安装
源码获取
- 已下载最新版 next-whois 项目源码
应用部署
- 已完成 next-whois 的基础部署
- 已配置域名反向代理
2.详细操作步骤
初始化应用目录
- 创建专用目录用于存放 next-whois 应用文件
同步项目源码
- 获取最新版 next-whois 源码并同步至应用目录
配置文件准备
- 新建
docker-compose.yml编排文件 修改以下关键文件配置:
Dockerfile:调整构建参数next.config.js:更新应用配置
- 新建
容器化部署
- 执行 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 文件夹:
git clone https://github.com/zmh-program/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部署应用
部署流程
1. 访问 1Panel 管理后台 2. 导航至:容器 → 编排 → 路径选择 3. 定位并加载 docker-compose.yml 配置文件 4. 保存配置并启动容器编排 5.完成部署
如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!


