Appearance
VitePress+Docker+Jenkins构建个人网站(烂尾)
新建站指南已完成,如果感兴趣,也可以参照新指南
1. VitePress
1. 创建项目
bash
# 安装nodejs
# node -v 检查node版本
# npm -v 检查npm版本
mkdir my-blog
# 初始化项目文件
npm init -y
# 安装vite-press
npm add -D vitepress
# 初始化vitepress
npx vitepress init
# 启动
npm run docs:dev
2. 服务器
1 . 购买服务器
阿里云、腾讯云都可以
2. 安装Docker(以Ubuntu22.04为例)
bash
# 卸载旧版本Docker(可选)
sudo apt-get remove docker docker-engine docker.io containerd runc
# 安装必要依赖包
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
# 添加Docker官方GPG密钥
# GPG 密钥用于验证从 Docker 仓库下载的软件包的真实性和完整性
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 添加Docker官方APT仓库
# APT仓库是存放软件包的服务器,添加官方仓库可以确保您从Docker官方获取最新和最稳定的版本
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装Docker引擎
sudo apt-get install -y docker-ce docker-ce-cli containerd.io
# 安装 Docker Compose 插件
sudo apt-get install -y docker-compose-plugin
# 启动并设置Docker服务开机自启
sudo systemctl enable docker --now
# 验证Docker是否安装成功
sudo docker run hello-world
# 配置Docker镜像 (推荐)
# 1、登录阿里云容器镜像服务,获取您的加速器地址。
# 2、创建(没找到的话)或编辑 Docker 的配置文件 /etc/docker/daemon.json,添加以下内容:
{
"registry-mirrors": ["https://<your-accelerator-id>.mirror.aliyuncs.com"]
}
# <your-accelerator-id> 替换为您在阿里云获取的加速器 ID。
# 3、保存文件后,重新加载Docker配置并重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker
3. 安装Nginx
bash
# 后续站点文件放入服务器中的/app文件目录下即可
docker run -d -p 80:80 -v /app:/usr/share/nginx/html --name app nginx
docker run -d -p 80:80 \
-v /app:/usr/share/nginx/html \
-v /etc/nginx/conf.d:/etc/nginx/conf.d \
--name app nginx
docker run -d -p 80:80 -p 443:443 \
-v /app:/usr/share/nginx/html \
-v /etc/nginx/conf.d:/etc/nginx/conf.d \
-v /etc/letsencrypt/live:/etc/letsencrypt/live \
-v /etc/letsencrypt/archive:/etc/letsencrypt/archive \
--name app nginx
# 查看
docker ps
# 进入nginx容器 f2f是容器对应的id前三位
docker exec -it f2f /bin/bash
4. 项目部署
在本地把VitePress文件打包,压缩后发送到服务器的/app目录下,并且注意将dist中的内容放入/app中,而不是一整个dist文件(原因请查看上一步的文件路径映射)
这一步完成后,就可以在服务器公网IP上访问到部署的网站了
5. 安装Jenkins
使用以下指令安装,镜像我使用的是雷丰阳老师提供的,安装结束后可以通过8080端口访问
docker run \
-d \
-u root \
--privileged \
-p 8080:8080 \
-p 50000:50000 \
--name jenkins \
--restart=always \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /etc/localtime:/etc/localtime:ro \
leifengyang/jenkins:2.455-jdk21
docker run \
- 启动一个新的容器实例。
-d \
- 以分离模式(后台运行)启动容器。
-u root \
- 以
root
用户身份运行容器内的进程。
--privileged \
- 赋予容器额外的权限,允许访问宿主机的所有设备。
-p 8080:8080 \
- 将宿主机的 8080 端口映射到容器的 8080 端口,通常用于 Jenkins 的 Web 界面访问。
-p 50000:50000 \
- 将宿主机的 50000 端口映射到容器的 50000 端口,用于 Jenkins 的代理连接。
--name jenkins \
- 为容器指定名称
jenkins
,方便后续管理。
--restart=always \
- 设置容器在 Docker 服务启动时自动启动,并在容器退出时自动重启。
-v jenkins-data:/var/jenkins_home \
- 将名为
jenkins-data
的 Docker 卷挂载到容器的/var/jenkins_home
目录,用于持久化 Jenkins 的数据。
-v /var/run/docker.sock:/var/run/docker.sock \
- 将宿主机的 Docker 套接字文件挂载到容器内,允许容器内的 Jenkins 实例与宿主机的 Docker 引擎进行交互。
-v /etc/localtime:/etc/localtime:ro \
- 将宿主机的本地时间配置文件挂载到容器内,确保容器内的时间与宿主机一致。
ro
表示以只读模式挂载。
leifengyang/jenkins:2.455-jdk21
- 指定要使用的 Docker 镜像及其标签。此处使用的是
leifengyang/jenkins
镜像的2.455-jdk21
标签版本。
6. 配置Jenkins
bash
# 查看Jenkins初始密码
docker logs jenkins
- 修改密码
- 安装推荐插件
- 安装Blueocean插件
- 安装Docker插件 (Docker、Docker Commons、Docker Pipeline、Docker API)
- 安装Generic Webhook Trigger (可选)
- 在Dashboard/系统管理/Clouds中选择New cloud,Type选择Docker,名字自取,然后创建
- 第二步中展开Docker Cloud details,填Docker Host URL unix:///var/run/docker.sock
- 往下继续查找,看到Enabled点击勾选,接下来找到Test Connection,如果能显示docker版本,就证明整合好docker了,就可以点击保存了
- 回到首页,找到新建任务,点击并找到流水线,并创建
7. 配置流水线
请在项目根目录下创建一个Jenkinsfile文件
tex
// jenkins 流水线文件
pipeline {
agent any
stages {
stage("构建") {
steps {
withDockerContainer('node') {
sh 'ls -al'
sh 'node -v'
sh 'npm config set registry https://registry.npmmirror.com'
sh 'npm install'
sh 'npm run docs:build'
sh 'ls .vitepress/'
}
}
}
stage("制品") {
steps {
// 切换到一个目录中干活; 默认在 /var/jenkins_home/workspace/项目名
dir('.vitepress/dist') {
sh 'ls -al'
sh 'tar -zcvf docs.tar.gz *'
// 让Jenkins保存制品
archiveArtifacts artifacts: 'docs.tar.gz',
allowEmptyArchive: true,
fingerprint: true,
onlyIfSuccessful: true
sh 'ls -al'
}
}
}
stage("部署") {
steps {
dir('.vitepress/dist') {
sh 'ls -al'
writeFile file: 'Dockerfile',
text: ''' FROM nginx
ADD docs.tar.gz /usr/share/nginx/html/'''
sh 'cat Dockerfile'
sh 'docker build -f Dockerfile -t docs-app:latest .'
sh 'docker rm -f app'
sh 'docker run -d -p 80:80 --name app docs-app:latest'
}
}
}
}
}
8. 上传到Gitee仓库
请在本地机将项目源码上传到gitee仓库(网上上传本地文件到Gitee仓库的教学很多,大家可以自行学习后再来)
注意:dist文件、cache文件、node_modules文件(一定不能提交)不需要提交
也可以在.gitnore中写好
node_modules
.vitepress/cache
.vitepress/dist
.idea
9. 后续
可以到b站的雷丰阳老师看更详细的视频介绍,完成最后一步gitee仓库和Jenkins的结合