前言
插头DP的坑等初赛之后再填把。
正文
有时候出门只带了iPad。怎么办?直接打开App Store搜索C++然后下载。不行,这样不够优雅。那怎么办?于是我虎视眈眈地瞅着角落里的safari…
准备工具
浏览器又没有g++,所以我们肯定需要准备一台远程计算机(算了就是服务器),装上g++,其实这样就可以直接干活了。但是很明显,直接在SSH上编译依然不是很优雅,所以还需要一点东西。
所以,这个东西就是code-server,一个在浏览器里面运行的VScode,最后的效果长这样:
这才是优雅!
部署code-server
去github页面下载code-server,Debian/Ubuntu系下载deb,CentOS/RHEL系下载rpm(这都不用我来教吧)
https://github.com/cdr/code-server/releases
若有同学因网络问题打不开github,这里直接放出截止2021.9.19的最新版本code-server的下载直联,直接到服务器离线下载即可:
系统 | 下载地址 |
---|---|
Debian/Ubuntu | https://github.com/cdr/code-server/releases/download/v3.12.0/code-server_3.12.0_amd64.deb |
CentOS/RHEL | https://github.com/cdr/code-server/releases/download/v3.12.0/code-server-3.12.0-amd64.rpm |
安装完之后,直接在终端输入code-server
,然后会输出这些信息:
[2021-09-19T15:01:34.457Z] info Wrote default config file to ~/.config/code-server/config.yaml
[2021-09-19T15:01:34.976Z] info code-server 3.12.0 b37ff28a0a582aee84a8f961755d0cb40a4081db
[2021-09-19T15:01:34.978Z] info Using user-data-dir ~/.local/share/code-server
[2021-09-19T15:01:35.011Z] info Using config file ~/.config/code-server/config.yaml
[2021-09-19T15:01:35.011Z] info HTTP server listening on http://127.0.0.1:8080
[2021-09-19T15:01:35.011Z] info - Authentication is enabled
[2021-09-19T15:01:35.011Z] info - Using password from ~/.config/code-server/config.yaml
[2021-09-19T15:01:35.011Z] info - Not serving HTTPS
这时,我们ctrl+c退出程序,进入~/.config/code-server
,编辑里面的config.yaml,默认状态应该是这样子的:
bind-addr: 127.0.0.1:8080
auth: password
password: 9f77cba7aab939cccfb31d7c
cert: false
如果你是个人使用的话,就可以把密码给改了。若想公开使用,那么我会在下面告诉你如何做好安全工作。
如果你只是在内网进行使用,并不需要反向代理来实现HTTPS,那么你应该把bind-addr: 127.0.0.1:8080
改成bind-addr: 0.0.0.0:8080
。当然,8080端口也可以改掉。如果需要反向代理,那么就只改端口或干脆不动。
最后,在终端输入code-server
,浏览器输入对应域名或IP,就可以干活啦!
HTTPS
本人强迫症,没有SSL,看到网址后面带上端口号就不高兴。 所以带上HTTPS是必不可少的。
老样子,打开宝塔,新建网站,挂上SSL,挂好反向代理,我是这样填的:
如果你此时打开你的反向代理网站,那么恭喜你,你将看到一片空白。。。其实第一次部署code-server的时候我就是这个地方卡了好久,在不知道过了多长时间之后,我在部署sshwifty的时候看到websocket连接失败的现象,才想到可能code-server的反向代理网页没有和后台websocket服务进行连接,画面当然是空白了!
解决办法也很简单,在宝塔反向代理中点击配置文件
:
然后在两句proxy_set_header REMOTE-HOST $remote_addr;
的后面加上这两行东西:
proxy_set_header Upgrade http_upgrade;
proxy_set_header Connectionconnection_upgrade;
如这是我原来的配置文件:
#PROXY-START/
location ~* \.(gif|png|jpg|css|js|woff|woff2){
proxy_pass http://127.0.0.1:2021;
proxy_set_header Hosthost;
proxy_set_header X-Real-IP remote_addr;
proxy_set_header X-Forwarded-Forproxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST remote_addr;
expires 12h;
}
location /
{
proxy_pass http://127.0.0.1:2021;
proxy_set_header Hosthost;
proxy_set_header X-Real-IP remote_addr;
proxy_set_header X-Forwarded-Forproxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST remote_addr;
add_header X-Cacheupstream_cache_status;
#Set Nginx Cache
add_header Cache-Control no-cache;
}
#PROXY-END/
加上之后就变成了这样子:
#PROXY-START/
location ~* \.(gif|png|jpg|css|js|woff|woff2){
proxy_pass http://127.0.0.1:2021;
proxy_set_header Hosthost;
proxy_set_header X-Real-IP remote_addr;
proxy_set_header X-Forwarded-Forproxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST remote_addr;
proxy_set_header Upgradehttp_upgrade;
proxy_set_header Connection connection_upgrade;
expires 12h;
}
location /
{
proxy_pass http://127.0.0.1:2021;
proxy_set_header Hosthost;
proxy_set_header X-Real-IP remote_addr;
proxy_set_header X-Forwarded-Forproxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST remote_addr;
proxy_set_header Upgradehttp_upgrade;
proxy_set_header Connection connection_upgrade;
add_header X-Cacheupstream_cache_status;
#Set Nginx Cache
add_header Cache-Control no-cache;
}
#PROXY-END/
然后,清理浏览器缓存,再次打开反代网站的时候就可以正常显示了。
公开
要想公开,安全肯定是第一位的。因为在code-server当中,我们可以直接调用bash,所以用root账号运行肯定是不安全的。
所以,我们要新建一个账号,然后用新建的账号来运行code-server,这样在调用bash的时候就没有root权限了。
要注意的是,使用新账号运行code-sevrer的时候,配置文件要记得重新修改啊!
后台运行
我在cloudreve这篇文章中说过一个插件叫supervisor。通过宝塔的supervisor,我们可以很方便地运行后台任务,比nohup
要强上许多。
建议同学们在运行code-server的时候还是新建一个非root账号,这样万一打rm的时候手滑也没有很大损失。
我是这么配置的,新用户名为code:
结束
经过上面一番折腾之后,我们终于可以在iPad上优雅地撸代码了。不过这里说一句,我们购买的服务器普遍配置不是很高,比如我这一台就是
./+o+- root@Stephen-US-Server
yyyyy- -yyyyyy+ OS: Ubuntu 20.04 focal
://+//////-yyyyyyo Kernel: x86_64 Linux 5.4.0-84-generic
.++ .:/++++++/-.+sss/` Uptime: 103d 4h 51m
.:++o: /++++++++/:--:/- Packages: 967
o:+o+:++.`..```.-/oo+++++/ Shell: bash 5.0.17
.:+o:+o/. `+sssoo+/ Disk: **G / **G (**%)
.++/+:+oo+o:` /sssooo. CPU: Intel Xeon E5-2697 v2 @ 2.7GHz
/+++//+:`oo+o /::--:. GPU: Cirrus Logic GD 5446
\+/+o+++`o++o ++////. RAM: ***MiB / ***MiB
.++.o+++oo+:` /dddhhh.
.+.o+oo:. `oddhhhh+
\+.++o+o``-````.:ohdhhhhh+
`:o+++ `ohhhhhhhhyo++os:
.o:`.syhhhhhhh/.oo++o`
/osyyyyyyo++ooo+++/
````` +oo+++o\:
`oo++.
还是单核的。这注定在编译的时候速度会非常非常慢。所以,应急可以,但是当主力机就憋想了!
回复 Stephen Zeng 取消回复