0%

Ubuntu部署netcore网站

Docker部署netcore网站,并使用Docker nginx 作为正向代理;

创建测试项目后,修改网站监听端口,具体设置方式请查阅另一篇博文《Ubuntu部署Asp.net core网站无法访问》

上传publish文件到Linux,创建文件Dockerfile,编辑内容为:

1
2
3
4
5
FROM mcr.microsoft.com/dotnet/core/aspnet //从该镜像拉取
WORKDIR /app  //工作目录
COPY . . 
EXPOSE 80 //容器对外开放端口
CMD ["dotnet", "website.dll"] //执行命令

把网站打包成镜像

1
docker build -t website .

创建并运行容器

1
docker run --name website -p 8080:80 -d website

至此,网站已成功发布。使用ip:port即可访问网站。

接下来使用docker拉取nginx

1
docker pull nginx

在创建nginx容器前先创建好挂载目录

1
2
3
4
cd var
mkdir nginx
cd nginx
mkdir www conf logs

进入conf文件夹,创建并编辑nginx.conf配置文件

1
2
cd conf
vim nginx.conf

nginx.conf文件内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
user nginx;
# 运行用户,默认是nginx
worker_processes auto;
# nginx进程数,一般设置为和cpu核数一样
error_log /var/log/nginx/error.log;
# 全局错误日志路径
pid /run/nginx.pid;
# 进程pid路径
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
# 负载动态模块
include /usr/share/nginx/modules/*.conf;

events {
# 工作模式与连接数上限
worker_connections 1024;
# 单个进程的最大连接数
}

http {
# 设置http服务器
log_format main '$http_host $server_addr $remote_addr [$time_local] "$request" $status $request_body $body_bytes_sent "$http_referer" "$http_user_agent" $request_time $upstream_response_time';
# 设置日志的格式

access_log /var/log/nginx/access.log main;
# 访问日志的路径

sendfile on;
# 开启高效传输模式
tcp_nopush on;
# 激活tcp_nopush参数可以允许把http response header和文件的开始放在一个文件里发布,作用是减少网络报文段的数量
tcp_nodelay on;
# 激活tcp_nodelay,内核会等待将更多的字节组成一个数据包,从而提高I/O性能
keepalive_timeout 65;
# 长连接超时时间,单位是秒
types_hash_max_size 2048;
# 为了快速处理静态数据集,例如服务器名称, 映射指令的值,MIME类型,请求头字符串的名称,nginx使用哈希表

include /etc/nginx/mime.types;
# 文件扩展名与类型映射表
default_type application/octet-stream;
# 默认文件类型

# Load modular configuration files from the /etc/nginx/conf.d directory.
# 加载模块化配置文件
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;

server {
# 基于域名的虚拟主机
listen 80 default_server;
# 监听端口
listen [::]:80 default_server;
server_name _;
# 域名
#root /usr/share/nginx/html;
# 站点根目录,即网站程序存放目录

# Load configuration files for the default server block.
# 默认服务器块的加载配置文件
include /etc/nginx/default.d/*.conf;

location / {
proxy_pass http://ip:8080;
}

error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}

创建并运行容器

1
docker run -d -p 80:80 --name blog -v $PWD/www:/usr/share/nginx/html -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/var/log/nginx nginx

Nginx部署完成,此刻直接输入ip可直接访问网站。