简介:本文为开发者提供从服务器选购、环境配置到项目部署的完整指南,涵盖云服务器与物理机对比、Linux基础操作、安全加固及自动化部署方案,适合零基础用户快速上手。
# 修改root密码(强度需包含大小写+数字+符号)passwd root# 创建普通用户并赋予sudo权限adduser deployusermod -aG sudo deploy# 禁用SSH密码登录(改用密钥)vim /etc/ssh/sshd_config# 修改以下参数:PasswordAuthentication noPermitRootLogin nosystemctl restart sshd
# 安装并启用UFWsudo apt install ufwsudo ufw enable# 开放必要端口(SSH/HTTP/HTTPS)sudo ufw allow 22/tcpsudo ufw allow 80/tcpsudo ufw allow 443/tcp
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -sudo apt install -y nodejs
sudo apt install python3 python3-pip python3-venv
sudo apt install openjdk-17-jdk
# 安装MySQLsudo apt install mysql-server# 安全配置sudo mysql_secure_installation# 设置root密码并移除匿名用户# 创建项目专用用户CREATE DATABASE project_db;CREATE USER 'dbuser'@'localhost' IDENTIFIED BY 'StrongPassword123!';GRANT ALL PRIVILEGES ON project_db.* TO 'dbuser'@'localhost';FLUSH PRIVILEGES;
# 安装Gitsudo apt install git# 配置全局信息git config --global user.name "Your Name"git config --global user.email "your@email.com"
# 安装Nginxsudo apt install nginx# 配置虚拟主机sudo vim /etc/nginx/sites-available/project# 示例配置:server {listen 80;server_name example.com;root /var/www/project/public;index index.html;location / {try_files $uri $uri/ =404;}}# 启用配置sudo ln -s /etc/nginx/sites-available/project /etc/nginx/sites-enabled/sudo nginx -tsudo systemctl restart nginx
Git Hook自动部署:
# 在项目目录创建.git/hooks/post-receive#!/bin/bashTARGET="/var/www/project"GIT_DIR="/var/repo/project.git"BRANCH="master"while read oldrev newrev refdoif [[ $ref = refs/heads/$BRANCH ]];thenecho "Ref $ref received. Deploying ${BRANCH} branch to production..."git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f $BRANCHelseecho "Ref $ref received. Doing nothing: only the ${BRANCH} branch may be deployed on this server."fidone
Docker容器化部署:
# Dockerfile示例FROM node:16-alpineWORKDIR /appCOPY package*.json ./RUN npm installCOPY . .EXPOSE 3000CMD ["npm", "start"]
# 构建并运行docker build -t project-app .docker run -d -p 3000:3000 --name project project-app
sudo apt install htop
# 查看访问日志tail -f /var/log/nginx/access.log# 按IP统计访问量awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 10
# MySQL数据库备份mysqldump -u dbuser -p project_db > /backups/db_$(date +%F).sql# 文件系统备份(排除node_modules)tar -czf /backups/project_$(date +%F).tar.gz --exclude='node_modules' /var/www/project
SSH连接超时:
502 Bad Gateway错误:
ps aux | grep node)/var/log/nginx/error.log)端口冲突:
# 查找占用端口的进程sudo lsof -i :80# 终止进程sudo kill -9 <PID>
本教程覆盖了从服务器选购到项目部署的全流程,特别适合初学者和中小型团队。实际部署时建议先在测试环境验证所有步骤,再迁移到生产环境。对于高可用需求,可进一步研究负载均衡(如Nginx反向代理)和数据库主从复制方案。