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鏡像,服務端自動更新拉取!