在Ubuntu上发布.Net Core(3.1) WebApi
安装环境
- 系统 : Ubuntu服务器,版本Ubuntu 16.04 LTS
- .Net Core : .Net Core 3.1
- Nginx : nginx/1.10.3 (Ubuntu)
- 其他 : ftp, ssh
准备工作
- 搭建.Net Core环境:
将Microsoft程序包签名密钥添加到受信任密钥列表中
将存储库添加到包管理器
安装所需的依赖项
wget https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb> -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
- 安装.Net Core SDK
sudo add-apt-repository universe
sudo apt-get update
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install -y dotnet-sdk-3.1
- 配置FTP服务器
-
创建专用的ftp用户
假定用户名为maker
sudo useradd -d "/home/maker" -m -g ftp maker
sudo usermod -s /sbin/nologin maker
sudo mkdir /home/maker/public
sudo setfacl -m u:maker:rwx /home/maker/public
sudo chgrp ftp /home/maker/public
sudo setfacl -d -m u:maker:rwx /home/maker/public
sudo chmod a-w /home/maker
sudo passwd maker
-
安装vsftpd
sudo apt-get install vsftpd
-
修改/etc/vsftpd.conf文件
使用vim或者gedit编辑器修改如下条目
a. listen=YES
b. listen_ipv6=NO
c. write_enable=YES
c. chroot_local_user=YES
d. chroot_list_enable=YES
e. chroot_list_file=/etc/vsftpd.chroot_list -
创建/etc/vsftpd.chroot_list
使用vim或gedit
sudo gedit /etc/vsftpd.chroot_list
输入用户名 maker 保存 -
查看/etc/ftpusers文件
cat /etc/ftpusers
如不存在maker,则不用管,否则使用vim/gedit编辑删除maker -
修改/etc/pam.d/vsftpd文件
将 auth required pam_shells.so 改成 auth required pam_nologin.so
-
重新启动vsftpd服务
sudo service vsftpd restart
-
- 安装并配置nginx
-
安装nginx
输入下面指令进行安装nginx
sudo apt-get install nginx
sudo nginx -s start
在浏览器里输入http://localhost将显示如下图所示,说明nginx安装成功。
-
修改nginx的默认配置文件/etc/nginx/sites-available/default
cp default default.bak
vim default
修改listen 80 default_server; 为listen 80;
删除~listen [::]:80 default_server;~
location / {} 段 修改为如下:
location / {
proxy_pass http://localhost:5000;## 请设置和项目的url一致
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
client_max_body_size 100m;##有文件上传功能的记得设置,否则默认只能上传传小于1m的文件
} -
保存并测试配置文件格式是否正确
sudo nginx -t
-
重新启动nginx服务
sudo nginx -s reload
-
发布
- 使用VS2019进行发布
- 步骤如下
- 使用putty登录Ubuntu修改项目文件夹下所有文件(含子目录)的属性为777,比如项目文件夹为 webapidemo
sudo chmod 777 webapidemo/ -R
- 步骤如下
- 配置守护进程Supervisor
- 安装supervisor
sudo apt-get install supervisor
- 配置supervisor,新建配置文件{项目名}.conf
sudo touch /etc/supervisor/conf.d/webapidemo.conf
- 使用vim/gedit编辑webapidemo.conf文件
[program:webapidemo]
command=sudo dotnet webapidemo.dll #要执行的命令
directory=/home/maker/public/webapidemo #命令执行的目录
environment=ASPNETCORE__ENVIRONMENT=Production #环境变量
user=maker #进程执行的用户身份(可以是root或ftp的用户)
autostart=true #是否自动启动
autorestart=true #是否自动重启
startsecs=1 #自动重启间隔
stderr_logfile=/var/log/webapidemo.err.log #标准错误日志
stdout_logfile=/var/log/webapidemo.out.log #标准输出日志 - 配置文件webapidemo.conf可以直接放在项目目录下然后使用软链接到/etc/supervisor/conf.d/下
cd /etc/supervisor/conf.d/
sudo ln -s /home/maker/public/webapidemo/webapidemo.conf webapidemo.conf
- 安装supervisor
总结
当启用Nginx进行反向代理时出现502错误时,请确保Web项目能够在本地正常运行,涉及文件系统操作时要确保文件及文件夹有足够的权限;同时可以从/var/log/nginx/error.log查看错误信息。