Web类型网站在阿里云服务器(Ubuntu)部署的详细步骤

xx网站部署指南

本文档提供了将百善家政网站部署到阿里云Ubuntu服务器的完整步骤,包括环境配置、代码部署、问题排查和访问方法。

目录

  1. 前提条件

  2. 连接到服务器

  3. 环境配置

  4. 代码部署

  5. 配置Nginx

  6. 使用PM2管理应用

  7. 问题排查与解决

  8. 网站访问方式

  9. 维护与更新

前提条件

  • 已购买阿里云ECS服务器(Ubuntu系统)

  • 服务器IP地址:xxx.xxx.xx.xx(申请服务器的公网IP)

  • 服务器用户名:root(Ubuntu)

  • 本地已安装SSH客户端

  • 已有xxx网站的源代码

连接到服务器

使用SSH连接到阿里云服务器:

ssh root@xxx.xxx.xxx(服务器IP地址)

首次连接时,系统会提示您确认服务器的指纹,输入yes继续。然后输入您的服务器密码。

环境配置

系统更新

首先,更新系统软件包:

# 更新软件包列表
apt update 
​
# 升级已安装的软件包
apt upgrade -y

安装Node.js

在中国大陆服务器上,直接访问GitHub可能会遇到连接问题,因此我们使用替代方法安装Node.js:

问题1:GitHub连接超时,无法安装NVM

解决方案:使用替代方法安装Node.js

# 方法1:使用apt安装
# 添加Node.js官方PPA
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
​
# 安装Node.js和npm
apt install -y nodejs
问题2:软件包冲突

解决方案:移除冲突的包

# 移除冲突的包
apt remove -y libnode-dev nodejs
​
# 清理可能的残留
apt autoremove -y
​
# 清理apt缓存
apt clean
apt update
​
# 重新尝试安装Node.js
apt install -y nodejs

如果上述方法不起作用,可以尝试手动安装二进制文件:

# 下载Node.js二进制包
cd /tmp
wget https://npmmirror.com/mirrors/node/v18.19.1/node-v18.19.1-linux-x64.tar.gz
​
# 解压到/usr/local
mkdir -p /usr/local/lib/nodejs
tar -xzf node-v18.19.1-linux-x64.tar.gz -C /usr/local/lib/nodejs
​
# 设置环境变量
echo 'export PATH=/usr/local/lib/nodejs/node-v18.19.1-linux-x64/bin:$PATH' >> ~/.profile
source ~/.profile
​
# 创建符号链接
ln -sf /usr/local/lib/nodejs/node-v18.19.1-linux-x64/bin/node /usr/bin/node
ln -sf /usr/local/lib/nodejs/node-v18.19.1-linux-x64/bin/npm /usr/bin/npm
​
# 验证安装
node -v
npm -v

安装Nginx

# 安装Nginx
apt install -y nginx
​
# 启动Nginx并设置为开机自启
systemctl start nginx
systemctl enable nginx

代码部署

创建项目目录

# 创建网站目录
mkdir -p /var/www
cd /var/www

克隆代码

如果您有Git仓库:

# 克隆代码仓库
git clone <您的仓库URL> 文件夹aa
cd 文件夹aa

或者,您可以通过SFTP/SCP上传代码到服务器。

安装依赖

# 进入项目目录
cd /var/www/文件夹aa
# 安装依赖
npm install 

# 如果遇到网络问题,可以使用淘宝镜像
npm config set registry https://registry.npmmirror.com
npm install

项目构建

问题3:缺少.next目录

解决方案:需要先运行build命令

在构建之前,我们需要创建或修改Next.js配置文件:

# 编辑next.config.js
nano next.config.js

添加以下内容:

/** @type {import('next').NextConfig} */
const nextConfig = {
  output: 'standalone',
  poweredByHeader: false,
  compress: true,
  eslint: {
    ignoreDuringBuilds: true,  // 禁用ESLint检查
  },
  typescript: {
    ignoreBuildErrors: true,
  },
};

module.exports = nextConfig;
问题4:构建过程中遇到ESLint错误

解决方案:通过修改next.config.js禁用ESLint检查(如上配置所示)

然后执行构建:

# 构建项目
NODE_ENV=production npm run build
问题5:构建错误,与CSS优化相关

解决方案:移除experimental.optimizeCss选项或使用静态导出方式

# 编辑package.json
nano package.json

# 修改build脚本为
# "build": "next build && next export"

# 然后重新构建
npm run build

配置Nginx

问题6:Nginx配置问题

解决方案:创建正确的配置文件和符号链接

创建Nginx配置文件:

# 创建配置文件
nano /etc/nginx/sites-available/baishanjz

对于服务器端渲染(SSR)模式

如果使用标准的Next.js构建(非静态导出),添加以下配置:

server {
    listen 80;
    server_name xxx.xxx.xxx; # 替换为您的域名或IP

    # 设置正确的根目录
    root /var/www/文件夹aa;
    
    # 处理API请求和SSR
    location / {
        proxy_pass http://localhost:3000;
        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_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;
    }
    
    # 静态资源处理
    location /_next/static/ {
        alias /var/www/baishanjz/.next/static/;
        expires 365d;
        access_log off;
        add_header Cache-Control "public, max-age=31536000, immutable";
    }
    
    # 公共资源处理
    location /images/ {
        alias /var/www/baishanjz/public/images/;
        expires 365d;
        access_log off;
    }
    
    # 其他静态文件
    location ~ ^/(favicon\.ico|robots\.txt|sitemap\.xml)$ {
        root /var/www/baishanjz/public;
        expires 30d;
        access_log off;
    }
}

对于静态导出模式

如果使用静态导出(next export),添加以下配置:

server {
    listen 80;
    server_name xxx.xxx.xxx;
    
    root /var/www/文件夹aa/out;
    index index.html;
    
    location / {
        try_files $uri $uri.html $uri/ /index.html;
    }
    
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
        expires 30d;
        add_header Cache-Control "public, max-age=2592000";
        access_log off;
    }
}

启用配置并重启Nginx:

# 创建符号链接
ln -s /etc/nginx/sites-available/baishanjz /etc/nginx/sites-enabled/

# 测试Nginx配置
nginx -t

# 重启Nginx
systemctl restart nginx

使用PM2管理应用

对于SSR模式,我们需要使用PM2来管理Node.js应用:

# 全局安装PM2
npm install -g pm2

# 启动应用
cd /var/www/文件夹aa
pm2 start npm --name "文件夹aa" -- start

# 设置PM2开机自启动
pm2 startup
pm2 save

检查应用状态:

pm2 status

问题排查与解决

Node.js安装问题

如果遇到Node.js安装问题,可以尝试:

  1. 使用国内镜像

  2. 手动下载二进制文件安装

  3. 检查系统架构是否兼容

Nginx配置问题

如果Nginx配置测试失败:

# 检查配置文件语法
nginx -t

# 检查错误日志
tail -f /var/log/nginx/error.log

确保所有路径和文件名都正确,特别是项目目录名(baishanjz)。

构建错误

如果构建过程中遇到错误:

  1. 检查项目依赖是否完整安装

  2. 禁用ESLint和TypeScript检查

  3. 尝试静态导出方式

样式丢失问题

问题7:网站部署后样式丢失

解决方案:修复Nginx静态资源配置和next.config.js中的拼写错误

  1. 检查浏览器开发者工具中的网络请求,查找404错误

  2. 确保Nginx配置正确处理静态资源路径

  3. 验证.next/static目录中是否有CSS文件

  4. 修复next.config.js中的拼写错误:

    • assetPreFix 改为 assetPrefix

    • experimewntal 改为 experimental

网站访问方式

IP地址访问

任何人都可以通过在浏览器中输入服务器IP地址来访问网站:

http://xxx.xxx.xxx

域名访问

如果您有域名,可以配置DNS解析并更新Nginx配置:

  1. 在域名注册商处添加A记录,指向服务器IP

  2. 更新Nginx配置中的server_name

  3. 配置SSL证书(推荐)

# 安装Certbot
apt install -y certbot python3-certbot-nginx

# 获取证书并自动配置Nginx
certbot --nginx -d yourdomain.com -d www.yourdomain.com

维护与更新

更新网站代码

当需要更新网站时,执行以下步骤:

cd /var/www/baishanjz

# 拉取最新代码(如果使用Git)
git pull

# 安装依赖
npm install

# 构建项目
npm run build

# 重启应用(对于SSR模式)
pm2 restart baishanjz

# 或者无需重启(对于静态导出模式)

系统维护

定期执行以下维护任务:

# 更新系统软件包
apt update
apt upgrade -y

# 监控服务器资源
htop
df -h

# 检查日志
tail -f /var/log/nginx/error.log
pm2 logs

部署总结

  1. 环境准备

    • 更新系统软件包

    • 安装Node.js(解决GitHub连接超时问题)

    • 安装Nginx

  2. 代码部署

    • 创建项目目录

    • 上传或克隆代码

    • 安装依赖

    • 修改next.config.js(禁用ESLint检查)

    • 构建项目(解决.next目录缺失问题)

  3. 配置Nginx

    • 创建正确的配置文件

    • 设置静态资源路径

    • 创建符号链接

    • 重启Nginx

  4. 应用管理

    • 使用PM2启动应用

    • 配置PM2开机自启动

  5. 问题解决

    • 修复软件包冲突

    • 修复Nginx配置

    • 修复构建错误

    • 修复样式丢失问题(修正拼写错误)

通过以上步骤,xx网站已成功部署到阿里云服务器,并可通过IP地址访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值