电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

利用VSCode進行遠程Linux服務器、容器開發,達到ide開發項目的效果(最新推薦)

瀏覽:18日期:2023-03-07 14:40:41
目錄
  • 0 本地ide式開發
    • 1.0 局域網下遠程終端開發
    • 1.1 局域網下遠程ide式開發
    • 1.2 公網下遠程ide式開發
  • 1、購買一個阿里云服務器
    • 2、阿里云服務器終端內
      • 2.1、先開放端口
      • 2.2、接下來配置frp
      • 2.3、設置自啟動
    • 3、內網linux服務器配置
      • 4、Win端ssh連接中介
        • 4.1 局域網下遠程容器的ide式開發
        • 4.2 公網下遠程容器的ide式開發

      本文將介紹“局域網下遠程ide式開發”、“公網下遠程ide式開發”、“局域網下遠程容器的ide式開發”、“公網下遠程容器的ide式開發”這四種開發流程,讓你無論在工位上還是在家中,都可以像打開本地ide那樣進行遠程的項目開發。

      0 本地ide式開發

      最方便、最開始的開發方式當然是在本地ide中,比如初學者在Windows電腦上使用pycharm來學習python、深度學習,或者使用devc++、visual studio等來編寫c++項目。在本地ide中,可以瀏覽文件夾、查看文本和圖片等,進一步還可以運行調試python、C++等項目。這樣的開發過程稱為“ide式開發”,初學者會覺得這些都是理所當然的。

      1.0 局域網下遠程終端開發

      但是隨著能力的提升、需求的擴大,我們需要使用Linux系統來進行開發,甚至是純服務器形式的linux,連顯示屏都沒有。此時我們會初步接觸ssh,連上linux服務器的終端,然后通過敲命令的方式來執行一些程序的運行,查看結果。注意只連終端是不可能進行代碼編寫、調試等步驟的,更別說看圖片啥的。此時的做法應為在本地機寫好代碼,再通過ftp傳輸到服務器上運行。不過這也算入門linux中的項目開發了。

      1.1 局域網下遠程ide式開發

      但是這種方式太low了,就不能實現windows里ide式開發的效果嗎?可以的!借助強大的vscode的remote-ssh插件,同樣是ssh連接服務器的22端口,卻可以實現ide式開發,這樣就可以愉快的點來點去和調試代碼了。想實現這個功能請搜索“vscode遠程連接linux”,或“vscode remote-ssh連接linux”等教程。

      在這個環節,我們應該對ssh的原理、公鑰私鑰的概念與使用有所了解,還需要了解sshd_config中各項配置的含義。

      1.2 公網下遠程ide式開發

      再進一步,我們會有居家辦公的需求,比如現在疫情比較頻繁,在家里沒有了公司wifi,脫離了局域網環境,我們是無法像以前那樣連接linux服務器的,因為ip是內網中的,而我們處在家中的話還去連那個ip,肯定就不對了。此時需要借助“端口轉發”,或者說“內網穿透”工具來把處在公司內網的linux服務器的22端口暴露在公網環境中。對于計算機網絡不太好的同學來說不論是理解還是實現這一功能都是比較困難的。

      所謂內網穿透,就是借助處在公網中的服務器作為中介,讓公司的linux服務器和家里的windows電腦都連接上公網服務器,windows向中介發送“sudo apt install vim”命令,中介就把這句話轉發給公司linux服務器,公司linux服務器就會執行這個命令,然后返回“successfully installed vim.”信息給中介,然后中介再把這條信息傳遞給windows電腦,于是整體效果就是win端輸入sudo apt install vim,接著顯示successfully installed vim.這就是內網穿透。在內網穿透基礎上,通過vscode的remote-ssh配置一下,就能實現公網下遠程ide式開發。

      內網穿透要注意的細節是比較多的,為了方便大家實現,也為了以后自己在新設備上復現,我做一些詳細的說明。

      整個內網穿透流程如下

      在具體實施上,有3個環節要做:
      1、購買并設置好擁有公網ip的阿里云服務器,在控制臺的安全組中(并非在服務器內部,而是在阿里云控制臺中)開放相應端口
      2、在阿里云服務器上安裝ssh, 安裝frp,完成frps.ini的配置,開啟防火墻,開放相應端口,frps服務添加至自啟動并開啟
      3、在公司內網服務器上安裝frp,完成frpc.ini的配置,開放相應端口,開啟ssh,frpc服務添加至自啟動并開啟。
      具體說明:

      1、購買一個阿里云服務器

      我買的是1核2g cpu,1Mbps帶寬,100G容量的ecs.n4.small服務器,1年84元,服務器會提供一個公網ip(無論在哪個網絡環境下都可以憑借公網ip訪問云服務器,假設此ip為89.67.45.200)。在阿里云控制臺的安全組的出和入里面添加服務端的反向代理監聽端口(7000),映射端口(6000),為了后續的別的設備的端口轉發,可以多開幾個端口
      ?

      2、阿里云服務器終端內

      2.1、先開放端口

      具體可參考這里

      apt install openssh-serversystemctl start firewalldfirewall-cmd --add-port=7000/tcp --permanentfirewall-cmd --add-port=6000/tcp --permanentfirewall-cmd --add-port=6001/tcp --permanentfirewall-cmd --reload

      2.2、接下來配置frp

      mkdir /root/apps && cd /root/appswget https://github.com/fatedier/frp/releases/download/v0.34.3/frp_0.34.3_linux_amd64.tar.gztar -xvf frp_0.34.3_linux_amd64.tar.gzcd frp_0.34.3_linux_amd64

      將frps.ini內容改為

      [common]bind_addr = 0.0.0.0bind_port = 7000token = 1234

      frps表示server端的frp,同理frpc表示client端的frp。
      其中bind_port表示監聽端口。一個中介服務器可以同時完成多個設備的端口轉發,但是監聽端口只能有一個。
      token表示密碼,別的設備想讓中介轉發端口,得有這個密碼

      2.3、設置自啟動

      將sysytemd下的frps.service內容改為

      [Unit]Description=Frp Server ServiceAfter=network.target[Service]Restart=on-failureRestartSec=5sExecStart=/root/apps/frp_0.34.3_linux_amd64/frps -c /root/apps/frp_0.34.3_linux_amd64/frps.ini[Install]WantedBy=multi-user.target

      然后執行

      cp ./systemd/frps.service /etc/systemd/system/systemctl daemon-reloadsystemctl enable frpssystemctl start frps

      這樣的話中介就配置好了

      3、內網linux服務器配置

      apt install openssh-servermkdir /home/user/apps && cd /home/user/appswget https://github.com/fatedier/frp/releases/download/v0.34.3/frp_0.34.3_linux_amd64.tar.gztar -xvf frp_0.34.3_linux_amd64.tar.gzcd frp_0.34.3_linux_amd64

      將frpc.ini內容改為

      [common]server_addr = 89.67.45.200server_port = 7000token=1234[linux_in_company]type = tcplocal_ip = 127.0.0.1local_port = 22remote_port = 6000

      server_addr表示中介的公網ip,server_port 是中介的監聽端口,linux_in_company是這臺linux服務器在中介那里的命名,如果有多個設備要用中介來轉發端口,這個命名不可以重復
      local_port 表示Linux服務器中要轉發出去的端口,22表示終端
      remote_port 是中介上的映射端口。win電腦訪問中介的6000端口就能起到訪問Linux服務器22端口的效果
      然后做自啟動,修改systemd下的frpc.service

      [Unit]Description=Frp Client ServiceAfter=network.targetWants=network.target[Service]Restart=on-failureRestartSec=5sExecStart=/home/user/apps/frp_0.34.3_linux_amd64/frpc -c /home/user/apps/frp_0.34.3_linux_amd64/frpc.iniExecReload=/home/user/apps/frp_0.34.3_linux_amd64/frpc reload -c /home/user/apps/frp_0.34.3_linux_amd64/frpc.ini[Install]WantedBy=multi-user.target

      cp ./systemd/frpc.service /etc/systemd/system/systemctl daemon-reloadsystemctl enable frpcsystemctl start frpc

      4、Win端ssh連接中介

      到這一步就很簡單了。
      ssh user@89.67.45.200 -p 6000即可,想登root就改成ssh root@89.67.45.200 -p 6000,后面相應的輸root的密碼即可。有時記得sudo的密碼卻忘了su的密碼咋整?sudo passwd root重置root密碼即可
      此外,還可以通過密鑰對來進行免密登陸,這里不做贅述

      4.1 局域網下遠程容器的ide式開發

      隨著能力的進一步提升,我們不得不面臨越來越困難、復雜的環境配置過程,比如cuda,tesnorrt的安裝與更換版本等。很多時候,目的是C,但是為了做C要先把A和B這兩個配置環境的環節給踩一遍,隨著這種情況的增多,我們就會發現原先簡單的linux服務器變得越來越龐大復雜,里面配置了各種各樣的環境,復雜到,嘗試更新顯卡驅動失敗了,導致很多東西都得跟著完蛋,最后連pytorch模型都跑不起來。
      所以,我們直接在服務器本體上進行各種環境的配置與項目的開發有兩個缺點:其一是耗時間,有的東西的確沒必要搞這么清楚,如果有現成的直接用當然最好;其二是環境間容易相互影響產生依賴,一個出問題了其他都得完蛋。
      在這種問題的驅動下,容器內的項目開發流程應運而生:我們打開Linux服務器,并不直接在其上面進行環境配置與代碼編寫調試,而是再在linux中創建容器并進入,在容器中去進行開發。一進容器,各種需要的環境已經為你準備好了,比如英偉達官方的pytorch容器,里面就配好了cuda,cudnn,pytorch,tensorrt等等,這就為我們節省了大量寶貴的時間。再者,在容器里面不管你怎么折騰,只要別把掛載文件夾里的東西亂刪,那都沒事,絲毫不影響容器外部的linux服務器。不小心把容器搞壞了,再run一個,一切照常。
      而想要實現遠程容器的ide式開發也很簡單,只要在創建容器時增加端口映射即可,比如docker run … -p 6666:22 …,然后在容器中安裝好ssh,開啟服務,這樣的話訪問linux服務器(稱為host)中的6666端口就等同于訪問容器的22端口了。
      所以只需把“1.1 局域網下遠程ide式開發”中的ssh指令的用戶名改為root,端口改為6666,即可在vscode中通過局域網來實現遠程容器的ide式開發。

      4.2 公網下遠程容器的ide式開發

      有了“1.2 公網下遠程ide式開發”和“2.1 局域網下遠程容器的ide式開發”的基礎,公網下遠程容器的ide式開發就變得非常簡單:在公司linux服務器中的frpc.ini中增加一個端口轉發請求,把6666端口轉發到中介的6001端口,這樣的話ssh root@89.67.45.200 -p 6001就會先轉到linux服務器的6666端口,再轉到容器的22端口,成功在家中進行公司服務器中容器的ide開發

      不過要注意,ssh連之前要先在linux服務器中運行該容器,并通過/etc/init.d/ssh start開啟ssh服務。這個環節可以使用容器的初始腳本來完成,首先在linux服務器上找個地方寫一個腳本~/code/start.sh

      #! /bin/bashif [ -f "/etc/init.d/ssh" ]; then    echo "ssh OK"    /etc/init.d/ssh startelse    echo "ssh not installed. Start intallation."    /code/install_ssh.shfi/bin/bash

      然后chmod 777 ~/code/start.sh

      其中安裝ssh的腳本如下,沒個容器情況不同,所以僅供參考

      #! /bin/bashcd /echo -e "deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse\ndeb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse\ndeb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse\ndeb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse\ndeb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse\ndeb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse\ndeb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse\ndeb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse\ndeb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse\ndeb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse\n" >> sources.listcp sources.list /etc/apt/sources.listapt updateapt install -y --allow-downgrades openssh-client=1:7.2p2-4ubuntu2.10apt install -y openssh-serverecho "ssh installed. Now you need to configure it."

      然后chmod 777 ~/code/install_ssh.sh

      接下來創建容器!

      docker run --gpus all -it -p 6666:22 --name trt -v ~/code:/code nvcr.io/nvidia/tensorrt:21.10-py3 /bin/bash /code/start.sh

      我來詳細解讀一下這條指令:

      run就是從鏡像創建容器,–gpus all就是把host的所有gpu都開放使用權利,-it就是以交互模式運行容器并為其分配一個終端命令行,-p 6666:22就是把容器的終端端口22映射到host的6666端口,–name trt就是給這個容器命名為trt,-v ~ /code:/code就是把host的~/code文件夾掛載到容器中的/code文件夾。nvcr.io/nvidia/tensorrt:21.10-py3就是鏡像的名字,/bin/bash /code/start.sh表示一創建容器就用bash執行這條start.sh腳本,而且start.sh腳本末尾還有一行“/bin/bash”就是說執行完安裝或開啟ssh腳本后,執行bash,留著終端這個程序,不然容器會自動退出。

      這樣就可以做到一開啟容器,就能自動開啟ssh啦

      到此這篇關于利用VSCode進行遠程Linux服務器、容器開發,達到ide開發項目的效果的文章就介紹到這了,更多相關VSCode遠程Linux服務器開發內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

      標簽: Linux Apache
      主站蜘蛛池模板: 热处理炉-退火炉-回火炉设备厂家-丹阳市电炉厂有限公司 | 壹车网 | 第一时间提供新车_资讯_报价_图片_排行! | 压力控制器,差压控制器,温度控制器,防爆压力控制器,防爆温度控制器,防爆差压控制器-常州天利智能控制股份有限公司 | 蒸汽热收缩机_蒸汽发生器_塑封机_包膜机_封切收缩机_热收缩包装机_真空机_全自动打包机_捆扎机_封箱机-东莞市中堡智能科技有限公司 | 【连江县榕彩涂料有限公司】官方网站| 深圳标识制作公司-标识标牌厂家-深圳广告标识制作-玟璟广告-深圳市玟璟广告有限公司 | 筛分机|振动筛分机|气流筛分机|筛分机厂家-新乡市大汉振动机械有限公司 | 消防设施操作员考试报名时间,报名入口,报考条件 | GEDORE扭力螺丝刀-GORDON防静电刷-CHEMTRONICS吸锡线-上海卓君电子有限公司 | 武汉高低温试验机-现货恒温恒湿试验箱-高低温湿热交变箱价格-湖北高天试验设备 | 河南橡胶接头厂家,河南波纹补偿器厂家,河南可曲挠橡胶软连接,河南套筒补偿器厂家-河南正大阀门 | 超声波清洗机-超声波清洗设备定制生产厂家 - 深圳市冠博科技实业有限公司 | 微水泥_硅藻泥_艺术涂料_艺术漆_艺术漆加盟-青岛泥之韵环保壁材 武汉EPS线条_EPS装饰线条_EPS构件_湖北博欧EPS线条厂家 | 注塑模具_塑料模具_塑胶模具_范仕达【官网】_东莞模具设计与制造加工厂家 | 蓄电池回收,ups电池后备电源回收,铅酸蓄电池回收,机房电源回收-广州益夫铅酸电池回收公司 | POS机办理_个人POS机免费领取 - 银联POS机申请首页 | 网优资讯-为循环资源、大宗商品、工业服务提供资讯与行情分析的数据服务平台 | 滚筒烘干机_转筒烘干机_滚筒干燥机_转筒干燥机_回转烘干机_回转干燥机-设备生产厂家 | 自动化改造_智虎机器人_灌装机_贴标机-上海圣起包装机械 | TMT观察网_独特视角观察TMT行业 派财经_聚焦数字经济内容服务平台 | 磨煤机配件-高铬辊套-高铬衬板-立磨辊套-盐山县宏润电力设备有限公司 | 铣刨料沥青破碎机-沥青再生料设备-RAP热再生混合料破碎筛分设备 -江苏锡宝重工 | 液晶拼接屏厂家_拼接屏品牌_拼接屏价格_监控大屏—北京维康 | 机床主轴维修|刀塔维修|C轴维修-常州翔高精密机械有限公司 | 全温恒温摇床-水浴气浴恒温摇床-光照恒温培养摇床-常州金坛精达仪器制造有限公司 | 精密机械零件加工_CNC加工_精密加工_数控车床加工_精密机械加工_机械零部件加工厂 | 扫地车厂家-山西洗地机-太原电动扫地车「大同朔州吕梁晋中忻州长治晋城洗地机」山西锦力环保科技有限公司 | 奥运星-汽车性能网评-提供个性化汽车资讯 | 深圳激光打标机_激光打标机_激光焊接机_激光切割机_同体激光打标机-深圳市创想激光科技有限公司 深圳快餐店设计-餐饮设计公司-餐饮空间品牌全案设计-深圳市勤蜂装饰工程 | 潜水搅拌机-双曲面搅拌机-潜水推进器|奥伯尔环保 | 塑料瓶罐_食品塑料瓶_保健品塑料瓶_调味品塑料瓶–东莞市富慷塑料制品有限公司 | 振动时效_振动时效仪_超声波冲击设备-济南驰奥机电设备有限公司 北京宣传片拍摄_产品宣传片拍摄_宣传片制作公司-现像传媒 | 济南货架定做_仓储货架生产厂_重型货架厂_仓库货架批发_济南启力仓储设备有限公司 | 真空搅拌机-行星搅拌机-双行星动力混合机-广州市番禺区源创化工设备厂 | 编织人生 - 权威手工编织网站,编织爱好者学习毛衣编织的门户网站,织毛衣就上编织人生网-编织人生 | 电销卡 防封电销卡 不封号电销卡 电话销售卡 白名单电销卡 电销系统 外呼系统 | 螺旋压榨机-刮泥机-潜水搅拌机-电动泥斗-潜水推流器-南京格林兰环保设备有限公司 | 河南中整光饰机械有限公司-抛光机,去毛刺抛光机,精密镜面抛光机,全自动抛光机械设备 | 水上浮桥-游艇码头-浮动码头-游船码头-码瑞纳游艇码头工程 | 商标转让-购买商标专业|放心的商标交易网-蜀易标商标网 | 玻璃钢型材-玻璃钢风管-玻璃钢管道,生产厂家-[江苏欧升玻璃钢制造有限公司] |