一键式自动给个人云服务搭建常用平台

这篇具有很好参考价值的文章主要介绍了一键式自动给个人云服务搭建常用平台。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

有时兴致来了就喜欢瞎鼓捣,几年前还是学生时买过学生优惠的云服务器,但没钱续费关停后就不了了之,近期看到有活动又重新入手了
但问题就来了,之前好不容易搭建上去的各种服务,现在又得重新来一遍
几年前还是学生时可能对这类环境搭建还比较感兴趣
现在人老了,精力不够了,做啥都考虑效率问题
如果几年后又重新买了,岂不是又得重新来一遍?

所以啊,还是得搞个一键式操作,来把这类基础、重复且低效的准备工作改造成自动化

诉求

覆盖我日常使用的服务有:

  • 个人博客、笔记平台
    • 方便维护、查阅我过往积累的博客和笔记
  • NextCloud
    • 个人云网盘,也支持在线文档编辑、查阅(如在线 office)
  • UI 组件使用说明平台
    • 方便我查阅过往封装的通用 UI 组件的使用文档
  • Jenkins
    • 方便我自动化管理各个云服务

一键式自动给个人云服务搭建常用平台

一键式自动给个人云服务搭建常用平台

一键式自动给个人云服务搭建常用平台

那么,该怎么做呢?

准备工作

如果是第一次搞,那么还是有些准备工作,就绪后,随便在一台新的云服务执行下自动化脚本完事

1. 资料、代码都上 github

  • 把博客笔记平台的各个 md 文档、图片资源等都存放到 github 管理
  • 把组件使用平台的项目代码也 github 管理
  • 把创建 docker 的相关配置文件也 github 管理

既然要方便一键式部署,就把各种资料都存储到网上,免费且稳定的应该就是 github 了,这样后续就可以写个自动化脚本去自动拉取各个资料了

2. 编写 docker-compose.yml 和各服务的 Dockerfile

各个云服务通过 docker 来部署,环境搭建就可以做到一份配置,到处部署的效果了。

目录结构说明

├─ doc # 博客、笔记平台,用 nginx 做容器
│ ├─ Dockerfile
│ ├─ nginx.conf
├─ jenkins # jenkins 平台,预置好 node, pnpm 等环境
│ ├─ Dockerfile
├─ nginx # 监听默认端口(80,443),根据二级域名做反向代理
│ ├─ Dockerfile
│ ├─ nginx.conf
├─ uidoc # 组件库使用说明平台,用 nginx 做容器
│ ├─ Dockerfile
│ ├─ nginx.conf
├─ docker-compose.yml # 上述容器的统一管理、通信配置

jenkins 容器的 Dokcerfile

# 使用基于 Debian 的 Jenkins 镜像作为基础
FROM jenkins/jenkins:lts

# 切换到 root 用户
USER root

# 安装 Node.js
RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash -
RUN apt-get install -y nodejs

# 安装 pnpm
RUN npm install -g pnpm

# 安装 yarn
RUN npm install -g yarn

# 切换回 Jenkins 用户
USER jenkins

EXPOSE 8080

nginx 容器的反向代理配置

server {
    listen  80;
    listen [::]:80;
    server_name *.dasu.fun;
    client_max_body_size 1024M;

    location / {
      # 正则匹配二级域名,并赋值给变量 $domain
      if ($http_host ~* "^(.*?)\.dasu\.fun$") {
        set $domain $1;
      }
      # 根据二级域名,做反向代理转发
      if ($domain ~* "jenkins") {
        proxy_pass http://192.168.5.104:8080;
      }
      if ($domain ~* "blog") {
        proxy_pass http://192.168.5.105;
      }
      if ($domain ~* "uidoc") {
        proxy_pass http://192.168.5.106;
      }
      if ($domain ~* "nextcloud") {
        proxy_pass http://192.168.5.108;
      }
      if ($domain ~* "doc") {
        proxy_pass http://192.168.5.110;
      }
      proxy_set_header Host	$host;
      proxy_set_header X-Real-IP	$remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

      proxy_pass http://192.168.5.110;
    }
}

docker-compose.yml 配置

version: "3"

services:
  nginx:
    build: ./nginx/ # 使用位于 ./nginx/ 目录中的 Dockerfile 来构建容器镜像
    ports:
      - "80:80" # 将容器的 80 端口映射到主机的 80 端口
    restart: always # 容器停止后自动重启
    networks:
      n_nginx:
        ipv4_address: 192.168.5.103 # 为容器分配指定的 IPv4 地址

  jenkins:
    build: ./jenkins/ # 使用位于 ./jenkins/ 目录中的 Dockerfile 来构建容器镜像
    ports:
      - "9001:8080" # 将容器的 8080 端口映射到主机的 9001 端口
      - "50000:50000" # 将容器的 50000 端口映射到主机的 50000 端口
    user: root # 在容器中以 root 用户身份运行
    restart: always # 容器停止后自动重启
    volumes:
      - /root/Doc/:/var/jenkins_home/doc/codes/ # 将主机的 /root/Doc/ 目录挂载到容器的 /var/jenkins_home/doc/codes/ 目录
      - /root/uidoc/:/var/jenkins_home/uidoc/codes/
      - /root/.ssh/:/root/.ssh/:ro # 将主机的 /root/.ssh/ 目录挂载到容器的 /root/.ssh/ 目录,并设置为只读
      - /etc/localtime:/etc/localtime:ro # 将主机的 /etc/localtime 文件挂载到容器的 /etc/localtime 文件,并设置为只读
    networks:
      n_nginx:
        ipv4_address: 192.168.5.104 # 为容器分配指定的 IPv4 地址

  uidoc:
    build: ./uidoc/ # 使用位于 ./uidoc/ 目录中的 Dockerfile 来构建容器镜像
    ports:
      - "9002:80" # 将容器的 80 端口映射到主机的 9002 端口
    restart: always # 容器停止后自动重启
    volumes:
      - /root/uidoc/dist/:/usr/share/nginx/html/
    networks:
      n_nginx:
        ipv4_address: 192.168.5.106 # 为容器分配指定的 IPv4 地址

  db:
    image: postgres # 使用 PostgreSQL 镜像
    restart: always # 容器停止后自动重启
    environment:
      - POSTGRES_PASSWORD=222zaqXSW! # 设置 PostgreSQL 数据库的密码
      - POSTGRES_USER=postgres # 设置 PostgreSQL 数据库的用户名
    volumes:
      - /root/postgres/data:/var/lib/postgresql/data # 将主机的 /root/postgres/data 目录挂载到容器的 /var/lib/postgresql/data 目录
    expose:
      - "5432" # 暴露容器的 5432 端口给其他容器使用
    networks:
      n_nginx:
        ipv4_address: 192.168.5.107 # 为容器分配指定的 IPv4 地址

  nextcloud:
    image: nextcloud # 使用 Nextcloud 镜像
    restart: always # 容器停止后自动重启
    ports:
      - 9003:80 # 将容器的 80 端口映射到主机的 9003 端口
    depends_on:
      - db # 依赖于 db 服务,确保数据库服务在 Nextcloud 服务启动之前已经启动
    environment:
      - POSTGRES_HOST=db # 设置 Nextcloud 使用的 PostgreSQL 数据库的主机为 db
      - POSTGRES_DB=postgres # 设置 Nextcloud 使用的数据库名称
      - POSTGRES_USER=postgres # 设置 Nextcloud 使用的数据库用户名
      - POSTGRES_PASSWORD=222zaqXSW! # 设置 Nextcloud 使用的数据库密码
    volumes:
      - nextcloud:/var/www/html # 将名为 "nextcloud" 的卷挂载到容器的 /var/www/html 目录
    networks:
      n_nginx:
        ipv4_address: 192.168.5.108 # 为容器分配指定的 IPv4 地址

  doc:
    build: ./doc/
    ports:
      - "9005:80"
    restart: always
    volumes:
      - /root/Doc/dist/:/usr/share/nginx/html/
    networks:
      n_nginx:
        ipv4_address: 192.168.5.110 # 为容器分配指定的 IPv4 地址

networks:
  n_nginx:
    driver: bridge # 使用桥接网络模式
    ipam:
      config:
        - subnet: 192.168.5.0/24 # 定义网络的子网地址范围为 192.168.5.0/24,宿主机一般会是该网段的 .1,所以不要将网段设置为 1

# 命名卷是多容器共享卷,具有持久化能力
volumes:
  nextcloud:

3. 购买域名、备案和配置 DNS 解析

购买和备案自行参考域名购买的平台指引
由于我使用到多个云服务,而且是通过二级域名来区分,因此需要配置下各个二级域名的解析,如:

主机记录(二级域名) 记录值(云服务器 IP)
uidoc 59.110.12.xx
doc 59.110.12.xx
netcloud 59.110.12.xx
jenkins 59.110.12.xx
blog 59.110.12.xx
www 59.110.12.xx

4. 云服务器放开入端口

如果没有购买域名,或者需要直接用 ip+port 访问不同服务,那么需要放开对应的端口,以阿里云为例,在域名控制台-安全组-访问规则-入方向里配置:

一键式自动给个人云服务搭建常用平台

自动化脚本一键式部署

1. 云服务生成 ssh

由于所有的资料都传到 github 上了,因此需要先把云服务器的 ssh 配置到 github 上,以便服务器有权限拉取 github 项目

  • ssh-keygen -t rsa -b 4096 -C "xxx@qq.com"
  • cat .ssh/id_rsa.pub
  • 将第二步输出的公钥复制到 github 的 ssh 配置

2. 在服务器上执行脚本

cat << 'EOF' > setup.sh

#!/bin/bash

# 函数:打印日志
log() {
  echo '>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>'
  echo "$1"
}

# 更新软件库
sudo yum update -y
# 安装 Docker 环境
log "开始安装 Docker 环境..."
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo cp /etc/docker/daemon.json /etc/docker/daemon.json.bak
sudo systemctl start docker
sudo usermod -aG docker $USER
docker -v
log "Docker 环境安装完成。"

# 安装 Docker Compose 环境
log "开始安装 Docker Compose 环境..."
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
log "Docker Compose 环境安装完成。"
docker-compose --version

# 安装 Git 环境
log "开始安装 Git 环境..."
sudo yum install -y git
log "Git 环境安装完成。"
git --version

# 安装 nvm 和 Node.js 环境
log "开始安装 nvm 和 Node.js 环境..."
curl -o- https://gitee.com/mirrors/nvm/raw/v0.39.0/install.sh | bash
source ~/.bashrc
nvm --version
nvm install --lts
npm config set registry https://registry.npm.taobao.org
log "nvm 和 Node.js 环境安装完成。"
node -v

# 安装 Whistle 环境
log "开始安装 Whistle 环境..."
npm install whistle -g
log "Whistle 环境安装完成。"
#w2 start

# 安装 pnpm
log "开始 pnpm..."
npm install -g pnpm
pnpm -v

# 安装 yarn
log "开始 yarn..."
npm install -g yarn
yarn -v


# 拉取 github 仓库
log "拉取 github 仓库..."

cd /root/
mkdir blog
mkdir github
mkdir postgres

echo -e "Host github.com\n  StrictHostKeyChecking no" >> ~/.ssh/config
git clone git@github.com:woshidasusu/dockers.git

cd /root/blog
git clone git@github.com:woshidasusu/woshidasusu.github.io.git

cd /root/
git clone git@github.com:woshidasusu/Doc.git
cd Doc
pnpm install
pnpm run build


cd /root/
git clone git@github.com:woshidasusu/uidoc.git
cd uidoc
npm install
npm run build


log "所有环境安装完成。"
docker -v
docker-compose --version
node -v


EOF

  • 执行后,会在当前目录下生成一份 setup.sh 文件,继续执行:
  • chmod +x setup.sh
    • 将文件设置成可执行
  • bash setup.sh
    • 执行脚本

脚本会自动去安装 docker, docker-compose, git, nvm, node, whistle 以及拉取 github 的项目
注:有些下载源是 github 的可能会失败,如果失败了需要手动执行,通常是 docker-compose 和 nvm 可能出现安装失败

docker-compose up -d

进入上述脚本下载的 dockers 目录,在该目录执行:

  • docker-compose up -d

执行结束后,各服务容器就会创建并运行起来了,这时候浏览器访问相关服务试试看就完事了


搞完这些后,我可以随便格式化云盘,每次重新搭时,先配置个 ssh,再执行下脚本,服务就都自动搭建完毕,舒服~文章来源地址https://www.toymoban.com/news/detail-761609.html

到了这里,关于一键式自动给个人云服务搭建常用平台的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Apollo】自动驾驶的平台背景,平台介绍

    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 本文用于投稿于星火培训:报名链接 阿波罗是百度发布的名为“Apollo(阿波罗)”的向汽车行业及自动驾驶领域

    2024年02月10日
    浏览(44)
  • 腾讯云Linux轻量应用服务器一键部署WordPress个人博客教程

    WordPress 作为动态博客的代表,至今已经有十几年历史,而且一直在更新发展中,功能强大,插件和主题丰富,WordPress搭建使用也很方便。作为个人站长和博主,很多都是从 WordPress 入门的。 本文为零基础 WordPress 建站教程,手把手教你从零开始搭建 WordPress 个人博客。 本文中

    2023年04月08日
    浏览(52)
  • 开源版小程序开发一键生成平台源码 完整前后端+搭建教程

    分享一个一键生成微信小程序的源码,含15大功能模块,像微同城、电商类、在线报名、社区团购、外卖点餐、AI智能名片等小程序都有,根据需求可任意调用,自由DIY,开发属于你自己的小程序,源码开源可二开,含完整前后端程序包和详细的搭建教程。      小程序源码下

    2024年02月16日
    浏览(45)
  • 如何一键展示全平台信息?Python手把手教你搭建自己的自媒体展示平台

    灵感源于之前写过的Github中Readme.md中可以插入自己的js图片和动态api解析模块,在展示方面十分的美观: 这方面原理可以简化为,在Markdown中,你可以使用HTML标签来添加图像,就像这样: 具体来说,你可以使用 img 标签来嵌入图像,并使用 src 属性指定图像的URL。我们可以通

    2024年04月09日
    浏览(52)
  • [bat]0基础实现自动化办公-基于start实现一键打开常用软件/文档

    每次开机时,都要一个个打开常用软件,比如微信、QQ或是word文档、excel表格等程序,比较费时。 使用bat脚本中的start方法,通过将需要打开的程序或文件写入到bat脚本中,运行bat脚本从而实现一键批量打开常用软件。 通过前文已实现了新建一个可运行的bat脚本,现在我们只

    2024年01月19日
    浏览(55)
  • 零基础搭建个人影音媒体平台,实现远程访问Jellyfin播放器的简易方法

    随着移动智能设备的普及,各种各样的使用需求也被开发出来,从最早的移动听音乐、看图片(MP3时代),到之后的移动视频需求(MP4时代)到现在的移动流媒体需求(智能手机看视频)。但当我们习惯这些需求后,忽然发现自己不知不觉间成了待割的韭菜(3台设备就要加钱

    2024年02月11日
    浏览(36)
  • 搭建自己个人服务器

    很高兴能够跟大家分享我写的这篇文章! 搭建自己的个人服务器主要分为三步,分别为1、通过腾讯云或者阿里云、华为云等购买云服务器,2、申请域名并解析,3、开发自己程序或者前后端之类的部署在服务器 可以选择购买云服务器或者轻量应用服务器,两者区别是前者相

    2024年02月05日
    浏览(70)
  • 【VMware】搭建个人服务器

    Mac笔记本跑虚拟机总感觉别扭,通过VMware虚拟机技术,将闲置的Windows笔记本打造成服务器,用于搭建集群之用 用作宿主机的Windows需要安装好VMware软件 参看网站:https://blog.csdn.net/al6nlee/article/details/130792439 关闭宿主机的防火墙,避免请求被拦截 用作连接机的Mac需要安装好ss

    2024年02月06日
    浏览(85)
  • 个人云服务器搭建MQTT服务器

    🔮🔮🔮🔮🔮相关文章🔮🔮🔮🔮🔮 ESP32连接MQ Sensor实现气味反应 🔗 https://blog.csdn.net/ws15168689087/article/details/131365573 ESP32连接云服务器【WebSocket】 🔗 https://blog.csdn.net/ws15168689087/article/details/131406163 ESP32+MQTT+MySQL实现发布订阅【气味数据收集】 🔗 https://blog.csdn.net/ws1516868

    2024年02月15日
    浏览(50)
  • 家用宽带搭建个人服务器(一)

    以前不知道在哪看过 家用宽带搭建个人网站 这种文章,所以心里一直对这个事念念不忘,毕竟万物皆可薅,能免费就免费,要用有限的生命好好折腾一番 1. 宽带安装 装宽带很简单,拿上身份证去电信营业厅选好套餐付完钱等装维师傅上门安装就可以了。 我家是169的融合套

    2024年02月06日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包