Web部署
部署 Next.js 开发的 mimWeb 应用。
安装 Git
sudo apt update:更新软件列表。sudo apt install git:安装Git。git -version:检查Git版本。git config --global user.name 'aioverg':配置Git用户名。git config --global user.email 'aioverg@outlook.com':配置Git邮箱。git config --list:查看Git配置信息。ssh-keygen -t rsa -C 'aioverg@outlook.com':生成ssh密钥。
拉取代码
从 github 拉取
- 将生成的密钥接入 github。
git clone ***:拉取仓库代码。
从本地推送
在 ubuntu 服务器创建新的仓库
git init mimWeb:创建名为mimWeb的空仓库。git config receive.denyCurrentBranch ignore:设置允许远程代码推送(进入仓库目录运行)。git --work-tree="./" reset --hard:显示工作目录(./表示当前的mim目录),不然只有一个.git目录,没有其它文件代码(进入仓库目录运行)。
配置客户端免登录推拉代码
-
touch ~/.ssh/authorized_keys:创建authorized_keys文件,用于记录客户端公钥。 -
cat ./id_rsa_aioverg.pub >> ./authorized_keys:将客户端的ssh公钥id_rsa_aioverg.pub加入authorized_keys中。这里是从本地上传
id_rsa_aioverg.pub文件到服务器,然后加入的authorized_keys,也可以直接将公钥内容复制到authorized_keys。
客户端推送代码
git remote add origin ubuntu@123.207.211.120:mimWeb:连接远程仓库。git push origin master:推送代码至远程仓库。
本地连接多个远程仓库
以将代码分布推送到 github 和 ubuntu 的仓库为例,操作如下:
-
git remote add name_1 url_1:name_1是自定义的连接名称,url_1是远程仓库的地址。git remote add name_2 url_2:name_2是自定义的连接名称,url_2是远程仓库的地址。 -
git remote -v:查看本地连接的远程仓库。 -
git push name_1 master:向name_1连接的远程仓库推送master分支。 -
git remote remove name_1:删除名为name_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 版本。 -
node --version:检查 Node 版本。 -
sudo apt install npm:安装 npm。 -
npm --version:检查 npm 版本。npm config get registry:查看 npm 源。npm config set registry https://registry.npm.taobao.org/:修改 npm 源(这里使用的是淘宝镜像)。 -
npm i:安装项目。 -
npm run build:打包项目。 -
npm run start:启动服务。注:这里默认端口号 3000,使用腾讯云服务器时需要注意,要注意在防火墙中将端口号加入进去,不然无法访问,如图:

-
这时候浏览器输入
公网:端口号就能够访问网站了。
配置 Nginx
-
sudo apt install nginx:下载 nginx。 -
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; # 非静态网站配置 } } -
配置 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:查看是否能够连通。 -
/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。
-
pm2管理服务
-
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
-
-
pm2 start npm --name mimWeb -- run start(进入到mim目录内运行):启动一个名为mimWeb的服务,启动命令是npm run start。 -
其他命令:
pm2 list:查看服务列表。pm2 restart all:重启所有服务。pm2 restart <name>:重启。pm2 stop <name>:停止。pm2 delete <name>:删除。
定时任务(非必要)
-
给脚本赋予执行权限,以
git.sh为例chmod +x git.sh -
增加定时任务
打开定时任务编辑,命令
crontab -e会打开定时任务文件, 在文件中写入命令保存即可增加一条定时任务。以git.sh为例:30 5 * * * /home/ubuntu/mim/git.sh # 每天凌晨 5:30 执行 git.sh 脚本,其它也按此格式设置。crontab -l:查看定时任务列表。 -
定时任务日志
修改
/etc/rsyslog.d/50-default.conf文件,日志文件在/var/log/cron.logsudo vim /etc/rsyslog.d/50-default.conf // 做如下内容修改 cron.* /var/log/cron.log // 将这一行前面的注释取消sudo service cron restart:重启定时任务命令,不重启日志打开不会生效。
