在 Linux 系统上部署 Web 项目通常涉及以下几个关键步骤,我将为您详细介绍完整流程。
sudo apt update && sudo apt upgrade -y
(Ubuntu/Debian) 或 sudo yum update -y
(CentOS/RHEL)sudo apt install -y git curl wget vim
根据项目需求选择安装:
sudo apt install -y mysql-server
sudo apt install -y postgresql postgresql-contrib
sudo apt install -y nginx
sudo apt install -y apache2
bash
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt install -y nodejs
bash
sudo apt install -y python3 python3-pip python3-venv
bash
sudo apt install -y openjdk-11-jdk
bash
sudo apt install -y php-fpm php-mysql
git clone https://your-project-repository.git
cd your-project
根据项目类型选择:
npm install
# 或使用 yarn
yarn install
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
./mvnw install
# 或
./gradlew build
创建 .env
文件或直接在系统中设置:
sudo nano /etc/environment
# 添加如:DATABASE_URL="mysql://user:password@localhost/dbname"
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;
根据项目框架执行迁移命令,例如:
- Django: python manage.py migrate
- Laravel: php artisan migrate
- Rails: rails db:migrate
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
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
创建服务文件:
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
npm install -g pm2
pm2 start app.js
pm2 startup systemd
pm2 save
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
sudo ufw enable
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
# 设置自动续订
sudo certbot renew --dry-run
# Nginx 日志
tail -f /var/log/nginx/error.log
# 应用日志
journalctl -u your-project.service -f
# 安装监控工具
sudo apt install -y htop
htop
创建 deploy.sh
:
#!/bin/bash
git pull origin master
npm install
npm run build
pm2 restart all
考虑使用 GitHub Actions、Jenkins 或 GitLab CI 实现自动化部署流程。
sudo netstat -tulnp
查看占用端口的进程sudo chown -R www-data:www-data /path/to/app
sudo systemctl status mysql
希望这个指南能帮助您顺利在 Linux 上部署 Web 项目。根据您的具体项目类型和需求,某些步骤可能需要调整。