Commit 4345f736 authored by 越 贾's avatar 越 贾
Browse files

2025-08-03 ver3.1 docker部署

parent 420949cd
node_modules
.next
.git
.env
.env.local
npm-debug.log*
.DS_Store
*.log
.vscode
.idea
FROM node:18-alpine
WORKDIR /app
# 设置npm镜像
RUN npm config set registry https://registry.npmmirror.com
# 安装依赖
COPY package*.json ./
RUN npm ci
# 复制项目文件
COPY . .
# 生成Prisma Client
RUN npx prisma generate
# 构建Next.js
RUN npm run build
# 创建数据目录
RUN mkdir -p /app/prisma
# 设置权限
RUN chmod -R 755 /app
EXPOSE 3000
# 启动命令
CMD ["npm", "start"]
import type { NextConfig } from "next";
const nextConfig: NextConfig = {
/* config options here */
output: 'standalone',
experimental: {
serverActions: {},
},
// 跳过类型检查和ESLint检查
typescript: {
ignoreBuildErrors: true,
},
eslint: {
ignoreDuringBuilds: true,
},
// 允许Docker容器中的外部访问
webpack: (config, { isServer }) => {
if (!isServer) {
config.resolve.fallback = {
...config.resolve.fallback,
fs: false,
net: false,
tls: false,
};
}
return config;
},
};
export default nextConfig;
import type { NextConfig } from "next";
const nextConfig: NextConfig = {
output: 'standalone',
experimental: {
serverActions: {},
},
// 允许Docker容器中的外部访问
webpack: (config, { isServer }) => {
if (!isServer) {
config.resolve.fallback = {
...config.resolve.fallback,
fs: false,
net: false,
tls: false,
};
}
return config;
},
};
export default nextConfig;
......@@ -6,7 +6,11 @@
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint"
"lint": "next lint",
"prisma:generate": "prisma generate",
"prisma:migrate": "prisma migrate dev",
"prisma:push": "prisma db push",
"prisma:studio": "prisma studio"
},
"dependencies": {
"@prisma/client": "^6.14.0",
......
No preview for this file type
......@@ -4,7 +4,7 @@ generator client {
datasource db {
provider = "sqlite"
url = "file:./dev.db"
url = "file:./dev.db"
}
model User {
......
......@@ -462,7 +462,7 @@
}
.textInput {
font-size: 16px; /* 防止iOS缩放 */
font-size: 16px;
}
}
......
......@@ -9,7 +9,7 @@ import styles from './page.module.css';
import { authFetch } from '@/lib/fetcher';
import { useAuth } from '@/hooks/useAuth';
// 类型定义
// 单条消息接口
interface Message {
messageId: number;
roomId: number;
......@@ -17,24 +17,30 @@ interface Message {
content: string;
time: number;
}
// 房间列表中展示的每个房间的预览信息
interface RoomPreviewInfo {
roomId: number;
roomName: string;
lastMessage: Message | null;
}
// /api/room/list API 返回数据的类型,即一个房间列表
interface RoomListRes {
rooms: RoomPreviewInfo[];
}
// /api/room/add API 的请求参数和返回数据类型
interface RoomAddArgs {
user: string;
roomName: string;
}
// /api/room/add API 返回数据的类型
interface RoomAddRes {
roomId: number;
}
// /api/room/message/list API 返回数据的类型,即某个房间的消息列表
interface RoomMessageListRes {
messages: Message[];
}
// /api/message/add API 的请求参数类型
interface MessageAddArgs {
roomId: number;
content: string;
......@@ -42,19 +48,20 @@ interface MessageAddArgs {
}
// 单条消息组件
// MessageItem 组件的 Props(属性)类型。接收两个参数:message(要显示的消息对象)和 currentUser(当前用户的昵称)
interface MessageItemProps {
message: Message;
currentUser: string;
}
function MessageItem({ message, currentUser }: MessageItemProps) {
const isOwn = message.sender === currentUser;
const isOwn = message.sender === currentUser; // 判断消息是否为当前用户发送
// 格式化时间为 "年-月-日 时:分" 格式
// v2格式化时间为 "年-月-日 时:分" 格式
const formatTime = (timestamp: number) => {
const date = new Date(timestamp);
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,且不满两位补零
const day = String(date.getDate()).padStart(2, '0');
const hours = String(date.getHours()).padStart(2, '0');
const minutes = String(date.getMinutes()).padStart(2, '0');
......@@ -452,7 +459,7 @@ export default function ChatPage() {
return (
<div className={styles.pageWrapper}>
{/* 登录状态移到顶部横条 */}
{/* v3登录状态移到顶部横条 */}
<div className={styles.topBar}>
<div className={styles.appTitle}>JYCHATROOM</div>
<AuthStatus
......
/* chatroom/src/app/login/page.module.css */
.container {
display: flex;
flex-direction: column;
......
version: '3.8'
services:
app:
build:
context: ./chatroom
dockerfile: Dockerfile
container_name: chatroom-app
restart: unless-stopped
environment:
DATABASE_URL: "file:./dev.db"
JWT_SECRET: "docker_secret_key_change_in_production"
NODE_ENV: "production"
ports:
- "3000:3000"
volumes:
- ./chatroom/prisma/dev.db:/app/prisma/dev.db
- uploads:/app/public/uploads
command: sh -c "npx prisma generate && npm start"
volumes:
uploads:
File added
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment