插件窝 干货文章 linux怎么部署web项目

linux怎么部署web项目

sudo install bash 项目 880    来源:    2025-04-06

Linux 部署 Web 项目指南

在 Linux 系统上部署 Web 项目通常涉及以下几个关键步骤,我将为您详细介绍完整流程。

1. 准备工作

1.1 服务器环境准备

  • 确保系统已更新:sudo apt update && sudo apt upgrade -y (Ubuntu/Debian) 或 sudo yum update -y (CentOS/RHEL)
  • 安装基本工具:sudo apt install -y git curl wget vim

1.2 安装必要软件

根据项目需求选择安装:

数据库

  • MySQL: sudo apt install -y mysql-server
  • PostgreSQL: sudo apt install -y postgresql postgresql-contrib

Web 服务器

  • Nginx: sudo apt install -y nginx
  • Apache: sudo apt install -y apache2

运行时环境

  • Node.js: bash curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - sudo apt install -y nodejs
  • Python: bash sudo apt install -y python3 python3-pip python3-venv
  • Java: bash sudo apt install -y openjdk-11-jdk
  • PHP: bash sudo apt install -y php-fpm php-mysql

2. 项目部署流程

2.1 获取项目代码

git clone https://your-project-repository.git
cd your-project

2.2 安装项目依赖

根据项目类型选择:

Node.js 项目

npm install
# 或使用 yarn
yarn install

Python 项目

python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt

Java 项目

./mvnw install
# 或
./gradlew build

2.3 配置环境变量

创建 .env 文件或直接在系统中设置:

sudo nano /etc/environment
# 添加如:DATABASE_URL="mysql://user:password@localhost/dbname"

2.4 数据库设置

sudo mysql -u root -p
# 在MySQL中创建数据库和用户
CREATE DATABASE dbname;
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON dbname.* TO 'username'@'localhost';
FLUSH PRIVILEGES;

2.5 运行数据库迁移

根据项目框架执行迁移命令,例如: - Django: python manage.py migrate - Laravel: php artisan migrate - Rails: rails db:migrate

3. Web 服务器配置

3.1 Nginx 配置示例

sudo nano /etc/nginx/sites-available/your-project

内容示例:

server {
    listen 80;
    server_name yourdomain.com www.yourdomain.com;

    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;
    }

    location /static/ {
        alias /path/to/your/static/files/;
    }
}

启用配置:

sudo ln -s /etc/nginx/sites-available/your-project /etc/nginx/sites-enabled
sudo nginx -t # 测试配置
sudo systemctl restart nginx

3.2 Apache 配置示例

sudo nano /etc/apache2/sites-available/your-project.conf

内容示例:

<VirtualHost *:80>
    ServerName yourdomain.com
    ServerAlias www.yourdomain.com

    DocumentRoot /var/www/your-project/public

    <Directory /var/www/your-project/public>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

启用配置:

sudo a2ensite your-project.conf
sudo a2enmod rewrite
sudo systemctl restart apache2

4. 应用进程管理

4.1 使用 systemd 管理应用

创建服务文件:

sudo nano /etc/systemd/system/your-project.service

示例内容(Node.js应用):

[Unit]
Description=Your Node.js App
After=network.target

[Service]
ExecStart=/usr/bin/node /path/to/your/app.js
WorkingDirectory=/path/to/your/app
User=www-data
Group=www-data
Restart=always

[Install]
WantedBy=multi-user.target

启用服务:

sudo systemctl daemon-reload
sudo systemctl start your-project
sudo systemctl enable your-project

4.2 使用 PM2 (Node.js)

npm install -g pm2
pm2 start app.js
pm2 startup systemd
pm2 save

5. 安全配置

5.1 防火墙设置

sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
sudo ufw enable

5.2 SSL 证书 (Let's Encrypt)

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
# 设置自动续订
sudo certbot renew --dry-run

6. 监控与维护

6.1 日志查看

# Nginx 日志
tail -f /var/log/nginx/error.log
# 应用日志
journalctl -u your-project.service -f

6.2 性能监控

# 安装监控工具
sudo apt install -y htop
htop

7. 自动化部署 (可选)

7.1 使用部署脚本

创建 deploy.sh:

#!/bin/bash
git pull origin master
npm install
npm run build
pm2 restart all

7.2 设置 CI/CD

考虑使用 GitHub Actions、Jenkins 或 GitLab CI 实现自动化部署流程。

常见问题解决

  1. 端口冲突:使用 sudo netstat -tulnp 查看占用端口的进程
  2. 权限问题:确保应用用户有正确的文件权限 sudo chown -R www-data:www-data /path/to/app
  3. 环境变量未加载:检查是否在正确的环境中设置了变量
  4. 数据库连接失败:检查数据库服务是否运行 sudo systemctl status mysql

希望这个指南能帮助您顺利在 Linux 上部署 Web 项目。根据您的具体项目类型和需求,某些步骤可能需要调整。