Stephen Horizon
Stephen Horizon

『折腾』如何在iPad上优雅地怼代码

前言

  插头DP的坑等初赛之后再填把。 :lol:

正文

  有时候出门只带了iPad。怎么办?直接打开App Store搜索C++然后下载。不行,这样不够优雅。那怎么办?于是我虎视眈眈地瞅着角落里的safari… :idea:

准备工具

  浏览器又没有g++,所以我们肯定需要准备一台远程计算机(算了就是服务器),装上g++,其实这样就可以直接干活了。但是很明显,直接在SSH上编译依然不是很优雅,所以还需要一点东西。
  所以,这个东西就是code-server,一个在浏览器里面运行的VScode,最后的效果长这样:

https://pro.goforit.top/stephen-zeng/img/master/202109191.png

  这才是优雅!

部署code-server

  去github页面下载code-server,Debian/Ubuntu系下载deb,CentOS/RHEL系下载rpm(这都不用我来教吧) :evil:
https://github.com/cdr/code-server/releases
若有同学因网络问题打不开github,这里直接放出截止2021.9.19的最新版本code-server的下载直联,直接到服务器离线下载即可:

系统下载地址
Debian/Ubuntuhttps://github.com/cdr/code-server/releases/download/v3.12.0/code-server_3.12.0_amd64.deb
CentOS/RHELhttps://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,看到网址后面带上端口号就不高兴。 :cry: 所以带上HTTPS是必不可少的。
  老样子,打开宝塔,新建网站,挂上SSL,挂好反向代理,我是这样填的:

https://pro.goforit.top/stephen-zeng/img/master/202109192.png

  如果你此时打开你的反向代理网站,那么恭喜你,你将看到一片空白。。。其实第一次部署code-server的时候我就是这个地方卡了好久,在不知道过了多长时间之后,我在部署sshwifty的时候看到websocket连接失败的现象,才想到可能code-server的反向代理网页没有和后台websocket服务进行连接,画面当然是空白了!
  解决办法也很简单,在宝塔反向代理中点击配置文件
https://pro.goforit.top/stephen-zeng/img/master/202109193.png

然后在两句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:

https://pro.goforit.top/stephen-zeng/img/master/202109193.png

结束

  经过上面一番折腾之后,我们终于可以在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++.      

还是单核的。这注定在编译的时候速度会非常非常慢。所以,应急可以,但是当主力机就憋想了!

没有标签
首页      未分类      『折腾』如何在iPad上优雅地怼代码

Stephen Zeng

文章作者

发表评论

textsms
account_circle
email

Stephen Horizon

『折腾』如何在iPad上优雅地怼代码
前言   插头DP的坑等初赛之后再填把。 :lol: 正文   有时候出门只带了iPad。怎么办?直接打开App Store搜索C++然后下载。不行,这样不够优雅。那怎么办?于是我虎视眈眈地瞅着角落里的…
扫描二维码继续阅读
2021-09-19