1507 字
8 分钟
VPS服务器部署与运维完全指南
VPS服务器部署与运维完全指南
作为一名开发者,掌握VPS服务器的部署和运维是必备技能。本文将从选购VPS开始,全面介绍服务器的部署、配置、优化和维护技巧。
1. VPS选购指南
主流VPS服务商对比
服务商 | 优势 | 缺点 | 适用场景 |
---|---|---|---|
DigitalOcean | 简单易用,文档丰富 | 价格较高 | 新手学习,小型项目 |
Vultr | 性能稳定,全球节点多 | 支持不够完善 | 生产环境,全球部署 |
Linode | 性能优秀,稳定性好 | 价格偏高 | 企业级应用 |
阿里云 | 国内访问快,服务完善 | 配置复杂 | 国内业务 |
腾讯云 | 价格优惠,生态丰富 | 性能一般 | 初学者,个人项目 |
配置选择建议
# 入门配置(个人博客、小型网站)CPU: 1核RAM: 1GB存储: 25GB SSD流量: 1TB/月
# 进阶配置(中型应用)CPU: 2核RAM: 4GB存储: 80GB SSD流量: 4TB/月
# 高级配置(生产环境)CPU: 4核RAM: 8GB存储: 160GB SSD流量: 5TB/月
2. 服务器初始化配置
系统更新和基础软件安装
# Ubuntu/Debian 系统sudo apt update && sudo apt upgrade -ysudo apt install -y curl wget git vim htop unzip
# CentOS/RHEL 系统sudo yum update -ysudo yum install -y curl wget git vim htop unzip epel-release
创建新用户和配置 SSH
# 创建新用户sudo useradd -m -s /bin/bash usernamesudo usermod -aG sudo usernamesudo passwd username
# 配置 SSH 密钥登录ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
# 将公钥复制到服务器mkdir -p ~/.sshecho "your_public_key" >> ~/.ssh/authorized_keyschmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keys
SSH 安全配置
# 编辑 SSH 配置文件sudo vim /etc/ssh/sshd_config
# 修改以下配置Port 2222 # 修改默认端口PermitRootLogin no # 禁止 root 登录PasswordAuthentication no # 禁用密码登录PubkeyAuthentication yes # 启用密钥登录MaxAuthTries 3 # 限制登录尝试次数
# 重启 SSH 服务sudo systemctl restart sshd
防火墙配置
# 使用 UFW (Ubuntu)sudo ufw enablesudo ufw default deny incomingsudo ufw default allow outgoingsudo ufw allow 2222/tcp # SSH 端口sudo ufw allow 80/tcp # HTTPsudo ufw allow 443/tcp # HTTPS
# 使用 firewalld (CentOS)sudo systemctl enable firewalldsudo systemctl start firewalldsudo firewall-cmd --permanent --add-port=2222/tcpsudo firewall-cmd --permanent --add-service=httpsudo firewall-cmd --permanent --add-service=httpssudo firewall-cmd --reload
3. Web 服务器部署
Nginx 安装和配置
# 安装 Nginxsudo apt install nginx -ysudo systemctl enable nginxsudo systemctl start nginx
# 创建网站配置sudo vim /etc/nginx/sites-available/example.com
Nginx 配置示例:
server { listen 80; server_name example.com www.example.com; root /var/www/example.com; index index.html index.php;
# 日志配置 access_log /var/log/nginx/example.com.access.log; error_log /var/log/nginx/example.com.error.log;
# Gzip 压缩 gzip on; gzip_vary on; gzip_min_length 1024; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
# 静态文件缓存 location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { expires 1y; add_header Cache-Control "public, immutable"; }
# PHP 支持 location ~ \.php$ { fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
# 禁止访问隐藏文件 location ~ /\. { deny all; }}
SSL 证书配置(Let’s Encrypt)
# 安装 Certbotsudo apt install certbot python3-certbot-nginx -y
# 获取证书sudo certbot --nginx -d example.com -d www.example.com
# 设置自动续签sudo crontab -e# 添加以下内容0 12 * * * /usr/bin/certbot renew --quiet
Docker 安装和使用
# 安装 Dockercurl -fsSL https://get.docker.com -o get-docker.shsudo sh get-docker.shsudo usermod -aG docker $USER
# 安装 Docker Composesudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-compose
Docker Compose 示例:
version: '3.8'services: nginx: image: nginx:alpine ports: - "80:80" - "443:443" volumes: - ./nginx.conf:/etc/nginx/nginx.conf - ./html:/usr/share/nginx/html - ./ssl:/etc/nginx/ssl restart: unless-stopped
app: build: . ports: - "3000:3000" environment: - NODE_ENV=production volumes: - ./app:/usr/src/app restart: unless-stopped
database: image: postgres:13 environment: POSTGRES_DB: myapp POSTGRES_USER: user POSTGRES_PASSWORD: password volumes: - postgres_data:/var/lib/postgresql/data restart: unless-stopped
volumes: postgres_data:
4. 数据库部署
MySQL/MariaDB 安装和配置
# 安装 MySQLsudo apt install mysql-server -ysudo mysql_secure_installation
# 创建数据库和用户sudo mysql -u root -p
CREATE DATABASE myapp;CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'strong_password';GRANT ALL PRIVILEGES ON myapp.* TO 'appuser'@'localhost';FLUSH PRIVILEGES;EXIT;
Redis 安装和配置
# 安装 Redissudo apt install redis-server -y
# 配置 Redissudo vim /etc/redis/redis.conf
# 修改以下配置requirepass your_strong_passwordmaxmemory 256mbmaxmemory-policy allkeys-lru
# 重启 Redissudo systemctl restart redis-server
5. 监控和日志管理
系统监控脚本
#!/bin/bash# monitor.sh - 系统监控脚本
LOGFILE="/var/log/system-monitor.log"DATE=$(date '+%Y-%m-%d %H:%M:%S')
# CPU 使用率CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
# 内存使用率MEM_USAGE=$(free | grep Mem | awk '{printf("%.2f", $3/$2 * 100.0)}')
# 磁盘使用率DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}' | cut -d'%' -f1)
# 记录日志echo "$DATE - CPU: ${CPU_USAGE}%, Memory: ${MEM_USAGE}%, Disk: ${DISK_USAGE}%" >> $LOGFILE
# 报警检查if (( $(echo "$CPU_USAGE > 80" | bc -l) )); then echo "$DATE - WARNING: High CPU usage: ${CPU_USAGE}%" >> $LOGFILEfi
if (( $(echo "$MEM_USAGE > 80" | bc -l) )); then echo "$DATE - WARNING: High Memory usage: ${MEM_USAGE}%" >> $LOGFILEfi
if [ $DISK_USAGE -gt 80 ]; then echo "$DATE - WARNING: High Disk usage: ${DISK_USAGE}%" >> $LOGFILEfi
日志轮转配置
/var/log/system-monitor.log { daily rotate 30 compress delaycompress missingok notifempty create 644 root root}
使用 Grafana + Prometheus 监控
version: '3.8'services: prometheus: image: prom/prometheus ports: - "9090:9090" volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml - prometheus_data:/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.path=/prometheus' - '--web.console.libraries=/etc/prometheus/console_libraries' - '--web.console.templates=/etc/prometheus/consoles'
grafana: image: grafana/grafana ports: - "3000:3000" environment: - GF_SECURITY_ADMIN_PASSWORD=admin123 volumes: - grafana_data:/var/lib/grafana
node_exporter: image: prom/node-exporter ports: - "9100:9100" volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro command: - '--path.procfs=/host/proc' - '--path.sysfs=/host/sys' - '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)'
volumes: prometheus_data: grafana_data:
6. 安全加固
Fail2ban 配置
# 安装 Fail2bansudo apt install fail2ban -y
# 配置 Fail2bansudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.localsudo vim /etc/fail2ban/jail.local
# 修改配置[DEFAULT]bantime = 3600findtime = 600maxretry = 3
[sshd]enabled = trueport = 2222
[nginx-http-auth]enabled = true
# 启动服务sudo systemctl enable fail2bansudo systemctl start fail2ban
定期安全更新
# 创建自动更新脚本#!/bin/bashecho "Starting system update at $(date)"
# 更新系统apt update && apt upgrade -y
# 清理旧包apt autoremove -yapt autoclean
# 检查是否需要重启if [ -f /var/run/reboot-required ]; then echo "Reboot required, scheduling reboot in 2 minutes" shutdown -r +2fi
echo "System update completed at $(date)"
7. 性能优化
系统参数优化
# /etc/sysctl.conf 优化vm.swappiness=10net.core.rmem_max=16777216net.core.wmem_max=16777216net.ipv4.tcp_rmem=4096 65536 16777216net.ipv4.tcp_wmem=4096 65536 16777216net.ipv4.tcp_congestion_control=bbr
# 应用配置sudo sysctl -p
Nginx 性能优化
worker_processes auto;worker_connections 1024;
http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048;
# 缓存配置 open_file_cache max=1000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on;
# Gzip 压缩 gzip on; gzip_vary on; gzip_min_length 1024; gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json;}
总结
VPS 服务器运维的关键点:
- 安全第一:定期更新、强密码、防火墙配置
- 监控重要:实时监控系统状态和性能指标
- 备份必须:定期备份数据和配置文件
- 优化持续:根据实际使用情况调优参数
- 文档完善:记录所有配置和操作步骤
掌握这些技能,能够帮助您构建稳定、安全、高效的服务器环境。
VPS服务器部署与运维完全指南
https://fuwari.vercel.app/posts/vps服务器部署与运维完全指南/