## Github Codespaces简介
Github Codespaces是[Github](https://github.com)的一项服务,该服务给用户提供在线的开发环境,可以编译和运行代码,实质是提供了一个放在Github服务器中的Docker容器,操作系统为Ubuntu 20.04 LTS,没有GUI,自带一些常用的开发工具,可以满足各种场景、语言的开发。该服务分免费计划和付费计划,对于个人来说,免费计划足以满足需求,即每月核心免费使用时间为60小时。
## 创建Codespace
为了创建一个Codespace,你首先需要拥有自己的Github账号,这里不做描述。但要注意,在中国大部分地区访问Github是受限的,表现为对Github所有IP的不定时干扰,这意味着正常方式访问Github是要靠运气的,但本文不提供可越过封锁访问网站的工具,若需要请自行查找。当你发现此时你刚好可以访问Github时,可以趁现在做完要做的事。
登陆账号后,访问<https://github.com/codespaces>,点击```new codespace```:
![cs1](https://cdn.luogu.com.cn/upload/image_hosting/wsce8h4l.png)
选择依附的仓库和分支,一般为main分支,还有区域和类型,区域可以选离你最近的,类型2核基本够用,如有更大需求可以选4核,但每月核心免费试用时间就只有30小时。确认无误后点击```create codespace```(如果没有一个仓库,在<https://github.com/用户名?tab=repositories>创建一个):
![cs2](https://cdn.luogu.com.cn/upload/image_hosting/dilafopq.png)
随后会跳转到一个页面,显示正在设置Codespace,网页连接Codespace较慢,把它关了。但要注意此时的网址,一般是以两个随机英文单词开头,再加一段迷惑的东西和```.github.dev```,开头的那两个单词就是你的Codespace的名字,记住它们。
![cs3](https://cdn.luogu.com.cn/upload/image_hosting/0cwtcpoe.png)
至此你的Codespace已经创建完成,当然你也可以创建多个。下面将展示如何连接到Codespace。
## 使用VScode连接到Codespace
由于网络原因,网页连接方式并不很好。可以使用支持的客户端连接,这里使用VScode,如果你还没有安装VScode,可以在<https://code.visualstudio.com/Download>下载安装包,安装过程在此不描述。
打开VScode,点击左侧的扩展图标,你需要一个叫Github Codespaces的插件,它将帮助你连接到Codespace:
![cs4](https://cdn.luogu.com.cn/upload/image_hosting/2osa35je.png)
若安装顺利的话,你将会被要求重新加载。重新加载VScode之后窗口左侧将会多一个长得像显示器的按钮,点击它后将有一个登录Github账号的按钮,点击它后将会打开一个网页,完成登陆后将自动回到VScode窗口(或者浏览器会询问你),稍等片刻,你的Codespace将会被列出,找到与你当时记下的名字相同的Codespace,右击它并点击连接:
![cs5](https://cdn.luogu.com.cn/upload/image_hosting/ri5meljh.png)
等待一下,直到右下角的进度条消失,说明你已成功连接到Codespace,你可以在你的Codespace上进行开发了,所有的东西都由Codespace处理和存储而不是你的本地电脑,命令行也是一样。
## 在Codespace与本机之间建立代理
在Codespace上进行涉及到网络的开发时可能需要用到代理,这意味着本机向Codespace发出请求后将由Codespace处理并返回。本文将展示如何使用VScode建立本机与Codespace的代理。
在使用VScode连接到你的Codespace后,按下```Ctrl+` ```打开Codespace的终端,输入```sudo apt install tinyproxy```安装tinyproxy,本文使用它来建立代理。然后输入```sudo vim /etc/tinyproxy/tinyproxy.conf```进入Vim编辑tinyproxy的配置,把```Allow ***.***.***.***```这一行注释掉,表示不限制其他IP访问(但实际上只有登录了你的Github账号的电脑才能访问你的Codespace,故这样做没有问题),找到```Port ***```一行,将端口号改为你喜欢的一个空闲端口,一般用8888,最后按下```ESC```,再输入```:wq```保存并退出Vim。运行```sudo /etc/init.d/tinyproxy start```启动tinyproxy代理服务。
再看VScode,点击```TERMINAL(终端)```选项卡旁边的```Port(端口)```选项卡,点击```Add port(添加端口)```,输入你刚刚配置tinyproxy时写的端口号。至此,你已成功给你的Codespace配置代理软件并将端口映射到本机,现在你可以通过在本机运行```curl -x 127.0.0.1:端口号 要测试的网址```测试代理是否可用。你可以在系统设置中添加此代理,也可以在浏览器中使用插件(如SwitchOmega)添加。
不过,仅当你连接到Codespace时代理才可用,并且每次连接后都要在Codespace中运行```sudo /etc/init.d/tinyproxy start```来启动代理服务。
## Enjoy it!