Initial open-source release (MIT): image2api AI gateway
Full Go backend + Vue 3 frontend, OpenAI-compatible API, multi-provider account pools, billing/admin, Docker one-command deploy with auto HTTPS. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
import { defineConfig } from 'vite'
|
||||
import vue from '@vitejs/plugin-vue'
|
||||
import tailwindcss from '@tailwindcss/vite'
|
||||
|
||||
// Dev server proxies backend routes to the Go backend (default :6666) so the
|
||||
// frontend can use relative paths exactly like the old static UI did. Override
|
||||
// the target with VITE_BACKEND when the backend runs elsewhere.
|
||||
const backend = process.env.VITE_BACKEND || 'http://127.0.0.1:6666'
|
||||
|
||||
// Vite's underlying http-proxy doesn't add X-Forwarded-For / X-Real-IP by
|
||||
// default, so the backend just sees the proxy's loopback address as the
|
||||
// caller and stamps every login as 127.0.0.1. This hook forwards the real
|
||||
// socket peer instead. (Only useful when the dev server is reachable from
|
||||
// another device on the LAN — same-machine browsing is genuinely 127.0.0.1.)
|
||||
function forwardClientIp(proxy) {
|
||||
proxy.on('proxyReq', (proxyReq, req) => {
|
||||
const ip = (req.socket && req.socket.remoteAddress) || ''
|
||||
if (!ip) return
|
||||
const existing = req.headers['x-forwarded-for']
|
||||
proxyReq.setHeader('x-forwarded-for', existing ? `${existing}, ${ip}` : ip)
|
||||
if (!req.headers['x-real-ip']) proxyReq.setHeader('x-real-ip', ip)
|
||||
})
|
||||
}
|
||||
|
||||
export default defineConfig({
|
||||
plugins: [vue(), tailwindcss()],
|
||||
server: {
|
||||
port: 5173,
|
||||
proxy: {
|
||||
// Only the admin API is proxied — bare /admin/* is an SPA route now
|
||||
// (the admin shell), handled client-side by vue-router.
|
||||
'/admin/api': { target: backend, changeOrigin: true, configure: forwardClientIp },
|
||||
'/health': { target: backend, changeOrigin: true, configure: forwardClientIp },
|
||||
// Generated artifacts are served from /images.
|
||||
'/images': { target: backend, changeOrigin: true, configure: forwardClientIp },
|
||||
'/v1': { target: backend, changeOrigin: true, configure: forwardClientIp },
|
||||
},
|
||||
},
|
||||
})
|
||||
Reference in New Issue
Block a user