宝塔docker部署项目(Java项目、Redis集群、twikoo、aList、MongoDB)
前言
最近几天心血来潮想给网站更换一下部署架构,之前的项目一般都是直接写入Linux中配置,项目杂乱还不好管理,近期网上学习docker,和一直使用的宝塔面板,总结一下如何使用宝塔中的docker容器化部署项目
购买服务器
熟悉肯定要购买服务器,我使用的是腾讯云轻量云 镜像可以预装宝塔面板 然后根据提示配置账号密码 开放安全组
安装Docker
进入之后点击左边的docker进行安装,安装好后就是这个界面
需要注意的是docker中央仓库是在国外,我们安装好之后记得设置一下仓库源
宝塔官方预装了几种,这里选择的是腾讯云加速镜像
==部署Alist必须看,后面几个可以跳着看==
部署AList(必看)
先看Alist官方文档了解了解:https://alist.nn.ci/zh/guide/install/docker.html
切换到编排模版,增加一个编排模版
编排的内容为
1 | version: '3.3' |
细心可以发现这个编排和docker-compose
是等价,这里就相当于给docker编辑配置。
注意下面两个 : 为分割 前面是宿主主机配置 后面是容器内部主机配置
文件映射 volumes:- ‘/etc/alist:/opt/alist/data’
端口映射 ports: - ‘5244:5244’
编排好后可以点击容器编排或者容器-创建容器 -选择刚刚的容器编排 点击创建一个项目就部署完成 简单粗暴,其实内部宝塔做了大量工作
宝塔主要根据你写的编排文件,去使用docker拉取alist镜像,然后配置创建并且启动容器
从本地镜像可以看到目前的镜像和哪个容器在使用
点击容器详情可以看到本地的挂载数据配置,每次启动,容器都会去获取宿主主机的资源加载到容器里面,所以我们对alist进行配置的时候需要对宿主主机设置。
进入前台会发现我们没有密码 这个时候参考官网教程
1 | # 随机生成一个密码 |
进入终端输入指令获取账号和密码,最后进入主页面就可以愉快玩耍啦
alist设置mysql储存(可选)
需要去宿主主机目录里面的config.json设置为mysql,以及配置mysql的信息,这个alist官方有教程,就不细将了
部署twikoo
先看官方文档:https://twikoo.js.org/backend.html#%E7%A7%81%E6%9C%89%E9%83%A8%E7%BD%B2-docker
官方提供编排
Docker Compose
1 | version: '3' |
使用宝塔进行编排,然后在容器找到编排文件直接启动就行(参考alist部署方式),
细心可以发现这个编排和docker-compose
是等价,这里就相当于给docker编辑配置。
注意下面两个 : 为分割 前面是宿主主机配置 后面是容器内部主机配置
文件映射 volumes:- ‘./data:/app/data’
端口映射 ports: - ‘8080:8080’
这个建议换个地址好一点,因为twikoo的数据是默认本地储存,需要设置一个不容易忘了的地址
增加一个环境配置 切换数据库为monggoDB
1 | MONGODB_URI=mongodb://twikoo:password@127.0.0.1:27017/twikoo |
第二种部署方式
这里输入以下代码拉取镜像
1 | docker pull imaegoo/twikoo:latest |
然后名称自己随便起,镜像选择刚刚拉取的镜像,主机端口我修改为8082 内部仍然是默认的8080, 挂载映射目录宿主和容器对应映射
点击创建
设置之后查看挂载目录
很自然的挂载上去,具体设置可以按照宿主主机文件配置
部署Java项目(jar包)
java部署需要自己创建镜像包,因为docker的官方仓库没有这个存在,那么如何创建镜像包呢,首先我们需要先创建一个Dockerfile
文件名,里面编写配置
1 | # 使用基础镜像,这个会自动拉取官方仓库 |
目录结构是这样的,必须保证配置文件和jar放在一块,因为上面的配置信息就是这样写的(也可以自己修改调整的)
==java项目如何打包jar包请自行百度。。。。==
然后我们点击构建镜像,表情为镜像名 选择路径,并且选择刚刚的Dockerfile文件
构建好镜像之后我们点击容器,将镜像输入配置文件信息之后启动 端口为java项目端口 外部是主机端口
每次将jar包上传之后,都需要重新打包镜像,再重启容器。
后续可能也会使用新的部署方法,大家可以到原文去查看更新,或者留言告诉一下博主,同类对比应该是宝塔自身的java项目部署更方便
创建之后运行项目 启动成功
部署Redis集群
部署Redis集群主要是自己写编排文件,最低的redis集群是6个,三主三从
我部署在三台服务器上面,每个服务器创建两个实例(也就是两个容器)
1 | # 绑定到所有网络接口 |
1 | version: '3.8' |
细心可以发现这个编排和docker-compose
是等价,这里就相当于给docker编辑配置。
注意下面两个 : 为分割 前面是宿主主机配置 后面是容器内部主机配置
文件映射 volumes: - redis-data-2:/data
端口映射 ports: - ‘6379:6379’ - “16379:16379”
点击容器,创建容器,使用编排创建 启动之后会有两个容器
为什么要设置16379和16380呢,这里是因为集群需要有集群总端口
每个 Redis Cluster
节点都需要 2
个 TCP
连接打开,正常的 Redis TCP
端口被服务于客户端,例如:6379
,加上通过增加 10000
到数据端口获取的端口,例如:16379
。
第二个高端口被用来 Redis Cluster Bus
,也就是使用二进制协议的一个节点到节点的通信信道。Redis Cluster Bus
被节点用于故障检测,配置更新,故障转移授权等等。客户端不应该尝试与 Redis Cluster Bus
端口进行通信,而是始终使用正常的 Redis
命令端口,然而要确保在防火墙中打开两个端口,否则 Redis Cluster
节点将无法通信。
命令端口和 Redis Cluster Bus
端口偏移是固定的,始终为 10000
。
注意,为了使 Redis Cluster
正常工作,你需要为每个节点:
- 用于客户端进行通信的普通客户端通信端口(通常使用
6379
)对所有需要到达集群的客户端,以及所有其它集群节点(使用客户端端口进行密钥迁移)都是开放的 Redis Cluster Bus
端口(客户端端口+10000
)必须可从所有其它集群节点访问
如果不打开两个 TCP
端口,集群将无法按预期工作
Redis Cluster Bus
使用不同的二进制协议进行节占到节点的数据交换,这更适合于使用少量的带宽和处理时间交换节点之间的信息
==腾讯云安全组也需要开放这些端口==
然后我们随便进入一个redis实例的终端进行编辑集群
1 | redis-cli --cluster create 127.0.0.1:6379 127.0.0.2:6379 127.0.0.3:6379 127.0.0.1:6380 127.0.0.2:6380 127.0.0.3:6380 --cluster-replicas 1 -a 'password' |
–cluster-replicas 1 这个代表每个节点都必须有一个从节点,然后redis自由去组合
输入yes
出现OK则代表配置成功。
下面是查看集群的命令
1 | redis-cli -c -a password cluster nodes |
部署MongoDB
参考上面步骤举一反三
安装教程:https://www.runoob.com/docker/docker-install-mongodb.html
docker-compose
1 | version: "3.5" |
链接进入创建用户和密码
1 | 新建一个twikoo数据库 |
docker清理
一天的时间,docker日志写了30个GB,太夸张了,像个人博主的网站没必要有日志,直接全局设置,每个容器10MB日志
1 | "log-driver": "json-file", |
再清理之前写入的日志
1 | /var/lib/docker/containers/history_logs |
后续
以上就是最近使用docker的心得,先希望大家可以指正,最主要的是看完可以举一反三,也能够明白docker命令的含义。