生产服务器上的Vue

时间:2020-08-12 15:15:11

标签: docker vue.js nginx docker-compose certbot

我发现自己处在一种微不足道的情况下,但是花了几个小时却并没有真正到达目的地。

长话短说,我的目标是在digitalocean上托管一个vue应用。

首先,我想生成一个通过用户界面完成的vue应用。

然后我想创建一个Dockerfile对其进行容器化。

我想使用docker compose进行部署,因此最好使用设置vue应用和nginx的docker-compose.yaml文件。

最后,我想使用certbot保护网站的安全。

我已经完成了每个步骤,但不是所有步骤都一次完成。 Nginx配置也已经在服务器上手动创建,但是我希望是否可以通过docker完成,以便将来我可以将该项目用作部署模板。我不介意也有节点并表示设置,但这不是严格要求的。

我希望最好的解决方案是不依赖于我编写的代码的指南,因为这是一个非常普通的问题,但是如果有帮助,我会添加一些代码

这是我的Dockerfile:

# build stage
FROM node:lts-alpine as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# production stage
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

我认为问题是该应用程序与nginx一起作为dockerfile的一部分提供,但是我在docker-compose中也使用certbot设置了一个nginx容器。我不知道如何获取docker-compose nginx设置来提供此应用。

docker-compose文件

version: '3'

services:
  application:
    restart: unless-stopped
    image: laukess/mymediatracker:expose_3000
    ports:
      - 3000:3000
  nginx:
    image: nginx:1.15-alpine
    restart: unless-stopped
    volumes:
      - ./data/nginx:/etc/nginx/conf.d
      - ./data/certbot/conf:/etc/letsencrypt
      - ./data/certbot/www:/var/www/certbot
    ports:
      - "80:80"
      - "443:443"
    command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"
  certbot:
    image: certbot/certbot
    restart: unless-stopped
    volumes:
      - ./data/certbot/conf:/etc/letsencrypt
      - ./data/certbot/www:/var/www/certbot
    entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"


server {
    listen 80;
    server_name fast-track.io;
    server_tokens off;

    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    location / {
        return 301 https://$host$request_uri;
    }
}

server {
    listen 443 ssl;
    server_name my-site.com;
    server_tokens off;

    ssl_certificate /etc/letsencrypt/live/my-site.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/my-site.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
        proxy_pass  https://my-site.com;
        proxy_set_header    Host                $http_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-Proto   https;
    }
}

0 个答案:

没有答案