内容简介:(书山有路勤为径,学海无涯苦作舟)
(书山有路勤为径,学海无涯苦作舟)
开源也两年了,没想到自己在宣传.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 包签名密钥添加到受信任密钥列表。
-
将此存储库添加到包管理器。
-
安装必需的依赖项。
每台计算机只需要执行一次此操作。
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
sudo yum install dotnet-sdk-3.1
安装成功,测试一下版本:
dotnet --list-sdks
完成!
2、安装Node 和 npm/cnpm
https://nodejs.org/en/download
你可以本地下载好后,上传到服务器:
当然,你也可以直接在服务器里下载,解压和安装:
cd 到 /home 路径(可自定义)
下载:
wget https://nodejs.org/dist/v12.16.3/node-v12.16.3-linux-x64.tar.xz
解压:
tar -xf node-v12.16.3-linux-x64.tar.xz
设置全局变量:
vim /etc/profile
PATH=$PATH:/home/node-v12.16.3-linux-x64/bin/
刷新配置文件:
source /etc/profile
测试结果:
npm -v
node -v
当然,想要更快,可以使用淘宝的国内镜像cnpm:
npm install -g cnpm --registry=https://registry.npm.taobao.org
3、安装Git 源代码管理
sudo yum -y install git
测试结果:
git --version
4、安装 PM2 进程守护
cnpm install -g 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
cnpm install -g vuepress
测试:
vuepress --version
6、安装代理服务器 NGINX
sudo yum install nginx
启用和启动服务:
sudo systemctl enable nginx
sudo systemctl start nginx
http://118.25.251.113/usr/share/nginx/html
通过ip地址即可查看对应的欢迎页。
3、跑通NET Core的源代码
这里为了更新的更快些,我直接用的码云的地址(不要老问我是不是和GitHub同步的 )
1、git克隆源代码
下载好了六个项目,剩下的就是打包发布了,很简单,先说下三个后端项目:
这里就用Blog.Core举例子,其他的都一样:
在项目的根目录,有一个 `Blog.Core.Publish.Linux.sh` 文件,直接执行这个,就可以打包发布了,其他两个项目,DDD和Ids4也都有一个,我做这个的目的,就是以后使用Jenkins的时候,直接copy过去就行了(其实我讲的东西都是为了以后做铺垫的)。
只不过执行的时候,可能会提示权限不足,添加上777权限就行了。
chmod 777 Blog.Core.Publish.Linux.sh
然后执行这个这个sh文件,就可以看到创建了一个 .PublishFiles 的文件夹,然后我们cd进去 /home/Blog.Core/.PublishFiles/
,执行查看是否正常,注意是大小写的:
dotnet Blog.Core.dll
,这里要说明下,如果使用 Sqlite 的话,可能会报错 :
这个问题这几天会修复。
执行后,发现已经成功了,那接下来就需要在公网上查看是否可行,这个时候就需要Nginx代理了:
2、NGINX 服务代理
进入/etc/nginx/文件夹
修改nginx.conf文件,这里你可以使用 vim ,也可以下载到本地,修改,然后再提交上去,看自己的需要了,反正vim也很简单,就是那几个命令:
vim xxx
i
:wq!
如果看不懂,还是下载本地修改吧。
修改的内容如下:
###### apk begin #######
server {
listen 80;
server_name apk.neters.club;
location / {
root html;
proxy_pass http://localhost:8081;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
index index.html index.htm;
}
location /.doc/ {
proxy_pass http://docs.neters.club/;
}
}
server {
listen 80;
server_name docs.neters.club;
location / {
root /home/Blog.Core/.docs/contents/.vuepress/dist;
index index.html index.htm;
}
}
###### apk end #######
接下来就是重启Nginx服务,首先可以检测语法错误:
nginx -t
nginx -s reload
这个时候,如果没报错,那恭喜,项目启动成功了,当然你需要配置自己的域名。
我们返回上一步,启动Blog.Core.dll服务,就可以在公网查看效果了。
但是如果关闭窗口,那服务就停掉了,我们需要守护一下,上边我们说到了,官方的也可以,我更喜欢用PM2来进程守护。
3、PM2 进程守护
刚刚我们说到了,我们已经进去了/home/Blog.Core/.PublishFiles/文件夹,通过执行dotnet名利判断项目可以运行,那接下来我们换一种写法,守护一下这个进程:
pm2 start "dotnet Blog.Core.dll" --name apk.dll
自动出现这个结果,表示我们已经守护成功了,当然我们也可以通过命令来查看,重启,删除等等,比如我们以后更新了代码,然后发布了结果,直接重启下PM2就行了,比如我们重启下上边刚刚创建id=3的进程:
pm2 restart 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、下载并打包项目
cnpm i
cnpm run build
2、运行项目
如果是服务端渲染的话,需要我们start我们的服务,而不是通过generate的命令,生成dist静态文件的形式:
npm run start
这个时候,服务端进程就启动了,那我们也需要守护他。
3、守护进程
很简单,还是在当前文件目录下,执行
pm2 start npm --name "tibug" -- run start
是不是和上边的命令很像。
到这里就守护好了进程:
4、配置Nginx代理转发
###### tibug begin #######
upstream nodenuxt {
server 127.0.0.1:3089;
keepalive 64;
}
server {
listen 80;
server_name tibug.neters.club;
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Nginx-Proxy true;
proxy_cache_bypass $http_upgrade;
proxy_pass http://nodenuxt;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
###### tibug end #######
很简单,肯定都能看得懂,这里服务端的部署就告一段落了,剩下就是很简单的js前端的部署了。
5、部署Vue.js前端项目
这里就简单的不能再简单了,下载好代码后,
打包生成dist静态文件,
配置nginx服务代理转发,
搞定。
###### vueadmin begin #######
server {
listen 80;
server_name vueadmin.neters.club;
location / {
try_files $uri $uri/ /index.html;
root /home/Blog.Admin/dist;
index index.html index.htm;
}
location /api/ {
rewrite ^.+apb/?(.*)$ /$1 break;
include uwsgi_params;
proxy_pass http://localhost:8081;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /api2/ {
rewrite ^.+apb/?(.*)$ /$1 break;
include uwsgi_params;
proxy_pass http://localhost:8081;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /images/ {
include uwsgi_params;
proxy_pass http://localhost:8081;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
#proxy_set_header Connection "upgrade";
#proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /.doc/ {
proxy_pass http://docsadmin.neters.club/;
}
error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
server_name docsadmin.neters.club;
location / {
root /home/Blog.Admin/.doc/contents/.vuepress/dist;
index index.html index.htm;
}
}
###### vueadmin end #######
重点的就是要进行反向代理,其他的就是简单的部署一个静态html页面而已。
6、难点与结论
其实通过上边的操作,一般四五个小时肯定能搞定,快的话三个小时就完全能搞定前后端发部署和发布,我几乎没有遇到太多的问题,可能得益于NETCore本身就是跨平台的,虽然以前都是在window服务器运行,但是也有Linux的影子,当然,可能有部分难点:
1、文件大小写和路径问题;
2、文件权限问题;
3、net core本地正常,服务器不行的问题(多半是少文件,看日志);
4、nginx代理失败问题(参考我的就行);
5、多项目联调问题(不好调,尽量本地没问题了再提交);
6、等等其他
最后,祝大家学有所成吧。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Pureftpd操作指南
- Kafka运维操作指南
- 《算法互动编程》操作指南(二)
- 自底向上的web数据操作指南
- 使用FRIDA为Android应用进行脱壳的操作指南
- 苹果的 AR 新工具 RealityComposer 开箱体验及操作指南
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
产品觉醒:产品经理的视角与方法论
判官(李泽澄) / 电子工业出版社 / 2018-11 / 59.80元
《产品觉醒:产品经理的视角与方法论》是作者多年工作经验的汇集,通过自己亲身经历来对产品运营、行业和人生选择做一个全面的复盘,为读者提供有一定深度的分析。 《产品觉醒:产品经理的视角与方法论》共7章,第1章介绍了产品经理应该具有的视角来分析和观察产品分析方法;第2章介绍了做产品时如何破局来解决相应的问题;第3章介绍了在做产品经理前先分析自己;第4章介绍了怎么来解决执行力的问题;第5章介绍了怎么......一起来看看 《产品觉醒:产品经理的视角与方法论》 这本书的介绍吧!