本章节主要来讲述项目的基本结构,,建议查看docker专栏结构,以便了解流程~
系列文章
章节 | |
---|---|
1 | docker以及docker-compose在window以及linux的安装 |
2 | 项目对应的docker-compose结构 |
3 | 怎么将docker-compose项目部署到服务器上 |
4 | 配置服务器JENKINS环境 |
额外篇
章节 | |
---|---|
1 | Sentry 是一个开源的错误监控和日志聚合平台-- 通过docker-compose 安装Sentry |
前言
docker持久化部署vue前端nodejs后端项目-- docker-compose部署nginx+jenkins+mysql+git。
做了一个项目,用nodejs写的后端,vue写的PC端以及移动端,数据库用mysql,现在要部署到服务器上。由于怕下次部署又要一堆操作,就弄了个docker,并且以此文章来做笔记以及分享。
期望
- 服务器:换了服务器,只需要服务器安装好docker+docker-compose,并将此文件配置拷贝到服务器,编译一下,就可以有个项目框架,再对jenkins进行安装环境配置就可以了
(jenkins的项目也同步到了jenkins/jobs中,所以项目不用重复配置)
。 - 代码更新:以后有新版本的代码,可以通过jenkins打包,并且实时发布,对于web打包就是正常的build一下就可以,nodejs后端的话比较麻烦,要通过jenkins下载最新代码,运行脚本,将nodejs重新打包成镜像,并安装成新的容器。
GIT 项目目录结构
主要参考脚本文件:
docker.bat (window)和 docker.sh(linux)就可以了。(docker.sh 可以用git 的bash运行就可以了)
自己的项目就删除jenkins/jobs,修改nginx配置就可以了
docker.sh 脚本
# 删除之前生成的映射文件
rm ./app -rf
# 停止 Docker Compose 中的所有容器,并删除相关的数据卷,包括项目的数据和缓存
docker-compose down -v
# 加载docker-compose
docker-compose up -d
# 休眠
sleep 10s
# 关闭docker-compose 拷贝配置文件
docker-compose down
# 将nginx配置文件拷贝到目标目录
rm ./app/nginx/nginx.conf -rf
cp ./config/nginx/nginx.conf ./app/nginx/nginx.conf -f
cp ./config/nginx/conf/ ./app/nginx/conf/ -rf
# 将jenkins配置文件拷贝到目标目录
cp ./config/jenkins/* ./app/jenkins/ -r
# 重新加载docker-compose
docker-compose up -d
# 拷贝配置文件 可自行注释,前后对比再考虑是否需要执行该指令
# 其中jenkins 要与你的docker-compose.yml 文件的jenkins容器名保持一致~
docker cp ./config/jenkins/config.xml jenkins:/var/jenkins_home/
git结构
# tree /f
D:.
├─jenkins+nginx
│ │ .gitignore
│ │ docker-compose.yml
│ │ docker-compose1.yml
│ │ docker.sh
│ │ README.md
│ │
│ └─config
│ ├─jenkins
│ │ │ config.xml
│ │ │ cp.sh
│ │ │
│ │ └─jobs
│ │ └─mutual-likes
│ │ │ config.xml
│ │ │
│ │ └─jobs
│ │ ├─back-end-of-mutual-likes
│ │ │ config.xml
│ │ │ nextBuildNumber
│ │ │
│ │ ├─front-end-of-mutual-likes
│ │ │ config.xml
│ │ │ nextBuildNumber
│ │ │
│ │ └─mobile-end-of-mutual-likes
│ │ config.xml
│ │ nextBuildNumber
│ │
│ └─nginx
│ │ nginx.conf
│ │
│ └─conf
│ front.conf
│ mobile.conf
│ pc.conf.back
│
├─nodejs
│ .dockerignore
│ Dockerfile
│ package-lock.json
│ package.json
│ server.js
│
└─sentry
auto.bat
docker-compose.yml
README.MD
docker-compose 文件
0. 参数概览
- privileged:用来给容器root权限,不安全的
- environment:设置容器中的环境变量
- volumes :用来存储docker持久化的数据,启动tomcat容器后,读取的是主机目录中的文件包
- network_mode: 设置容器的网络模式,下面是几种网络模式,有需要的可以自行查找资料
- host:容器环境不隔离,将使用主机的端口和ip,不能与ports 端口映射同时使用
- bridge:默认网卡,类似于 VMware 的 NAT 模式,如果需要访问容器内部的端口需要进行端口映射。
- overlay
- Macvlan
- none:禁止所有联网,没有网络驱动。
1. 源文件
version: '3.4'
services:
nginx:
image: nginx:1.23.3-alpine-slim
container_name: nginx
restart: always
user: root
privileged: true
ports:
- 80:80
- 443:443
- 10081:10081
- 10082:10082
networks:
- nginx_network
volumes:
# window 环境
- ./app/nginx/conf/:/etc/nginx/conf.d/
- ./app/nginx/nginx.conf:/etc/nginx/nginx.conf
- ./app/nginx/logs/:/var/log/nginx/ # 同上
# 本地测试用
# - /C/docker-compose/nginx/www/:/www
# 这里是挂载jenkins的workspace目录下的目标文件...
- ./app/jenkins/www:/www
jenkins:
image: 'jenkins/jenkins:jdk11'
# 自定义容器名
container_name: jenkins
restart: always
# 授权
user: root
privileged: true
ports:
- 8081:8080
- 50001:50000
volumes:
# 下边4个都是配置文件
- ./app/jenkins/jobs:/var/jenkins_home/jobs
# 这个是项目打包后cp到的地址,这边映射出来
- ./app/jenkins/www:/jenkins
# 下面几个挂载是在linux下的,window 暂时没有找到对应的文件...
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker # 这是为了我们可以在容器内使用docker命令
- /usr/bin/docker-compose:/usr/local/bin/docker-compose
mysql: #mysql容器
image: mysql
container_name: mysql
restart: always
# 授权
user: root
privileged: true
environment: ##设置环境便变量
TZ: Asia/Shanghai ##设置时区
MYSQL_ROOT_PASSWORD: mysql456852 #这里自行设置root用户的密码
command: ##设置容器运行时执行的命令
--default-authentication-plugin=mysql_native_password
volumes:
- ./app/mysql/datadir/:/var/lib/mysql
ports:
- 3306:3306 #宿主机和容器间的端口映射,可自行配置
adminer: ##指定服务名为adminer
image: adminer ##指定要运行的镜像为adminer adminer是一个mysql数据库的web工具
container_name: adminer ##指定容器名
user: root
privileged: true
restart: always ##设置重启策略为always
ports: ##指定映射的端口(宿主机端口:容器内部端口)
- 8088:8080
depends_on: ##设置容器的依赖关系,该adminer容器关联mysql容器
- mysql ##mysql这个镜像安装后,才会安装这个镜像
# 需要桥接上,主要是nginx做反向代理给nodejs容器,nodejs 由jenkins打包并加入到该网络
# nginx 的配置也需要添加上这个服务
networks:
nginx_network:
driver: bridge
2. jenkins
- /var/jenkins_home/jobs:将jenkins配置文件映射出来,git上传,后期换服务器也方便
3. nginx
nginx 配置的宗旨:一个server+port确定一个web项目…
别搞特殊,比如一个域名下,只用80端口,还想要多个项目,是很傻逼的一件事…
数据卷(挂载)
- nginx/nginx.conf:讲本地配置挂载到容器中,实现初始化 (这里挂在的话会有问题,但是docker.sh 已经做了处理了~)
- nginx/conf/:文件夹,可扩展的配置也放进去了,比如PC跟Phone项目各可以有一个配置文件,其中映射的端口号也放在compose文件nginx service中的ports了
- nginx/www/: 文件夹,主要是用于测试,后期可将其挂载到jenkins 生成的文件中
- nginx/logs/:文件夹,主要看nginx生成的日志
4. mysql
- 因为是mysql最新版,所以为了兼容密码,可以添加command指令,设置mysql_native_password
- 数据库登录密码,可以在环境中初始化
MYSQL_ROOT_PASSWORD: 123456
5. adminer
用于登录远程登录数据库
其中,登录信息需要注意…
- 系统选择:mysql
- 服务器:需要的是compose 文件中mysql的service name~~~
- 账号:root
- 密码:在mysql service 可配置…
运行文件
# 记得先开打docker 服务...
# systemctl start docker
# 运行命令
docker-compose up -d
# 或者,运行脚本
./docker.sh
总结
本章节主要来讲述项目的基本结构,建议查看docker专栏结构,以便了解流程~