From 00b1c8eb8bd218a5f0dca570af09e6f1ec62628e Mon Sep 17 00:00:00 2001 From: root Date: Sat, 6 Jun 2026 23:05:17 +0800 Subject: [PATCH] s --- .env.local | 17 ++++-- .env.local.bak.20260606212903 | 12 ++++ .gitignore | 3 + backend/__pycache__/__init__.cpython-312.pyc | Bin 220 -> 210 bytes .../__pycache__/enhanced_seed.cpython-312.pyc | Bin 6884 -> 6932 bytes backend/__pycache__/init_db.cpython-312.pyc | Bin 13468 -> 15947 bytes backend/__pycache__/main.cpython-312.pyc | Bin 53879 -> 77712 bytes backend/__pycache__/pb_client.cpython-312.pyc | Bin 6884 -> 6932 bytes backend/__pycache__/seed_data.cpython-312.pyc | Bin 28836 -> 28884 bytes backend/__pycache__/settings.cpython-312.pyc | Bin 2219 -> 2209 bytes cnomadcna.sh | 12 +++- codex-config.sh | 54 ++++++++++++++++++ next.config.ts | 9 +++ 13 files changed, 101 insertions(+), 6 deletions(-) create mode 100644 .env.local.bak.20260606212903 mode change 100644 => 100755 cnomadcna.sh create mode 100644 codex-config.sh diff --git a/.env.local b/.env.local index 6e0b2e9..cb49f82 100644 --- a/.env.local +++ b/.env.local @@ -1,11 +1,20 @@ -# 本地调试 - 支付测试 1 元、zpay 渠道 -NEXT_PUBLIC_POCKETBASE_URL=https://pocketbase.hackrobot.cn -PAYMENT_API_URL=http://127.0.0.1:8007 +# Linux 生产环境 - nomadro.cn +ROOT_DOMAIN=nomadro.cn +NEXT_PUBLIC_ROOT_DOMAIN=nomadro.cn +NEXT_PUBLIC_POCKETBASE_URL=https://pocketbase.nomadro.cn +POCKETBASE_URL=http://127.0.0.1:8090 +PAYMENT_API_URL=https://api.nomadro.cn PAYMENT_PROVIDER=zpay PAYMENT_DEFAULT_AMOUNT=100 PAYMENT_JOIN_AMOUNT=100 NEXT_PUBLIC_SITE_ID=meetup -NEXT_PUBLIC_SITE_URL=http://localhost:3001 +NEXT_PUBLIC_SITE_URL=https://nomadro.cn +NEXT_PUBLIC_API_BASE_URL=/api + +# MinIO +MINIO_ENDPOINT=minio.nomadro.cn +MINIO_PORT=443 +MINIO_USE_SSL=true # PocketBase 管理员(check-user、ensure-user、vip 需要) POCKETBASE_EMAIL=xiaoshuang.eric@gmail.com diff --git a/.env.local.bak.20260606212903 b/.env.local.bak.20260606212903 new file mode 100644 index 0000000..6e0b2e9 --- /dev/null +++ b/.env.local.bak.20260606212903 @@ -0,0 +1,12 @@ +# 本地调试 - 支付测试 1 元、zpay 渠道 +NEXT_PUBLIC_POCKETBASE_URL=https://pocketbase.hackrobot.cn +PAYMENT_API_URL=http://127.0.0.1:8007 +PAYMENT_PROVIDER=zpay +PAYMENT_DEFAULT_AMOUNT=100 +PAYMENT_JOIN_AMOUNT=100 +NEXT_PUBLIC_SITE_ID=meetup +NEXT_PUBLIC_SITE_URL=http://localhost:3001 + +# PocketBase 管理员(check-user、ensure-user、vip 需要) +POCKETBASE_EMAIL=xiaoshuang.eric@gmail.com +POCKETBASE_PASSWORD=Xiao4669805@ diff --git a/.gitignore b/.gitignore index 59c9787..2f23f3c 100644 --- a/.gitignore +++ b/.gitignore @@ -51,5 +51,8 @@ build /data/ /backend/uploads/ /backend/.env +/backend/.venv/ +__pycache__/ +*.py[cod] /tools/pocketbase/ /tools/pocketbase.zip diff --git a/backend/__pycache__/__init__.cpython-312.pyc b/backend/__pycache__/__init__.cpython-312.pyc index 86cb54a89eef361a8285ce1c9a34175fd3971bf7..7eec73b1eeb351a8ffee5ff740ef3a8db7cb368f 100644 GIT binary patch delta 50 zcmcb^c!`nwG%qg~0}$MjQJKgc$LFk{k)NBYUz${!S5m4!u~CUrKPfReJ2fvwf8rVg E0B;o!xc~qF delta 60 zcmcb_c!!buG%qg~0}y;Zr96>4PQusODkiizwWv5IF(o%MFUBRcIJ+djAZB8@5@$?O OVsdtBUP{cwMFs#+f)wHa diff --git a/backend/__pycache__/enhanced_seed.cpython-312.pyc b/backend/__pycache__/enhanced_seed.cpython-312.pyc index 53a56e73ab68e037238ad3d500eab51d5bc181b4..fefd0cadf62859fdc4290d645b812e1ec905d4fb 100644 GIT binary patch delta 83 zcmaE2I>n6pG%qg~0}$MjQQ62H#BS-KpOK%Ns$ZH^npaY)pPpHglbEENnO9trn3tTY lYmjJRX=z|=7@wS%pPQJHoR_Gdl$e~InwO%#IgPze7yw4R8!`X@ delta 35 pcmbPY_QaI?G%qg~0}wpAr@WCnh@Dd+DKR-aH7_M*^ECE4VF15!3j6>7 diff --git a/backend/__pycache__/init_db.cpython-312.pyc b/backend/__pycache__/init_db.cpython-312.pyc index 5b5c2e7241e9957344c65caa51decd463ebddb31..daa8e11fe34596ec67260ad36342dafb2416eea3 100644 GIT binary patch literal 15947 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⁢q4<}2L?dXx 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 delta 5700 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 diff --git a/backend/__pycache__/main.cpython-312.pyc b/backend/__pycache__/main.cpython-312.pyc index 38b82cac731d2c54a96ec786f7c8e60274326878..b3aeab4c7c07d9ef56cbb61eb4b81de252212da4 100644 GIT binary patch delta 34277 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 Na`;*$J3yb`{$G+42FU;b diff --git a/backend/__pycache__/pb_client.cpython-312.pyc b/backend/__pycache__/pb_client.cpython-312.pyc index 97a4447786a7abac3ffca791f8a9c54b2effe5eb..fd86ef1e14a0ec6bccd549a75da0a42f67068211 100644 GIT binary patch delta 83 zcmaE2I>n6pG%qg~0}$MjQQ64t%xLMNpOK%Ns$ZH^npaY)pPpHglbEENnO9trn3tTY lYmjJRX=z|=7@wS%pPQJHoR_Gdl$e~InwO%#Ih?Uq5&%F;8yNrq delta 35 pcmbPY_QaI?G%qg~0}z;;Q{Kq!%*ZK{l$e~InwJu@xt+0B5&*4j3MBvl diff --git a/backend/__pycache__/seed_data.cpython-312.pyc b/backend/__pycache__/seed_data.cpython-312.pyc index 02c18f7b92d11e6f48d7ef60f530cb9f7435baf2..94daa43db887dfb64b3c742cde5216bf48f8bbe6 100644 GIT binary patch delta 85 zcmZ4TknzexM()$Ryj%=Ga7#vIBX^&-rHg(>er~FMX;NukNvVE%W=T$Bl5S>RaY$ diff --git a/backend/__pycache__/settings.cpython-312.pyc b/backend/__pycache__/settings.cpython-312.pyc index 1b511450a683979518573f2928819a57301b902d..21cdf0df1213bf2d6b8d4e7af2dbef35b4d6cc5f 100644 GIT binary patch delta 54 zcmZ22xKNP$G%qg~0}$MjQQ64d#>nTapOK%Ns$ZH^npaY)KY1mi5~qGrVsdtBUW)$a ID~#9K0HAUZ;{X5v delta 64 zcmZ1|xLT0=G%qg~0}y;ZrM!{5jZwna*(xTqIJKxaCNU*9GcU#^wK%&ZzaVDvd`2bC Tn54wy?9{xJn9Zjcud@LFk`@*W diff --git a/cnomadcna.sh b/cnomadcna.sh old mode 100644 new mode 100755 index c3448a5..0af3caf --- a/cnomadcna.sh +++ b/cnomadcna.sh @@ -1,3 +1,11 @@ #!/bin/bash -export PORT=4002 -exec npm run start +set -euo pipefail + +cd "$(dirname "$0")" + +export PATH="/usr/local/bin:/usr/bin:/bin" +export NODE_ENV=production +export HOSTNAME="${NEXT_HOSTNAME:-0.0.0.0}" +export PORT="${PORT:-4002}" + +exec pnpm start diff --git a/codex-config.sh b/codex-config.sh new file mode 100644 index 0000000..aeab099 --- /dev/null +++ b/codex-config.sh @@ -0,0 +1,54 @@ +#!/bin/bash + +# Prompt for API KEY +while true; do + read -p "Please enter your API KEY: " API_KEY + if [ -n "$API_KEY" ]; then + break + else + echo "Error: API KEY cannot be empty. Please try again." + fi +done + +# Check if config files exist and backup if necessary +CONFIG_FILE=~/.codex/config.toml +AUTH_FILE=~/.codex/auth.json +BACKUP_FILE=~/codex-config.backup.tar.gz + +if [ -f "$CONFIG_FILE" ] || [ -f "$AUTH_FILE" ]; then + echo "Existing configuration files found. Creating backup..." + tar -czf "$BACKUP_FILE" -C ~/.codex $(ls ~/.codex/ | grep -E '^(config\.toml|auth\.json)$' 2>/dev/null) + echo "Backup created: $BACKUP_FILE" +fi + +# Create ~/.codex directory if it doesn't exist +mkdir -p ~/.codex + +# Create config.toml +cat > "$CONFIG_FILE" << 'EOF' +model_provider = "codex-for-me" +model = "gpt-5.3-codex" +model_reasoning_effort = "xhigh" +disable_response_storage = true +sandbox_mode = "danger-full-access" + +[model_providers.codex-for-me] +name = "codex-for-me" +base_url = "https://blackaicoding.com/v1" +wire_api = "responses" +requires_openai_auth = true +EOF + +# Create auth.json with user-provided API KEY +cat > "$AUTH_FILE" << EOF +{ +"OPENAI_API_KEY": "$API_KEY" +} +EOF + +echo "" +echo "Configuration completed successfully!" +echo "" +echo "To restore previous configuration, run:" +echo " tar -xzf ~/codex-config.backup.tar.gz -C ~/.codex" +echo "" diff --git a/next.config.ts b/next.config.ts index 2c41525..d247f8f 100644 --- a/next.config.ts +++ b/next.config.ts @@ -1,6 +1,15 @@ import type { NextConfig } from "next"; const nextConfig: NextConfig = { + async rewrites() { + return [ + { + source: + "/api/:path((?:health|cities|content|notifications|recommendations|routes|services|downloads|meetups|discussions|gigs|profiles|matches|feedback|stats|ai).*)", + destination: "http://127.0.0.1:8000/api/:path", + }, + ]; + }, allowedDevOrigins: [ "localhost", "localhost:3000",