Commit 7f3e7188 authored by 何 广一's avatar 何 广一
Browse files

update docker config

parent 1776bb7a
services:
web:
build: .
environment:
- EnableLog=false
ports:
- "3000:3000"
\ No newline at end of file
...@@ -9,11 +9,13 @@ RUN npm install -g pnpm && pnpm install --shamefully-hoist ...@@ -9,11 +9,13 @@ RUN npm install -g pnpm && pnpm install --shamefully-hoist
COPY prisma ./prisma COPY prisma ./prisma
ENV DATABASE_URL=file:/app/data/db.sqlite ENV DATABASE_URL=file:/app/data/db.sqlite
RUN mkdir -p /app/data RUN mkdir -p /app/data
ENV PRISMA_ENGINES_MIRROR=https://registry.npmmirror.com/-/binary/prisma
RUN pnpm prisma generate RUN pnpm prisma generate
RUN pnpm prisma migrate deploy --schema ./prisma/schema.prisma RUN pnpm prisma migrate deploy --schema ./prisma/schema.prisma
# ---------- 构建 ---------- # ---------- 构建 ----------
COPY . . COPY . .
RUN pnpm prisma generate
ENV REDIS_URL= ENV REDIS_URL=
RUN pnpm build RUN pnpm build
...@@ -31,9 +33,15 @@ COPY --from=base /app/.env.docker ./.env ...@@ -31,9 +33,15 @@ COPY --from=base /app/.env.docker ./.env
# 启动脚本:后台起 Redis + Next.js # 启动脚本:后台起 Redis + Next.js
COPY <<EOF /app/start.sh COPY <<EOF /app/start.sh
#!/bin/sh #!/bin/sh
redis-server --daemonize yes redis-server --port "${REDIS_PORT:-6379}" --daemonize yes &
exec node .next/standalone/server.js
until redis-cli -h localhost -p "${REDIS_PORT:-6379}" ping >/dev/null 2>&1; do
sleep 1
done
exec node server.js
EOF EOF
RUN chmod +x /app/start.sh RUN chmod +x /app/start.sh
EXPOSE 3000 EXPOSE 3000
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
generator client { generator client {
provider = "prisma-client-js" provider = "prisma-client-js"
output = "../src/generated/prisma" output = "../src/generated/prisma"
binaryTargets = ["native", "linux-musl-openssl-3.0.x"]
} }
datasource db { datasource db {
......
...@@ -6,6 +6,10 @@ import {prisma, redis} from "@/lib/db"; ...@@ -6,6 +6,10 @@ import {prisma, redis} from "@/lib/db";
import * as Auth from './login-interface'; import * as Auth from './login-interface';
import {z} from "zod"; import {z} from "zod";
const ENABLE_LOG = process.env.EnableLog === 'true';
console.log(`Logging is ${ENABLE_LOG ? 'enabled' : 'disabled'}`);
export async function MakeError(message: string, code: number = 1, status: number = 500): Promise<NextResponse<Ty.BackendResponse<null>>> { export async function MakeError(message: string, code: number = 1, status: number = 500): Promise<NextResponse<Ty.BackendResponse<null>>> {
return NextResponse.json({ return NextResponse.json({
code, code,
...@@ -127,6 +131,10 @@ export async function AddRoom(data: Ty.RoomAddArgs): Promise<Ty.BackendResponse< ...@@ -127,6 +131,10 @@ export async function AddRoom(data: Ty.RoomAddArgs): Promise<Ty.BackendResponse<
} }
}); });
if (ENABLE_LOG) {
console.log(`Room created: ${data.roomName} (ID: ${newRoom.id})`);
}
return { return {
code: 0, code: 0,
message: '房间创建成功', message: '房间创建成功',
...@@ -200,6 +208,10 @@ export async function DeleteRoom(data: Ty.RoomDeleteArgs, operatorToken: string ...@@ -200,6 +208,10 @@ export async function DeleteRoom(data: Ty.RoomDeleteArgs, operatorToken: string
where: { id: roomId } where: { id: roomId }
}); });
if (ENABLE_LOG) {
console.log(`Room deleted: ${roomId}`);
}
return { return {
code: 0, code: 0,
message: '房间删除成功', message: '房间删除成功',
...@@ -210,8 +222,6 @@ export async function DeleteRoom(data: Ty.RoomDeleteArgs, operatorToken: string ...@@ -210,8 +222,6 @@ export async function DeleteRoom(data: Ty.RoomDeleteArgs, operatorToken: string
export async function AddMessage(data: Ty.MessageAddArgs): Promise<Ty.BackendResponse<null>> { export async function AddMessage(data: Ty.MessageAddArgs): Promise<Ty.BackendResponse<null>> {
const { roomId, sender, content } = data; const { roomId, sender, content } = data;
console.log(`Adding message to room ${roomId} from user ${sender}: ${content}`);
if (!await UserExists(sender)) { if (!await UserExists(sender)) {
return { return {
code: 1, code: 1,
...@@ -228,6 +238,10 @@ export async function AddMessage(data: Ty.MessageAddArgs): Promise<Ty.BackendRes ...@@ -228,6 +238,10 @@ export async function AddMessage(data: Ty.MessageAddArgs): Promise<Ty.BackendRes
} }
}); });
if (ENABLE_LOG) {
console.log(`Message added to room ${roomId} from user ${sender}: ${content}`);
}
return { return {
code: 0, code: 0,
message: '消息发送成功', message: '消息发送成功',
...@@ -241,6 +255,10 @@ export async function StartAuthSession() : Promise<Ty.BackendResponse<Auth.Sessi ...@@ -241,6 +255,10 @@ export async function StartAuthSession() : Promise<Ty.BackendResponse<Auth.Sessi
redis?.set(`Session:${sessionId}`, "{}"); redis?.set(`Session:${sessionId}`, "{}");
redis?.expire(`Session:${sessionId}`, 60 * 5); // 5分钟内登录/注册有效 redis?.expire(`Session:${sessionId}`, 60 * 5); // 5分钟内登录/注册有效
if (ENABLE_LOG) {
console.log(`Auth session started: ${sessionId}`);
}
return { return {
code: 0, code: 0,
message: '获取成功', message: '获取成功',
...@@ -291,6 +309,10 @@ export async function Login(args: Auth.AuthArgs) : Promise<Ty.BackendResponse<Au ...@@ -291,6 +309,10 @@ export async function Login(args: Auth.AuthArgs) : Promise<Ty.BackendResponse<Au
await redis?.del(`Session:${sessionId}`); await redis?.del(`Session:${sessionId}`);
if (ENABLE_LOG) {
console.log(`User logged in: ${username}`);
}
return { return {
code: 0, code: 0,
message: '登录成功', message: '登录成功',
...@@ -321,6 +343,10 @@ export async function AutoLogin(args: Auth.AutoLoginArgs) : Promise<Ty.BackendRe ...@@ -321,6 +343,10 @@ export async function AutoLogin(args: Auth.AutoLoginArgs) : Promise<Ty.BackendRe
}; };
} }
if(ENABLE_LOG){
console.log(`Auto login successful: ${user.user.name}`);
}
return { return {
code: 0, code: 0,
message: '自动登录成功', message: '自动登录成功',
...@@ -374,6 +400,10 @@ export async function Register(args: Auth.AuthArgs) : Promise<Ty.BackendResponse ...@@ -374,6 +400,10 @@ export async function Register(args: Auth.AuthArgs) : Promise<Ty.BackendResponse
await redis?.del(`Session:${sessionId}`); await redis?.del(`Session:${sessionId}`);
if (ENABLE_LOG) {
console.log(`User registered: ${username}`);
}
return { return {
code: 0, code: 0,
message: '注册成功', message: '注册成功',
...@@ -386,10 +416,28 @@ export async function Register(args: Auth.AuthArgs) : Promise<Ty.BackendResponse ...@@ -386,10 +416,28 @@ export async function Register(args: Auth.AuthArgs) : Promise<Ty.BackendResponse
export async function Logout(args: Auth.LoginCookieData) : Promise<Ty.BackendResponse<null>> { export async function Logout(args: Auth.LoginCookieData) : Promise<Ty.BackendResponse<null>> {
const { authToken } = args; const { authToken } = args;
//find user from token
const user = await prisma.authToken.findUnique({
where: { token: authToken },
select: { user: true }
});
if(!user) {
return {
code: 1,
message: '用户不存在或未登录',
data: null
};
}
await prisma.authToken.delete({ await prisma.authToken.delete({
where: { token: authToken } where: { token: authToken }
}); });
if (ENABLE_LOG) {
console.log(`User logged out: ${user.user.name}`);
}
return { return {
code: 0, code: 0,
message: '登出成功', message: '登出成功',
......
...@@ -104,7 +104,7 @@ export default function SendMessageProvider() { ...@@ -104,7 +104,7 @@ export default function SendMessageProvider() {
<div className="bg-white p-4"> <div className="bg-white p-4">
<textarea <textarea
className="w-full resize-none" className="w-full resize-none"
rows={4} rows={3}
placeholder={currentRoomInfo ? '输入消息...' : '请选择房间后再发送消息'} placeholder={currentRoomInfo ? '输入消息...' : '请选择房间后再发送消息'}
value={text} value={text}
onChange={(e) => setText(e.target.value)} onChange={(e) => setText(e.target.value)}
......
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