1. 服务器搭建前的准备工作
在开始搭建服务器之前,我们需要做好充分的准备工作。这就像盖房子前需要打地基一样,准备工作做得好,后续的搭建和管理就会事半功倍。
1.1 硬件选择与配置
服务器的硬件配置直接影响其性能和稳定性。对于入门级服务器,建议至少具备以下配置:
- CPU:4核及以上(推荐Intel Xeon或AMD EPYC系列)
- 内存:16GB起步(根据业务需求可扩展至32GB或更高)
- 存储:至少1TB SSD(建议使用企业级SSD)
- 网络:千兆网卡(有条件可选择万兆)
对于预算有限的个人用户,也可以考虑使用二手服务器硬件。我曾经用一台二手的Dell PowerEdge R720搭建过开发环境,性能完全够用,成本只有新机的1/3。
1.2 操作系统选择
常见的服务器操作系统主要有:
- Linux发行版(Ubuntu Server、CentOS、Debian等)
- Windows Server
- FreeBSD等
对于大多数应用场景,我推荐使用Linux发行版,特别是Ubuntu Server。它有以下优势:
- 免费开源
- 社区支持强大
- 软件生态丰富
- 安全性较高
提示:如果是Windows应用场景,Windows Server也是不错的选择,但需要考虑授权费用问题。
1.3 网络环境准备
服务器需要稳定的网络环境,特别是对外提供服务的服务器。需要考虑:
- 固定公网IP(或DDNS解决方案)
- 足够的带宽(根据预期访问量决定)
- 防火墙配置
- 域名解析设置
我曾经遇到过因为ISP提供的动态IP导致服务频繁中断的问题,后来通过申请固定IP才解决。如果你的ISP不提供固定IP,可以考虑使用DDNS服务。
2. 服务器基础环境搭建
2.1 操作系统安装
以Ubuntu Server为例,安装步骤如下:
- 下载ISO镜像并制作启动盘
- 从启动盘启动服务器
- 选择安装语言和地区
- 配置网络(建议使用静态IP)
- 磁盘分区(新手可以使用自动分区)
- 设置用户名和密码
- 选择需要安装的基础软件包(SSH Server必选)
- 完成安装并重启
安装完成后,第一件事就是更新系统:
bash复制sudo apt update && sudo apt upgrade -y
2.2 基础安全配置
服务器安全至关重要,以下是最基本的安全措施:
- 修改SSH端口(避免使用默认的22端口):
bash复制sudo nano /etc/ssh/sshd_config
# 修改Port 22为其他端口如2222
sudo systemctl restart sshd
- 禁用root远程登录:
bash复制sudo nano /etc/ssh/sshd_config
# 设置PermitRootLogin no
sudo systemctl restart sshd
- 配置防火墙:
bash复制sudo ufw allow 2222/tcp # 允许新SSH端口
sudo ufw enable
- 安装fail2ban防止暴力破解:
bash复制sudo apt install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
2.3 用户与权限管理
合理的用户权限管理可以降低安全风险:
- 创建专用管理用户:
bash复制sudo adduser adminuser
sudo usermod -aG sudo adminuser
- 配置sudo免密码(可选):
bash复制sudo visudo
# 添加以下内容
adminuser ALL=(ALL) NOPASSWD:ALL
- 设置强密码策略:
bash复制sudo apt install libpam-pwquality
sudo nano /etc/pam.d/common-password
# 修改password requisite pam_pwquality.so为:
password requisite pam_pwquality.so retry=3 minlen=10 difok=3 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
3. 常见服务器角色搭建
3.1 Web服务器搭建(Nginx/Apache)
Nginx安装配置:
bash复制sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx
基础配置文件位于/etc/nginx/sites-available/default,可以修改为:
nginx复制server {
listen 80;
server_name yourdomain.com;
location / {
root /var/www/html;
index index.html;
}
}
Apache安装配置:
bash复制sudo apt install apache2 -y
sudo systemctl start apache2
sudo systemctl enable apache2
3.2 数据库服务器(MySQL/MariaDB)
安装MariaDB(MySQL的开源分支):
bash复制sudo apt install mariadb-server -y
sudo mysql_secure_installation
安全配置会提示:
- 设置root密码
- 移除匿名用户
- 禁止root远程登录
- 移除测试数据库
- 重新加载权限表
创建新数据库和用户:
sql复制CREATE DATABASE mydb;
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost';
FLUSH PRIVILEGES;
3.3 文件服务器(FTP/SFTP)
SFTP配置(更安全):
bash复制sudo groupadd sftpusers
sudo useradd -G sftpusers -s /bin/false sftpuser
sudo passwd sftpuser
sudo mkdir -p /var/sftp/uploads
sudo chown root:root /var/sftp
sudo chmod 755 /var/sftp
sudo chown sftpuser:sftpusers /var/sftp/uploads
修改SSH配置:
bash复制sudo nano /etc/ssh/sshd_config
添加:
code复制Match Group sftpusers
ChrootDirectory /var/sftp
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
重启SSH服务:
bash复制sudo systemctl restart sshd
4. 服务器监控与维护
4.1 基础监控工具
- htop - 进程监控:
bash复制sudo apt install htop -y
htop
- glances - 综合监控:
bash复制sudo apt install glances -y
glances
- netdata - 实时监控面板:
bash复制bash <(curl -Ss https://my-netdata.io/kickstart.sh)
访问http://your-server-ip:19999
4.2 日志管理
- 查看系统日志:
bash复制journalctl -xe
- 查看特定服务日志(如Nginx):
bash复制sudo tail -f /var/log/nginx/error.log
- 安装logrotate自动轮转日志:
bash复制sudo nano /etc/logrotate.d/nginx
添加:
code复制/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
/etc/init.d/nginx reload >/dev/null
endscript
}
4.3 备份策略
- 数据库备份(MySQL/MariaDB):
bash复制sudo mysqldump -u root -p --all-databases > all-databases.sql
- 文件系统备份:
bash复制sudo tar -czvf backup-$(date +%Y%m%d).tar.gz /var/www
- 自动备份脚本示例(保存为/usr/local/bin/backup.sh):
bash复制#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backups"
MYSQL_USER="backupuser"
MYSQL_PASSWORD="password"
# 创建备份目录
mkdir -p $BACKUP_DIR/$DATE
# 备份所有数据库
mysqldump -u$MYSQL_USER -p$MYSQL_PASSWORD --all-databases | gzip > $BACKUP_DIR/$DATE/all-databases.sql.gz
# 备份网站文件
tar -czf $BACKUP_DIR/$DATE/www.tar.gz /var/www
# 删除7天前的备份
find $BACKUP_DIR -type d -mtime +7 -exec rm -rf {} \;
设置定时任务(每天凌晨2点执行):
bash复制sudo crontab -e
添加:
code复制0 2 * * * /usr/local/bin/backup.sh
5. 进阶配置与优化
5.1 性能调优
- SWAP空间优化:
bash复制sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
- 内核参数优化:
bash复制sudo nano /etc/sysctl.conf
添加:
code复制# 提高网络性能
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
# 提高内存管理
vm.swappiness = 10
vm.vfs_cache_pressure = 50
应用修改:
bash复制sudo sysctl -p
5.2 安全加固
- SSH密钥认证(比密码更安全):
在本地机器生成密钥:
bash复制ssh-keygen -t rsa -b 4096
将公钥上传到服务器:
bash复制ssh-copy-id -p 2222 adminuser@yourserver
然后禁用密码登录:
bash复制sudo nano /etc/ssh/sshd_config
设置:
code复制PasswordAuthentication no
ChallengeResponseAuthentication no
重启SSH:
bash复制sudo systemctl restart sshd
- 自动安全更新:
bash复制sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure -plow unattended-upgrades
5.3 容器化部署(Docker)
安装Docker:
bash复制sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce -y
sudo usermod -aG docker $USER
使用Docker运行Nginx示例:
bash复制docker run --name my-nginx -p 80:80 -v /path/to/html:/usr/share/nginx/html -d nginx
6. 常见问题排查
6.1 网络连接问题
- 检查网络接口状态:
bash复制ip a
- 测试网络连通性:
bash复制ping -c 4 google.com
- 检查路由表:
bash复制ip route
- 检查端口监听:
bash复制sudo netstat -tulnp
6.2 服务无法启动
- 检查服务状态:
bash复制systemctl status servicename
- 查看服务日志:
bash复制journalctl -u servicename -xe
- 测试配置文件(如Nginx):
bash复制sudo nginx -t
6.3 磁盘空间不足
- 检查磁盘使用情况:
bash复制df -h
- 查找大文件:
bash复制sudo du -sh /* | sort -h
- 清理旧的内核版本:
bash复制sudo apt autoremove --purge
7. 服务器管理最佳实践
-
文档记录:详细记录服务器的配置变更、软件安装等信息。我习惯使用Markdown文件记录每次重要的配置变更。
-
变更管理:任何生产环境的变更都应该先在测试环境验证,并有回滚计划。
-
最小权限原则:只授予用户完成工作所需的最小权限。
-
定期审计:定期检查用户账户、权限、日志等,确保没有异常。
-
监控告警:设置适当的监控阈值和告警机制,不要等问题发生了才发现。
-
备份验证:定期测试备份的可用性,避免需要时发现备份不可用。
-
补丁管理:定期更新系统和软件的安全补丁,但生产环境的更新要先在测试环境验证。
-
性能基准:记录服务器在正常负载下的性能指标,便于后续对比分析。
在实际工作中,我发现很多问题都是由于配置变更没有记录导致的。现在我养成了每次修改配置文件前先备份的习惯,比如:
bash复制sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak.$(date +%Y%m%d)
这样即使修改出了问题,也能快速回滚到之前的版本。
