{"id":51918436,"url":"https://github.com/oneclickvirt/freelxcweb","last_synced_at":"2026-07-27T14:30:36.987Z","repository":{"id":351276831,"uuid":"792375192","full_name":"oneclickvirt/freelxcweb","owner":"oneclickvirt","description":"freelxc分发容器小鸡项目的前端源码(暂不做后续开发)，如有需求请使用 https://github.com/oneclickvirt/oneclickvirt","archived":false,"fork":false,"pushed_at":"2026-04-14T09:43:35.000Z","size":1229,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-04-14T11:25:17.733Z","etag":null,"topics":["incus","lxc","lxd","telegram"],"latest_commit_sha":null,"homepage":"https://t.me/Dedicated_Server_Moniter","language":"Vue","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oneclickvirt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-04-26T14:39:20.000Z","updated_at":"2026-04-14T09:45:08.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/oneclickvirt/freelxcweb","commit_stats":null,"previous_names":["oneclickvirt/freelxcweb"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/oneclickvirt/freelxcweb","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oneclickvirt%2Ffreelxcweb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oneclickvirt%2Ffreelxcweb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oneclickvirt%2Ffreelxcweb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oneclickvirt%2Ffreelxcweb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oneclickvirt","download_url":"https://codeload.github.com/oneclickvirt/freelxcweb/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oneclickvirt%2Ffreelxcweb/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35955550,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-27T02:00:06.776Z","response_time":101,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["incus","lxc","lxd","telegram"],"created_at":"2026-07-27T14:30:36.767Z","updated_at":"2026-07-27T14:30:36.907Z","avatar_url":"https://github.com/oneclickvirt.png","language":"Vue","funding_links":[],"categories":[],"sub_categories":[],"readme":"## 项目说明\n\n本项目是基于 Vue 2 的前端管理系统（项目名：SL-LXC）。\n\n对应的后端代码见：https://github.com/oneclickvirt/freelxcserver\n\n本项目暂不做后续开发维护工作。\n\n## 环境要求\n\n- Node.js：16.x（与项目 `package.json` 保持一致）\n- npm：\u003e= 6\n- 建议操作系统：Linux（生产环境）\n\n## 本地开发\n\n```bash\n# 1) 进入项目目录\ncd freelxcweb\n\n# 2) 可选：设置 npm 镜像源（提升下载速度）\nnpm config set registry https://registry.npmmirror.com\n\n# 3) 安装依赖（推荐）\nnpm i --legacy-peer-deps\n\n# 4) 启动开发服务\nnpm run dev\n```\n\n启动后访问：\n- http://localhost:1024\n\n说明：\n- 开发端口在 `vue.config.js` 中配置，当前为 `1024`。\n- 若安装依赖报冲突，优先使用 `npm i --legacy-peer-deps`。\n- 不建议使用 `cnpm`，避免出现依赖解析差异导致的异常。\n\n## 构建与预览\n\n```bash\n# 构建生产包（输出到 dist 目录）\nnpm run build:prod\n\n# 本地预览构建产物（可选）\nnpm run preview\n```\n\n说明：\n- 当前项目有效构建命令为 `build:prod`。\n- 文档中的 `build:stage` 并非本项目默认脚本，如需使用请先在 `package.json` 中新增。\n\n## 关键配置说明\n\n### 1. 前端环境变量\n\n- 开发环境：`.env.development`\n  - `VUE_APP_BASE_API='/dev-api'`\n  - `VUE_APP_CONTEXT_PATH='/'`\n- 生产环境：`.env.production`\n  - `VUE_APP_BASE_API='/prod-api'`\n  - `VUE_APP_CONTEXT_PATH='/'`\n\n### 2. 代理与接口前缀关系\n\n开发环境（`npm run dev`）下：\n- 浏览器请求 `/dev-api/*`\n- 由 `vue.config.js` 代理到 `http://127.0.0.1:8088/*`\n\n生产环境（Nginx/OpenResty）下：\n- 浏览器请求 `/prod-api/*`\n- 由 Nginx/OpenResty 反向代理到后端服务\n\n## 生产部署（Nginx）\n\n以下为通用模板，所有 IP/域名已脱敏，请按实际环境替换。\n\n```nginx\n# 后端 API 服务（可配置多实例做负载均衡）\nupstream backend_api {\n    server xxxx:8088;\n    # server xxxx:8089;\n}\n\n# 监控服务\nupstream monitor_admin {\n    server xxxx:9200;\n}\n\n# xxl-job 服务\nupstream xxl_job_admin {\n    server xxxx:9100;\n}\n\nserver {\n    # 前端对外访问端口\n    listen 80;\n\n    # 对外访问域名（或公网 IP）\n    server_name xxxx;\n\n    # 前端静态资源目录（dist 所在目录）\n    root /opt/project/freelxc/lxcweb/dist;\n    index index.html index.htm;\n\n    # 前端路由回退（history 模式必须保留）\n    location / {\n        try_files $uri $uri/ /index.html;\n    }\n\n    # 后端接口代理\n    location /prod-api/ {\n        proxy_set_header Host $http_host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header REMOTE-HOST $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n\n        # 注意：proxy_pass 末尾必须带 /\n        # 否则 /prod-api/xxx 可能被错误转发为 /prod-api/xxx（路径不被剥离）\n        proxy_pass http://backend_api/;\n    }\n\n    # 监控页面代理\n    location /monitor/admin/ {\n        proxy_set_header Host $http_host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header REMOTE-HOST $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_pass http://monitor_admin/admin/;\n    }\n\n    # xxl-job 页面代理\n    location /xxl-job-admin/ {\n        proxy_set_header Host $http_host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header REMOTE-HOST $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_pass http://xxl_job_admin/xxl-job-admin/;\n    }\n\n    # 限制外网访问 actuator（按需保留）\n    location ~ ^(/[^/]*)?/actuator(/.*)?$ {\n        return 403;\n    }\n\n    # 禁止访问敏感文件\n    location ~ ^/(\\.user.ini|\\.htaccess|\\.git|\\.env|\\.svn|\\.project|LICENSE|README.md) {\n        return 404;\n    }\n\n    # 静态资源缓存策略（按需调整）\n    location ~ .*\\.(gif|jpg|jpeg|png|bmp|swf)$ {\n        expires 30d;\n        access_log off;\n        error_log /dev/null;\n    }\n\n    location ~ .*\\.(js|css)$ {\n        expires 12h;\n        access_log off;\n        error_log /dev/null;\n    }\n}\n```\n\n### 域名绑定说明\n\n- 若使用域名访问，请先保证域名 DNS 已解析到服务器公网 IP。\n- 若服务器内部需要固定域名解析，可在 `/etc/hosts` 中增加映射：\n\n```text\nxxxx    your.domain.example\n```\n\n## 生产部署（OpenResty）\n\n若使用 1Panel/OpenResty，可参考以下模板：\n\n```nginx\nserver {\n    # 按需监听端口，可改为 80/443\n    listen 1024 default_server;\n\n    # 对外访问域名或 IP\n    server_name xxxx;\n\n    # 前端 dist 目录\n    root /www/sites/xxxx/index/dist;\n    index index.html index.htm;\n\n    access_log /www/sites/xxxx/log/access.log main;\n    error_log  /www/sites/xxxx/log/error.log warn;\n\n    # 前端路由回退\n    location / {\n        try_files $uri $uri/ /index.html;\n    }\n\n    # 后端接口代理\n    location /prod-api/ {\n        proxy_set_header Host $http_host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header REMOTE-HOST $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n\n        # 注意：末尾 / 必须保留\n        proxy_pass http://xxxx:8088/;\n    }\n\n    # 监控页面代理\n    location /monitor/admin/ {\n        proxy_set_header Host $http_host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header REMOTE-HOST $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_pass http://xxxx:9200/admin/;\n    }\n\n    # xxl-job 页面代理\n    location /xxl-job-admin/ {\n        proxy_set_header Host $http_host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header REMOTE-HOST $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_pass http://xxxx:9100/xxl-job-admin/;\n    }\n\n    # 限制外网访问 actuator（按需保留）\n    location ~ ^(/[^/]*)?/actuator(/.*)?$ {\n        return 403;\n    }\n}\n```\n\n## 常见问题排查\n\n### 1. 页面打不开或白屏\n\n- 先确认前端是否已正常构建并部署 `dist` 目录。\n- 确认 Nginx/OpenResty 的 `root` 路径指向正确目录。\n- 确认 `location /` 中有 `try_files $uri $uri/ /index.html;`。\n\n### 2. 接口 404/500\n\n- 检查前端环境变量中 `VUE_APP_BASE_API` 与代理前缀是否一致。\n- 检查 `/prod-api/` 的 `proxy_pass` 是否带末尾 `/`。\n- 检查后端服务端口是否可达（8088/9200/9100）。\n\n### 3. HTTPS 下功能异常\n\n- 若页面为 HTTPS，而被代理系统为 HTTP，浏览器可能因混合内容策略拦截请求。\n- 解决方案：\n  - 统一改为 HTTPS；或\n  - 将相关地址改为独立外链页面访问。\n\n## 维护建议\n\n- 升级依赖前先锁定版本并进行测试，尤其是 `echarts` 等容易引发兼容问题的库。\n- 线上部署前，先在测试环境验证代理路径是否正确。\n- 将真实公网 IP、域名、账号等敏感信息放到私有文档，不写入公开仓库。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foneclickvirt%2Ffreelxcweb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foneclickvirt%2Ffreelxcweb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foneclickvirt%2Ffreelxcweb/lists"}