Docker+Nginx 发布vue项目

706 阅读1分钟

Docker安装

mkdir install_docker.sh 创建安装dockerdocker-compose脚本

#!/bin/bash
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
rpm --import https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
yum -y install docker-ce
mkdir /etc/docker
cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://1hbgluie.mirror.aliyuncs.com"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "1000m"
  }  
}
EOF
systemctl daemon-reload
systemctl enable docker
systemctl restart docker
yum install -y docker-compose
docker version
docker-compose -v

Nginx安装

docker pull nginx 拉取nginx镜像

docker-compose.yml 配置

#1. 任意目录下创建一个项目部署文件夹 
root@xx: mkdir webServe
#2. 进入webServe下 创建docker启动配置文件
root@xx webServe: vim docker-compose.yml

# ------->

# [左边是本地配置]:[右边是容器内的配置]
version: '3.1'
services:
  nginx: # 随便写
    image: nginx  # docker镜像名
    restart: always
    container_name: nginx 
    environment:
      - TZ=Asia/Shanghai 
    ports:
      - 80:80 # 端口
      - 443:443
    volumes:
    ## [本地路径]:[容器内部路径]  ==》 只用就该本地路径,对应自己项目存放的地方就可以了
      - /root/webServe/nginx.conf:/etc/nginx/nginx.conf # nginx.confg  文件路径
      - /root/webServe/log:/var/log/nginx
      - /root/webServe/www:/html  # 静态文件目录
      - /root/webServe/letsencrypt:/etc/letsencrypt

nginx.conf 配置

借鉴文章

# 串讲nginx.config 配置
root@xx webServe: vim nginx.confg

# ------->
user  nginx;
#nginx 进程数,建议按照cpu 数目来指定,一般为它的倍数。
worker_processes  2;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
        #单个后台worker process进程的最大并发链接数  
    worker_connections  1024;
}

http {
     #设定mime类型,类型由mime.type文件定义
    include       /etc/nginx/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  /var/log/nginx/access.log  main;

    #开启gzip压缩
    gzip  on;
    gzip_disable "MSIE [1-6].";

    #设定请求缓冲
    client_header_buffer_size    128k;
    large_client_header_buffers  4 128k;
        
    #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,
    #对于普通应用,必须设为 on,
    #如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,
    #以平衡磁盘与网络I/O处理速度,降低系统的uptime.
    sendfile on;
    #用于设置客户端连接保持活动的超时时间,在超过这个时间之后服务器会关闭该链接。
    #keepalive_timeout  0;
    keepalive_timeout  120; 
        
    #允许客户端请求的最大单文件字节数
    client_max_body_size 50m;
    
    #服务器名字的hash表大小
    server_names_hash_bucket_size 128;
    #header中自定义变量时支持下划线
    underscores_in_headers on; 
    
    #down 表示当前的server暂时不参与负载
    #weight 加权轮询权重,默认为1。weight越大,负载的权重就越大。
    #backup 备用服务器, 当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。
    #max_fails 允许请求失败的次数默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误
    #fail_timeout max_fails次失败后,暂停的时间。
    #apiServer不能用下划线,否则访问不到, 
    upstream apiServer {
      server localhost:7845 weight=10;
     # server 172.17.0.1:28081 weight=10;
    }
    server{
      listen 80;
      server_name localhost;   # www.xxxx.com;
      location / {
        root /html;
        index index.html index.htm;
        try_files $uri $uri/ /index.html; #vue history 配置模式,刷新找不到问题
        }
      location /api {
        rewrite ^/api/?(.*)$ /$1 break;
        include uwsgi_params;
        proxy_pass http://localhost; # 代理配置
      }
      proxy_set_header   Host             $host;
      proxy_set_header   X-Real-IP        $remote_addr; 
      proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
}

启动

# 当前项目文件夹下
root@xx webServe:  docker-compose up -d 

mysql的安装配置

1.拉取容器: docker pull mysql:5.7 #下面配置不适用于8版本的mysql

2.编写: docker-compose.yml

3.启动: docker-compose up -d

4.查看状态: docker ps

# vim docker-compose.yml
version: '3'
services:
  mysql:
    image: mysql:5.7
    restart: always
    container_name: mysql
    environment:
      - TZ=Asia/Shanghai
      - MYSQL_ROOT_PASSWORD=123456 # 设置root 登入密码
    ports:
      - 3306:3306
    volumes:
      - /root/docker/mysql/conf:/etc/mysql
      - /root/docker/mysql/logs:/var/log/mysql
      - /root/docker/mysql/data:/var/lib/mysql