# eggjs + 即时通讯功能后端部署上线
# 一、正常配置
# 1、解析一个域名
在阿里云或腾讯云,域名管理中,解析一个域名到线上服务器,本次演示域名:
eggjs.chat.51yrc.com,轻量应用服务器在域名栏目绑定域名。
# 2、创建网站
在宝塔面板中,
网站-PHP项目-添加站点-传统项目
域名:eggjs.chat.51yrc.com
备注:eggjs.chat.51yrc.com (自动生成)
根目录:/www/wwwroot/eggjs.chat.51yrc.com (自动生成)
FTP:不创建
数据库:MySQL---字符集:utf8mb4(存表情包),数据库账号、密码自动生成
PHP版本:这里选择纯静态
网站分类:默认分类
确定--> 点击域名看默认站点是否可以打开
# 3、上传代码到服务器
群文件下载源码 (或私信老师获取源码)
打开网站根目录,上传源码压缩包,解压
# 4、面板环境安装
- 查看是否安装了
PM2管理器:软件商店-已安装-查看是否安装了PM2管理器,没有则搜索安装;- 切换node版本到最新版本:
PM2管理器->设置->Node版本->选择一个新版本->确定- 检查安装Redis:
软件商店-已安装-查看是否安装了Redis,没有则搜索安装;之后,记得启动Redis服务
# 5、命令行工具执行
- 打开终端
可以在面板对应的网站根目录下,
终端-> 输入命令
也可以在阿里云或者腾讯云控制台,找到服务器的远程连接打开命令终端
- 切换root账号:
su root- 输入密码 (服务器的
远程连接密码,忘了可以重新设置密码再输入)
- 切换到对应项目的根目录,如本项目:
cd /www/wwwroot/eggjs.chat.51yrc.com- 安装依赖:
npm install我们知道安装依赖包,需要找到npm镜像源:
- 如果你是国内服务器,我们会使用淘宝镜像源
npm config set registry https://registry.npmmirror.com/, 通过命令查看npm镜像源:npm config get registry- 如果是中国香港或者国外服务器,则不用切换镜像源,因为它本身就很快
执行:npm install安装依赖包
注意:可能由于npm版本或者其他原因,导致npm install安装依赖失败,可尝试以下解决方法:通过
yarn命令安装依赖:安装yarn:
npm install -g yarn
安装依赖:yarn install
# 6、安装数据库迁移工具【可选项】
【可选项、可省略,直接导入数据库也可以】(第二期第四季课程有详细讲解)
# 7、修改配置信息
config/config.default.js修改数据库连接:修改数据库连接配置:数据库名称database,数据库用户名username,数据库密码password
另外就是OSS云存储配置记得修改对应的:config.oss = { client: { accessKeyId: 'xxxx', //你的accessKeyId accessKeySecret: 'xxxx', //你的accessKeySecret bucket: 'xxxx', //你的bucket endpoint: 'xxx', //你的endpoint timeout: '60s', }, };
database/config.json数据库相关信息,建议全部改一下,改成当前数据库名,用户名,密码
# 8、导入数据库
导入代码中的数据库到服务器数据库
# 9、端口占用问题
若服务器不止一个项目,则修改配置换一个端口在启动,在 package.json 文件加上:
//加上别的端口号,如:7008 "scripts": { "start": "egg-scripts start --daemon --title=egg-server-mssql --sticky --port=7008", ... },
# 10、启动项目
启动项目:
npm start
# 11、添加反向代理
找到对应网站 ->
设置->反向代理->添加反向代理代理名称 :
api
目标URL :http://localhost:7008对应启动端口
发送域名 :localhost
还需要添加一个配置,主要针对 websocket
添加反向代理之后 -->配置文件-->底部写入下面代码:location /ws { proxy_pass http://127.0.0.1:7008; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header X-Real-IP $remote_addr; }修改前端项目的 /common/lib/config.js和manifest.json里面的域名即可
试一下:http://eggjs.chat.51yrc.com/ (opens new window)
# 12、宝塔面板配置示例:站点配置 及 反向代理
# 1️⃣ 站点配置
加上
client_max_body_size 300m;
server
{
listen 80;
listen 443 ssl;
http2 on;
server_name test.xinyiji2026.com mp.xinyiji2026.com app.xinyiji2026.com imgs.xinyiji2026.com video.xinyiji2026.com download.xinyiji2026.com www.xinyiji2026.com pc.xinyiji2026.com xinyiji2026.com;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/test.xinyiji2026.com;
client_max_body_size 300m;
#CERT-APPLY-CHECK--START
# 用于SSL证书申请时的文件验证相关配置 -- 请勿删除
include /www/server/panel/vhost/nginx/well-known/test.xinyiji2026.com.conf;
#CERT-APPLY-CHECK--END
include /www/server/panel/vhost/nginx/extension/test.xinyiji2026.com/*.conf;
#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
#error_page 404/404.html;
#HTTP_TO_HTTPS_START
set $isRedcert 1;
if ($server_port != 443) {
set $isRedcert 2;
}
if ($uri ~ /\.well-known/) {
set $isRedcert 1;
}
if ($isRedcert != 1) {
rewrite ^(/.*)$ https://$host$1 permanent;
}
#HTTP_TO_HTTPS_END
ssl_certificate /www/server/panel/vhost/cert/test.xinyiji2026.com/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/test.xinyiji2026.com/privkey.pem;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_tickets on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=31536000";
error_page 497 https://$host$request_uri;
#SSL-END
#ERROR-PAGE-START 错误页配置,可以注释、删除或修改
error_page 404 /404.html;
#error_page 502 /502.html;
#ERROR-PAGE-END
#PHP-INFO-START PHP引用配置,可以注释或修改
#清理缓存规则
location ~ /purge(/.*) {
proxy_cache_purge cache_one $host$1$is_args$args;
#access_log /www/wwwlogs/test.xinyiji2026.com_purge_cache.log;
}
#引用反向代理规则,注释后配置的反向代理将无效
include /www/server/panel/vhost/nginx/proxy/test.xinyiji2026.com/*.conf;
include enable-php-00.conf;
#PHP-INFO-END
#REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
include /www/server/panel/vhost/rewrite/test.xinyiji2026.com.conf;
#REWRITE-END
# 禁止访问的敏感文件
location ~* (\.user.ini|\.htaccess|\.htpasswd|\.env.*|\.project|\.bashrc|\.bash_profile|\.bash_logout|\.DS_Store|\.gitignore|\.gitattributes|LICENSE|README\.md|CLAUDE\.md|CHANGELOG\.md|CHANGELOG|CONTRIBUTING\.md|TODO\.md|FAQ\.md|composer\.json|composer\.lock|package(-lock)?\.json|yarn\.lock|pnpm-lock\.yaml|\.\w+~|\.swp|\.swo|\.bak(up)?|\.old|\.tmp|\.temp|\.log|\.sql(\.gz)?|docker-compose\.yml|docker\.env|Dockerfile|\.csproj|\.sln|Cargo\.toml|Cargo\.lock|go\.mod|go\.sum|phpunit\.xml|phpunit\.xml|pom\.xml|build\.gradl|pyproject\.toml|requirements\.txt|application(-\w+)?\.(ya?ml|properties))$
{
return 404;
}
# 禁止访问的敏感目录
location ~* /(\.git|\.svn|\.bzr|\.vscode|\.claude|\.idea|\.ssh|\.github|\.npm|\.yarn|\.pnpm|\.cache|\.husky|\.turbo|\.next|\.nuxt|node_modules|runtime)/ {
return 404;
}
#一键申请SSL证书验证目录相关设置
location ~ \.well-known {
allow all;
}
#禁止在证书验证目录放入敏感文件
if ($uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$") {
return 403;
}
access_log /www/wwwlogs/test.xinyiji2026.com.log;
error_log /www/wwwlogs/test.xinyiji2026.com.error.log;
}
# 2️⃣ 反向代理
如果想直接在域名后面访问某个文件,如:https://www.xinyiji2026.com/UKHMwnMaYo.txt 这可以在反向代理中这样写
location = /UKHMwnMaYo.txt {
root /www/wwwroot/www.xinyiji2026.com/app/public; // 服务器上的UKHMwnMaYo.txt文件地址,记得重载Nginx服务器
default_type text/plain;
}
#PROXY-START/
...
复制下面代码即可
#PROXY-START/
location ^~ /
{
client_max_body_size 300m;
proxy_pass http://127.0.0.1:7001;
proxy_set_header Host $host;
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;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_http_version 1.1;
proxy_connect_timeout 600s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
send_timeout 600s;
add_header X-Cache $upstream_cache_status;
set $static_fileydWLAIHQ 0;
if ($uri ~* "\.(gif|png|jpg|css|js|woff|woff2)$")
{
set $static_fileydWLAIHQ 1;
expires 1m;
}
if ($static_fileydWLAIHQ = 0)
{
add_header Cache-Control no-cache;
}
}
location /ws
{
client_max_body_size 300m;
proxy_pass http://127.0.0.1:7001;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
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;
proxy_connect_timeout 600s;
proxy_send_timeout 600s;
proxy_read_timeout 600s;
send_timeout 600s;
}
#PROXY-END/
# 二、多域名配置同一个网站的不同路由 [配置主站分站]
# 1. 配置域名
- 可对这个网站设置多个域名,可以是该域名的二级域名,或者不同域名都可以,但保证所有域名都解析到这台服务器了,
网站-域名管理; - 在宝塔面板中,
网站-SSL-Let's Encrypt选中这多个域名申请SSL证书,完成之后记得部署,强制https; - 创建
反向代理,正常创建,如果是多网站,则反向代码如下:
#PROXY-START/
location ^~ /
{
proxy_pass http://localhost:7001;
# 关键修改:将 localhost 改为 $host
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
add_header X-Cache $upstream_cache_status;
#Set Nginx Cache
set $static_filefgSMcdcd 0;
if ( $uri ~* "\.(gif|png|jpg|css|js|woff|woff2)$" )
{
set $static_filefgSMcdcd 1;
expires 1m;
}
if ( $static_filefgSMcdcd = 0 )
{
add_header Cache-Control no-cache;
}
}
#PROXY-END/
- 配置中间件如
app/middleware/domainRedirect.js, 举个例子:
module.exports = () => {
return async function domainRedirect(ctx, next) {
// 现在可以正确获取到域名了
const host = ctx.hostname;
console.log('访问域名:', host);
// 只处理根路径
if (ctx.path === '/') {
const query = ctx.querystring ? `?${ctx.querystring}` : '';
if (host === 'www.mmmcoo.net') {
ctx.redirect(`/api/template06/13/v1${query}`);
return;
}
if (host === 'www.ycdmmmcoo.com') {
ctx.redirect(`/api/template06/12/v2${query}`);
return;
}
// www.mmmcoo.com 不重定向,继续处理
}
await next();
};
};
- 记得把中间件加入到配置文件
config/config.default.js中:
config.middleware = ['domainRedirect','errorHandler', 'adminAuth', 'adminMenu', 'shopManagerAuth', 'shopusercenterAuth',];
- 一定记得重启Ngnix:
宝塔-网站-上面有手动重启;