项目部署整理
2022-11-30 14:16:17 11 举报
AI智能生成
项目部署整理
作者其他创作
大纲/内容
服务器结构
安装 pipeline:jenkins
安装 Java:sudo apt install openjdk-11-jdk
测试 java -version
导入 Jenkins 软件源的 GPG keys:wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
添加软件源到系统中:sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
开始安装 sudo apt update
sudo apt install jenkins
sudo apt install jenkins
打印服务状态来验证它:systemctl status jenkins(注意使用命令:q 退出编辑模式)
获取初始密码: sudo cat /var/lib/jenkins/secrets/initialAdminPassword
使用8080端口登录, 并重置密码
消息队列服务器:rabbitmq
安装运行:docker run -d --hostname rabbitmq --name rabbitmq -p5672:5672 -p15672:15672 -v /www/rabbitmq:/var/lib/rabbitmq rabbitmq:management
检查容器运行状态:docker ps | grep rabbit
初始化,可以直接用默认的guest/guest
docker update --restart=always <CONTAINER ID>
构建容器建通信网略
新建网络 docker network create my-network
将rabbitmq容器加入网络:docker network connect my-network rabbitmq
检查:docker network inspect my-network
linux 用户权限
在jenkins新建任务过程中会经常出现无权限的问题,所以还是要统一新建组并赋予权限
cat /etc/group新建组:groupadd my_group
给组加user:usermod -g my_group jenkins
修改文件所在组并加权限:chmod -R a+rwx /var/lib/backend
此处没有细致研究,大概明白linux是根据目录归属用户或者组控制权限
k8s
安装k8s,服务治理,负载均衡
Kompose-使用Docker Compose生成k8s资源
rancher
docker run -d --restart=unless-stopped -p 80:80 rancher/rancher:stable
前端自动化部署
服务器环境
服务器构建
阿里购买ubuntu 服务器
重置实例密码
用PuTTY远程
阿里云
在阿里云实例的安全组中开放8080, 5000-5010端口(预留后续操作使用)
可以设置实例对应的 role并授权 kms访问权限
基层docker部署
更新 apt 包索引 sudo apt-get update
使用官方安装脚本自动安装 curl -fsSL https://get.docker.com | bash -s docker
添加 Docker 的官方 GPG 密钥 curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
安装 Docker Engine-Community: sudo apt-get install docker-ce docker-ce-cli containerd.io
测试 Docker 是否安装成功 sudo docker run hello-world
后端自动化部署
项目结构
vs生成项目解决方案my-starter
最后在解决方案中启用docker-compose
项目新建时请使用容器
基础结构是auth+bff+foundation+domain 文件夹
foundation: eventbus,log¬ification
domain包含领域内结构infrastructure+domain+starter
源代码部署在github仓库中
自动化发布
github新增deploy key,并在github中新建用户
切记,,,服务器安装git: apt install git
github 新增触发接口 webhook
开始新建项目发布项目my-starter
先用github运行项目获取最新代码
安装组合发布:apt install docker-compose
启动容器:cd /var/lib/jenkins/workspace/my-starter-backend
docker-compose build
docker-compose up -d
docker-compose build
docker-compose up -d
注意 docker-compose的端口隐射,网络设置
jenkins运行docker权限问题
gpasswd -a ${USER} docker
eg: gpasswd -a jenkins docker
eg: gpasswd -a jenkins docker
或者 chmod 777 /var/run/docker.sock
按需发布
查看容器内部:docker exec -it my /bin/bash
docker compose目录映射
服务器安装 dotnet5.0
wget https://packages.microsoft.com/config/ubuntu/21.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt-get update; \
sudo apt-get install -y apt-transport-https && \
sudo apt-get update && \
sudo apt-get install -y dotnet-sdk-5.0
sudo apt-get install -y apt-transport-https && \
sudo apt-get update && \
sudo apt-get install -y dotnet-sdk-5.0
docker compose 的volumn的隐射,一边是发布目录,一边是workdir目录
dotnet publish 目录,docker 重启容器
业务领域设计
account项目
权限控制
子主题(必须目标名词,假设某一类商品)
domain
seedwork,公用底层类
聚合
构造对象,发出事件
事件
包含数据
infrastructure
数据库访问repository
第三方
starter
命令, api 接收命令,调用service或者meditor
viewmodel
纯查询,用于展现
service/meditor
生成 aggregate,用repository保存数据
eventbus
将事件发到eventbus执行
通用领域设计
eventbus项目设计
安装hangfire,启用dashboard
单独数据库,定时消息驱动,初始化数据库sql或者有建表权限
添加日志生成Serilog.AspNetCore
启用日志浏览,提示:context.HostingEnvironment.ContentRootPath + "/wwwroot/log/log-.txt
安装rabbitmq,启用dashboard
注意定位:调度中心,或者说消息中转中心
提供统一的api调用入口,接收调用并入消息队列,后期可以扩展至其他入口(比如数据库变更)
自己按照消息模板订阅消息,再有api转发调用
优势:消息队列的统一管理,跨领域调用统一化
目前的问题:模板一趟bus,可能拥挤,后期可以按照业务扩展多路公交
auth项目
目标是,提供凭据,负责校验是API网关
其中密码使用的是对称不可解密的,带salt的加密方式
log项目
记录的是用户的行为轨迹,不同的角色展现的可能是不同的
表格设计:who 在 when 在 where how to 做 what, 是否成功,得到的response
notification项目
已媒介形式将信息告知对方
API网关
项目定位转发+认证(选型kong)
统一网络:docker network create kong-network(要使用统一网段)
检查:docker network inspect kong-network
统一数据库:docker run -d --name kong-database --network=kong-network -p 5432:5432 -e "POSTGRES_USER=kong" -e "POSTGRES_DB=kong" -e "POSTGRES_PASSWORD=kong" postgres:9.6
开始安装kong
数据库初始化:docker run --rm --network=kong-network -e "KONG_DATABASE=postgres" -e "KONG_PG_HOST=kong-database" -e "KONG_PG_USER=kong" -e "KONG_PG_PASSWORD=kong" -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" kong:latest kong migrations bootstrap
运行:docker run -d --name kong --network=kong-network -e "KONG_DATABASE=postgres" -e "KONG_PG_HOST=kong-database" -e "KONG_PG_USER=kong" -e "KONG_PG_PASSWORD=kong" -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" -e "KONG_PROXY_ERROR_LOG=/dev/stderr" -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" -e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" -p 8000:8000 -p 8443:8443 -p 8001:8001 -p 8444:8444 kong:latest
安装ui:konga
数据库初始化:docker run --rm --network=kong-network pantsel/konga:latest -c prepare -a postgres -u postgresql://kong:kong@kong-database:5432/konga
运行:docker run -d -p 1337:1337 --network kong-network --name konga -e "NODE_ENV=production" -e "DB_ADAPTER=postgres" -e "DB_URI=postgresql://kong:kong@kong-database:5432/konga" pantsel/konga
kong的使用
route转向到service
service的host可以是upstream
upstream设置多个target实现负载均衡
配置jwt auth
首先新建customer,这里可以设置secret
全局或者 针对具体服务 添加plugins(创建jwt credentials),可以只设置 header name为 Authorization,得到key
特别说明,如果需要服务内部的控制,由服务自行管理。
docker run -d -p 80:80 --name nginx --network=my-network -v /home/docker-nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf nginx
自由主题
0 条评论
下一页