万字述说很多前端工程师都不会的服务器搭建(二)

【前言】作为一名前端工程师,我们的职责就是写页面还有解决提出需求的人🥹,鸽了很久的服务器搭建第二篇终于来了,整篇文章我估计会是万字系列,我会尽可能讲的有趣一些,如有问题也可以一起交流学习,本人只有简单服务器搭建基础,目前也在不断学习中,若下面的内容有错误,请各位大佬指正,理性讨论,谢谢☃️

【备注】本文服务器系统装的是 centos 7.6,各位小伙伴可以采用其他的实现,只是方便使用就好,根据自己所需要的业务场景进行更换即可。由于内容有点多,因此将本文拆分成多个文章,如果下面没有文章三的链接,就是笔者还没更新啦,请关注笔者,你的点赞转发关注将会是我更新文章的动力。

【前文】「一个长篇系列」万字述说很多前端工程师都不会的服务器搭建(一)

Docker-Compose简介

上篇以Nginx镜像为例子,使用了Docker进行安装,安装命令如下docker run -d --name inginx -p 80:80 nginx,这个命令会随着你业务需求的复杂程度而加长,是不是十分不好记嘞,而且随着要部署的服务越来越多,每次都得重新跑一次docker run,要是服务有依赖的话还得要按照先后顺序进行部署,万一一个不小心部署错乱了,就得重新部署。如果没有记录下来,你还得去找配置文件,看看当时到底是怎么配置的容器,十分繁琐。因此,为了解决Docker的痛点问题,Docker-Compose应运而生。

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它允许你通过一个简单的 YAML 文件来配置应用程序的服务、网络和卷等参数,然后使用一个单一的命令启动整个应用程序。Docker Compose 主要用于简化容器化应用程序的部署和管理过程。

特点

  1. 声明式配置: 使用 YAML 文件定义应用程序的服务、网络、卷等配置,使配置文件易于理解和编写。
  2. 多容器应用: Docker Compose 适用于多容器应用场景,可以同时启动和管理多个相关的容器。
  3. 服务定义: 在配置文件中定义应用程序的服务,包括使用的镜像、端口映射、环境变量等。
  4. 网络和卷配置: 允许定义自定义网络、卷以及它们之间的关联。
  5. 简化部署: 通过一个命令 (docker-compose up) 启动整个应用程序,简化了部署和运行多容器应用的过程。
  6. 容器编排: Docker Compose 提供了容器编排的能力,使得容器之间的依赖关系和启动顺序得以管理。

Docker-Compose 常用命令

日常惯例,先写一下常用命令,下面看到不会的时候再往上翻翻,以下命令都需要在 docker-compose.yamldocker-compose.yml文件根目录下执行

// 启动服务,up 的参数 -d 指的是将在后台启动容器并使它们继续运行
docker-compose up -d
docker-compose start

// 停止服务
docker-compose down
docker-compose stop

// 重启服务
docker-compose restart

// 列出所有运行中的容器
docker-compose ps 

// 查看日志
docker-compose logs

// 重新构建服务
docker-compose build

docker-compose up 和 docker-compose start 的区别

以下内容引用自ChatGpt,懒得去搜资料了,请大家仔细阅读。

  1. docker-compose up:

    • docker-compose up命令用于创建并启动Compose文件中定义的服务。它会首先构建缺失的镜像,然后启动容器。
    • 如果Compose文件中定义了多个服务,它们将同时启动,并通过配置的网络连接在它们之间建立通信。
    • 此命令还会输出容器的日志到控制台,方便查看容器的输出信息。
    • 默认情况下,该命令会监控容器的状态,并在容器退出时终止运行。
  2. docker-compose start:

    • docker-compose start命令用于启动Compose文件中定义的服务的已停止容器。
    • 如果容器已经在运行,则该命令不会产生任何影响。
    • docker-compose up不同,该命令不会构建镜像,只是启动已经存在的容器。
    • 它也不会输出容器的日志到控制台。

因此,docker-compose up用于启动服务并创建容器,而docker-compose start仅用于启动已停止的容器。在使用Docker Compose时,你可以根据需要选择适合的命令。

docker-compose down 和 docker-compose stop 的区别

以下内容引用自ChatGpt,懒得去搜资料了,请大家仔细阅读。

  1. docker-compose down:

    • docker-compose down命令用于停止并移除Compose文件中定义的服务及其相关的网络、容器和卷。
    • 它会停止Compose文件中定义的所有容器,并移除它们。
    • 同时,它还会移除创建的网络,并删除与Compose文件中定义的服务关联的卷。
    • 此命令会清理Compose项目的资源,并还原到停止状态,可以方便地重新构建和启动服务。
  2. docker-compose stop:

    • docker-compose stop命令用于停止Compose文件中定义的服务的正在运行的容器。
    • 它会停止Compose文件中定义的所有正在运行的容器,但不会移除它们。
    • 它不会移除网络或卷,只是停止容器的运行状态。
    • 它保留容器的状态和配置,可以使用docker-compose start命令重新启动这些容器。

因此,docker-compose down用于停止并移除服务及其相关资源,而docker-compose stop用于停止正在运行的容器,但保留其状态和配置。根据需要,你可以选择适当的命令来管理Compose项目中的容器。

Docker-Compose 具体使用

先将具体的步骤写在下方,接下来会按照下面的步骤去实战配置,不记得的小伙伴可以回来这里看看。

  1. 编写 Docker Compose 文件: 创建一个 docker-compose.yml 文件,定义应用程序的服务、网络、卷等配置。
  2. 配置服务: 在文件中为每个服务指定镜像、端口映射、环境变量等配置。
  3. 启动应用程序: 使用 docker-compose up 命令启动整个应用程序。使用 -d 选项可以在后台运行。
  4. 停止应用程序: 使用 docker-compose down 命令停止应用程序,会停止并删除相关的容器、网络和卷。
  5. 管理多容器应用: Docker-Compose 提供了一系列命令来管理应用程序,如 docker-compose ps 查看服务状态、docker-compose logs 查看日志等。
  6. 扩展和定制: 可以根据需要扩展和定制 Docker Compose 配置,以适应不同的应用程序需求。

Nginx

获取Nginx镜像(与第一篇的步骤一致)

默认获取最新版本的镜像,如果有问题再降低镜像版本即可

docker pull nginx

创建Nginx挂载文件夹(与第一篇的步骤一致)

这一步是为了将Nginx容器内的配置文件挂载到服务器上,因此需要创建存放的目录文件夹,可以自定义目录文件夹,不一定要按照我的来,如果有修改的话,按照自己修改后的目录文件夹来。

// 存放配置文件
mkdir -p /home/nginx

// 用于存放nginx日志
mkdir -p /home/nginx/logs

// 这个最关键,用于存放静态资源,也就是vue或者react打包出来后的产物(dist文件夹)
mkdir -p /home/nginx/html

不挂载的生成一个Nginx容器!!!!这一步很重要!!!(与第一篇的步骤一致)

如果有docker基础的小伙伴可能会知道,有一些容器可以直接挂载到宿主机上,但是nginx不可以,docker安装Nginx的时候,需要先读取配置才运行,如果宿主机对应的目录是空的话,就启动不了了,所以需要先安装不挂载的容器(来自好朋友的解释)然后再将容器内的配置文件复制出来,再进行挂载,听不懂的小伙伴也没关系,照着步骤往下走就对了!别跳过!

执行以下命令,生成一个Nginx容器,我这里命名为inginx,如果你们喜欢其他名字自己命名即可,下面对应着自己的命名进行操作。

docker run -d --name inginx -p 80:80 nginx

进入nginx容器,查看Nginx的配置,这步可做可不做,你随意~(与第一篇的步骤一致)

// 进入容器
docker exec -it inginx bash
// 查看nginx配置文件
cat /etc/nginx/nginx.conf
// 退出nginx
exit

不出意外的话你会得到下面的内容

万字述说很多前端工程师都不会的服务器搭建(二)

复制配置文件到宿主机(服务器)上

执行下面三条命令

docker cp inginx:/etc/nginx/nginx.conf /home/nginx/nginx.conf
docker cp inginx:/etc/nginx/conf.d /home/nginx/
docker cp inginx:/usr/share/nginx/html /home/nginx/

不出意外你应该会得到下面的提示

万字述说很多前端工程师都不会的服务器搭建(二)

删除刚刚空挂载的容器(与第一篇的步骤一致)

把配置文件复制出来后,原来的那个Nginx容器已经没用了,做个渣男(无不良取向,富强明主文明和谐),删了它,找新欢去了。

这时候你有两种方式删除这个Nginx容器

第一种:先暂停运行容器,再删除容器

docker stop inginx
docker rm inginx

第二种:直接删除正在运行的容器

docker rm - f inginx

编写docker-compose.yml文件

关于yml语法这里不讲解,可以自行查阅资料,yml个人感觉相当于js的对象keyvalue的关系,在Docker-Compose中记住几个关键的key即可,其他的key在有需要的时候去网上搜一下就行。

version:版本,现在默认写3即可

services:需要部署的服务(Nginx、Jenkins……)

image:镜像(nginx:latest)

container_name:容器名称(自取)

ports:端口映射(”80:80″)

volumes:相当于docker run -v,指的是数据卷挂载地址

(Eg: /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime)

networks:网络名称

depends_on:依赖

redis:redis相关配置

mysql:mysql相关配置

command: 附加命令

Docker-Compose部署最重要的一步便是编写yml文件,从这里开始与Docker直接部署有区别,在哪里新建yml文件呢,应该是项目的根目录下,在这里我部署nginx,所以我选择在/home/nginx下新建docker-compose.yml

// 切换到项目根目录下
cd /home/nginx

// 生成文件
touch docker-compose.yml

// 插入内容
vim docker-compose.yml

i插入,复制粘贴以下编写完成的yml内容进去

version: '3'
services:
  nginx:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime
      - /home/nginx/nginx.conf:/etc/nginx/nginx.conf
      - /home/nginx/conf.d:/etc/nginx/conf.d
      - /home/nginx/logs:/var/log/nginx
      - /home/nginx/html:/usr/share/nginx/html
    restart: always
    container_name: inginx

按下esc,输入:wq保存退出

如果你认真阅读了第一篇文章,就会发现其实yml只是将docker run的命令写成变量存储在里面而已。

上面编写的yml文件部署了nginx服务,镜像选取最新的nginx镜像,开放端口均为80,挂载了时区变量,nginx配置文件的映射文件夹,允许服务自启动,容器取名为inginx

启动应用程序服务

执行一下

docker-compose up -d

看到下图即说明部署成功

万字述说很多前端工程师都不会的服务器搭建(二)

(下面与第一篇的步骤一致)

这时候就可以去访问一下你自己的ip地址,你就会发现下面的内容。

万字述说很多前端工程师都不会的服务器搭建(二)

恭喜你已经成功使用Docker-compose部署了nginx

但也别着急,还没完成呢,还差几步,接着来

vim /home/nginx/conf.d/default.conf

进入 vim 模式下,按下 i 进入插入模式,删除掉以#开头的语句,将光标移动到location /语句块下面回车,修改为如下语句

server {
    listen       80;
    listen  [::]:80;
  + root /usr/share/nginx/html/dist/;
    server_name  localhost;

    location / {
  +     root   /usr/share/nginx/html/dist/;
  +     index  index.html;
  +     try_files $uri $uri/ /index.html;
    }

    error_page   500 502 503 504  /50x.html;

    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

插入后,按下esc,输入:wq,这个就是保存退出。

更改完配置后记得要重启一下Nginx容器

docker restart inginx

然后就可以上传你自己本地的dist文件夹上去服务器测试一下

scp -r ./dist root@[你自己的服务器ip]:/home/nginx/html
Eg: scp -r ./dist root@123.123.123.123:/home/nginx/html

然后就可以访问http://123.123.123.123/(只是示例,按你自己真实情况进行访问)

✅ 成功案例

万字述说很多前端工程师都不会的服务器搭建(二)

❌ 错误案例

如果你发现404,解决方法在第一篇文章内。

万字述说很多前端工程师都不会的服务器搭建(二)

Portainer

简介

Portainer 是一个用于管理 Docker 容器的图形用户界面工具。使用 Docker Compose 部署 Portainer 非常简单。

这个应该就不用解释了吧,dddd~

直接准备安装吧

编写 yml 文件

services中新增

portainer:
    image: portainer/portainer-ce
    ports:
      - "9000:9000"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /home/nginx:/home/docker_compose
    restart: always
    container_name: portainer

整个文件如下

services:
  nginx:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime
      - /home/nginx/nginx.conf:/etc/nginx/nginx.conf
      - /home/nginx/conf.d:/etc/nginx/conf.d
      - /home/nginx/logs:/var/log/nginx
      - /home/nginx/html:/usr/share/nginx/html
    restart: always
    container_name: inginx
  portainer:
    image: 6053537/portainer-ce
    ports:
      - "9000:9000"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /home/nginx:/home/docker_compose
    restart: always
    container_name: iportainer

注意: 我这里安装的是镜像是6053537/portainer-ce,这是一个汉化好了的portainer,一打开就是中文界面,如果有更喜欢英文版的小伙伴可以改成portainer/portainer-ce

启动应用程序服务

执行一下

// 暂停与删除容器
docker-compose down

// 重新部署与构建容器
docker-compose up -d

看到下图代表你已经完成portainer部署

万字述说很多前端工程师都不会的服务器搭建(二)

然后!!!!记得记得去服务器后台打开防火墙端口9000,如果没打开来问我为什么打不开,你就自己反省一下吧!!!!

然后就可以访问http://123.123.123.123:9000(只是示例,按你自己真实情况进行访问)

填写用户名、密码注册个账号

然后你登录,看到下图就完成啦(注册图没截图,懒得搞了,下面的图凑合看)!

万字述说很多前端工程师都不会的服务器搭建(二)

万字述说很多前端工程师都不会的服务器搭建(二)

写在最后

最近我做了一个自己的个人公众号,一方面是为了一些小伙伴能够在微信上能看到我的相关文章,另一方面也是想尝试新鲜事物,作为自己的一个挑战吧,还有一个方面是为了建立大家与我交流的渠道,这个公众号完全是由我本人运营,所以也不定期更新,回答各位小伙伴的各类问题,公司业务繁忙的时候也没办法实时更新,所以只能保证不鸽,希望大家也能多多给我的文章点赞转发在看啦,最近也会实现一些比较有趣的功能在我的公众号上,尽情期待。我也在这立个小目标粉丝先突破100好吧。

万字述说很多前端工程师都不会的服务器搭建(二)

微信公众号名字与笔者名字完全相同:微信搜索公众号陈适时点击添加关注即可。

原文链接:https://juejin.cn/post/7312476561679319066 作者:陈适时

(0)
上一篇 2023年12月16日 上午10:37
下一篇 2023年12月16日 上午10:47

相关推荐

发表回复

登录后才能评论