# 连接远程服务器

ssh root@zhonglim

# 在服务器中全局安装pm2

npm i pm2 -g

# 本地项目文件根目录中添加pm2.yml文件

apps:
  - script: ./server/server.js
    name: vue-todo
    env_production:
      NODE_ENV: production
      HOST: localhost
      PORT: 8888
  • script指运行的文件名
  • name指定pm2运行后,进程的名字,可以通过pm2 stop name等命令进行操作
  • HOST
    • localhost或0.0.0.0,如果使用localhost,需要使用nginx进行反向代理才能从外网进行访问,使用0.0.0.0则不用

# 远程服务器中使用pm2运行程序

  • 先将本地文件push到github仓库
    • git init
    • git add --all
    • git commit -m "vue learn"
    • git remote add origin https://github.com/limsanity/vue-learn.git
    • git push -u origin master
  • 在远程服务器中clone仓库并安装依赖
    • git clone https://github.com/limsanity/vue-learn.git
    • npm i
  • pm2运行程序
    • pm2 start pm2.yml --env production
  • 关于pm2的一些常用命令
    • pm2 stop vue-todo
    • pm2 list
    • pm2 log

# 通过外网访问

# pm2.yml中HOST为0.0.0.0的一些问题

  • ufw allow 8888开启端口访问

# pm2.yml中HOST为localhost的一些问题

# 配置Nginx反向代理

  • 远程服务器安装nginx:

    • apt-get install nginx
  • 进入配置文件的路径

    • cd /etc/nginx/conf.d
  • 创建配置文件

    • vim todo.conf
    • listen为80是因为通过域名访问都是访问到80端口
    • server_name是要访问的目的地
    • proxy_pass是服务器将请求转向的目的地,即:127.0.0.1:8888
upstream todo {                                                             
        server 127.0.0.1:8888;                                              
        keepalive 64;                                                       
}                                                                           
server {                                                                    
        listen 80;                                                          
        server_name 68.183.187.125;                                         
                                                                            
        location / {                                                        
                proxy_set_header X-Real-IP $remote_addr;                    
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;                           
                proxy_set_header X-Nginx-Proxy true;                        
                proxy_set_header Connection "";                             
                proxy_pass http://todo; # the same as upstream name         
        }                                                                   
                                                                            
        location ~\.(txt)$ {                                                
                root /var/www/jnode/;                                       
        }                                                                   
}                                                                           
  • service nginx reload重启反向代理服务
    • 输入命令后报错See "systemctl status nginx.service" and "journalctl -xe" for details.
      • journalctl -xe查看原因,可能是端口80被占用,或者todo.conf配置文件写的有问题,我在配置过程中就在listen后加多了个冒号导致重启失败

# 配置后依然无法访问

  • 一度以为配置出错,可以先在远程服务器中查看
    • curl {your destination}正常会返回html内容
  • 上文有说,通过域名访问的是80端口,我们需要通过ufw allow 80打开80端口,至此,就可以正常访问

# 补充一些部署过程中出现的问题

# npm run dev报错

部署的过程中出去吃饭,然后使用手机对远程服务器进行了操作,一开始npm run dev想看看无法访问的问题是不是出现在配置上,第一次还没有报错,第二次就在端口上报错了。后来一想,出饭店断了wifi后,手机和服务器的连接也随之断开,但之前npm run dev的进程并没有关闭,于是网上查找了一些ubuntu下查看进程的命令:

  • 查看已经连接的服务端口(ESTABLISHED)
    • netstat -a
  • 查看所有的服务端口(LISTEN,ESTABLISHED)
    • netstat -ap
  • 查看指定端口,可以结合grep命令:
    • netstat -ap | grep 8080
  • 若要关闭使用这个端口的程序,使用kill + 对应的pid
    • kill -9 PID号