安装code-server,并将其制作成为app

Yicheng 于 2020-05-15 发布

Ubuntu安装code-server

在docker里面试用了一下code-server以后,发现实在的确是太好用了,于是就改在机器上直接跑了。安装code-server很简单: 先从 github relaese 页面下载最新版本,然后解压到本地目录。 这里我就解压放在了 [~/code-server] 下面。然后随便启动一下看看有什么问题:

PASSWORD="password" ~/code-server/code-server --bind-addr 127.0.0.1:8080

如果是远程机器,最好可以用ssh反代端口: ssh -L 8080:8080 remote_addr 。如果是本地机器,就啥也不用做。

然后打开 http://localhost:8080 就会有: cs-localhost.png 然后注意到了地址栏的右侧有个⊕ 点击一下然后点安装: install-cs-popup.png 于是就得到了一个全屏的 vs-code cs-local.png

设置系统服务,code-server开机自启

在系统服务里面添加一个新的服务文件,这里叫它~code-server.service~

sudo vi /lib/systemd/system/code-server.service

然后修改添加以下内容到文件里面:

[Unit]
Description=code-server

[Service]
User=user
Group=group
Type=simple
Environment=PASSWORD=password
ExecStart=$h/code-server --user-data-dir $h/.local/share/code-server --bind-addr 127.0.0.1:8080
Restart=always

[Install]
WantedBy=multi-user.target

主要的配置在 [Service] 下。具体配置可以看文档systemd.service。这里说明下用到的选项和选项里面的内容:

  1. UserGroup: 配置为自己想要的用户和组,不设置的话会以root用户执行。
  2. Type: simple,系统会简单地运行你提供的命令。
  3. Environment: 环境变量,PASSWORD=password,记得将'password'换成你自己想要用的密码
  4. ExecStart:
    • $h 是用户的home文件夹。
    • --user-data-dir 作为code-server保存配置的文件夹,默认的目录是 $HOME/.local/share/code-server/
    • --bind-addr 绑定地址
  5. Restart: always, 无论exit code或者signal是怎么样的,只要退出了都会重启。

保存好文件以后,可以用下面的命令启动:

sudo systemctl start code-server

然后查看状态:

sudo systemctl status code-server

运行命令以后会得到类似这样的输出:

● code-server.service - code-server
        Loaded: loaded (/lib/systemd/system/code-server.service; enabled; vendor preset: enabled)
        Active: active (running) since Sat 2020-05-16 11:27:08 PDT; 13h ago
    Main PID: 46045 (node)
        Tasks: 169 (limit: 77023)
        Memory: 1.5G
        CGroup: /system.slice/code-server.service
                ├─ 46045 /home/code-server/node /home/code-server/out/node/entry.js --user-data-dir /home/.local/share/code-server --bind-addr 127.0.0.1:8080
                ├─ 46072 /home/code-server/node /home/code-server/out/node/entry.js --user-data-dir /home/.local/share/code-server --bind-addr 127.0.0.1:8080
                ├─ 46087 /home/code-server/node /home/code-server/lib/vscode/out/vs/server/fork
                ├─116898 /home/code-server/node /home/code-server/lib/vscode/out/bootstrap-fork --type=watcherService
                ├─116941 /home/code-server/node /home/code-server/lib/vscode/out/bootstrap-fork --type=extensionHost
                ├─117028 /home/code-server/node /home/.local/share/code-server/extensions/streetsidesoftware.code-spell-checker-1.8.0/server/server.js --node-ipc --clientProcessId=116941
                ├─117077 /home/go/bin/gopls -mode=stdio
                ├─117308 /home/code-server/node /home/code-server/lib/vscode/out/bootstrap-fork --type=watcherService
                ├─117321 /home/code-server/node /home/code-server/lib/vscode/out/bootstrap-fork --type=extensionHost
                ├─117376 /home/code-server/node /home/.local/share/code-server/extensions/streetsidesoftware.code-spell-checker-1.8.0/server/server.js --node-ipc --clientProcessId=117321
                ├─117442 /home/go/bin/gopls -mode=stdio
                ├─118082 /home/code-server/node /home/code-server/lib/vscode/out/bootstrap-fork --type=watcherService
                └─118094 /home/code-server/node /home/code-server/lib/vscode/out/bootstrap-fork --type=extensionHost

May 16 11:27:08 workstation systemd[1]: Started code-server.
May 16 11:27:08 workstation code-server[46072]: info  code-server 3.2.0 fd36a99a4c78669970ebc4eb05768293b657716f
May 16 11:27:08 workstation code-server[46072]: info  HTTP server listening on http://127.0.0.1:8080
May 16 11:27:08 workstation code-server[46072]: info    - Using custom password for authentication
May 16 11:27:08 workstation code-server[46072]: info    - Not serving HTTPS
May 16 11:27:08 workstation code-server[46072]: info  Automatic updates are enabled

如果看上去没有什么错误的话,可以enable,这样每次开机,系统就会自动的运行code-server

sudo systemctl enable code-server

配置Nginx反代

通过https将code-server服务安全地暴露在外网。

首先,先创建一个新的域名指向服务端,比如,code-server.yicheng.ren。

然后参考我建站的nginx配置:hello-world。在vhost下添加一个新的配置文件:

server {
    listen 443 ssl http2;
    server_name code-server.yicheng.ren;
    ssl_certificate /ssl/yicheng.ren/fullchain.cer;
    ssl_certificate_key /ssl/yicheng.ren/yicheng.ren.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
    ssl_session_cache builtin:1000 shared:SSL:10m;
    location / {
        proxy_pass http://localhost:8080/;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection upgrade;
        proxy_set_header Accept-Encoding gzip;
    }
    access_log  /home/wwwlogs/access.log;
}

这里只定义了监听443端口的HTTPS,在nginx.conf里面已经定义了将所有HTTP流量通过301转发重定向到了HTTPS,确保无论怎么访问都会落在HTTPS端口上。保存重启nginx,访问你的域名,就可以在任何地方打开vs-code啦。比如,在ipad上: cs-ipad.png 妙控键盘还没到手…到时候就可以用ipad写代码了。