源代码地址:https://github.com/gitpod-io/openvscode-server
源码安装
1. 下载
下载最新的版本
https://github.com/gitpod-io/openvscode-server/releases
备用下载地址:
https://cdn.jansora.com/files/openvscode-server/openvscode-server-v1.75.1-linux-x64.tar.gz
解压安装
tar zxvf openvscode-server-v1.75.1-linux-x64.tar.gz
mkdir -p /data/app
mv openvscode-server-v1.75.1-linux-x64 /data/app/openvscode-server
检查可配置项
root@l1:~/openvscode-server-v1.75.1-linux-x64# ./bin/openvscode-server --help
OpenVSCode Server 1.75.1
Usage: openvscode-server [options]
Options
--host <ip-address> The host name or IP address the server should listen to. If not set,
defaults to 'localhost'.
--port <port | port range> The port the server should listen to. If 0 is passed a random free port
is picked. If a range in the format num-num is passed, a free port from
the range (end inclusive) is selected.
--socket-path <path> The path to a socket file for the server to listen to.
--connection-token <token> A secret that must be included with all requests.
--connection-token-file <path> Path to a file that contains the connection token.
--without-connection-token Run without a connection token. Only use this if the connection is
secured by other means.
--accept-server-license-terms If set, the user accepts the server license terms and the server will be
started without a user prompt.
--server-data-dir Specifies the directory that server data is kept in.
--telemetry-level <level> Sets the initial telemetry level. Valid levels are: 'off', 'crash',
'error' and 'all'. If not specified, the server will send telemetry
until a client connects, it will then use the clients telemetry setting.
Setting this to 'off' is equivalent to --disable-telemetry
--user-data-dir <dir> Specifies the directory that user data is kept in. Can be used to open
multiple distinct instances of Code.
-h --help Print usage.
Troubleshooting
--log <level> Log level to use. Default is 'info'. Allowed values are 'critical', 'error', 'warn',
'info', 'debug', 'trace', 'off'. You can also configure the log level of an extension by
passing extension id and log level in the following format:
'${publisher}.${name}:${logLevel}'. For example: 'vscode.csharp:trace'. Can receive one
or more such entries.
-v --version Print version.
Extensions Management
--extensions-dir <dir> Set the root path for extensions.
--install-extension <ext-id | path> Installs or updates an extension. The argument is either an
extension id or a path to a VSIX. The identifier of an extension is
'${publisher}.${name}'. Use '--force' argument to update to latest
version. To install a specific version provide '@${version}'. For
example: 'vscode.csharp@1.2.3'.
--uninstall-extension <ext-id> Uninstalls an extension.
--list-extensions List the installed extensions.
--show-versions Show versions of installed extensions, when using
--list-extensions.
--category <category> Filters installed extensions by provided category, when using
--list-extensions.
--pre-release Installs the pre-release version of the extension, when using
--install-extension
--start-server Start the server when installing or uninstalling extensions. To be
used in combination with 'install-extension',
'install-builtin-extension' and 'uninstall-extension'.
配置 systemd
编辑 /etc/systemd/system/openvscode-server.service
禁用安全 token. 由外部nginx管理
注意端口冲突
[Unit]
Description=openvscode-server
Documentation=openvscode-server
After=network-online.target
Wants=network-online.target
[Service]
Environment="OCTANT_LISTENER_ADDR=0.0.0.0:7777"
EnvironmentFile=-/etc/default/%p
ExecStart=/data/app/openvscode-server/bin/openvscode-server --port 3000 --host=0.0.0.0 --without-connection-token
ExecStop=/bin/kill -HUP $MAINPID
KillSignal=SIGINT
[Install]
WantedBy=multi-user.target
重新加载 systemd
systemctl daemon-reload
启动
systemctl start openvscode-server.service
systemctl status openvscode-server.service
检测运行状态
systemctl start openvscode-server.service
systemctl status openvscode-server.service
root@l1:/etc/systemd/system# systemctl start openvscode-server.service
root@l1:/etc/systemd/system# systemctl status openvscode-server.service
● openvscode-server.service - openvscode-server
Loaded: loaded (/etc/systemd/system/openvscode-server.service; disabled; vendor preset: enabled)
Active: active (running) since Tue 2023-02-14 16:42:07 CST; 7s ago
Main PID: 4082036 (sh)
Tasks: 23 (limit: 3987)
Memory: 40.4M
CGroup: /system.slice/openvscode-server.service
├─4082036 sh /data/app/openvscode-server/bin/openvscode-server --port 3000 --host=0.0.0.0 --without-connection-token
├─4082054 /data/app/openvscode-server/node /data/app/openvscode-server/out/server-main.js --port 3000 --host=0.0.0.0 --without-connection-token
└─4082065 /data/app/openvscode-server/node /data/app/openvscode-server/out/bootstrap-fork --type=ptyHost --logsPath /root/.openvscode-server/data/logs/20230214T164207
Feb 14 16:42:07 l1 systemd[1]: Started openvscode-server.
Feb 14 16:42:07 l1 openvscode-server[4082054]: Server bound to 0.0.0.0:3000 (IPv4)
Feb 14 16:42:07 l1 openvscode-server[4082054]: Extension host agent listening on 3000
配置开机启动
systemctl enable openvscode-server.service
集成到 nginx 并启用 https
请自行修改 端口号, https 证书, 自定义域名
vs.conf
upstream vs {
server 127.0.0.1:3000;
}
server {
listen 443 ssl;
server_name sub.example.com;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /etc/nginx/certs/lets-encrypt/sub.example.com.cer;
ssl_certificate_key /etc/nginx/certs/lets-encrypt/sub.example.com.key;
location / {
proxy_pass http://vs;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Accept-Encoding gzip;
}
}
server {
listen 80;
server_name sub.example.com;
return https://sub.example.com$request_uri ;
}