前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >单服务器部署多个域名下的多端口服务,使用docker+nginx的方案

单服务器部署多个域名下的多端口服务,使用docker+nginx的方案

作者头像
拿我格子衫来
发布2022-01-24 15:33:46
1.7K0
发布2022-01-24 15:33:46
举报
文章被收录于专栏:TopFETopFE

优雅地部署多个项目到一台服务器,并配置多个二级域名

历经一个月,我的域名fizz.ink终于备案成功了。于是开始了新一轮的网站折腾。 折腾的目的是想要学习网站部署的细节以及相关知识,域名解析,一台服务器部署多个二级域名的项目。以及Docker的配置。

我的资源

  • 已备案的域名
  • 一台腾讯云服务器(已安装Docker) 配置4核8G 2M带宽

要部署的服务有这些。

  • fizz.ink 是网站入口,有以下链接
  • gitlab 使用 gitlab.fizz.ink访问
  • rancher 使用 rancher.fizz.ink访问
  • tool 使用 tool.fizz.ink访问
  • node-red 使用 node-red.fizz.ink访问
  • promethus 使用 promethus.fizz.ink访问
  • scratch 使用 scratch.fizz.ink访问
  • jenkins 使用 jenkins.fizz.ink访问
  • grafana 使用 grafana.fizz.ink访问 首先配置好我的域名解析 如下图

具体启动方式是使用Docker将各个项目起来,最后使用Nginx将各个端口代理起来,都使用listen 80端口

具体做法如下

代码语言:javascript
复制
# 递归在/home/fizz/nginx下创建config(存放配置文件),www(存放网站静态文件),cert(存放SSL证书)三个文件夹
mkdir -p /home/fizz/nginx/{config,www,cert}

使用Docker运行各个项目

Fizz
代码语言:javascript
复制
docker run -d -p 8001:80 --name=fizz fizz

(ps:请使用自己的容器名)

Rancher
代码语言:javascript
复制
docker run -d --restart=unless-stopped --name=rancher -p 8002:80 -p 8003:443 rancher/rancher
Tool
代码语言:javascript
复制
docker run -d -p 8004:80 --name=tool tool

(ps:请使用自己的容器名)

GitLab
代码语言:javascript
复制
sudo docker run --detach \
  --hostname gitlab.mczaiyun.top \
  --publish 8005:443 --publish 8006:80 --publish 222:22 \
  --name gitlab \
  --restart always \
  --volume /srv/gitlab/config:/etc/gitlab \
  --volume /srv/gitlab/logs:/var/log/gitlab \
  --volume /srv/gitlab/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest
Grafana
代码语言:javascript
复制
docker run -d -p 8007:3000 --name=grafana grafana/grafana
Prometheus
代码语言:javascript
复制
docker run -d --name=prometheus -p 8008:9090 prom/prometheus
Node-RED
代码语言:javascript
复制
docker run -d -p 8009:1880 --name=node-red nodered/node-red
Scratch
代码语言:javascript
复制
docker run -d -p 8010:80 --name=scratch  scratch

(ps:请使用自己的容器名)

Jenkins
代码语言:javascript
复制
docker run -d -p 8011:8080 --name=jenkins jenkinsci/blueocean
项目启动完成后

项目启动完成后,需要先使用IP验证一下服务是否可以访问,如果不能访问检查下防火墙,安全组。查看下日志 使用命令

代码语言:javascript
复制
# 查看容器日志
docker logs [容器名]

# 查看运行的容器
dcoker ps

项目启动完整无误后,需要编写nginx配置文件 如下

创建项目的配置文件

代码语言:javascript
复制
touch fizz.conf gitlab.conf grafana.conf jenkins.conf node-red.conf prometheus.conf rancher.conf scratch.conf tool.conf

内容分别是

fizz.conf
代码语言:javascript
复制
server {
    listen      80;
    server_name fizz.mczaiyun.top;
    location / {
        proxy_pass http://127.0.0.1:8001;
    }
}
rancher.conf
代码语言:javascript
复制
map $http_upgrade $connection_upgrade {
        default Upgrade;
        ''      close;
}

server {
    listen               443 ssl;
    server_name          rancher.mczaiyun.top;

    ssl_certificate      /etc/nginx/cert/rancher.mczaiyun.top.pem;
    ssl_certificate_key  /etc/nginx/cert/rancher.mczaiyun.top.key;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    add_header Access-Control-Allow-Origin *;

    location / {
        proxy_pass http://127.0.0.1:8002;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Port $server_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_read_timeout 900s;
    }
}
gitlab.conf
代码语言:javascript
复制
server {
    listen               80;
    server_name          gitlab.mczaiyun.top;

    location / {
        proxy_pass http://127.0.0.1:8006;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Port $server_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_read_timeout 900s;
    }
}
node-red.conf
代码语言:javascript
复制
server {
    listen      80;
    server_name node-red.mczaiyun.top;
    location / {
        proxy_pass http://210.22.22.150:1862;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Port $server_port;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_read_timeout 900s;
    }
}

tool.conf,grafana.conf,prometheus.conf, scratch.conffizz.conf 的内容一致,除了端口号不一样。

最后一步:启动网关Nginx代理
代码语言:javascript
复制
# 将config目录挂载到nginx的配置文件目录conf.d
# 将www目录挂载到nginx的/html目录
# 将cert目录挂载到nginx的cert目录
docker run -p 443:443 -p 80:80 --name nginx \
  -v /home/fizz/nginx/config:/etc/nginx/conf.d \
  -v /home/fizz/nginx/www:/usr/share/nginx/html \
  -v /home/fizz/nginx/cert:/etc/nginx/cert \
  -d nginx
写在最后

其中最主要是使用Nginx配置文件中的server_name监听不同的域名访问,分别代理到不同的真实服务中,此外,http转发https,证书配置,以及websocket的转发。都是本次探索获取的知识点。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 优雅地部署多个项目到一台服务器,并配置多个二级域名
    • Fizz
      • Rancher
        • Tool
          • GitLab
            • Grafana
              • Prometheus
                • Node-RED
                  • Scratch
                    • Jenkins
                      • 项目启动完成后
                        • fizz.conf
                        • rancher.conf
                        • gitlab.conf
                        • node-red.conf
                      • 最后一步:启动网关Nginx代理
                        • 写在最后
                        相关产品与服务
                        容器镜像服务
                        容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档