[最全操作指南] 在线六个项目全部迁移Linux
(書山有路勤為徑,學海無涯苦作舟)
開源也兩年了,沒想到自己在宣傳.NetCore全棧的時候,也慢慢的做出了幾個產品,畢竟也是一行一行的敲出來的,也是一天一夜的改出來的,希望每個人都能在自己學習中培養自己的踏實,穩健,成熟的品性。
這兩年也是見證著跨平臺和Docker容器化的迅速發展,恰逢這段時間打算找工作(有好的歡迎內推),看到NetCore、Linux、中間件、Docker、微服務的字樣已經出現在了很多求職公司的要求里,我的第一批粉絲中也有很多小伙伴找到了自己的NetCore公司,所以說,臨淵羨魚,不如退而結網,奧里給,現在還不晚。
很多小伙伴也問我,什么時候帶著講一講,玩一玩Docker,甚至是K8S,我只能說,先把基礎打好,把設計模式+DDD+授權認證好好鞏固。這段時間我慢慢的學了學Linux,以前雖然用過,但是用的著實不多,這次趁著Win服務器到期,還不給我優惠券的情況下,果斷拾起來了以前的Linux服務器,把上圖中的六個項目都遷過去,正好也踩踩坑,下邊是完整操作文檔。
1、購買服務器,安裝工具
既然要遷移,肯定需要服務器,我這里使用的是去年雙十一買的CentOS7.6x64位Linux服務器,配置是2C4G5M,當然如果你有錢,可以直接搞Azure,功能強大到飛起,如果是中等開銷,就買個這個配置就行,一年大概1k,節假日有優惠,如果還不行,就新用戶買個低配的吧,我是不建議,因為到最后你肯定會再買再換高配,所以現在沒必要買個低配的。
配置安全組和實例端口
如果是新買的服務器,端口實例還是要開放一些,特別是某里服務器。
我這里圖簡單,都開放了,你自己酌情處理。
安裝連接Linux工具
常見的好幾種:putty、SSHSecureShellClient、RealVNC、MobaXtem
我使用的就是最后一種MobaXtem,挺方便:
2、安裝所有環境依賴與服務組件
因為我的六個項目中,有前端和后端,有守護進程,代理和源代碼管理等等,所以在整個遷移的過程中,需要安裝的東西還是比較多的,【如果你不需要安裝的,可以自行跳過】:
1、安裝.NET Core SDK
https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-package-manager-centos7
這是官網地址,在安裝.NET之前,
將 Microsoft ? ? 包簽名密鑰添加到受信任密鑰列表。
將此存儲庫添加到包管理器。
安裝必需的依賴項。
每臺計算機只需要執行一次此操作。
安裝成功,測試一下版本:
完成!
2、安裝Node 和 npm/cnpm
https://nodejs.org/en/download
你可以本地下載好后,上傳到服務器:
當然,你也可以直接在服務器里下載,解壓和安裝:
cd 到 /home 路徑(可自定義)
下載:
解壓:
設置全局變量:
刷新配置文件:
測試結果:
當然,想要更快,可以使用淘寶的國內鏡像cnpm:
3、安裝Git 源代碼管理
測試結果:
4、安裝 PM2 進程守護
當然,你也可以用系統自帶的systemctl來操作,畢竟沒有界面,而且也不用配置各種服務文件,而且后邊在處理nuxt項目的時候,還是PM2可能更好些。
pm2常用命令記錄
$ pm2 start app.js # 啟動app.js應用程序
$ pm2 start app.js -i 4? ? ? ? # cluster mode 模式啟動4個app.js的應用實例
# 4個應用程序會自動進行負載均衡
$ pm2 start app.js --name="api" # 啟動應用程序并命名為 "api"
$ pm2 start app.js --watch? ? ? # 當文件變化時自動重啟應用
$ pm2 start script.sh? ? ? ? ? # 啟動 bash 腳本
$ pm2 list? ? ? ? ? ? ? ? ? ? ? # 列表 PM2 啟動的所有的應用程序
$ pm2 monit? ? ? ? ? ? ? ? ? ? # 顯示每個應用程序的CPU和內存占用情況
$ pm2 show [app-name]? ? ? ? ? # 顯示應用程序的所有信息
$ pm2 logs? ? ? ? ? ? ? ? ? ? ? # 顯示所有應用程序的日志
$ pm2 logs [app-name]? ? ? ? ? # 顯示指定應用程序的日志
$ pm2 flush? ? ? ? ? ? ? ? ? ? ? ?# 清空所有日志文件
$ pm2 stop all? ? ? ? ? ? ? ? ? # 停止所有的應用程序
$ pm2 stop 0? ? ? ? ? ? ? ? ? ? # 停止 id為 0的指定應用程序
$ pm2 restart all? ? ? ? ? ? ? # 重啟所有應用
$ pm2 reload all? ? ? ? ? ? ? ? # 重啟 cluster mode下的所有應用
$ pm2 gracefulReload all? ? ? ? # Graceful reload all apps in cluster mode
$ pm2 delete all? ? ? ? ? ? ? ? # 關閉并刪除所有應用
$ pm2 delete 0? ? ? ? ? ? ? ? ? # 刪除指定應用 id 0
$ pm2 scale api 10? ? ? ? ? ? ? # 把名字叫api的應用擴展到10個實例
$ pm2 reset [app-name]? ? ? ? ? # 重置重啟數量
$ pm2 startup? ? ? ? ? ? ? ? ? # 創建開機自啟動命令
$ pm2 save? ? ? ? ? ? ? ? ? ? ? # 保存當前應用列表
$ pm2 resurrect? ? ? ? ? ? ? ? # 重新加載保存的應用列表
$ pm2 update? ? ? ? ? ? ? ? ? ? # Save processes, kill PM2 and restore processes
$ pm2 generate? ? ? ? ? ? ? ? ? # Generate a sample json configuration file
5、安裝文檔打包組件 Vuepress
測試:
6、安裝代理服務器 NGINX
啟用和啟動服務:
通過ip地址即可查看對應的歡迎頁。
3、跑通NET Core的源代碼
這里為了更新的更快些,我直接用的碼云的地址(不要老問我是不是和GitHub同步的????)
1、git克隆源代碼
下載好了六個項目,剩下的就是打包發布了,很簡單,先說下三個后端項目:
這里就用Blog.Core舉例子,其他的都一樣:
在項目的根目錄,有一個 `Blog.Core.Publish.Linux.sh` 文件,直接執行這個,就可以打包發布了,其他兩個項目,DDD和Ids4也都有一個,我做這個的目的,就是以后使用Jenkins的時候,直接copy過去就行了(其實我講的東西都是為了以后做鋪墊的)。
只不過執行的時候,可能會提示權限不足,添加上777權限就行了。
然后執行這個這個sh文件,就可以看到創建了一個 .PublishFiles 的文件夾,然后我們cd進去/home/Blog.Core/.PublishFiles/,執行查看是否正常,注意是大小寫的:
,這里要說明下,如果使用Sqlite的話,可能會報錯:
這個問題這幾天會修復。
執行后,發現已經成功了,那接下來就需要在公網上查看是否可行,這個時候就需要Nginx代理了:
2、NGINX 服務代理
進入/etc/nginx/文件夾
修改nginx.conf文件,這里你可以使用 vim ,也可以下載到本地,修改,然后再提交上去,看自己的需要了,反正vim也很簡單,就是那幾個命令:
vim xxx
i
:wq!
如果看不懂,還是下載本地修改吧。
修改的內容如下:
接下來就是重啟Nginx服務,首先可以檢測語法錯誤:
這個時候,如果沒報錯,那恭喜,項目啟動成功了,當然你需要配置自己的域名。
我們返回上一步,啟動Blog.Core.dll服務,就可以在公網查看效果了。
但是如果關閉窗口,那服務就停掉了,我們需要守護一下,上邊我們說到了,官方的也可以,我更喜歡用PM2來進程守護。
3、PM2 進程守護
剛剛我們說到了,我們已經進去了/home/Blog.Core/.PublishFiles/文件夾,通過執行dotnet名利判斷項目可以運行,那接下來我們換一種寫法,守護一下這個進程:
自動出現這個結果,表示我們已經守護成功了,當然我們也可以通過命令來查看,重啟,刪除等等,比如我們以后更新了代碼,然后發布了結果,直接重啟下PM2就行了,比如我們重啟下上邊剛剛創建id=3的進程:
這一列,從圖標上我們也可以看出來,這是重啟次數,如果某一個項目error了,或者服務器重啟了,pm2會幫助我們自動重啟所有的項目服務,保證項目能正常運行,這個可方便多了。
這個時候,我們在外網訪問下,一切正常了,很棒,這就是開放的整體流程:
pull 代碼
publish批處理文件執行發布
dotnet xxx.dll測試發布是否正常
重啟pm2
修改nginx(可選)
重啟nginx(可選)
外網查看
剩下的DDD和Ids4兩個項目,是一模一樣的,不贅述。
4、如何用自帶服務守護進程
這里我不使用這種方式,僅僅是作為內容的擴展和備份:
在/etc/systemd/system 下新建文件文件名以.service結尾,配置內容為:
?
[Unit]Description=blog.core[Service] WorkingDirectory=/home/Blog.Core/.PublishFiles ExecStart=/usr/bin/dotnet/home/Blog.Core/.PublishFiles/Blog.Core.dll Restart=always RestartSec=25 SyslogIdentifier=blog.core User=root Environment=ASPNETCORE_ENVIRONMENT=Production [Install] WantedBy=multi-user.target?
2、寫完配置文件后保存,輸入指令確認服務:
systemctlenable blog.core.service
然后啟動服務? systemctl start blog.core.service
然后查看一下服務狀態:systemctlstatus blog.core
4、跑通Nuxt項目
我們都知道Nuxt.js是一個SSR渲染的Vue框架,所以我們必須要守護這個進程,也是很簡單,和net core有相似之處。
1、下載并打包項目
2、運行項目
如果是服務端渲染的話,需要我們start我們的服務,而不是通過generate的命令,生成dist靜態文件的形式:
這個時候,服務端進程就啟動了,那我們也需要守護他。
3、守護進程
很簡單,還是在當前文件目錄下,執行
是不是和上邊的命令很像。
到這里就守護好了進程:
4、配置Nginx代理轉發
很簡單,肯定都能看得懂,這里服務端的部署就告一段落了,剩下就是很簡單的js前端的部署了。
5、部署Vue.js前端項目
這里就簡單的不能再簡單了,下載好代碼后,
打包生成dist靜態文件,
配置nginx服務代理轉發,
搞定。
重點的就是要進行反向代理,其他的就是簡單的部署一個靜態html頁面而已。
6、難點與結論
其實通過上邊的操作,一般四五個小時肯定能搞定,快的話三個小時就完全能搞定前后端發部署和發布,我幾乎沒有遇到太多的問題,可能得益于NETCore本身就是跨平臺的,雖然以前都是在window服務器運行,但是也有Linux的影子,當然,可能有部分難點:
1、文件大小寫和路徑問題;
2、文件權限問題;
3、net core本地正常,服務器不行的問題(多半是少文件,看日志);
4、nginx代理失敗問題(參考我的就行);
5、多項目聯調問題(不好調,盡量本地沒問題了再提交);
6、等等其他
最后,祝大家學有所成吧。
總結
以上是生活随笔為你收集整理的[最全操作指南] 在线六个项目全部迁移Linux的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Magicodes.IE Csv导入导出
- 下一篇: 【壹刊】Azure AD 保护的 ASP