网站部署

静态网站部署

  1. 下载 git,使用自带的 apt 安装程序

    sudo apt install git  // 安装
    git // 查看 git
    
  2. 下载 nginx

    sudo apt install nginx
    
  3. 连接 github 并克隆仓库

    设置 git 用户名和邮箱

    git config --global user.name "aioverg"
    git config --global user.email "aioverg@outlook.com"
    

    生成 SSH 密钥,ssh 文件在当前目录下(即 /home/ubuntu/),将密钥配置到 github

    ssh-keygen -t rsa -C "aioverg@outlook.com"
    

    克隆远程仓库

    git clone https://github.com/aioverg/aboy
    
  4. 修改 nginx 配置,使其指向仓库地址,仓库地址在 /home/ubuntu/mim

    sudo vim /etc/nginx/sites-available/default # 打开配置文件, 修改如下内容, 让服务的根目录指向网站代码所在的地址
    server {
        root /home/ubuntu/mim;
    }
    
  5. 修改 nginx 配置,使其用户名与启动名称一致,不然会找不到根目录地址

    sudo vim /etc/nginx/nginx.conf // 修改内容如下
    
    user ubuntu;
    
  6. 修改完成,重启 nginx

    sudo nginx reload
    

mim 网站部署

代码仓库

安装 Git

  1. sudo apt update:更新软件列表。
  2. sudo apt install git:安装 Git
  3. git -version:检查 Git 版本。
  4. git config --global user.name 'aioverg':配置 Git 用户名。
  5. git config --global user.email 'aioverg@outlook.com':配置 Git 邮箱。
  6. git config --list:查看 Git 配置信息。
  7. ssh-keygen -t rsa -C 'aioverg@outlook.com':生成 ssh 密钥,并将密钥接入 github

连接 github

如果是从 github 拉取代码使用这里。

  1. 将上面生成的密钥接入 github
  2. git clone ***:拉取仓库代码。

连接本地

如果是作为Git仓库从本地推送代码使用这里。

ubuntu 服务器创建新的仓库:

  1. git init mim:创建名为 mim 的空仓库。

  2. git config receive.denyCurrentBranch ignore(进入仓库目录运行):设置允许远程代码推送。

  3. git --work-tree="./" reset --hard(进入仓库目录运行):显示工作目录(./ 表示当前的 mim 目录),不然只有一个 .git 目录,没有其它文件代码。

  4. touch ~/.ssh/authorized_keys:创建 authorized_keys 文件,用于客户端连接免登录。

  5. cat ./id_rsa_aioverg.pub >> ./authorized_keys:将客户端的ssh 公钥 id_rsa_aioverg.pub (加入 authorized_keys,免登录。

    这里是从本地上传 id_rsa_aioverg.pub 文件到服务器,然后加入的 authorized_keys,也可以直接将公钥内容复制到 authorized_keys

客户端推送代码:

  1. git remote add origin ubuntu@123.207.211.120:mim:连接远程仓库。
  2. git push origin master:推送代码至远程仓库。

有时本地本地可能需要连接多个远端仓库,将代码分布推动到 githububuntu 等服务器,操作如下:

  1. git remote add name_1 url_1:本地连接名为 name_1,地址为 url_1 的远程仓库。

    git remote add name_2 url_2:本地连接名为 name_2,地址为 url_2 的远程仓库。

  2. git remote -v:查看本地连接的远程仓库。

  3. git push name_1 url_1:向地址为 url_1 的远程仓库推送。

  4. git remote remove name_1:删除名为 name_1 的远程仓库连接。

代码打包

  1. sudo apt install nodejs:安装 Node。

    安装 16 版本:

    curl -sL https://deb.nodesource.com/setup_16.x |sudo -E bash -
    sudo apt install -y nodejs
    

    可以修改 setup_16.x 来指定版本,如 setup_18.x 是安装 18 版本。

  2. node --version:检查 Node 版本。

  3. sudo apt install npm:安装 npm。

  4. npm --version:检查 npm 版本。

    npm config get registry:查看 npm 源。

    npm config set registry https://registry.npm.taobao.org/:修改 npm 源(这里使用的是淘宝镜像)。

  5. npm i:安装项目。

  6. npm run build:打包项目。

  7. npm run start:启动服务。

    注:这里默认端口号 3000,使用腾讯云服务器时需要注意,要注意在防火墙中将端口号加入进去,不然无法访问,如图:

  8. 这时候浏览器输入 公网:端口号 就能够访问网站了。

管理服务

pm2 管理服务

  1. npm install -g pm2:安装 pm2 管理 node 服务。

    注:如果默认安装目录没有权限,建议重新设置安装目:

    • 在命令行的主目录中,为全局安装创建目录:

      mkdir ~/.npm-global
      
    • 配置 npm 使用新的安装目录:

      npm config set prefix '~/.npm-global'
      
    • 修改或创建 ~/.profile 文件,并添加以下内容:

      export PATH=~/.npm-global/bin:$PATH
      
    • 使用命令更新系统变量:

      source ~/.profile
      
  2. pm2 start npm --name mim -- run start(进入到 mim 目录内运行):启动一个名为 mim 的服务,启动命令是 npm run start

  3. pm2 list:查看服务列表。

  4. pm2 restart all:重启所有服务。

配置 nginx

  1. sudo apt install nginx:下载 nginx。

  2. sudo vim /etc/nginx/sites-available/default:修改 nginx 配置,内容如下

    server {
            listen 80 default_server;
            listen [::]:80 default_server;
    
            server_name mim.zone; # 域名
    
            location / {
                    proxy_pass http://localhost:3000; # 代理到网站服务地址
                    proxy_set_header Host $host; # 非静态网站配置
                    proxy_set_header X-Forwared-For $remote_addr; # 非静态网站配置
            }
    }
    
  3. 配置 ssl(https加密)

    申请并下载 ssl 证书,将证书文件上传服务器。

    修改 nginx 配置,在上一步的基础上增加内容:

    这里使用腾讯云的免费证书,有效期 90天,具体的部署教程也可以看腾讯云的文档

    server {
            listen 80 default_server;
            listen [::]:80 default_server;
    
            server_name mim.zone; # 域名
    
    	    listen 443 ssl default_server; # 监听端口
            listen [::]:443 ssl default_server;# 监听端口
            ssl_certificate /etc/nginx/mim.zone_bundle.crt; # 证书文件地址
            ssl_certificate_key /etc/nginx/mim.zone.key; # 证书文件地址
            ssl_session_timeout 5m;
            ssl_protocols TLSv1.2 TLSv1.3; #请按照以下协议配置
            #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
            ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; 
            ssl_prefer_server_ciphers on; # 开启
    
            location / {
                    proxy_pass http://localhost:3000; # 代理到网站服务地址
                    proxy_set_header Host $host; # 非静态网站配置
                    proxy_set_header X-Forwared-For $remote_addr; # 非静态网站配置
            }
    }
    

    nginx -t:验证配置文件是否正确。

    netstat -lntp:查看端口使用,看看 443 端口是否正确开启。

    curl https://mim.zone:查看是否能够连通。

  4. /usr/sbin/nginx -s reload:重启 nginx,可以使用域名访问了。

    重启 nginx 时可能会没有权限,这时可以切换到 root 用户,使用 root 去重启。

    这里使用的腾讯云服务器,默认提供的用户是 ubuntu,登录 root 需要做如下配置:

    • sudo passwd root:设置 root 用户的密码。

    • sudo vim /etc/ssh/sshd_config:修改登录配置,内容如下:

      #PermitRootLogin prohibit-password
      改为
      PermitRootLogin yes
      
    • sudo service ssh restart:重启配置。

    • su root:切换到 root。

    • su ubuntu:切换到 root。

定时任务(非必要)

  1. 给脚本赋予执行权限,以 git.sh 为例

    chmod +x git.sh
    
  2. 增加定时任务

    打开定时任务编辑,命令 crontab -e 会打开定时任务文件, 在文件中写入命令保存即可增加一条定时任务。以 git.sh 为例:

    30 5 * * * /home/ubuntu/mim/git.sh  # 每天凌晨 5:30 执行 git.sh 脚本,其它也按此格式设置。
    

    crontab -l:查看定时任务列表。

  3. 定时任务日志

    修改 /etc/rsyslog.d/50-default.conf 文件,日志文件在 /var/log/cron.log

    sudo vim /etc/rsyslog.d/50-default.conf // 做如下内容修改
    
    cron.*				/var/log/cron.log   // 将这一行前面的注释取消
    

    sudo service cron restart:重启定时任务命令,不重启日志打开不会生效。