2023-12-05 18:42:18 随笔 随笔
用yum update
更新最新版的yum,从而保障后续更新都是最新版的内容
当然,如果我们在更新yum的时候出现以下错误
# sudo yum update(或者输入yum update时):
No packages marked for update
那么此时就需要我们先清除一下yum的缓存,然后再更新yum
# 按照以下步骤清除yum缓存
rm -rf /var/cache/yum/*
yum clean all
yum update -y
cd
wget http://ftp.gnu.org/gnu/glibc/glibc-2.38.tar.gz
tar xf glibc-2.38.tar.gz
cd glibc-2.28/ && mkdir build && cd build
# 升级GCC(默认为4 升级为8)
yum install -y centos-release-scl
yum install -y devtoolset-8-gcc*
mv /usr/bin/gcc /usr/bin/gcc-4.8.5
ln -s /opt/rh/devtoolset-8/root/bin/gcc /usr/bin/gcc
mv /usr/bin/g++ /usr/bin/g++-4.8.5
ln -s /opt/rh/devtoolset-8/root/bin/g++ /usr/bin/g++
# 升级 make(默认为3 升级为4)
wget http://ftp.gnu.org/gnu/make/make-4.4.1.tar.gz
tar -xzvf make-4.4.1.tar.gz && cd make-4.4.1/
./configure --prefix=/usr/local/make
make && make install
cd /usr/bin/ && mv make make.bak
ln -sv /usr/local/make/bin/make /usr/bin/make
cd ~/glibc-2.38/build
make all
yum whatprovides libstdc++.so.6
yum update -y libstdc++.x86_64
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
首先先更新一下yum源
sudo yum update
如下图所示,看到 Complete! 表明已经更新完毕
这里建议按照我的方法,先单独解决环境变量,然后再安装指定版本的node.js
首先就是先安装依赖包gcc,并且手动更新为最新版本
yum install -y gcc-c ++ make
这里的版本是不够我们使用的,所以我们需要升级gcc至9.3版本
# 升级到gcc 9.3:
$ yum -y install centos-release-scl
$ yum -y install devtoolset-9-gcc devtoolset-9-gcc-c++ devtoolset-9-binutils
$ scl enable devtoolset-9 bash
# 需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。
如果要长期使用gcc 9.3的话:
$ echo "source /opt/rh/devtoolset-9/enable" >>/etc/profile
$ source /etc/profile
然后重启一下服务器让更改生效
让我们执行一下:
$ gcc -v
如果出现以下红框内内容,那就代表更新成功
执行下面代码,查看当前make版本
$ cd /usr/bin/ # 进入bin目录
$ make -v # 查看bin目录下make版本
输入cd
回到根目录开始更新,依次执行以下命令:
$ 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 && sudo make install
# 创建软链接
$ cd /usr/bin/
$ mv make make.bak
$ ln -sv /usr/local/make/bin/make /usr/bin/make
让我们再次查看一下版本:
ok,这下gcc&make均更新完毕
# 在线安装之前记得回到根目录
$ 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 --disable-sanity-checks --disable-werror
# 这步执行时间依赖你的配置,我反正用了大概30多分钟,建议开把游戏
$ make && make install
$ sudo make localedata/install-locales
在安装这个的时候,执行mkdir build && cd build
的时候可能会遇到一个错误,这个错误及导致结果如下图红框所示
当然,这个问题很好解决,提示我们too old: bison compiler
,那我们就去更新一下就行了
先看看有没有这个文件,回到根目录
好吧,都没有,那就安装呗
yum install bison
同理,先看看有没有,没有就直接去下载
当我们相同通过解决bison来解决compiler问题时:
yum install compiler
会遗憾获得一个新的报错Loaded plugins: fastestmirror
原因:
解决方法:
修改插件的配置文件vi /etc/yum/pluginconf.d/fastestmirror.conf
i
键,进入编辑模式,enabled = 1
由1改为0,禁用该插件,然后按ESC退出编辑,输入:wq
保存退出修改yum的配置文件vi /etc/yum.conf
plugins=1
由1改为0,不使用插件,保存退出清除缓存并重新构建yum源
yum clean all
yum makecache
如果你试着安装compiler还是会出现错误提示,那么大概率是
gcc
版本太高导致,建议重装8.3版本,下面给出重装步骤
- 比如These critical programs are missing or too old: compiler
这里给出两个gcc版本供选择,两个我都试过,均能解决问题
# 升级到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 8.3:
$ yum -y install centos-release-scl
$ yum -y install devtoolset-8-gcc devtoolset-8-gcc-c++ devtoolset-8-binutils
$ scl enable devtoolset-8 bash
# 需要注意的是scl命令启用只是临时的,退出shell或重启就会恢复原系统gcc版本。
# 如果要长期使用gcc 8.3的话:
$ echo "source /opt/rh/devtoolset-8/enable" >>/etc/profile
再次查看版本
成功切回8.3.1版本
安装完毕,回到glibc里的build目录继续执行
$ cd glibc-2.28/build/
$ ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin --disable-sanity-checks --disable-werror
# 下一步执行时间依赖你的配置,我反正用了大概30多分钟,建议开把游戏
$ make && make install
此时我们回退至gcc8.3.1
版本后,就能正常执行上面的步骤了,然后开始执行make && make install
,半小时后见
make完后,可能会出现如下图的错误提示,无须担心,正常现象
最后执行一下
$ sudo make localedata/install-locales
等待完毕,查看一下
使用wget命令下载Node.s的压缩包。我们可以从官方网站上找到最新版本的Node.js,并复制其下载链接。例如,如果这里想下载版本v18.17.0,可以使用以下命令:
wget https://nodejs.org/dist/v18.17.0/node-v18.17.0.tar.gz
下载完成后,解压缩Node.is压缩包。可以使用以下命令
tar -xvf node-v18.17.0.tar.gz
进入解压后的目录
cd node-v18.17.0
接下来,使用以下命令进行配置和编译:
./configure
make
扁译完成后,使用以下命令进行安装
sudo make install
安装完成后,您可以使用以下命令验证Node.js是否成功安装
node -V
如果成功安装,将显示Node.js的版本号
此外,安装nodejs的时候也会安装npm
:
npm -V
当然,我们最好再安装一个管理nodejs各版本的n管理器
npm install n -g
最后结果为下面内容
[root@iZ0jl9sgt76d4mky0e0bs4Z ~]# node -v
v18.17.0
[root@iZ0jl9sgt76d4mky0e0bs4Z ~]# npm -v
9.6.7
[root@iZ0jl9sgt76d4mky0e0bs4Z ~]# npm install n -g
added 1 package in 4s
[root@iZ0jl9sgt76d4mky0e0bs4Z ~]# n -V
v9.2.0
设置Yarn仓库:
curl --silent --location https://dl.yarnpkg.com/rpm/yarn.repo | sudo tee /etc/yum.repos.d/yarn.repo
sudo rpm --import https://dl.yarnpkg.com/rpm/pubkey.gpg
添加存储库后,通过运行以下命令来安装Yarn:
sudo yum install yarn
或者(两者区别就是前者安装需要自己手动yes,后者给你自动yes了)
sudo yum install -y yarn
最后查看一下是否安装完毕
yarn -V
出现红框内容表示已经安装了最新版的yarn了
还是老规矩,先到项目地址,登录Github,然后下载即可,这个方法虽然不是那么极客,但是简单啊~
我这里使用的是centos7.9的系统,其余操作系统请自行百度
前往宝塔下载官网,然后复制红框内链接
前往服务器终端进行安装
安装完毕后保留下面框内的信息
其中外网面板地址就是我们的访问地址,密码账户就是默认初始登录信息
点击外网地址进入宝塔面板后,输入账号密码登录(无法访问面板那就是没放行安全组,去你购买云服务器的安全组放行端口即可)
然后按提示安装LNMP套件即可
安装完成后,就进入了部署阶段
这里域名如果有自己的就可以填自己的,没有就填服务器公网ip即可
如果你填自己的域名,那么可以再看看后面的反向代理,通过反向代理你就能用你绑定的域名直接访问你的网站了
然后将下载好的源码上传到宝塔面板文件夹中,并解压缩
然后打开解压后的文件夹,新建一个.env
文件,在里面填入你的环境变量,如下:
OPENAI_API_KEY=sk-XXX
CODE=XXX, YYY, ...
BASE_URL=https://api.openai.com/
保存并退出文件,然后点击终端(或者手动进入该项目目录下)
在这个项目目录下输入:
yarn install # 安装所需模块
yarn dev # 调试项目
yarn build && yarn start # 构建并运行项目
如果构架运行项目给你提示:
Warning: For production Image Optimization with Next.js, the optional 'sharp' package is strongly recommended. Run 'yarn add sharp', and Next.js will use it automatically for Image Optimization.
那就执行yarn add sharp
后,再构建运行项目
安装完成后,你就可以访问 http://你的服务器IP地址:3000 来访问NextWeb啦!
如果要直接使用域名来访问项目,你还需要将 docker
项目反向代理到域名,你首先需要将域名解析指向到服务器,比如你要用 chat.xxx.com
作为网站入口,那么应该在域名服务商那边添加解析,这里的记录值填你自己服务器的IP地址
这里补充一个示例
然后点开 设置,SSL,先申请一个 Let’s Encrypt 的免费证书,顺便把强制 HTTPS打开
当然如果你自己有证书,也可以用自己的,什么?你问我怎么获取证书?当然是去你买的服务器厂商哪里白嫖啊,如何白嫖请自行百度,这里不做赘叙
然后点击反向代理,添加一个反向代理,目标URL
填入:http://127.0.0.1:3000
或者Docker
中实际显示的地址
然后点开反向代理的配置,将下面这段代码去掉注释输入进去,保存,实现流式传输
# 不缓存,支持流式输出
proxy_cache off; # 关闭缓存
proxy_buffering off; # 关闭代理缓冲
chunked_transfer_encoding on; # 开启分块传输编码
tcp_nopush on; # 开启TCP NOPUSH选项,禁止Nagle算法
tcp_nodelay on; # 开启TCP NODELAY选项,禁止延迟ACK算法
keepalive_timeout 300; # 设定keep-alive超时时间为65秒
如下图所示
然后你就能通过你的域名访问网站了
当反向代理后,我们可能会发现,https://域名
访问网站时会提示504访问超时,用http://域名
也会提示超时,只有用http://域名:端口 或者 域名:端口
的形式才能通过域名访问网站
这个问题本质是反向代理后的转发url错误,在我们前面反向代理本地http://url:端口
后,里面的配置文件也是最开始填的默认的http://url:端口
但是我们现在转发代理的是域名而不是原来本地服务,所以我们就需要去配置文件中将这部分进行修改
如下图所示点击配置文件
将原本代理url改为你自己的http://网站域名:端口
的形式,其余不变保存退出
然后手动或者在宝塔这里点击重载即可
这下你就可以直接同域名
访问网站,并且安装SSL证书自动转换为https
安全访问
很多小伙伴可能会使用香港的服务器部署,或者在国内部署(别在国内部署!),任何无法直连到 OpenAI 官网的服务器,都需要一个反向代理,这里提供个最简单的反向代理配置方案,免费!
你需要准备:
CloudFlare 账号就不多说了,自己注册就行,反正也有中文界面。登录之后,点击Workers,点击创建服务
然后点击配置
点击快速编辑,将下面这段代码复制下来,粘贴到编辑区域,保存并部署即可:
udda
async function handleRequest(request) {
const url = new URL(request.url)
const fetchAPI = request.url.replace(url.host, 'api.openai.com')
// 添加跨域处理
const corsHeaders = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'OPTIONS',
'Access-Control-Allow-Headers': '*',
};
if (request.method === 'OPTIONS') return new Response(null, { headers: corsHeaders });
return fetch(fetchAPI, { headers: request.headers, method: request.method, body: request.body })
}
addEventListener("fetch", (event) => {
event.respondWith(handleRequest(event.request))
})
完事儿以后你还需要绑定一个自己的域名,方便国内访问,这个域名需要首先绑定到 cloudflare
需要准备以下几样东西:
以上几样缺一不可,准备好了就可以开始设置了
1. 添加站点:
2. 选择一个免费的方案:
3. 检测已有 DNS 记录,这里 Cloudflare 会把能检索到的 DNS 记录都列在下面,这里我们先不用管,直接下一步:
4. 替换 DNS 服务器地址,先记录下来 Cloudflare 让我们替换的内容,然后再根据提示去云服务器厂商哪里替换:
至此,需要设置的内容已经基本完成,剩下的就是等待…..48小时…慢慢等吧
先回 Cloudflare,点击下面的「Check nameservers」,当然,如果你之前已经把页面关了,也无所谓,因为这个就是个跳转,会跳转到当前域名的 overview 页面,如下图:
然后添加二级域名,如果提示你已经存在,那就是因为你之前在阿里云已经设置了这个二级域名,你只需要把原来的删除,然后重新在这里创建即可
然后就是漫长的等待,等到cloudflare给你发邮件提示即可
最后,将ChatGPT-Next-Web
的BASE_URL
环境变量改成你的直连域名即可(可包含 https 或者 /)
需要注意的是,这个绑定的域名只能用作代理,不能拿来当做项目域名使用!!!如果要给项目绑定一个域名,那么就需要正常解析一个域名,然后再将这个新的域名反向代理绑定docker项目或本地项目!!!
当我们使用yarn build && yarn start
,执行到yarn start
时提示下面这个错误
- error Failed to start server
Error: listen EADDRINUSE: address already in use :::3000
at Server.setupListenHandle [as _listen2] (node:net:1751:16)
at listenInCluster (node:net:1799:12)
at Server.listen (node:net:1887:7)
at /www/wwwroot/chat.aomanoh.com/node_modules/next/dist/server/lib/start-server.js:153:16
at new Promise (<anonymous>)
at startServer (/www/wwwroot/chat.aomanoh.com/node_modules/next/dist/server/lib/start-server.js:134:11)
at nextStart (/www/wwwroot/chat.aomanoh.com/node_modules/next/dist/cli/next-start.js:77:40) {
code: 'EADDRINUSE',
errno: -98,
syscall: 'listen',
address: '::',
port: 3000
}
这个就是因为端口已经被占用,所以我们只需要kill掉占用端口的进程即可
# 查询进程
$ udo lsof -i :被占用端口
$ kill 进程PID
# 如下面这个例子
$ sudo lsof -i :3000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
docker-pr 2185 root 4u IPv4 28575 0t0 TCP *:hbci (LISTEN)
$ kill 2185
然后执行yarn start
就不会再提示问题了
当我们想反代域名,然后通过域名访问docker部署的项目时,我们会访问进入这个页面:
我们通过worker将chat.aomanoh.com作为chat.openai.com的反代域名后,重新在DNS解析一个新的https域名,然后再宝塔反向代理本地端口,就能通过这个新的域名访问docker部署项目