NetCore部署到Linux服务器+Supervisor的步骤及过程中踩过的坑
本文作备忘使用
服务器配置:
下面是所有操作的具体步骤:
1.安装nginx 参考
1.1 添加源:默认情况Centos7中没有Nginx源,最近Nginx官网提供了Centos的源地址。
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
注:上面的命令执行后不确定是否需要update一下yum,我没有update也能安装成功
1.2 安装Nginx:通过yum search nginx看看是否已经添加源成功。如果成功则执行下列命令安装Nginx。
sudo yum install -y nginx
1.3 启动Nginx并设置开机自动运行
sudo systemctl start nginx.service sudo systemctl enable nginx.service
1.4 浏览查看效果
在浏览器中输入您的服务器地址:http://x.x.x.x/
2.安装supervisor 参考
2.1 执行以下命令以安装supervisor
yum install python-setuptools easy_install supervisor
注:据说会发生无法安装的情况,不过我没有遇到,看来还是幸运的。还有很多方法,还没有尝试其他的方法。懒~~
2.2 配置supervisor
2.2.1 创建配置文件目录及文件
#mkdir -p /etc/supervisor #mkdir -p /etc/supervisor/conf.d #echo_supervisord_conf > /etc/supervisor/supervisord.conf #vim /etc/supervisor/supervisord.conf
2.2.2 配置内容如下(参考)
# 启用访问web控制界面,inet_http_server区段修改为 [inet_http_server] port=*:9001 # 修改log路径 [supervisord] logfile=/var/log/supervisord.log # 修改 unix_http_server file 路径,避免被系统删除 [unix_http_server] file=/var/lock/supervisor.sock # 和unix_http_server file保持一致 [supervisorctl] serverurl=unix:///var/lock/supervisor.sock # include区段修改为 [include] files = /etc/supervisor/conf.d/*.conf
2.3 配置supervisor的开机服务
#vim /etc/rc.d/init.d/supervisord
2.3.1 文件内容如下:
#!/bin/sh # # /etc/rc.d/init.d/supervisord # # Supervisor is a client/server system that # allows its users to monitor and control a # number of processes on UNIX-like operating # systems. # # chkconfig: - 64 36 # description: Supervisor Server # processname: supervisord # Source init functions . /etc/init.d/functions RETVAL=0 prog="supervisord" pidfile="/tmp/supervisord.pid" lockfile="/var/lock/supervisor.sock" start() { echo -n $"Starting $prog: " daemon --pidfile $pidfile supervisord -c /etc/supervisor/supervisord.conf RETVAL=$? echo [ $RETVAL -eq 0 ] && touch ${lockfile} } stop() { echo -n $"Shutting down $prog: " killproc -p ${pidfile} /usr/bin/supervisord RETVAL=$? echo if [ $RETVAL -eq 0 ] ; then rm -f ${lockfile} ${pidfile} fi } case "$1" in start) start ;; stop) stop ;; status) status $prog ;; restart) stop start ;; *) echo "Usage: $0 {start|stop|restart|status}" ;; esac
保存退出
增加开机服务
chmod +x /etc/rc.d/init.d/supervisord chkconfig --add supervisord chkconfig supervisord on
启动服务并验证
service supervisord start
如果服务器启动了防火墙
firewall-cmd --zone=public --add-port=9001/tcp --permanent firewall-cmd --reload
3.安装netcore SDK 跳转
添加dotnet产品Feed
在安装.NET之前,您需要注册Microsoft密钥,注册产品存储库并安装所需的依赖项。这只需要每台机器完成一次。
打开终端并运行以下命令:
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
安装.NET SDK
更新可用于安装的产品,然后安装.NET SDK。
在终端中,运行以下命令:
sudo yum update sudo yum install dotnet-sdk-2.2
4.安装chrome+chromedriver(参考)
4.1 利用 yum 命令安装 google-chrome 超级简单(安装最新版):
yum install https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm
4.2 查看chrome版本
google-chrome --version
4.3 下载chromedirver
*********目前搜集到的有两个下载地址*********
************看你喜欢,任君选择************
官网提供 http://chromedriver.storage.googleapis.com/index.html
淘宝镜像 http://npm.taobao.org/mirrors/chromedriver/
注:1.需要下载与chrome版本对应的版本,每个版本里面有一个notes.txt文本,里面有支持的chrome版本。
2.下载后上传到服务器/usr/bin目录
5.配置supervisor进程
在/etc/supervisor/conf.d目录下面新建一个你项目名的配置文件,如:MyDotNetName.conf
内容如下:
[program:MyDotNetName] command=/bin/bash -c "dotnet MyDotNetName.dll" directory=/usr/PublishOutput/ stderr_logfile=/var/log/MyDotNetName.error.log stdout_logfile=/var/log/MyDotNetName.stdout.log environment=ASPNETCORE_ENVIRONMENT=Production user=root stopsignal=INT autostart=true autorestart=true startsecs=3
:wq保存退出编辑当前配置文件
注:我在操作完上面这步后,进程并没有及时启动,后来查找了一翻资料后,执行了附里面的第一二条命令后才正常启动,具体是先执行的哪条不太记得了。不过我想这个影响应该不大吧。
附:supervisor的运维命令
# 读取有更新(增加)的配置文件,不会启动新添加的程序
supervisorctl reread
# 重启配置文件修改过的程序
supervisorctl update
# 查看程序状态 supervisorctl status # 关闭程序 supervisorctl stop app-name # 启动程序 supervisorctl start app-name # 重启 supervisorctl restart app-name
补充:每次替换新发布的项目文件内容后,发现都会报错。查看后应该是chromedriver没有执行权限,我的操作是执行如下所示的命令,对当前项目文件所在目录赋予执行权限
chmod -R 777 /usr/youpath
如果有哪位大能有更好的解决方案欢迎留言指教,谢谢!
2019年3月19日 补充
发现使用9001端口远程管理进行多次重启进程后就出现了各种报错,后来查看资料后的解决办法就是:结束掉chrome及chromedriver的所有进程
批量结束某个应用的所有进程命令如下(例如结束掉所有chrome进程)
ps -aux|grep chrome|awk '{print $2}'|xargs kill -9
后来在supervisor子进程配置文件中添加配置(目前正在试着运行)
#vim /etc/supervisor/supervisord.conf
killasgroup = true stopasgroup = true