上篇用docker + nginx 部署静态站点
这次部署.net5
1. 把本地的 net5项目发布,拷到linux 服务器上
2.新建Dockerfile: 注意 第一行不要 跟 As base 之类的
FROM mcr.microsoft.com/dotnet/aspnet:5.0 WORKDIR /app EXPOSE 80 EXPOSE 443WORKDIR /app
ENTRYPOINT ["dotnet", "Backend.dll","--urls","http://*:80;","debug"]
docker build -t net5 .
这里带上debug 参数,是给应用一个标志,说这是要使用https 了,要用证书了。program 的main 方法要做如下添加。
if (Program.args.Contains("debug")) { webBuilder.UseKestrel(ConfigHttpsRyr()); webBuilder.UseUrls(Program.args); } ------------------------------------------------------------- private static Action<KestrelServerOptions> ConfigHttpsRyr() { return x => {</span><span style="color: #0000ff;">var</span> pfxFile = <span style="color: #800000;">"</span><span style="color: #800000;">5203942321_app.ryrkj.com.pfx</span><span style="color: #800000;">"</span><span style="color: #000000;">; Log.Logger.Information(</span><span style="color: #800000;">"</span><span style="color: #800000;">pfx:</span><span style="color: #800000;">"</span><span style="color: #000000;">, pfxFile); </span><span style="color: #008000;">//</span><span style="color: #008000;">password 填写申请的密钥</span> <span style="color: #0000ff;">var</span> certificate = <span style="color: #0000ff;">new</span> X509Certificate2(pfxFile, <span style="color: #800000;">"</span><span style="color: #800000;">.......</span><span style="color: #800000;">"</span><span style="color: #000000;">); x.ConfigureHttpsDefaults(c </span>=> c.ServerCertificate =<span style="color: #000000;"> certificate); }; }</span></pre>
3. 在linux 上执行: publish 是第一步发布的文件夹名
docker run -it --name net5 -p 5001:443 -v /publish:/app -d --net mynet net5
现在可以访问站点了。
4.如果有错误服务器可能这个容器会停止。 docker logs net5 查看原因。
5.如果是数据库链接字符串有问题,去app..product.setting.json 中修改:
"BackendContext": "Server=mysqlserver;Database=AAA;User ID=sa;Password=xxxx;Trusted_Connection=false;"
然后新建SQL server 容器:
docker run -d -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=xxxx' -p 1433:1433 -d --name mysqlserver --net mynet mcr.microsoft.com/mssql/server:2017-latest
6. docker start net5 看看起来了吧。
7. 更新程序之后,需要在linux 端 docker restart net
8.总结脚本:
docker network ls
docker network create --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
docker run --name mynginx -p 80:80 -p 443:443 -d --net mynet -v /nginxdata:/usr/share/nginx -v /ngnixconf:/etc/nginx/conf.d2/ nginx
docker run -d -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=xxxx' -p 1433:1433 -d --name mysqlserver --net mynet mcr.microsoft.com/mssql/server:2017-latest
cat << EOF > Dockerfile
> FROM mcr.microsoft.com/dotnet/aspnet:5.0
> WORKDIR /app
> EXPOSE 80
> EXPOSE 443
>
> WORKDIR /app
> ENTRYPOINT ["dotnet", "Backend.dll","--urls","http://*:80;https://app.ryrkj.com","debug"]
> EOF
docker build net5 .
docker run -it --name net5 -p 5001:443 -v /publish:/app -d --net mynet net5
docker exec net5 cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime