我发现自己处在一种微不足道的情况下,但是花了几个小时却并没有真正到达目的地。
长话短说,我的目标是在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;
}
}