小白的服务器部署之旅

·  阅读 789
小白的服务器部署之旅

Hello, 各位勇敢的小伙伴, 大家好, 我是你们的嘴强王者小五, 身体健康, 脑子没病.

本人有丰富的脱发技巧, 能让你一跃成为资深大咖.

一看就会一写就废是本人的主旨, 菜到抠脚是本人的特点, 卑微中透着一丝丝刚强, 傻人有傻福是对我最大的安慰.

欢迎来到小五随笔系列小白的服务器部署之旅.

前言

本文意在记录笔者将项目部署至服务器的全过程,并将其分享给大家。其会随笔者对服务器知识的扩宽而不断更新。此文为缘,因缘际会,还望诸位看官多多支持并留下您宝贵的意见。

other34.gif

接下来我们一起来部署一个 React + Nodejs 的聊天室项目,代码地址:Github - ajun568

域名

域名解析

主机记录:

www: www.deeruby.com
api: api.deeruby.com
  @: deeruby.com 直接解析顶级域名
  *: 泛解析 xxx.deeruby.com
复制代码

记录类型: 用A,添加证书则使用 TXT

记录值: 公网IP

TTL: 解析记录在本地DNS服务器的缓存时间

安全证书

2022.11.08 补充说明,FreeSSL已收费,可使用 阿里云免费版(免费20个,有效期一年),或使用 let's encrypt(理论有效期三个月,但网上有自动续期脚本)

推荐一个免费获取安全证书的网站:FreeSSL.cn

1.png

这里选择浏览器生成,然后会自动下载私钥,请保存好,等下部署服务器时需要。

2.png

我们将其填入域名解析中,主机记录为TXT记录,记录类型为TXT,并填写上述记录值。

WebSocket 的 WSS 证书同理,到此域名就告一段落了,等下部署服务器时我们在联动起来。

服务器

笔者选用的服务器系统为 Centos

本地连接远程服务器

ssh 用户名@公网IP

基础款如下:

ssh root@公网IP -> 输入密码
复制代码

-p 可指定远程服务器上的端口

配置环境

全局安装 node(14+)、npm(7+)

# 下载node 14版本
wget https://nodejs.org/dist/v14.17.4/node-v14.17.4-linux-x64.tar.xz

# 解压node压缩包
tar -xvf node-v14.17.4-linux-x64.tar.xz

# 移动到 /usr/local 下 并改名为nodejs
mv node-v14.17.4-linux-x64 /usr/local/nodejs

# 增加软连接
ln -s /usr/local/nodejs/bin/npm /usr/local/bin/
ln -s /usr/local/nodejs/bin/node /usr/local/bin/

node -v
npm -v
复制代码

卸载 node 与 npm

yum remove nodejs npm -y
此时还需手动删除与 node 及 npm 相关的文件
可借助: find ~/-name node 命令
复制代码

安装 git

yum install -y git
复制代码

安装 pm2

🦥 tips:笔者本项目未使用 pm2 做进程管理

npm install pm2 -g
复制代码
# 启动应用程序
pm2 start file_name

# 显示所有进程状态
pm2 list

# 显示所有进程日志
pm2 logs

# 停止应用程序
pm2 stop 进程ID

# 重启应用程序
pm2 reload 进程ID

# 查看应用详情
pm2 show 进程ID

# 删除指定应用
pm2 delete 进程ID

# 重启所有进程
pm2 restart all

# 停止所有进程
pm2 stop all
复制代码

安装 cnpm

npm install -g cnpm --registry=https://registry.npm.taobao.org
复制代码

Docker

文档链接:Docker — 从入门到实践

# 设置开机自启
systemctl enable docker

# 启动docker
systemctl start docker
复制代码

下载 Centos:7 镜像

docker pull centos:7
复制代码

使用 “Centos:7 镜像” 新建容器并启动

docker run -t -i centos:7 /bin/bash
复制代码

🦥 tips:/usr/sbin/init 在容器中可以使用sudo;bin/bash 在容器中不可以使用sudo。

新建时为其命名

docker run -t -i --name=deeruby centos:7 /bin/bash
复制代码

设置开机自启

docker run -it --restart=always --name=deeruby centos:7 /bin/bash
复制代码

进入容器

docker exec -it deeruby /bin/bash
复制代码

查看容器

docker ps -a
复制代码

停止容器

docker stop 容器ID
复制代码

删除容器

docker rm 容器ID
复制代码

将容器打包成镜像,用于创建属于自己的镜像

docker commit -m"node environment" -a "ajun568" deeruby node:v1.0
复制代码

查看所有镜像

docker image ls
复制代码

使用我们自己创建的镜像来生成容器

docker run -it -d --name=chat node:v1.0 /bin/bash
复制代码

nginx配置

从本地copy文件至服务器

scp -r ./代码目录 root@公网IP:/服务器目录
复制代码

使用上述方法将前文下载好的证书上传到服务器 etc/nginx/ssl 文件夹下

我们在 etc/nginx 目录下创建一个 conf.d 的文件夹用于放置所需的 nginx 配置

更改 nginx.conf 文件,将 conf.d 引入

include /etc/nginx/conf.d/*.conf;
复制代码

conf.d 目录中新建 chat_backend.confchat_frontend.conf

chat_frontend.conf

server {
  listen  443 ssl;
  listen  [::]:443 ssl;
  server_name chat.deeruby.com;
  ssl_certificate /etc/nginx/ssl/chat/full_chain.pem;
  ssl_certificate_key /etc/nginx/ssl/chat/private.key;
  ssl_session_cache shared:SSL:1m;
  ssl_session_timeout 5m;
  ssl_ciphers HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers on;
  error_page 404 /404.html;
  error_page 500 502 503 504 /50x.html;
  location / {
    proxy_pass http://127.0.0.1:8085;
  }
}
server {
  listen       80;
  server_name  chat.deeruby.com;
  location / {
    proxy_pass http://127.0.0.1:8085;
  }
}
复制代码

chat_backend.conf,在 chat_frontend.conf 基础上追加 WebSocket 所需配置

location / {
  proxy_pass http://127.0.0.1:8086;
  add_header Access-Control-Allow-Origin *;
  proxy_redirect off;
  proxy_set_header Host $host;
  proxy_set_header X-Real_IP $remote_addr;
  proxy_set_header X-Forwarded-For $remote_addr:$remote_port;
  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection "Upgrade";
}
复制代码

shell脚本

我们在 home/build 目录下写两个执行脚本

笔者在其中加了点日志

build_backend.sh

#!/bin/bash
echo "start" > /home/build/build_backend.log
nohup node /home/wechat/src/server/index.mjs &
echo "end" >> /home/build/build_backend.log
date >> /home/build/build_backend.log
top
复制代码

build_frontend.sh

#!/bin/bash
echo "start build" > /home/build/build_frontend.log
cd /home/wechat
npm run build

echo "start nginx" >> /home/build/build_frontend.log
/usr/sbin/nginx -c /etc/nginx/nginx.conf >> /home/build/build_frontend.log
/usr/sbin/nginx -s reload >> /home/build/build_frontend.log
echo "end" >> /home/build/build_frontend.log
date >> /home/build/build_frontend.log
top
复制代码

root 目录下写两个操纵 docker.sh 文件,即我们之后更新代码后所执行的脚本,做如下操作:每次都将容器删除并重建,前端脚本如下,后端同理

#!/bin/bash
cd /home/wechat/

##更新代码
rm -rf node_modules package-lock.json yarn.lock
git pull origin master
npm install

##构建
docker stop chat_frontend && docker rm chat_frontend
docker run -it  --name=chat_frontend -v /home/wechat:/home/wechat -v /home/nginx/conf.d:/etc/nginx/conf.d -v /home/build:/home/build -p 8085:8085 -d chat_frontend:v1.0
复制代码

other38.gif

分类:
前端
收藏成功!
已添加到「」, 点击更改