Ubuntu+Docker+Nginx+OrchardCore自动化部署
文章目录
1.服务端环境搭建
1.Docker安装
# 使用安装脚本自动安装,并且使用阿里源
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 安装完成后建议使用阿里加速
# https://www.aliyun.com/
# 登录后选择容器镜像服务,镜像中心,然后选择镜像加速器,参考配置
2.Nginx安装
# 安装nginx反向代理
sudo apt-get install nginx
# 查看nginx确定安装完成
sudo nginx -v
3.Let’s Encrypt 证书管理搭建
# 参考链接 https://acme.sh
# 安装acme.sh
curl https://get.acme.sh | sh
# 设置命令别名,方便使用命令
alias acme.sh=~/.acme.sh/acme.sh
# 使用实例参考官网
# 以下为我的使用配置,使用域名dns校验
# dns使用腾讯dnspod 链接https://www.dnspod.cn/
# 示例
# 域名商API ID
export DP_Id="*****"
# 域名商API Key
export DP_Key="********************************"
# 生成证书
acme.sh --issue --dns dns_dp -d domain.cn -d www.domain.cn
# 创建证书文件夹,用于存放证书
mkdir -p /srv/ssl
# 安装证书文件 这里配合一个重新加载的命令,针对自动更新证书使用,可以在自动更新后自动加载新证书
acme.sh --install-cert -d domain.cn -d www.domain.cn \
--key-file /srv/ssl/www.domain.cn.key \
--fullchain-file /srv/ssl/www.domain.cn.crt \
--reloadcmd "service nginx force-reload"
# 设置自动更新
acme.sh --upgrade --auto-upgrade
4.Nginx代理网站
# 创建网站Nginx配置文件
sudo vim /etc/nginx/sites-available/www.domain.cn
# 插入以下内容
upstream domain-backend {
server 127.0.0.1:5001;
}
server {
listen 443;
server_name www.domain.cn domain.cn;
ssl on;
ssl_certificate /srv/ssl/www.domain.cn.crt;
ssl_certificate_key /srv/ssl/www.domain.cn.key;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_redirect off;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 86400;
proxy_pass http://domain-backend/;
}
}
server {
listen 80;
server_name www.domain.cn;
rewrite ^(.*)$ https://${server_name}$1 permanent;
}
# 建立软链接
sudo ln -s /etc/nginx/sites-available/www.domain.cn /etc/nginx/sites-enabled/
# 检查配置是否有错误
sudo nginx -t
# 没有错误就加载配置文件
nginx -s reload
# 此时访问www.domain.cn,这时网站应该可以打开,但是会错误,因为还没有搭建网站,可以看到证书已经正常
2.开发以及代码管理
1.OrchardCore开发
开发参考官网,或示例 https://gitee.com/YuexS/OrchardCoreExample
这里就不过多演示
2.源代码使用阿里code管理
- 1.登陆并开通阿里code https://code.aliyun.com/
- 2.添加项目
- 3.本地设置推送到阿里code(git推送相关设置可以参考官网或阿里新建的项目,比较简单)
3.开通容器镜像服务并设置
1.创建命名空间
2.创建镜像仓库
3.创建镜像仓库时可以选择云code,登陆并且绑定,选择code命名空间以及仓库
创建镜像仓库时可以选择云code
登陆并且绑定
选择code命名空间以及仓库
确认并勾选
代码变更自动构建镜像
4.构建设置
进入创建的镜像仓库进行设置
1.选择构建
2.添加规则
根据自己情况进行设置自动构建规则
4.创建Dockerfile
文件
我这里指定了NuGet.config配置,如果未使用,可以删除
项目路径以及运行文件需根据自己情况进行更改
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 443 80
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY /. /src
RUN dotnet restore --configfile NuGet.config
COPY . /src
WORKDIR /src
RUN dotnet build /src/src/Applications/FussenSvc.Application.WebHost/FussenSvc.Application.WebHost.csproj -c Release -o /app/build
FROM build AS publish
RUN dotnet publish /src/src/Applications/FussenSvc.Application.WebHost/FussenSvc.Application.WebHost.csproj -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "FussenSvc.Application.WebHost.dll"]
5.代码提交
这里不赘述,提交代码到git并推送后,此时容器会自动构建,可以查看构建日志
3.服务端部署
# 1.登陆阿里容器 链接地址为你的容器的公网地址
docker login --username=阿里账号 --password=阿里密码 reg![在这里插入图片描述](https://img-blog.csdnimg.cn/20200403155856743.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NodXl1ZWEz,size_16,color_FFFFFF,t_70)istry.cn-hangzhou.aliyuncs.com
# 2.拉取并运行容器
# 这里设置了如果关闭,将主机端口5001映射到容器,指定了容器时区,容器名称,以及持久化到本地,版本为latest
docker run -d -p 5001:80 --restart always -e TZ="Asia/Shanghai" --name fussensvcsolution -v /srv/wwwroot/www.domain.cn:/app/App_Data registry.cn-hangzhou.aliyuncs.com/yue xs/fussensvcsolution:latest
# 3.安装watchtower进行容器自动更新管理
# 这里设置了fussensvcsolution watchtower两个容器自动更新,更新时间默认5分钟,可以参考watchtower官网
docker run -d \
--restart always \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /root/.docker/config.json:/config.json \
containrrr/watchtower \
--cleanup \
fussensvcsolution watchtower
4.配置完成
- 此时网站可以正常访问,在代码提交时,也会自动进行自动打包docker镜像,服务端自动更新拉取!