在腾讯云 CentOS 部署运行 .Net core 应用
运行环境
腾讯云
CentOS 7.5 64位
1核 2GB内存 1M带宽
辅助工具 xftp
安装 dotnet sdk
- 安装
libicu
依赖
yum install libunwind libicu
- 注册dotnet 的repository
sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
- 安装SDK
sudo yum update
sudo yum install dotnet-sdk-3.1
- 以下命令用来模糊查询dotnet-sdk可用版本,
\*
表示适配不定长的所有字符
yum list dotnet-sdk\*
yum list dotnet-sdk\*
- 查看安装信息
dotnet --info
上传应用程序到Linux
CentOS搭建FTP服务
- 安装 vsftpd
yum install vsftpd // 安装
vsftpd -v // 查看安装版本
- 启动 vsftpd
systemctl start vsftpd.service // 启动
systemctl restart vsftpd.service // 重启
systemctl enable vsftpd.service //设置开机自启动
systemctl status vsftpd.service // 查看服务状态
netstat -nltp | grep 21 // 查看服务端口
tail -f /var/log/secure // 查看安全日志
- 配置文件说明
/etc/vsftpd/vsftpd.conf 是 vsftpd 的核心配置文件。
/etc/vsftpd/ftpusers 是黑名单文件,此文件里的用户不允许访问 FTP 服务器。
/etc/vsftpd/user_list 是白名单文件,此文件里的用户允许访问 FTP 服务器。
在 ESC 安全策略的入站规则添加 21 端口,允许访问 21 端口
配置 vsftpd
vsftpd 安装后默认开启了匿名访问 FTP 服务器的功能,使用匿名用户访问,无需输入用户名和密码即可登录 FTP 服务,但是没有权限修改或上传文件。
此处我配置本地用户登录
本地用户登录是指用户使用 Linux 操作系统的账号和密码登录 FTP 服务器。
1、创建一个账号 ftptest 并设置一个密码
useradd ftptest // 创建用户
passwd --stdin ftptest // 设置密码
cut -d : -f 1 /etc/passwd // 查看系统用户
userdel -r username // 删除用户
2、创建一个供FTP服务使用的文件目录
mkdir /var/ftp/test
chmod -R 777 /var/ftp/test
3、更改 /var/ftp/test 目录的拥有者为 ftptest
chown ftptest:ftptest /var/ftp/test -R
4、修改配置文件前先进行备份一下
cp /etc/vsftpd/vsftpd.conf{,.bak}
5、修改 vsftpd.conf 配置文件
#禁止匿名登录FTP服务器
anonymous_enable=NO
#允许本地用户登录FTP服务器
local_enable=YES
#设置本地用户登录后所在目录
local_root=/var/ftp/test#全部用户被限制在主目录
chroot_local_user=YES#开启被动模式
pasv_enable=YES
#FTP服务器公网IP(也就是当前腾讯云服务器的公网 IP)
pasv_address=120.xx.xx.xx
#设置被动模式下,建立数据传输可使用port范围的最小值
pasv_min_port=10000
#设置被动模式下,建立数据传输可使用port范围的最大值
pasv_max_port=10088
#本地用户上传文件的umask
local_umask=022
#是否在进入新目录时显示 message_file 文件中的内容
dirmessage_enable=YES
#启用日志
xferlog_enable=YES
#日志是否进行格式化
xferlog_std_format=YES
#独立服务
listen=YES
#centos7增加此设置,开启后默认监控ipv4和ipv6
listen_ipv6=NO
#认证模式
pam_service_name=vsftpd
#启用用户列表
userlist_enable=YES
#可以上传(全局控制)
write_enable=YES
#允许下载
download_enable=YES
6、 重新启动 vsftpd
systemctl restart vsftpd.service
在本地使用 xftp 上传工具,上传目录是 /home/uncmd/gateways/InternalGateway
查看目录文件,上传成功
准备你的.net core web 程序
新建一个空的.net core web程序用以演示
首先确保你的项目能在windows上运行
接下来发布
先发布到本地目录,然后使用 xftp 工具上传到云服务器
直接使用 Vistual Studio 发布到FTP
我选择的是直接发布到FTP,配置如下
验证连接没问题后点击发布,将文件发布到FTP对应目录
到程序所在目录执行以下命令启动web站点
dotnet InternalGateway.dll
显示正在运行,现在打开 http://你的服务器ip:5000
http://地址:5000无法访问
云服务器入站规则已正确设置,查看端口监听情况
netstat -anpt | grep 5000
从上图能够看出用户的web服务被绑定在127.0.0.1的5000端口上了,而这会导致公网无法访问该web服务,解释如下:
127.0.0.1是一个回送(loopback)地址,指本地机,一般用来测试使用
127.0.0.1是通过网卡传输,依赖网卡,并受到网络防火墙和网卡相关的限制,这也是跟localhost重要区别之一,localhost是不走网卡的,因此防火墙设置对localhost是无效的。
正常的网络包都是从ip层进入链路层,然后发送到网络上,而发向127.0.0.1的包,直接在IP层短路了,也就是发到IP层的包直接被IP层接收了,不再向下发送。这也就决定了web应用绑定在127.0.0.1上是不可能被公网访问到的。
解决方案:
修改web容器配置,把web应用绑定在ecs主网卡上。ECS bind EIP,实际上相当于EIP与ECS私有主网卡建立了映射关系,因此通过EIP:5000来访问web服务,最终就会*请求到私网主网卡:5000上。
更好的做法是把web服务绑定在0.0.0.0这个特殊IP上,关于0.0.0.0,这个IP并不是真实存在的,我们ping不通它,它只是一个符号,代表当前设备的IP。绑定在0.0.0.0上后无论是通过127.0.0.1还是本机ip去访问web服务,都是可以的。
在 appsettings.json 配置文件中添加
"urls": "http://0.0.0.0:5000"
配置
配置正确后打开 http://你的服务器ip:5000 可正常访问
守护进程
- 安装
yum install python-setuptools
easy_install supervisor
- 配置
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf
在 /etc/supervisor/supervisord.conf 最后加上如下两行
[include]
files = conf.d/*.conf
创建 /etc/supervisor/conf.d 目录,用于存放配置
- 添加对 InternalGateway.dll 的守护
添加 /etc/supervisor/conf.d/InternalGateway.conf 文件,内容如下
[program:InternalGateway]
command=dotnet InternalGateway.dll ; 运行程序的命令
directory=/home/wwwroot/InternalGateway/ ; 命令执行的目录
autorestart=true ; 程序意外退出是否自动重启
stderr_logfile=/var/log/InternalGateway.err.log ; 错误日志文件
stdout_logfile=/var/log/InternalGateway.out.log ; 输出日志文件
environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量
user=root ; 进程执行的用户身份
stopsignal=INT
- 运行 supervisord,查看是否生效
supervisord -c /etc/supervisor/supervisord.conf
ps -ef | grep InternalGateway
- Supervisor配置开机启动
cd /usr/lib/systemd/system/
vim supervisord.service
插入以下内容
# dservice for systemd (CentOS 7.0+)
# by ET-CS (https://github.com/ET-CS)
[Unit]
Description=Supervisor daemon
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
激活开机启动
systemctl enable supervisord
查看是否已激活
systemctl is-enabled supervisord
- supervisor 服务常用命令
supervisorctl status //查看所有进程的状态
supervisorctl stop es //停止es
supervisorctl start es //启动es
supervisorctl restart //重启es
supervisorctl update //配置文件修改后使用该命令加载新的配置
supervisorctl reload //重新启动配置中的所有程序
CentOS下使用命令行Web浏览器Links
Links是一个运行在命令行模式下的Web浏览器,只能查看字符
安装Links
yum install links
使用Links
links URL
Esc键:调出Links顶部菜单。
方向键:选择不同的项目,展示下拉菜单或者翻页。
Q键(大写Q):退出Links
- 本文链接:http://uncmd.github.io/share/linux-netcore/
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。
若您想及时得到回复提醒,建议跳转 GitHub Issues 评论。
若没有本文 Issue,您可以使用 Comment 模版新建。
GitHub Issues