# Copilot后端代理服务
**Repository Path**: gitxl/github-copilot-proxies
## Basic Information
- **Project Name**: Copilot后端代理服务
- **Description**: 借助其他FIM模型(如DeepSeek)来接管GitHub Copilot插件服务端
- **Primary Language**: Go
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 86
- **Created**: 2024-09-27
- **Last Updated**: 2024-10-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Github Copilot 后端代理服务
[仅需四步](#快速使用步骤)即刻拥有完全离线的 `Copilot小助手` 同款服务,速度更快,更稳定,更安全。
借助其他FIM模型(如DeepSeek)来接管GitHub Copilot插件服务端, 廉价的模型+强大的补全插件相结合, 使得开发者可以更加高效的编写代码。
> ✨ 搭建一个免费的公共服务端点: **mycopilot.noteo.cn**
> 服务端代码会与此仓库版本保持一致, 感谢[硅基流动](https://cloud.siliconflow.cn/i/NO6ShUc3)提供免费的模型服务,
> 使用方式详见:[IDE设置方法](#ide设置方法) 将域名部分替换即可.
## 特点
- [x] 支持使用Docker部署, 简单方便
- [x] 支持多种IDE,
如: [VSCode](#vscode), [Jetbrains IDE系列](#jetbrains-ide系列), [Visual Studio 2022](#visual-studio-2022), [HBuilderX](#hbuilderx)
- [x] 支持任意符合 `OpenAI` 接口规范的模型, 和 `Ollama` 部署的本地模型
- [x] `GitHub Copilot` 插件各种API接口**全接管**, 无需担心插件升级导致服务失效
- [x] 代码补全请求防抖设置, 避免过度消耗 Tokens
- [x] 支持使用 Github Copilot 官方服务, 参考: [使用GitHub Copilot官方服务](#使用github-copilot官方服务)
## 如何使用?
> 在使用之前确保自己的环境是干净的, 也就是说不能使用过其他的激活服务, 可以先检查自己的环境变量将 `GITHUB` `COPILOT`
> 相关的环境变量删除, 然后将插件更新最新版本后重启IDE即可.
### 快速使用步骤
1. **部署服务**: 可以使用[下载文件直接部署使用](#下载文件直接部署使用) 或 使用[docker部署](#docker部署).
2. **配置IDE**: 详细参考下面的[IDE设置方法](#ide设置方法).
3. **修改本地hosts文件**: 具体参考[配置本机hosts文件](#配置本机hosts文件).
4. **信任SSL证书**: 具体自行搜索各个系统平台信任根证书操作 **(可选)**.
5. 重启IDE, 点击登录 `GitHub Copilot` 插件即可.
### Docker部署
**(推荐)** 懒人推荐使用此方案, 比较简单
已经将自签证书的工作做完了, 只需要将 [docker-compose.yml](docker-compose.yml) 文件下载到本地, 将里面的
**模型API KEY 替换为你的**, 然后执行以下命令即可启动服务:
```shell
# 启动服务
docker-compose up -d
# 停止服务
docker-compose down
# 更新服务
1. docker-compose pull
2. docker-compose up -d
# 查看日志
docker-compose logs -f
```
镜像全部上传到阿里云容器镜像服务, 国内访问无惧.
### 下载文件直接部署使用
1. 下载最新版本的可执行文件
访问 [releases](https://gitee.com/ripperTs/github-copilot-proxies/releases), 修改里面 `.env` 文件的配置项, 然后直接运行即可.
2. 如果希望绑定自己自有的域名, 可以参考: [自定义域名](#自定义域名) 配置, 然后将所有 `mycopilot.com` 相关的域名都修改为自己的域名.
3. 启动服务后然后按照[IDE设置方法](#ide设置方法)配置IDE.
4. 重启IDE,登录 `GitHub Copilot` 插件.
### 配置本机hosts文件
将下面hosts配置添加到本机hosts文件中, 以便访问本地服务:
```
127.0.0.1 mycopilot.com
127.0.0.1 api.mycopilot.com
127.0.0.1 copilot-proxy.mycopilot.com
127.0.0.1 copilot-telemetry-service.mycopilot.com
```
### 环境变量参数说明
详细参考: [环境变量参数说明](PARAM.md)
## IDE设置方法
### VSCode
1. 安装插件: `GitHub Copilot`
2. 修改 VSCode 的 settings.json 文件, 添加以下配置:
```json
"github.copilot.advanced": {
"authProvider": "github-enterprise",
"debug.overrideCAPIUrl": "http://api.mycopilot.com:1188",
"debug.overrideProxyUrl": "http://copilot-proxy.mycopilot.com:1188",
"debug.chatOverrideProxyUrl": "http://api.mycopilot.com:1188/chat/completions"
},
"github-enterprise.uri": "http://mycopilot.com:1188"
```
vscode 使用https有些问题, 并且直接使用ip好像也不行, 所以这里使用http的域名+端口的形式
(不直接使用80端口是为了防止服务冲突), 形式不重要直接粘贴进去即可.
### Jetbrains IDE系列
1. 找到`设置` > `语言与框架` > `GitHub Copilot` > `Authentication Provider`
2. 填写的值为: `mycopilot.com`
3. 首次打开 `IDE` 应该会提示是否信任证书的弹窗, 点击**同意**即可, 如果已经配置了系统级别的信任证书可以忽略.
### Visual Studio 2022
1. 更新到最新版本(内置 Copilot 版本)至少是 `17.10.x` 以上
2. 首先开启 Github Enterprise 账户支持:工具-环境-账户-勾选“包含 Github Enterprise 服务器账户”
3. 然后点击添加 Github 账户,切换到 Github Enterprise 选项卡,输入 `https://mycopilot.com` 即可。
🚨 如果是默认自签证书的域名, 那么本次操作之前务必操作下 `信任根证书` 然后重启浏览器和IDE, 具体方法网上搜索下
证书文件 [mycopilot.crt](ssl/mycopilot.crt)
🚧 Chat服务在代码选中后右键选择解释代码会报错, 解决方法是点击一下"在聊天窗口中继续"即可.
### HBuilderX
> 注意, 插件中的相关 domain 已经写死无法修改, 所以必须使用默认的 mycopilot.com 域名配置.
1. 下载 **[copilot-for-hbuilderx.zip](https://pan.quark.cn/s/eb7f501ad585)** 插件到本地
2. 将插件安装到 plugin目录下, 详细参考: [离线插件安装指南](https://hx.dcloud.net.cn/Tutorial/OfflineInstall)
3. 重启 Hbuilder X 后点击登录 `GitHub Copilot` 即可.
## 自定义域名
如果你有自己的域名或者不想使用默认的 `mycopilot.com` 域名, 你需要申请或自签一个https证书, 然后将证书文件路径配置到
`.env` 或 `docker-compose.yml` 文件中.
### 自有域名配置
将域名添加解析以下四个域名, 假设你的域名为 `yourdomain.com` (非必须是顶级域名), 则你需要解析的域名记录如下:
- `DEFAULT_BASE_URL`: `yourdomain.com`
- `API_BASE_URL`: `api.yourdomain.com`
- `PROXY_BASE_URL`: `copilot-proxy.yourdomain.com`
- `TELEMETRY_BASE_URL`: `copilot-telemetry-service.yourdomain.com`
- 以上四个域名都需要配置SSL证书, 通配符证书教程参考[免费通配符证书申请方法](#通配符证书申请方法).
- 以上几个域名前缀 (`api`, `copilot-proxy`, `copilot-telemetry-service`) 必须是一样的, 不可自定义修改, 否则会导致插件无法登录或正常使用.
- 最后将以上域名修改到对应的环境变量配置文件中.
### 没有域名自签本地证书
如果你没有域名, 可以随便想一个"假"域名, 然后直接修改 `hosts` 文件的方式进行解析, 然后使用自签证书即可.
## 支持的模型
> 大部分Chat模型都兼容, 因此下面列出的模型是支持 FIM 的模型, 也就是说支持补全功能.
| 模型名称 (区分大小写) | 类型 | 接入地址 | 说明 |
|--------------------------------------------------------------------------------------------------------------------------------|---------|----------------------------------------------------------------------------------------------------------------|-----------------------------|
| [Qwen/Qwen2.5-Coder-7B-Instruct](https://docs.siliconflow.cn/features/fim) | 免费 | 查看地址
`https://api.siliconflow.cn/v1/completions` | 硅基流动官方支持的 FIM 补全模型, 完美适配且免费 |
| [DeepSeek (API)](https://www.deepseek.com/) | 付费 | 查看地址
`https://api.deepseek.com/beta/v1/completions` | 👍🏻完美适配且价格实惠, 推荐使用 |
| [deepseek-ai/DeepSeek-V2.5](https://docs.siliconflow.cn/features/fim) | 付费 | 查看地址
`https://api.siliconflow.cn/v1/completions` | 硅基流动官方支持的 FIM 补全模型, 完美适配 |
| [deepseek-ai/DeepSeek-Coder-V2-Instruct](https://docs.siliconflow.cn/features/fim) | 付费 | 查看地址
`https://api.siliconflow.cn/v1/completions` | 硅基流动官方支持的 FIM 补全模型, 完美适配 |
| [codestral-latest (API)](https://docs.mistral.ai/api/#tag/fim) | 免费 / 付费 | 查看地址
`https://api.mistral.ai/v1/fim/completions` | Mistral 出品, 免费计划有非常严重的频率限制 |
| [stable-code](https://ollama.com/library/stable-code) | 免费 | 查看地址
`http://127.0.0.1:11434/v1/chat/completions` | Ollama部署本地的超小量级补全模型 |
| [codegemma](https://ollama.com/library/codegemma) | 免费 | 查看地址
`http://127.0.0.1:11434/v1/chat/completions` | Ollama部署本地的补全模型 |
| [codellama](https://ollama.com/library/codellama) | 免费 | 查看地址
`http://127.0.0.1:11434/v1/chat/completions` | Ollama部署本地的补全模型 |
| [qwen-coder-turbo-latest](https://help.aliyun.com/zh/model-studio/user-guide/qwen-coder?spm=a2c4g.11186623.0.0.a5234823I6LvAG) | 收费 | 查看地址
`https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions` | 阿里通义代码补全模型 |
| [mike/deepseek-coder-v2](https://ollama.com/mike/deepseek-coder-v2) | 免费 | 查看地址
`http://127.0.0.1:11434/api/generate` | Ollama支持的 `suffix` 参数方式实现 |
| [deepseek-coder-v2](https://ollama.com/library/deepseek-coder-v2) | 免费 | 查看地址
`http://127.0.0.1:11434/api/generate` | Ollama支持的 `suffix` 参数方式实现 |
**💡以上接入的模型除了 `DeepSeek` 模型与 `硅基流动` 模型之外, 效果均不理想, 这里仅做接入更多模型的Demo参考.**,
理论上后续如果有API支持标准的FIM补全, 都可以接入.
## 使用Github Copilot官方服务
> 前提条件: 必须有官方正版的 `GitHub Copilot` 订阅权限, 否则无法使用.
**应用场景:**
- 适用于 **"月抛"** 的Github账号, 避免每个月切换Github账号后都要重复登录多个IDE中的插件操作, 只需要更改环境变量中的
`COPILOT_GHU_TOKEN` 参数一处即可.
- 适用于 **"多人共享"** 的Github账号, 共享者只需要使用此服务即可, 不需要告知Github账号密码.
### 使用方法
- 设置环境变量参数 `COPILOT_CLIENT_TYPE=github` (设置此参数后其他的Copilot相关配置都可以不用设置了, 因为这里已经使用了官方的服务).
- 启动服务访问 `http://127.0.0.1:1188/github/login/device/code` 获取 `ghu_` 的参数
- 将获取到的 `ghu_` 参数填写到 `COPILOT_GHU_TOKEN` 环境变量中.
- 重启服务, 重启IDE即可.
## 通配符证书申请方法
> 使用 [acme.sh](https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E) 依旧可以申请通配符域名证书,
> 如果你的域名托管在 `cf` `腾讯云` `阿里云` 等等, 都可以使用他们的API来自动续期.
### 安装acme.sh
```shell
# 官方
curl https://get.acme.sh | sh -s email=617498836@qq.com
# 国内镜像
https://github.com/acmesh-official/acme.sh/wiki/Install-in-China
# 使环境变量立即生效
source ~/.bashrc
# 创建一个 alias,便于后续访问:
alias acme.sh=~/.acme.sh/acme.sh
```
### 操作步骤
我这里域名是托管在 `cf` 上的, 所以使用 `cf` 的API来申请证书, 你可以根据自己的情况来选择.
1. 配置dns秘钥
```shell
export CF_Email="110110110@qq.com"
export CF_Key="xxxxxxx"
```
2. 签发证书
```shell
acme.sh --issue --dns dns_cf -d supercopilot.top -d '*.supercopilot.top'
```
3. 安装证书
```shell
# 新建一个证书目录
mkdir -p /etc/nginx/cert_file/supercopilot.top
# 安装证书
acme.sh --install-cert -d supercopilot.top -d *.supercopilot.top \
--key-file /etc/nginx/cert_file/key.pem \
--fullchain-file /etc/nginx/cert_file/fullchain.pem
```
4. 修改对应的环境变量配置
- CERT_FILE=/etc/nginx/cert_file/fullchain.pem
- KEY_FILE=/etc/nginx/cert_file/key.pem
**如果你使用`宝塔`面板将会更加容易的申请, 因为面板中已经高度集成了此模块**
## 注意事项
1. 请勿将本服务用于商业用途, 仅供学习交流使用
2. 请勿将本服务用于非法用途, 一切后果自负
## 鸣谢
- [copilot_take_over](https://gitee.com/LoveA/copilot_take_over)
- [override](https://github.com/linux-do/override)
- [硅基流动](https://cloud.siliconflow.cn/i/NO6ShUc3)