
已经部署过很多个项目了,但每次都有些问题,所以打算做个记录
# 前端
# 上传
# 脚本
可以通过FileZillia等ssh工具上传,也可以通过脚本(后续更新常用这个)上传
scp -r ./dist/* root@你的IP:/usr/local/vue/某个文件夹
# 自动创建文件夹
如果当前文件夹不存在的话会报错,你可以在FileZillia手动创建,或者使用下面的命令:
# 首先检查文件夹是否存在
ssh root@你的IP "[ -d /usr/local/vue/某个文件夹 ] && echo ok || mkdir -p /usr/local/vue/某个文件夹"
scp -r ./dist/* root@你的IP:/usr/local/vue/某个文件夹
# 免密
scp每次都需要输入密码,可以设置免密
在A中执行命令:
ssh-keygen -t rsa -P ""
这会在 ~/.ssh 目录下生成两个文件:id_rsa 和 id_rsa.pub
在A中执行命令,拷贝A的id_rsa.pub到B(具体路径根据windos和linux做调整):
scp /.ssh/id_rsa.pub root@你的IP:/root/.ssh在B中执行命令,把id_rsa.pub输入到B的authorized_keys文件中:
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
# Nginx
# 配置
这里贴一下常用的配置,可以自己根据需要做调整
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
client_max_body_size 50m;
client_body_buffer_size 10m;
client_header_timeout 1m;
client_body_timeout 1m;
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_comp_level 4;
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary on;
# http
server {
listen 80;
server_name 域名;
location / {
root /usr/local/vue/test;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location ^~ /api/ {
proxy_pass http://IP:端口/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
rewrite ^/api/(.*)$ /$1 break;
}
}
# https
server {
listen 443 ssl;
server_name 域名;
# ssl on;
ssl_certificate /usr/local/nginx/cert/test.com_bundle.pem; # 需要配置证书
ssl_certificate_key /usr/local/nginx/cert/test.com.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 / {
root /usr/local/vue/test;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location ^~ /list {
proxy_pass http://IP:端口/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
rewrite ^/list/(.*)$ /$1 break;
}
}
# http + socket.io
server {
listen 80;
server_name 域名;
location / {
root /usr/local/vue/test;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location ^~ /socket.io/ {
proxy_pass http://1.15.113.60:30010/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
location ^~ /upload/ {
proxy_pass http://1.15.113.60:30010/;
}
}
# https + socket.io
server {
listen 443 ssl;
server_name 域名;
# ssl on;
ssl_certificate /usr/local/nginx/cert/test.com_bundle.pem;
ssl_certificate_key /usr/local/nginx/cert/test.com.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 / {
root /usr/local/vue/test;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
location ^~ /socket.io/ {
proxy_pass http://124.221.154.52:5000; # 这里不能加/
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
}
}
# https证书
去腾讯云申请免费证书
# 启动
启动nginx就不说了,因为我直接
docker restart nginx
# 后端
# Dockerfile
类似,先上传,然后编写dockerfile
FROM node # # FROM 表示设置要制作的镜像基于哪个镜像,FROM指令必须是整个Dockerfile的第一个指令,如果指定的镜像不存在默认会自动从Docker Hub上下载
WORKDIR /home/backend/meeting # RUN的工作目录
COPY . /home/backend/meeting # 复制到容器内的目录
RUN npm config set registry https://registry.npm.taobao.org # 换源
RUN npm i # 安装包
EXPOSE 5000 # 端口号
CMD ["node","server.js"] # 容器启动时执行的命令
将dockerfile放在文件夹里,执行
docker build -t 起个名字 .
然后等待
# 启动镜像
docker images # 可以看到自己构建的镜像
docker run -d -p 5000:5000 镜像名字
# 常用命令
docker ps # 查看容器
docker ps -a # 查看所有容器(包括killed的)
docker logs --tail 10 容器id
# 更新
更新有两条路:
- 删除原有镜像和容器,上传新的文件,重新构建镜像并启动
- 直接将文件上传到容器内,然后重启容器 下面以第二种为例
@REM 上传-拷贝-重启(必须在本目录下执行,因为有相对路径)
scp ./server.js root@你的IP:/usr/local/backend/meeting/
ssh root@IP "docker cp /usr/local/backend/meeting/server.js 容器id:/home/backend/meeting; docker restart 容器id;"
echo 后端更新成功
这里只拷贝了server.js,而且不涉及其它依赖下载,如果还要下载其它依赖更推荐第一种
# 其它配置
# DNS解析
自己到域名服务器解析一下
# 端口防火墙
根据自己的项目需求打开防火墙
CC BY-NC-SA 4.0 Licensed
