品牌独立网站-部署篇(Docker部署Nodejs)

  • 编辑时间: 2023-04-08 23:05:47
  • 浏览量: loading...
  • 作者: 段亮

   相信看过:品牌独立网站-准备篇的朋友,对网站开发完成,手动去部署我们的后端服务,有了大概的了解。今天我们就一起具体实操一下,以Docker 部署Node.js为例:

   一、安装所需环境

       如果还没安装docker和docker-compose的同学,可以先看下这篇文章:docker和docker-compose安装

   二、创建目录和安装对应服务镜像

       为了让朋友更好的了解整体流程,大概画了一个常见网站的架构图,如下图:        

网站访问架构图  

       用文字描述下:

           在没缓存的情况下,整个流程为:用户 -> Nginx服务 -> 后端服务 -> 查询DB数据库。

           在有缓存的情况下:用户 -> Nginx服务 -> 后端服务 -> Redis缓存 -> 查询DB数据库。

       在有一定了解后接下来,登入服务器后,创建我们服务部署和数据存储的目录。

# 登录服务器
ssh xxx@68.35.xxx #输入密码

# 创建 /data 目录
mkdir /data
mkdir /data/mongodb
mkdir /data/nginx
mkdir /data/www
# 存放后台管理文件
mkdir /data/www/admin
# 存放webssl文件
mkdir /data/www/ssl/web 
# 存放admin ssl文件
mkdir /data/www/ssl/admin 

# 创建docker目录 来存放docker相关镜像
mkdir /docker
mkdir /docker/mongodb
mkdir /docker/nginx
mkdir /docker/redis
#对应目录下,存放docker-compose.yaml文件 (查看下面具体内容)

# 创建 /home/docker目录,来部署服务
mkdir /home/docker

   对应目录新建完成后,我们手动来建立nginx.conf的配置文件:

   文件新建在 /data/nginx 目录下

worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
  worker_connections  1024;
}

http {
  include       mime.types;
  default_type  application/octet-stream;

  #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
  #                  '$status $body_bytes_sent "$http_referer" '
  #                  '"$http_user_agent" "$http_x_forwarded_for"';

  #access_log  logs/access.log  main;

  sendfile        on;
  #tcp_nopush     on;
  server_tokens off;
  #keepalive_timeout  0;
  keepalive_timeout  65;

  fastcgi_connect_timeout 3000;
  fastcgi_send_timeout 3600;
  fastcgi_read_timeout 3600;

  gzip                        on;
  gzip_disable                "msie6";
  gzip_min_length             1k;
  gzip_buffers                4 16k;
  gzip_http_version           1.0;
  gzip_comp_level             2;
  gzip_types                  text/plain application/x-javascript text/css application/xml application/javascript text/javascript application/json;
  gzip_vary                   on;

  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_set_header X-Forwarded-Scheme  $scheme;
  proxy_set_header User-Agent  $http_user_agent;
  proxy_set_header X-User-Agent  $http_user_agent;

  client_max_body_size 500M;
  # limit_req_zone $binary_remote_addr zone=mylimit:500m rate=2r/s;

  upstream web {
    server localhost:8033 max_fails=3 fail_timeout=1s weight=9;
  }

  # ws
  map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
  }

  # web
  server {
    listen 80;
    server_name xxx; # xxx域名
    rewrite ^(.*)$ https://${server_name}$1 permanent; 
  }

  server {
    listen 443 ssl http2;
    server_name xxx; # 域名
    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
    root /data/www;
    ssl on;
    index index.html index.htm;
    ssl_certificate  /data/www/ssl/web/ssl.pem;
    ssl_certificate_key  /data/www/ssl/web/ssl.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    location / {

      if ( $request_filename ~* .*\.(html|htm)$ ){
        add_header    Cache-Control  max-age=0;
      }
      proxy_send_timeout 18000;
      proxy_read_timeout 18000;
      proxy_connect_timeout 18000;
      proxy_pass http://web;
    }
  }


  # admin 
  server {
    listen 80;
    server_name xxx; #xxx 域名
    rewrite ^(.*)$ https://${server_name}$1 permanent;
  }

  server {
    listen 443 ssl http2;
    server_name xxx; #域名
    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
    root /data/www/admin/dist;
    ssl on;
    index index.html index.htm;
    ssl_certificate  /data/www/ssl/admin/ssl.pem;
    ssl_certificate_key  /data/www/ssl/admin/ssl.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;

    location / {
      add_header  Cache-Control  max-age=60;
      try_files $uri $uri/ /index.html;

    }

    location ^~ /dist/ {
      rewrite ^/dist/(.*) /$1 break;
    }

    location ~* /(api|uploads)/ {
      proxy_pass http://web;
    }
  }
}

   注意localhost:8033 是代表服务启动端口,xxx需要依次替换对应域名,ssl文件要对应域名的ssl。

   接下来,我们安装对应的镜像服务

   1、安装Mogodb镜像,新建docker-compose.yaml文件

version: '2'
services:
  mongodb:
    image: mongo
    command: mongod --port 27017 --auth
    container_name: mongodb
    restart: always
    network_mode: "host"
    ports:
       - "27017:27017"
    volumes:
       -  /data/mongodb/configdb:/data/configdb
       -  /data/mongodb/db:/data/db
       -  /data/mongodb/home:/data/home

    2、安装Nginx镜像,新建docker-compose.yaml文件

version: '2'
services:
  nginx:
    image: docker.io/openresty/openresty:1.13.6.1-centos
    container_name: nginx-web
    restart: always
    network_mode: "host"
    ports:
      - "80:80"
    volumes:
      - /data/www:/data/www
      - /data/nginx/nginx.conf:/usr/local/openresty/nginx/conf/nginx.conf

    3、安装Redis镜像,新建docker-compose.yaml文件

version: '2'
services:
  redis:
    image: docker.io/redis:3.2.11
    container_name: redis
    restart: always
    network_mode: "host"   

   在对应目录新建文件后,执行docker-compose up -d,正常都会启动。如果nginx镜像启动失败,请检查是否有启动配置文件/配置文件是否正确。

   执行 docker ps,查看服务是否正确,下图为正确启动

服务启动

   三、编写发布脚本和Docker仓库安装

       1、安装dcoker仓库

         以阿里云为例:进入 https://cr.console.aliyun.com/cn-guangzhou/instance/dashboard

   

       新建镜像仓库,然后一步步根据提示设置,这里就不过多展示了。然后点击仓库详情,找到登录仓库信息,在服务器进行登录。如:

# 以阿里云为例
sudo docker login -u=xxx registry.cn-shenzhen.aliyuncs.com
# 输入完成后,输入密码,显示登录成功,则代表docker镜像仓库登录成功!


剩余72%内容付费后可查看

为保证文章的高质量产出,以下内容为vip付费阅读哦!

开通VIP会员

已有1位小伙伴打赏过本篇文章:

duanli******@sina.com
阿里云服务器优惠

写文章不易,如果您觉得文章对你有帮助。
打赏激励下作者吧,谢谢支持! ~(@^_^@)~!

微信打赏 微信打赏

支付宝打赏 支付宝打赏

你也想建立一个独立博客?

你是否也想打造一个在互联网上的个人品牌,成为一个家喻户晓的人物呢?
请点击了解 怎样创建个人博客

站长推荐
loading... 数据加载中...

超低服务器价格,值得购买!

超低服务器价格,值得购买!