从零开始搭建一个AI聊天网站(一)—— 服务器部署

此处默认你已经掌握了服务器相关知识。(主要因为我学的不精,让我讲我讲不来,有误人子弟之嫌,哈哈)

假设我们现在拿到的是一个全新的服务器。上面什么都没有。

安装Docker

​ 此部分表述较为官方。

1. 更新系统

首先,打开终端并更新你的包列表:

1
sudo apt update

2. 安装依赖包

安装一些必要的依赖包,以便让 apt 可以使用 HTTPS:

1
sudo apt install apt-transport-https ca-certificates curl software-properties-common

3. 添加 Docker 的官方 GPG 密钥

运行以下命令以添加 Docker 的官方 GPG 密钥:

1
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

4. 添加 Docker 仓库

接下来,添加 Docker 的稳定版仓库:

1
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

5. 更新包列表

再次更新包列表,以便包含 Docker 仓库的内容:

1
sudo apt update

6. 安装 Docker

现在可以安装 Docker 了:

1
sudo apt install docker-ce

7. 启动 Docker 并设置为开机自启

安装完成后,启动 Docker 服务并设置为开机自启:

1
2
sudo systemctl start docker
sudo systemctl enable docker

8. 验证 Docker 是否安装成功

运行以下命令来检查 Docker 是否正确安装:

1
sudo docker --version

你应该会看到 Docker 的版本信息。

9. 运行 Docker 命令(可选)

如果你希望在不使用 sudo 的情况下运行 Docker 命令,可以将你的用户添加到 docker 组:

1
sudo usermod -aG docker $USER

添加后,注销并重新登录,或者运行以下命令使更改生效:

1
newgrp docker

安装 Nginx

1、 拉取 Nginx 镜像

打开终端并运行以下命令来拉取 Nginx 的官方镜像:

1
docker pull nginx

2. 运行 Nginx 容器

使用以下命令启动 Nginx 容器:

1
docker run --name my-nginx -p 80:80 -d nginx
  • --name my-nginx:为容器指定一个名称。
  • -p 80:80:将主机的 80 端口映射到容器的 80 端口。
  • -d:在后台运行容器。

3. 验证 Nginx 是否运行

在浏览器中访问 http://localhost,如果一切正常,你应该能看到 Nginx 的欢迎页面。

4. 停止和删除容器

如果你想停止并删除 Nginx 容器,可以运行以下命令:

1
2
docker stop my-nginx
docker rm my-nginx

5. 自定义 Nginx 配置(可选)

如果你需要自定义 Nginx 的配置,可以创建一个本地配置文件,然后在运行容器时挂载它。例如:

  1. 创建一个 Nginx 配置文件 nginx.conf
  2. 使用以下命令运行容器并挂载配置文件:
1
docker run --name my-nginx -p 80:80 -v /path/to/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx

/path/to/nginx.conf 替换为你本地配置文件的路径。

​ 如果出现网络问题,请更换镜像源。

部署uni-api和NeatChat

​ 因为服务器就是一台电脑,因此安装uni-api和NeatChat的步骤同前面几篇一样,不再赘述。当这两个项目都成功启动之后,你应该能在浏览器地址栏通过以下地址访问:

NeatChat

1
http://your-vps-ip:3000

uni-api

1
http://your-vps-ip:8001

​ your-vps-ip 指的是你的服务器ip地址

​ 同时还要注意,NeatChat的启动命令中,Base_url 应该填入你的uni-api地址,key为你自己写的key。

​ !!注意,你还需要在你服务器的安全组中添加这两个端口!!

​ 到这里已经可以实现让你的朋友访问了。当然,还可以更进一步,要不然跟别人吹牛的时候,你告诉人家,这是我的网站,别人一看你的地址,大眼瞪小眼,这个我认识的网站地址不一样,那不就嗅大了?哈哈,开玩笑

安装证书

1
https://help.aliyun.com/zh/ssl-certificate/getting-started/get-started-with-free-certificates

​ 在阿里云申请一个证书,教程贴下面了,大家可以看娇嗔一步步去申请。除了阿里云,还有ZerofSSL这个免费证书申请网站,都是3个月不过两家的证书格式不太一样,这些需要读者自己去研究。

​ 在阿里云申请证书后,差不多10分钟就颁发了。之后我们会得到一个存放颁发给某一域名的证书的压缩包。里面分别存放了2个格式的文件,pem格式和key格式。

​ 解压后上传到服务器的某一位置,自己能找到就行。

​ 然后在服务器上打开nginx配置文件,一般为在 ~/etc/nginx/nginx.conf

​ 将以下内容复制进去:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
user www-data;
worker_processes auto;
pid /run/nginx.pid;

# 优化:增加文件描述符限制
worker_rlimit_nofile 65535;

events {
worker_connections 4096; # 增加连接数
multi_accept on; # 允许一个 worker 同时接受多个新连接
use epoll; # 使用 epoll 事件模型,提高性能
}

http {
# 基本设置
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
client_max_body_size 1024m;

include /etc/nginx/mime.types;
default_type application/octet-stream;

# 日志设置
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;

# Gzip 压缩
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript application/x-javascript;
gzip_min_length 256; # 只压缩大于 256 字节的内容

# SSL 全局设置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;
ssl_buffer_size 4k;

# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;



server {
listen 443 ssl;
server_name web.leebay.cyou;

# SSL 证书配置
ssl_certificate /etc/ssl/certs/web.leebay.cyou.pem;
ssl_certificate_key /etc/ssl/private/web.leebay.cyou.key;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;

# 启用 HSTS
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

# 其他安全头部
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "strict-origin-when-cross-origin";

location / {
proxy_pass http://127.0.0.1:3000; # 替换为NeatChat服务的地址
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;

# 优化代理缓冲
proxy_buffering on;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;

# 优化代理超时设置
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}


server {
listen 80;
#请填写绑定证书的域名
server_name web.leebay.cyou;
#把http的域名请求转成https
return 301 https://$host$request_uri;
}


这里主要改3个地方

ssl_certificate 后面紧跟你的.pem文件地址

ssl_certificate_key 后面紧跟你的.key 文件地址

server_name 后面紧跟你申请证书时填的域名

其他就不必改了。然后重启nginx

1
sudo systemctl restart nginx

​ 最后,你还不能访问你的网站。听大佬讲,80,443这俩端口,根据阿里云方面的规定,必须进行ICP备案才能正常访问。

​ 因此最后一步是需要你自己去合规合法地进行ICP备案。

​ 当然你也可以不监听443、80端口,监听其他端口,比如33333,这样你就可以通过 https://your-domain:33333访问你的应用啦(虽然怪怪的)

Tip小技巧

​ NeatChat不支持多端记录共享,因此如果你在某设备上的记录较为重要,要在其他端查看,可以将对话记录导出,再在另一端导入即可。方法比较繁琐,也有更简单的方法,这就需要小伙伴们去探索啦。

​ 零基础部署一个项目的系列至此结束(码字真累啊~),有很多地方可能考虑的不周到,欢迎在文章下方留言指正!