阿里云ECS本地部署DeepSeek-R1

直入主题,先购买阿里云ECS服务器(此处不详细展开说明,本人购买香港机房)。

只是为了学习部署用,故购买CPU类型ESC即可,模型选 1.5b

打开浏览器,输入:https://ollama.com/ 进入ollama官网

说明:ollama 可以看作跑AI的壳子

           deepseek-r1(1.5b 7b 8b)、deepseek-v3  是模型

如下图所见:

 

点击 “Download”,选择Linux

 

友情提醒,这里的下载安装,速度很慢,本人大概用了3-4小时 才下载安装好,需要耐心等待一下。

 ollama 壳子安装完成后,我们就可以安装 各种模型了,本人此处硬件配置低,故只能安装1.5b 模型,如下图:

复制上面的命令,按回车,如下图:

 安装模式速度很快,座等几分钟即可。

PS:如果退出,需要重新进入Ollma命令上,参考如下:

        查看ollama安装的模式列表: ollama list

        进入ollama命令行客户端:ollama run 模型名称;比如:ollama run deepseek-r1:1.5b

        退出命令行客户端: 按 Ctrl + D

        重启:systemctl daemon-reload

                   systemctl restart ollama

        卸载ollama和模型:ollama rm xxxxxx

                                         ollama rm 模型名称

如下图:

 

 好了,至此 本地安装全部完成,让我们开始新的旅程吧。

PS: 别忘记安装nginx哦,如果不知道怎么安装,请看如下地址

https://www.cnblogs.com/jimmyshan-study/p/11515945.html

配置ollama远程访问,一定要修改,否则,自己的应用程序无法使用 http  api接口调用(postman同理)

打开终端并运行以下命令来编辑Ollama的systemd服务: sudo systemctl edit ollama.service 这将打开一个编辑器。

[Service]部分下,为每个环境变量添加一行:

[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_ORIGINS=*"

在命令行输入:

curl http://ip地址:11434

出现如下图,标识可以远程访问API了

 

 

===================================================================================================

 本人选择简易版本,学习够用了(ollama-webui-lite)

步骤如下:

cd ~
git clone https://github.com/ollama-webui/ollama-webui-lite.git

cd ollama-webui-lite

# 编译
npm ci

如果出现错误,可能是node版本引起,请看下面 ===== 以下内容进行安装(红色字体 找 安装node20.10.0 内容)

编译成功后,执行: npm run dev

然后,打开浏览器,输入: http://ip地址:3000  即可访问

应该会出现报错,链接不到 deepseek api

编辑 vi /root/ollama-webui-lite/src/lib/constants.ts  (本人下载安装 ollama-webui-lite 的路径)

export const OLLAMA_API_BASE_URL = `http://外网IP:11434/api`;
export const WEB_UI_VERSION = "v0.0.1-lite";

还要解决 跨域问题,修改nginx配置,如下

vi /etc/nginx/conf.d

复制代码
server {
    listen       80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }


    location /api/ {
        proxy_pass  http://127.0.0.1:11434;
        proxy_set_header origin http://127.0.0.1:11434;

        proxy_buffering off;
        proxy_cache off;
        proxy_set_header Connection '';
        proxy_http_version 1.1;
        chunked_transfer_encoding off;

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        add_header 'Access-Control-Allow-Origin' '*' always;
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
        add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization' always;
        add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range' always;

        if ($request_method = 'OPTIONS') {
            add_header 'Access-Control-Allow-Origin' '*';
            add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
            add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range,Authorization';
            add_header 'Access-Control-Max-Age' 1728000;
            add_header 'Content-Type' 'text/plain; charset=utf-8';
            add_header 'Content-Length' 0;
            return 204;
        }
    }



    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}
复制代码

service nginx stop

service start stop

重启下NGINX,好了,全部完工。

 

PS: 上面我们用 npm run dev 启动前端工程,当我们关闭命令行窗口后,进程就会停止,不能继续访问了,解决如下:

安装pm2工具 管理前端工程进程,

安装:npm install pm2 -g

运行:pm2 start npm --name "ollama-webui-myweb" -- run dev

相关命令:pm2 list    --查看应用进程列表

                  pm2 stop all  --停止所有应用进程

                  pm2 restart all   --启动所有应用进程

                  pm2 reload all    --软启用所有应用进程

                  pm2 delete 0      --删除ID为0的应用进程

                  pm2 delete all     --删除所有应用进程

 

 

 

 ===================================================================================================

以下安装有点麻烦,本人就当笔记记录一下,主要是安装python3.11.0   node-20.10.0 ,上面如果安装成功了,可以忽略以下的内容

 

上面我们已经安装好,但是使用很不方便,不能让使用者进入服务器敲打命令行吧,这里,我们需要安装一下webUI界面,

从GITHUB上找了开源的项目,本人这里选择 open-webui,本人按照官方教程(GITHUB)使用docker安装,报镜像不存在

以为是服务器国内问题,换国际服务器也同样相同问题,无奈,只能从GITHUB下载源码编码了,但是,open webUI需要 python3.11.0及 nodejs 20以上,

本人购买的的服务器是centos7.6 64位,不想换服务器,只能手动升级了。

 

centos7.6自带python2.7,那就让我们手动升级到3.11.0版本,并同时支持python2 python3,因为yum需要python2的支持,开始安装。

重命名原来的文件:

cd /etc/yum.repos.d/
mv CentOS-SCLo-scl.repo CentOS-SCLo-scl.repo.bak
mv CentOS-SCLo-scl-rh.repo CentOS-SCLo-scl-rh.repo.bak

运行 vim 或 vi 命令并粘贴下方内容:

vi CentOS-SCLo-rh.repo

黏贴如下信息

[centos-sclo-rh]
name=CentOS-7 - SCLo rh
baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/rh/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo

 

安装openssl1.1.1(python3.11需要1.1.1版本以上的openssl)

cd ~
wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1w.tar.gz
tar zxvf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
./config --prefix=/usr/local/openssl
make && make install

 

安装 pyenv 管理工具,这个工具可以方便管理python版本

安装依赖
sudo yum install -y git gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel xz xz-devel libffi-devel findutils

curl https://pyenv.run | bash
echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
source ~/.bashrc
这里,本人没有安装成功,所以,换一种方式安装,从源码编译安装(推荐)

手动安装如下:

安装依赖

sudo yum groupinstall -y "Development Tools" 
sudo yum install -y openssl-devel bzip2-devel libffi-devel zlib-devel xz-devel tk-devel

下载并解压 Python 3.11 源代码:

cd /usr/src 
sudo wget https://www.python.org/ftp/python/3.11.0/Python-3.11.0.tgz 
sudo tar xzf Python-3.11.0.tgz

cd Python-3.11.0
sudo ./configure --enable-optimizations
sudo make altinstall

输入:python3.11 --version 查看版本

           python --version
问题:此处系统中的默认python版本还是 Python 2.7.5,我们需要更换默认版本。

输入命令:whereis python   查询 python所在的安装目录

使用cp,将 python3.11的文件,拷贝到 /usr/bin/ 目录下
如:cp /usr/local/bin/python3.11 /usr/bin/python3.11
       cp /usr/local/bin/python3.11-config /usr/bin/python3.11-config

将原来的链接备份

mv /usr/bin/python /usr/bin/python.bak

添加python3的软连接

cd /usr/bin
ln -s python3.11 python

查看python文件情况

ll python*

验证下是否安装成功

python --version

看到 Python 3.11.0 表示已经安装成功

重要:修改 yum 配置,因为yum使用的是 python2,不修改会导致yum不能正常使用

vi /usr/bin/yum
将第一行的  #!/usr/bin/python  修改为  #!/usr/bin/python2

vi /usr/libexec/urlgrabber-ext-down
将第一行的 #!//usr/bin/python 修改为 #!//usr/bin/python2

 

安装nodejs20.10.0及以上

cd /opt
wget https://nodejs.org/dist/v20.10.0/node-v20.10.0-linux-x64.tar.xz
tar xvf node-v20.10.0-linux-x64.tar.xz
mv node-v20.10.0-linux-x64 ./nodejs

添加环境变量,vi /etc/profile,内容如下

## set nodejs
export NODE_HOME=/opt/nodejs
export PATH=.:$NODE_HOME/bin:$PATH

输入:node -v
如果出现版本号,表明安装已经成功。

 

如果出现如下信息:

node: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.25' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by node)
node: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by node)

那我们需要升级类库,步骤如下:
更新glibc

wget http://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz
tar xf 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

可能会出现错误信息,如果出现下面的错误:
configure: error:
*** These critical programs are missing or too old: make compiler
*** Check the INSTALL file for required versions.

 

更新系统软件包:

sudo yum update

解决办法:升级gcc与make

复制代码
# 升级GCC(默认为4 升级为8)</span>
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.3.tar.gz
tar -xzvf make-4.3.tar.gz && cd make-4.3/
./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
复制代码

这时 所有的问题 都已经解决完毕 再重新执行上一步 更新glibc即可

cd /root/glibc-2.28/build
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin

查看 bison 版本

bison --version

如果出现,表示已经安装,如果没有,需要手动安装,如下:

cd /root/glibc-2.28/build
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
yum install -y bison

好了,继续更新,下一步

make && make install

 

验证下 是不是已经OK
node -v
npm -v

发现还有3个错误
node: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by node)

输入命令:strings /usr/lib64/libstdc++.so.6 | grep CXXABI
再次查看一下版本

 

继续更新(更新libstdc++.so.6.0.26)

cd /root
wget https://cdn.frostbelt.cn/software/libstdc%2B%2B.so.6.0.26

备份原有的软连接

mv /usr/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6.bak

替换系统中的/usr/lib64

cp /root/libstdc++.so.6.0.26 /usr/lib64/

cd /usr/lib64/
ln -snf ./libstdc++.so.6.0.26 libstdc++.so.6

好了,验证一下
node -v
npm -v

OK,完工。

 

posted @   JimmyShan  阅读(68)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
点击右上角即可分享
微信分享提示