宝塔桌面部署的记录
背景
事情的起初是我因为很久没有维护项目所以导致无论是宝塔桌面的密码还是服务器的密码我都忘记了,无奈之下只能服务器更改密码,更改完密码其实直接能看宝塔桌面的密码,但是因为服务器无论怎么样都连不上,所以我又重装了整个系统。这时才发现,博客项目的数据库没有保存。等一切都重连之后,发现新项目使用了vite5,不支持node18一下,而以前的项目还是用的node16,这时也有了重新部署,并将部署过程记录下来的。
过程
部署的过程总共分为4个阶段
- 服务器安装应用阶段。这里我安装了git,node版本管理器,nginx,webhook,这几个应用。
- 从git中拉代码,这里需要配置公钥
- 代码打包并生成node项目
- 配置nginx
虽然配置过一次,但是因为时间间隔4个月的关系,也忘得差不多了,每个步骤都有踩坑,下面开始记录。
第一阶段:安装应用
第一步,这里踩的坑是因为以前管理node的项目使用的PM2,现在宝塔桌面正在放弃,未来都要使用node版本管理器,但是这是第一次使用。踩坑的点是在CentOS7下,不支持使用node16.9以上,而vite5不支持node18以下。后来发现是因为glibc版本过低。
node18需要glibc2.28版本以上。前置条件是make4.0之后的版本,gcc4.9之后的版本。这里我根据其他大神的博客,安装了make4.3和gcc7.3
安装make4.3
wget http://mirrors.ustc.edu.cn/gnu/make/make-4.3.tar.gz
tar -xzvf make-4.3.tar.gz
cd make-4.3/
//创建构建目录
mkdir build && cd build
//安装到指定目录
../configure --prefix=/usr/local/make
make -j4 && sudo make install
//创建软链接
cd /usr/bin/
mv make make.bak # backup
ln -sv /usr/local/make/bin/make /usr/bin/make
验证
make -v
安装gcc7.3(不能超过10,7.3或8.0都可以)
升级到gcc 7.3:
yum -y install centos-release-scl
yum -y install devtoolset-7-gcc devtoolset-7-gcc-c++ devtoolset-7-binutils
scl enable devtoolset-7 bash
需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。
如果要长期使用gcc 7.3的话:
echo "source /opt/rh/devtoolset-7/enable" >>/etc/profile //重点
验证
gcc -v
安装glibc
# 在线安装
wget http://mirrors.ustc.edu.cn/gnu/libc/glibc-2.28.tar.gz
# 解压
tar zxf glibc-2.28.tar.gz
cd glibc-2.28
mkdir build
cd build
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
make
make install
验证
strings /lib64/libc.so.6 | grep GLIBC
现在已经安装好了,但是有可能还不能用,我这里出现的问题是当我node -v后,出现缺少GLIBCXX_3.4.20
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
strings /lib64/libstdc++.so.6 | grep GLIBCXX
make all
yum whatprovides libstdc++.so.6
yum update -y libstdc++.x86_64
# 这个版本的libstdc++.so.6实际上版本比较旧,并不能解决问题。
# 下载稍微新一点的版本
sudo wget http://www.vuln.cn/wp-content/uploads/2019/08/libstdc.so_.6.0.26.zip
unzip libstdc.so_.6.0.26.zip
cp libstdc++.so.6.0.26 /lib64/
cd /lib64
# 把原来的命令做备份
cp libstdc++.so.6 libstdc++.so.6.bak
rm -f libstdc++.so.6
# 重新链接
ln -s libstdc++.so.6.0.26 libstdc++.so.6
验证
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
那么这时在centOS下可以使用18及以上的nodejs了。
第二阶段:拉取代码
拉取代码有两种方式第一种在文件夹中使用git clone的方式,第二中使用webhook的方式。
先说webhook,当在本地修改过代码,webhook会自动拉取代码,使服务器上代码与本地始终保持一致。但是因为每次更新后需要手动打包,所以这个功能用处不大。手动git pull也是一样。当然可以写一个定时任务通过shell脚本自动执行,但是一般提交代码后还是希望第一时间看一看效果。
再说git clone 这时最常见的方法,但是我竟然忘记要配公钥了。现在想来还是没有重视公钥的事情,所以这次着重看了一下公钥的条件。公钥和私钥在生成上是没有区别的。但是公钥是给服务器上的。这里我就不赘述公钥生成的方法了。
第三阶段:打包和添加项目
以我的博客为例,使用的是next,打包命令是npm run build的
打包之后就可以在宝塔的网站导航栏上的node标签页创建项目了。
这个也非常简单,注意端口号要和生成的端口号保持一致。
创建成功就可以先配置ssl了。
这里也很简单,到阿里或腾讯可以直接零元购,一年大概给20个。我的是在阿里买的,下载的时候有个选项,我选的nginx。
下载好有key和pem两个文件,通过网站管理对网站的配置,把两个文件复制到对应的位置就行。
第四阶段,配置nginx
可能是这次有经验了,摸索了没多久就好了。
对于一般的网站,就两个地方需要配置,第一个是server_name,这里是自己的网站名,第二是在location,如果在项目中设置了base(这个不是固定的,反正我叫它base)。如api。那么一般请求url都会是 location:5000/api/getdata.json(只是一个示例,但是大部分请求地址就是长这样)。那么nginx会匹配到/api。把前面全换成服务的地址。
那么坑在哪呢。
location /api/ {
proxy_pass /http://110.110.120.119:1234/;
}
这样才是对的。错的我就不写了,太离谱。
现在项目就完全部署好了
宝塔面板负载优化
使用宝塔的时候总会遇到负载100%的情况,这个时候cpu或者内存总会有一个爆红,为了解决这个问题我也是查了相应的资料。
一共分为三步。
第一步调整虚拟内存swap,这个虚拟内存和Windows上的类似,一般调整为物理内存的1.5倍左右。如果物理内存大于4G,一般建议调整到2G以内。比如说你的物理内存是2G,就分配3G的虚拟内存。如果你的物理内存是8G,那么建议你的虚拟内存为1G,或设置为0。
第二步,调整内存盘
第三步,使用memacached开启缓存