最近云服务器因为react rsc的漏洞问题 全球的react对应的版本部署的服务都遭殃了,我的也不例外,我这个博客也是用nextjs搭建的。服务器小白的我只好重置镜像了,所以初始化后的一些依赖都需要重新装,干脆我备注下,省得以后还得到处Google搜。
首先需要安装系统更新,我的镜像系统是ubuntu
更新系统
apt update && apt upgrade -y
安装基础工具
apt install -y git curl wget unzip ufw
安装Node
先安装nvm,再用nvm安装node。这样在切换node版本时会很方便
安装nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
让环境生效
source ~/.bashrc
安装Node LTS
nvm install --lts
查看node版本来看是否安装成功
node -v
可选 安装pnpm
curl -fsSL https://get.pnpm.io/install.sh | sh -
让环境生效
source ~/.bashrc
如果服务器无法访问外网,可能会导致无法安装成功,那么使用npm安装pnpm
npm i -g pnpm
安装PM2
管理node服务肯定首推pm2,不然一个个服务手动维护真的很累.
npm install -g pm2
查看是否安装成功
pm2 -v
安装Nginx
apt install -y nginx
启动并设置开启启动
systemctl enable --now nginx
部署项目
把项目放到/var/www文件夹里,使用pm2启动服务。
安装依赖和构建,随后启动pm2管理项目~
pm2 start pnpm --name xx -- start
配置nginx反向代理
创建配置文件:
nano /etc/nginx/sites-available/blog
设置nginx代理
server {
listen 80;
server_name {my-domain.com};
location / {
proxy_pass http://127.0.0.1:{port};
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
启动:
ln -s /etc/nginx/sites-available/blog /etc/nginx/sites-enabled/blog && systemctl reload nginx
tips: 添加完配置建议不要直接重启nginx,可以直接输入nginx -t来看配置是否正常,当输出
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
时在执行realod nginx
开启基础防火墙
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
可选 -- 创建额外用户
创建一个帐号用于专门启动服务,避免root用户启动node服务,相对来说比root用户直接启动服务要安全一些,同时给特定的文件夹授权,让这个用户可以访问文件夹来部署服务
useradd -m app
创建一个app的用户
设置密码
passwd app执行回车来输入密码和确认密码
赋予app用户访问项目目录的权限,用于部署
chown -R app:app /var/www
tips:通过apt安装的依赖是所有用户都能访问的,比如nginx,app用户登陆也能访问到,可以输入nginx -v来查看nginx是否能使用。但是即使能访问,但是root用户没有授权的话,app用户也是只能访问而无法更改配置的!!
而通过nvm/pyenv/rvm/curl这样方式安装的依赖则是安装在用户里,比如之前root用户使用nvm安装了node,此时app用户是无法使用node的,需要重新安装node
比如我创建了app用户,那么我之前root用户安装的nvm,以及用nvm安装的node/pm2都需要重新安装
安装nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
或者
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh > install_nvm.sh
bash install_nvm.sh
然后先使用nvm安装node 再使用node安装pnpm/pm2等工具;
tips: 直接使用su - {name}切换用户,比如我是root,我需要切换到app用户 直接su - app,然后输入密码切换到对应的帐号;
由于我创建了一个app用户,所以我需要使用app来创建git keygen
ssh-keygen -t ed25519 -C "app:server"按几次回车来创建密钥,密钥文件创建成功后位于/home/app/.ssh/里
我们需要把.pub放到github settings ssh keys里
查看公钥(id_ed25519.pub)
cat ~/.ssh/id_ed25519.pub
把这个文件的全部内容复制,然后进入到github里复制进来。之后就可以使用app用户拉代码
前面我说了nginx安装在系统用户里,我的app账号是没有权限去修改的,所以切记修改配置一定要su - root切换到root用户去编辑nginx config
配置https 我们可以使用py certbot配置自动续费的免费的https证书
sudo apt install certbot python3-certbot-nginx
然后执行给需要的域名添加https,比如我的博客页面blog.iquax.cn
sudo certbot --nginx -d blog.iquax.cn
如果有多个域名需要配置https时,执行
sudo certbot --nginx -d blog.iquax.cn -d www.iquax.cn -d iquax.cn
Certbot 会自动:
-
检查域名
-
自动修改 nginx 配置
-
自动加上 SSL
-
自动重载 nginx
你只需要点 “yes”。
Let’s Encrypt 的证书有效期 90 天。
Certbot 会自动添加一个 cron 或 systemd timer,大概每 12 小时检查一次。
你可以验证
systemctl list-timers | grep certbot
此时会输出
certbot.service ...
certbot.timer ...
https设置成功后会自动在nginx config配置里添加ssl等相关配置
安装mysql
执行sudo apt install mysql-server
执行完查看状态sudo systemctl status mysql
启动服务 sudo systemctl start mysql
设置开启自启 sudo systemctl enable mysql
第一次安装 需要初始化mysql 执行sudo mysql_secure_installation 一路按Y即可