整个系统中,可以这么概述
项目-->服务
那怎么划分项目,怎么划分服务呢?
我们以商城为例
商城为一个项目
那么服务可以包括
①接口:后端的主要接口服务
②H5:比如web端的网页
③Manage:后台管理端
如果用nginx来划分的话会更有说服力
一个upstream就是一个服务
比如API是.NET开发的
H5是前端开发的
表示当前服务的类型
要看当前服务的运行状态
【静态模式】
比如静态页面,
那就是静态模式,这种一般是存放在服务器的一个文件夹即可,然后nginx的root指定到这个地方即可
而接口,一般是
【发布模式】
发布模式是指,开发机上发布到文件夹,然后通过PasteSpiderFile同步到服务器,然后在服务器上构建镜像,最后运行容器
【源码模式】
这个就是他们说的CI/CD,就是你写完代码了,提交到对应的SVN/GIT后,服务器自动从对应的源码库拉取源码
然后在服务器上进行编译发布,发布后的流程和发布模式是一样的,构建镜像然后运行容器
【镜像模式】
比如你要运行一个redis,或者运行一个mysql,这种镜像已知的,不需要构建镜像的,就选择这个类型!
这个要看实际情况
有些是5000,80,8080,9000
你可以打开运行服务的日志等级,看看日志监听的端口是多少
.net8.0 默认是8080
.net8.0之前默认是80
thinkphp 默认是8000
这里的端口是指你的服务在容器内运行的时候监听的哪个端口!
如果有多个,你需要使用英文的逗号隔开,比如80,443
这里的监听有顺序的,在nginx的时候需要用到
这个就是docker run或者podman run的时候的命令
一般是 -p -v -e 的内容
比如
-p 8000:80
-v /spider/log/abc:/app/log/
等
注意有些有空格的需要注意
-e Config:Model="xxxx xxxx"
这个其实可以在运行任务的时候,从任务详细中查看运行的命令是哪些!
!!!注意目录需要是工作目录之下的!!!
除非你不需要使用到文件同步等功能!
默认情况下,假设工作目录为/spider/
则静态文件的默认存放地方是
/spider/static/project_code/service_code/
如果你不想把当前服务的文件存放到默认目录中
就填写这个直接目录
比如在管理端,客户端的时候我们经常是拆分2个服务的,但是在部署上,前端一般属于管理端的一部分
/page/manage
/page/h5
这个时候就一般会使用直接目录
文件类型为
【镜像模式】
的时候使用
比如
redis:latest
这个一般你要使用docker images或者podman images
查看下镜像的完整名称!!!
就是name:tag的组合
如果是集群,多个服务器部署一般需要打开这个
就是会在启动的时候生成-p xxx:xxx
而使用到的服务器的端口,就要看服务器的开放端口这里获取了
系统会自动获取可用的,所以服务器的开放端口一般是一个区间,比如10000-10100
这里表示有100个灵活的端口可用
PasteSpider在使用的时候,会先读取下哪些被使用了,从小到大,获取最近可用的端口
然后赋给docker/podman的run的-p使用
这个要看,当前服务是否对这个项目的nginx有影响
主要是涉及upstream的server的
因为IP等会变动
还有就是正在访问的用户
如果打开了且运行容器大于1,这个时候的升级一般是平滑升级的
就是对于访客一般没啥感觉
没啥感觉就升级完成了,溜不溜?
是否使用docker registory
需要有创建docker registory
而且要和当前服务器有绑定关系
使用仓库的时候:
在服务器上构建镜像后,镜像推送到私有仓库
然后要运行的服务器上的docker/podman从私有仓库中pull镜像
然后才是podman run/docker run运行容器
所以如果是单台服务器,建议不用私有仓库,这样效率会更高!
对于docker来说
就是启动的时候 是否附带了命令
--restart=always
对于podman来说,在服务器重启后
pastespider是否会重启这个服务(前提是pastespdier要先启动!)
说到这个不得不说下Dockerfile
大概如下
FROM mcr.microsoft.com/dotnet/aspnet:6.0-alpine AS base
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk add --no-cache tzdata
ENV TZ="Asia/Shanghai"
ENV LANG C.UTF-8
FROM base AS final
WORKDIR /app
EXPOSE 80
COPY . .
ENTRYPOINT ["dotnet", "PasteSpider.HttpApi.Host.dll"]
注意看最后面的ENTRYPOINT
我的理解就是最后执行哪个命令
如果这个命令用启动命令来配置呢?
就是这个执行参数的意思!
以下是使用在node的案例
FROM node:alpine as base
# 19.7.0
WORKDIR /app
COPY . .
#COPY package.json ./
#COPY wsserver.js ./
#RUN npm config set registry http://registry.npm.taobao.org
#RUN npm install
FROM base AS final
# If you are building your code for production
# RUN npm ci --only=production
# Bundle app source
#COPY . .
EXPOSE 80
#CMD [ "node", "demo.js" ]
#CMD [ "node", "server.js" ]
看上面,注意#开头表示注释
所以上面的这个是没用启动命令的
所以这个时候的执行参数就是
node server.js arg1 arg2 arg3
所以这个执行参数看情况使用!