手动搭建服务器环境是每一位后端工程师、运维人员乃至高级开发者的必修课。宝塔面板本质上是将这些繁琐的命令行操作封装成了 GUI 界面,虽然降低了门槛,但也屏蔽了底层原理,且在安全审计和性能调优上存在局限。
脱离面板手动搭建,核心在于“最小化安装”与“服务管理标准化”。以下以目前最主流的 Linux (CentOS 7/8, Ubuntu 20.04/22.04) 为例,梳理一套通用、稳定且符合生产规范的手动搭建流程。
一、 前置准备:系统初始化与安全加固
在部署任何服务前,必须确保基础环境的安全与整洁。这是很多新手容易忽略但决定服务器寿命的关键步骤。
-
更新系统与内核
# CentOS/RHEL sudo yum update -y && sudo reboot # Ubuntu/Debian sudo apt update && sudo apt upgrade -y && sudo reboot -
配置防火墙(关键)
不要直接关闭防火墙。推荐使用firewalld(CentOS) 或ufw(Ubuntu),仅开放必要端口。- SSH: 22
- HTTP/HTTPS: 80, 443
- 业务端口: 如数据库 3306/5432 (建议不对外开放,通过内网访问)
示例 (UFW):
sudo ufw allow 22/tcp sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable -
创建非 root 用户并配置 sudo
严禁直接使用 root 登录进行日常开发。sudo adduser deploy sudo usermod -aG sudo deploy # Debian/Ubuntu # 或者将用户加入 wheel 组 (CentOS)
二、 Web 服务器:Nginx + PHP/FastCGI
Nginx 是目前高性能 Web 服务器的首选,配合 PHP-FPM 使用。
1. 安装 Nginx
# Ubuntu
sudo apt install nginx -y
# CentOS
sudo yum install epel-release -y
sudo yum install nginx -y
启动并设置开机自启:
sudo systemctl start nginx
sudo systemctl enable nginx
2. 安装 PHP (以 PHP 8.1 为例)
不同发行版源不同,Ubuntu 推荐 ondrej/php PPA 源以获得最新稳定版。
# Ubuntu 添加源
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt update
# 安装常用扩展
sudo apt install php8.1-fpm php8.1-mysql php8.1-curl php8.1-gd php8.1-mbstring php8.1-xml php8.1-zip -y
3. 配置 Nginx 反向X_X PHP
编辑 /etc/nginx/sites-available/default (Ubuntu) 或 /etc/nginx/conf.d/default.conf (CentOS)。
核心配置逻辑:
root指向项目目录。index指定默认文件。location ~ .php$块中,将请求传递给php-fpm。
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock; # 注意 sock 路径可能与版本有关
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
重启 Nginx 生效:sudo systemctl restart nginx。
三、 数据库:MySQL/MariaDB 或 PostgreSQL
方案 A:MySQL (社区版)
# Ubuntu
sudo apt install mysql-server -y
sudo systemctl start mysql
sudo systemctl enable mysql
# 安全初始化(设置 root 密码,移除测试库)
sudo mysql_secure_installation
方案 B:PostgreSQL (更受开发者喜爱,尤其配合 Node.js/Python)
sudo apt install postgresql postgresql-contrib -y
sudo systemctl start postgresql
sudo systemctl enable postgresql
# 切换到 postgres 用户创建数据库和用户
sudo -u postgres psql
CREATE USER myuser WITH PASSWORD 'mypassword';
CREATE DATABASE mydb OWNER myuser;
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
q
重要提示:生产环境中,数据库端口(3306/5432)绝对不要对公网开放。应用服务器与数据库服务器应处于同一内网 VPC,或通过 SSH 隧道连接。
四、 缓存与消息队列:Redis
Redis 是提升性能的利器。
sudo apt install redis-server -y
sudo systemctl start redis
sudo systemctl enable redis
修改 /etc/redis/redis.conf:
bind 127.0.0.1(限制只允许本地连接,若需远程访问,请结合防火墙策略)requirepass your_strong_password(务必设置密码)
五、 域名解析与 HTTPS (Let’s Encrypt)
手动配置 SSL 证书是实现网站安全加密的标准做法。使用 Certbot 自动化管理。
# Ubuntu
sudo apt install certbot python3-certbot-nginx -y
# 获取证书 (自动修改 Nginx 配置并重定向 HTTP 到 HTTPS)
sudo certbot --nginx -d example.com -d www.example.com
Certbot 会自动续期,你只需确认 cron job 已配置:sudo systemctl status certbot.timer。
六、 进程管理与监控:Systemd
脱离面板后,你需要自己管理服务的生命周期。systemd 是 Linux 标准的服务管理器。
- 查看状态:
systemctl status nginx - 查看日志:
journalctl -u nginx -f(实时跟踪日志) - 重载配置:
systemctl reload nginx(平滑重启,不中断服务)
对于 PHP-FPM 等动态服务,同样通过 systemctl restart php8.1-fpm 管理。
七、 进阶:容器化与编排 (Docker)
如果你追求更高的隔离性和可移植性,强烈建议学习 Docker。这并非“不用面板”,而是用更现代的方式替代传统堆栈。
-
安装 Docker
curl -fsSL https://get.docker.com | sh sudo usermod -aG docker $USER -
编写 docker-compose.yml
这是手动搭建的“终极形态”,将 Nginx, PHP, MySQL, Redis 全部容器化。version: '3.8' services: db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: rootpass MYSQL_DATABASE: mydb volumes: - db_data:/var/lib/mysql networks: - app_network web: image: nginx:alpine ports: - "80:80" volumes: - ./html:/usr/share/nginx/html - ./nginx.conf:/etc/nginx/conf.d/default.conf depends_on: - php networks: - app_network php: image: php:8.1-fpm volumes: - ./html:/var/www/html networks: - app_network volumes: db_data: networks: app_network:启动:
docker-compose up -d
这种方式的优势在于:环境一致性(开发、测试、生产完全一致)、易于迁移、资源隔离。
八、 常见坑与避坑指南
-
SELinux 问题 (CentOS)
SELinux 经常导致 Nginx 无法读取文件或 PHP 无法执行。如果权限配置正确但仍报错,先临时设为宽容模式测试:setenforce 0。若问题解决,再学习正确的 SELinux 上下文标签 (chcon,restorecon),而不是直接关闭 SELinux。 -
PHP 时区问题
在php.ini中设置date.timezone = Asia/Shanghai,否则时间戳会混乱。 -
文件权限
Web 目录所有权应为www-data:www-data(Ubuntu) 或nginx:nginx(CentOS),而非 root。上传文件时,确保 PHP-FPM 有写入权限,但不要给整个目录 777 权限。 -
备份策略
没有面板意味着没有一键备份。你必须自行编写脚本,定期备份数据库 (mysqldump) 和项目代码,并上传到对象存储(如阿里云 OSS、腾讯云 COS)。
总结
手动搭建服务器环境的意义不在于“炫耀技术”,而在于掌控力。当你遇到高并发瓶颈、内存泄漏或安全漏洞时,只有深入理解每一层服务的配置原理,才能快速定位问题。
对于个人小站或初期项目,使用 Docker Compose 是最平衡的选择;对于企业级生产环境,则应进一步引入 Kubernetes 或云原生架构。无论哪种方式,安全加固和日志监控都是不可妥协的底线。
CLOUD云枢