原文鏈接:https://www.jiangzhuolin.com/4882.html
概要
1、什么是 code server?
code server 是 coder 公司基于微軟開源的 Visual Studio Code 開發的一款產品,
2、code server 的目標是什么?
code server 的目標是為開發者構建一個便捷統一的開發環境,讓開發者能從任意設備、任意位置通過瀏覽器來進行代碼的撰寫,從而免去了常規的 IDE 開發流程中的環境搭建的問題,
3、code server 有哪些優點?
a、環境統一
code server 解決的第一個問題就是跨設備的環境一致性,因為 code server 始終運行在一個遠程的云端環境,因此他的開發環境始終是一致的,不會出現不同平臺或者不同設備運行相同的代碼而出現各種問題的情況,
我相信有不少程式員遇到過類似的問題,比如,同樣的代碼在 MacOS 上運行正常,在 Windows 上運行報錯;或者在同事 A 的電腦上運行正常,而在同事 B 的電腦上運行報錯,
而 code server 解決了這個問題,對于同一個專案的代碼開發,不管是誰,運行代碼的環境都是 code server 所在的服務器環境,這有效的避免的環境不同帶來的問題,讓程式員把精力更多地放在代碼撰寫上,而不是去解決各種平臺切換帶來的問題上,
b、任意設備
有時候,有些程式的運行環境或者調度環境要求較高,需要較高的配置,而較高的配置一般都意味著昂貴以及不那么便攜,相信肯定有人在開發及運行程式時需要使用專門的作業站設備而不是個人電腦,
但如果你剛好有事需要出差或者離開崗位,這時有需要修復一個 BUG 時,你帶上作業站意味著你需要一直背著一個厚重的 10 斤往上的設備,如果你不帶著那么你連修復 BUG 的設備或者環境都沒有,還有人可能使用的是臺式電腦進行開發,這就更加不具備便攜的能力了,
而使用 code server 也能完全避免此類問題,我們的運行環境位于遠程的一個高配置服務器或者云端環境,而我們只需要使用我們的任意帶有瀏覽器的功能連接到網路,打開 code server 的訪問地址,就可以撰寫代碼,
我們可以在手機、平板、電腦等等設備上來進行開發,它更多便攜更加方便,而且不需要我們的設備具有高配置的環境,
c、安全性
有些產品對代碼安全有較高要求,比如需要防止程式員將代碼直接 clone 打包帶走去了競爭公司,這顯然危害巨大,
而 code server 也可以避免這個問題,因為可以把代碼的管理完全只放在 code server 服務器上,程式員不能完整的克隆或者打包完整代碼,每個程式員只能訪問自己開發的部分代碼,這樣有效地使產品安全性有了保障,
4、code server 的缺點?
a、code server 需要網路
雖然目前的網路發展已經非常成熟,不管是寬帶還是移動互聯網都非常方便,但還是不能保證在任何地方都有非常完善的網路環境,如果你沒有完好的網路環境,那么寫代碼本身就變得不可能,
b、操作便捷性
由于是在瀏覽器中進行編輯,因此,部分操作可能無法像在本地的 IDE 中那樣方便,比如各種快捷鍵的使用等,(此處為我體驗后補充,code-server 支持大部分與 vs code 一樣的快捷鍵,而且還根據訪問平臺有不同的適配,比如我使用 MacOS 訪問 code-server,那么快捷鍵就適配了 MacOS 的鍵盤特征,大贊!不過也有少部分的快捷鍵與 vs code 不同,比如新建檔案的快捷鍵 code-server 默認沒有設定,因為它與瀏覽器的默認打開新標簽頁的快捷鍵沖突了)
c、穩定性
由于 code-server 是一個后臺服務行程,所以一旦這個行程由于各種原因 DOWN 了,那么所有人的作業將直接停滯,所以,保證服務的穩定性是一個需要考慮的問題,但我覺得不應該是它的缺點,畢竟它是有解的,
注:以上的這些優缺點僅是本人根據自己的淺顯理解總結而來,難免會有理解錯誤,因此,以上內容僅供參考,也歡迎指正我的錯誤,
5、安裝環境
官方推薦至少需要 1 GB Ram 和 2 cores 的機器,可以是物理機器,虛擬機,各種云環境,作業系統推薦 Linux,同時也支持 MacOS 及 FreeBSD.
本次安裝環境是一臺虛擬機,配置如下:
OS: Ubuntu 18.04.1
CPU: 4 cores
Memory: 16 GB Ram
Softwares: curl 7.58.0,code-server 3.5.0
安裝步驟
官方提供了一個 shell 腳本便于一鍵自動化安裝程序,不過在國內使用體驗還是比較勉強..
1、使用腳本列印安裝程序
官方腳本提供了一個 –dry-run 的引數,使用這個引數會將該安裝腳本安裝 code server 所需要的幾個步驟都列印出來以供參考,這個腳本會檢測你當前的作業系統,并根據不同的作業系統來進行不同的安裝程序,
curl -fsSL <https://code-server.dev/install.sh> | sh -s -- --dry-run
如下示例:
jiangzl@ubuntu:~$ curl -fsSL <https://code-server.dev/install.sh> | sh -s -- --dry-run
Ubuntu 18.04.5 LTS
Installing v3.5.0 deb package from GitHub releases.
+ mkdir -p ~/.cache/code-server
+ curl -#fL -o ~/.cache/code-server/code-server_3.5.0_amd64.deb.incomplete -C - <https://github.com/cdr/code-server/releases/download/v3.5.0/code-server_3.5.0_amd64.deb>
+ mv ~/.cache/code-server/code-server_3.5.0_amd64.deb.incomplete ~/.cache/code-server/code-server_3.5.0_amd64.deb
+ sudo dpkg -i ~/.cache/code-server/code-server_3.5.0_amd64.deb
To have systemd start code-server now and restart on boot:
sudo systemctl enable --now code-server@$USER
Or, if you don't want/need a background service you can run:
code-server
可以看到安裝程序大概分四步:
a、創建一個 code-server 的 cache 目錄
b、從 github 上下載安裝包程式
c、使用 dpkg 安裝下載的安裝包程式
d、啟動服務
注:如果執行此腳本的程序中出現報錯如下,請在當前博客搜索此錯誤查看解決方案
curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused
2、使用腳本安裝
執行如下命令進行安裝
curl -fsSL <https://code-server.dev/install.sh> | sh
如下示例:
jiangzl@ubuntu:~$ curl -fsSL <https://code-server.dev/install.sh> | sh
Ubuntu 18.04.5 LTS
Installing v3.5.0 deb package from GitHub releases.
+ mkdir -p ~/.cache/code-server
+ curl -#fL -o ~/.cache/code-server/code-server_3.5.0_amd64.deb.incomplete -C - <https://github.com/cdr/code-server/releases/download/v3.5.0/code-server_3.5.0_amd64.deb>
0.1%-#O#- # #
下載程序可能需要一定時間… 沒辦法.
3、使用安裝包進行安裝
- 下載安裝包
如果你使用腳本安裝不方便或者太慢,也可以嘗試下載該軟體包然后離線安裝,
注意,離線安裝的方式需要你根據你要安裝的環境選擇對應平臺及版本的安裝包,比如,Ubuntu 使用 .deb 的包安裝 3.5.0 版本,則下載如下安裝包:
<https://github.com/cdr/code-server/releases/download/v3.5.0/code-server_3.5.0_amd64.deb>
github 各版本下載地址:
<https://github.com/cdr/code-server/releases>
v3.5.0 .deb 安裝包百度網盤地址:
鏈接: <https://pan.baidu.com/s/1thjmIDY2onWaf3OyxCHGWA> 密碼: 9bf4
- 安裝
執行如下命令進行安裝
sudo dpkg -i ${file_path}/code-server_3.5.0_amd64.deb
其中 ${file_path} 表示你的軟體包下載存放的目錄,需要替換成自己的軟體包所有的目錄,
如下示例
jiangzl@ubuntu:~$ pwd
/home/jiangzl
jiangzl@ubuntu:~$ ls
code-server_3.5.0_amd64.deb Desktop Documents Downloads elk examples.desktop Music Pictures Public Templates Videos
jiangzl@ubuntu:~$ sudo dpkg -i ~/code-server_3.5.0_amd64.deb
[sudo] password for jiangzl:
Selecting previously unselected package code-server.
(Reading database ... 169777 files and directories currently installed.)
Preparing to unpack .../code-server_3.5.0_amd64.deb ...
Unpacking code-server (3.5.0) ...
Setting up code-server (3.5.0) ...
到此即安裝完成,可以說安裝還是非常方便的,
4、運行 code server
由于 code server 是一個遠程服務,因此,它需要運行一個行程并監聽一個埠
如下示例:
jiangzl@ubuntu:~$ code-server
[2020-09-06T17:19:35.484Z] info Wrote default config file to ~/.config/code-server/config.yaml
[2020-09-06T17:19:35.486Z] info Using config file ~/.config/code-server/config.yaml
[2020-09-06T17:19:35.637Z] info Using user-data-dir ~/.local/share/code-server
[2020-09-06T17:19:35.640Z] info code-server 3.5.0 de41646fc402b968ca6d555fdf2da7de9554d28a
[2020-09-06T17:19:35.643Z] info HTTP server listening on <http://127.0.0.1:8080>
[2020-09-06T17:19:35.643Z] info - Using password from ~/.config/code-server/config.yaml
[2020-09-06T17:19:35.643Z] info - To disable use `--auth none`
[2020-09-06T17:19:35.643Z] info - Not serving HTTPS
從上面可以看到,code-server 運行并監聽了本地的 8080 埠,此時,我們能從 code-server 運行的服務器本地瀏覽器訪問到 code-server 服務,但還不能從其他設備訪問到 code-server 服務,

這是因為 code-server 服務默認系結到 127.0.0.1:8080,如果我們想遠程遠程 code-server 服務應該怎么做呢?
很簡單,我們只需要給 code-server 運行命令傳入如下引數即可:
jiangzl@ubuntu:~$ code-server --bind-addr=0.0.0.0:8080
[2020-09-06T17:28:22.822Z] info Using config file ~/.config/code-server/config.yaml
[2020-09-06T17:28:22.964Z] info Using user-data-dir ~/.local/share/code-server
[2020-09-06T17:28:22.967Z] info code-server 3.5.0 de41646fc402b968ca6d555fdf2da7de9554d28a
[2020-09-06T17:28:22.970Z] info HTTP server listening on <http://0.0.0.0:8080>
[2020-09-06T17:28:22.970Z] info - Using password from ~/.config/code-server/config.yaml
[2020-09-06T17:28:22.970Z] info - To disable use `--auth none`
[2020-09-06T17:28:22.970Z] info - Not serving HTTPS
code-server 可使用引數可參考附錄部分,
注:通過命令列引數來配置 code-server 的運行挺方便但不是特別推薦,因為如果我們需要在生產環境部署,可能有很多的配置項,全部都通過命令列來傳參控制運行顯示比較亂而且不方便管理,建議通過組態檔來進行配置和管理,具體方法請參考下文部分,
配置體驗
1、配置遠程可訪問
code-server 的組態檔默認是在 ~/.config/code-server/config.yaml,當我們使用 code-server 命令默認運行之后就會生成一個位于當前用戶 home 目錄下的 .config/code-server 目錄下的 config.yaml 組態檔,
如下示例:
jiangzl@ubuntu:~/.config/code-server$ pwd
/home/jiangzl/.config/code-server
jiangzl@ubuntu:~/.config/code-server$ cat config.yaml
bind-addr: 127.0.0.1:8080
auth: password
password: this is a password
cert: false
可以看到 bind-addr 是 127.0.0.1:8080,auth 是 password 方式,password 則生產了默認的,cert 表示未使用 ssl 連接,
這里我們需要 code-server 可以被遠程訪問,我們只需要將組態檔改為如下的內容:
bind-addr: 0.0.0.0:8080
auth: password
password: this is a password
cert: false

保存退出,再使用 code-server 運行試試
jiangzl@ubuntu:~$ code-server
[2020-09-06T17:40:14.656Z] info Using config file ~/.config/code-server/config.yaml
[2020-09-06T17:40:14.800Z] info Using user-data-dir ~/.local/share/code-server
[2020-09-06T17:40:14.803Z] info code-server 3.5.0 de41646fc402b968ca6d555fdf2da7de9554d28a
[2020-09-06T17:40:14.805Z] info HTTP server listening on <http://0.0.0.0:8080>
[2020-09-06T17:40:14.805Z] info - Using password from ~/.config/code-server/config.yaml
[2020-09-06T17:40:14.805Z] info - To disable use `--auth none`
[2020-09-06T17:40:14.806Z] info - Not serving HTTPS
注:如果你不想先運行一次 code-server 生成默認組態檔,也可以手動創建一個 ~/.config/code-server 目錄并創建 config.yaml 檔案,并加入配置內容即可,
如下示例:
mkdir -p ~/.config/code-server
cd ~/.config/code-server
vim config.yaml
2、配置系統管理行程
在命令列執行如下命令進行系統服務管理注冊
sudo systemctl enable --now code-server@$USER
如下示例
jiangzl@ubuntu:~/.config/code-server$ sudo systemctl enable --now code-server@$USER
[sudo] password for jiangzl:
Created symlink /etc/systemd/system/default.target.wants/code-server@jiangzl.service → /usr/lib/systemd/system/code-server@.service.
然后,就可以使用如下命令來管理 code-server 的服務了
jiangzl@ubuntu:~/.config/code-server$ sudo systemctl status code-server@$USER
● code-server@jiangzl.service - code-server
Loaded: loaded (/usr/lib/systemd/system/code-server@.service; indirect; vendor preset: enabled)
Active: failed (Result: exit-code) since Sun 2020-09-06 10:58:23 PDT; 2min 54s ago
Process: 125534 ExecStart=/usr/bin/code-server (code=exited, status=1/FAILURE)
Main PID: 125534 (code=exited, status=1/FAILURE)
Sep 06 10:58:23 ubuntu systemd[1]: code-server@jiangzl.service: Service hold-off time over, scheduling restart.
Sep 06 10:58:23 ubuntu systemd[1]: code-server@jiangzl.service: Scheduled restart job, restart counter is at 5.
Sep 06 10:58:23 ubuntu systemd[1]: Stopped code-server.
Sep 06 10:58:23 ubuntu systemd[1]: code-server@jiangzl.service: Start request repeated too quickly.
Sep 06 10:58:23 ubuntu systemd[1]: code-server@jiangzl.service: Failed with result 'exit-code'.
Sep 06 10:58:23 ubuntu systemd[1]: Failed to start code-server.
jiangzl@ubuntu:~/.config/code-server$ sudo systemctl status code-server@$USER
● code-server@jiangzl.service - code-server
Loaded: loaded (/usr/lib/systemd/system/code-server@.service; indirect; vendor preset: enabled)
Active: active (running) since Sun 2020-09-06 11:02:16 PDT; 1min 24s ago
Main PID: 126156 (node)
Tasks: 22 (limit: 19127)
CGroup: /system.slice/system-code\\x2dserver.slice/code-server@jiangzl.service
├─126156 /usr/lib/code-server/lib/node /usr/lib/code-server
└─126174 /usr/lib/code-server/lib/node /usr/lib/code-server
Sep 06 11:02:16 ubuntu code-server[126156]: [2020-09-06T18:02:16.866Z] warn discarding socket connection: vscode is not running
Sep 06 11:02:16 ubuntu code-server[126156]: [2020-09-06T18:02:16.882Z] warn discarding socket connection: vscode is not running
Sep 06 11:02:36 ubuntu code-server[126156]: [2020-09-06T18:02:36.936Z] warn discarding socket connection: vscode is not running
Sep 06 11:02:36 ubuntu code-server[126156]: [2020-09-06T18:02:36.953Z] warn discarding socket connection: vscode is not running
Sep 06 11:02:57 ubuntu code-server[126156]: [2020-09-06T18:02:57.000Z] warn discarding socket connection: vscode is not running
Sep 06 11:02:57 ubuntu code-server[126156]: [2020-09-06T18:02:57.015Z] warn discarding socket connection: vscode is not running
Sep 06 11:03:17 ubuntu code-server[126156]: [2020-09-06T18:03:17.082Z] warn discarding socket connection: vscode is not running
Sep 06 11:03:17 ubuntu code-server[126156]: [2020-09-06T18:03:17.100Z] warn discarding socket connection: vscode is not running
Sep 06 11:03:37 ubuntu code-server[126156]: [2020-09-06T18:03:37.150Z] warn discarding socket connection: vscode is not running
Sep 06 11:03:37 ubuntu code-server[126156]: [2020-09-06T18:03:37.169Z] warn discarding socket connection: vscode is not running
常用命令
sudo systemctl status code-server@$USER # 查看 code-server 行程狀態
sudo systemctl start code-server@$USER # 啟動 code-server 行程
sudo systemctl stop code-server@$USER # 停止 code-server 行程
sudo systemctl restart code-server@$USER # 重啟 code-server 行程
3、遠程訪問
我從局域網內的另一臺設備訪問 code-server 服務,出現如下頁面,表示訪問成功,

密碼是 ~/.config/code-server/config.yaml 檔案中生成的,從檔案中拷貝密碼然后輸入并提交,出現如下的界面,啊,是不是有內味兒了…

注:
1、密碼是 32 位的加密密文,請自行妥善保存,將用于安全認證,你也可以自己生產密文并在組態檔中進行配置,
2、右下解的通知訊息可得知,如果是非 SSL 的方式,則 code-server 的功能將有部分限制,這也是安全性的考慮,

4、hello-world 初體驗
這里以寫一個 python hello word 來進行初體驗,
a、安裝 python 擴展

b、創建一個 hello-world.py 檔案

按 command + s (MacOS)保存檔案,可以看到保存檔案的位置是在遠程的服務器上,
c、撰寫代碼
在代碼編輯區撰寫如下代碼
# -*- coding:utf8 -*-
print('hello world!')
d、運行代碼
右鍵編輯區,選擇 “Run Python File in Terminal”,即可看到在下方的 TERMINAL 視窗輸出了 hello world!

總結
1、個人初體驗的感覺是非常棒的,code-server 做到了非常貼近原生 vs code IDE 的使用體驗,而這一切你只需要在瀏覽器上就可以完成,它真的是非常非常的酷!!!
2、如果你是個人使用,只是為了給自己提供一個方便的可遠程訪問的開發環境,那么你可以配合內網穿透來實作外網訪問,IT’S SO COOOOOL! TRY IT!
比如,下面是我通過我的 ipad 上的 Chrome 瀏覽器訪問 code-server 并運行我剛才創建的 hello-world.py 程式的截圖,是不是非常的棒呢!

3、如果你是企業級的使用,強烈推薦使用 SSL 配置,這是安全性上必不可少的一環!
附錄
參考:
<https://github.com/cdr/code-server/blob/v3.5.0/doc/guide.md>
code-server 命令:
jiangzl@ubuntu:~$ code-server --help
[2020-09-06T17:21:43.124Z] info Using config file ~/.config/code-server/config.yaml
code-server 3.5.0 de41646fc402b968ca6d555fdf2da7de9554d28a
Usage: code-server [options] [path]
Options
--auth The type of authentication to use. [password, none]
--password The password for password authentication (can only be passed in via $PASSWORD or the config file).
--cert Path to certificate. Generated if no path is provided.
--cert-key Path to certificate key when using non-generated cert.
--disable-telemetry Disable telemetry.
-h --help Show this output.
--open Open in browser on startup. Does not work remotely.
--bind-addr Address to bind to in host:port. You can also use $PORT to override the port.
--config Path to yaml config file. Every flag maps directly to a key in the config file.
--socket Path to a socket (bind-addr will be ignored).
-v --version Display version information.
--user-data-dir Path to the user data directory.
--extensions-dir Path to the extensions directory.
--list-extensions List installed VS Code extensions.
--force Avoid prompts when installing VS Code extensions.
--install-extension Install or update a VS Code extension by id or vsix. The identifier of an extension is `${publisher}.${name}`. To install a specific version provide `@${version}`. For example: 'vscode.csharp@1.2.3'.
--enable-proposed-api Enable proposed API features for extensions. Can receive one or more extension IDs to enable individually.
--uninstall-extension Uninstall a VS Code extension by id.
--show-versions Show VS Code extension versions.
--proxy-domain Domain used for proxying ports.
-n --new-window Force to open a new window. (use with open-in)
-r --reuse-window Force to open a file or folder in an already opened window. (use with open-in)
-vvv --verbose Enable verbose logging.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/254011.html
標籤:其他
上一篇:CentOS7 運維 - 磁盤管理與檔案系統 | 超詳細 | 附掛載教程及錯誤排查 | parted超大磁盤磁區教程
