不用宝塔面板如何手动搭建服务器环境?

手动搭建服务器环境是每一位后端工程师、运维人员乃至高级开发者的必修课。宝塔面板本质上是将这些繁琐的命令行操作封装成了 GUI 界面,虽然降低了门槛,但也屏蔽了底层原理,且在安全审计和性能调优上存在局限。

脱离面板手动搭建,核心在于“最小化安装”与“服务管理标准化”。以下以目前最主流的 Linux (CentOS 7/8, Ubuntu 20.04/22.04) 为例,梳理一套通用、稳定且符合生产规范的手动搭建流程。

一、 前置准备:系统初始化与安全加固

在部署任何服务前,必须确保基础环境的安全与整洁。这是很多新手容易忽略但决定服务器寿命的关键步骤。

  1. 更新系统与内核

    # CentOS/RHEL
    sudo yum update -y && sudo reboot
    # Ubuntu/Debian
    sudo apt update && sudo apt upgrade -y && sudo reboot
  2. 配置防火墙(关键)
    不要直接关闭防火墙。推荐使用 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
  3. 创建非 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。这并非“不用面板”,而是用更现代的方式替代传统堆栈。

  1. 安装 Docker

    curl -fsSL https://get.docker.com | sh
    sudo usermod -aG docker $USER
  2. 编写 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

这种方式的优势在于:环境一致性(开发、测试、生产完全一致)、易于迁移、资源隔离。


八、 常见坑与避坑指南

  1. SELinux 问题 (CentOS)
    SELinux 经常导致 Nginx 无法读取文件或 PHP 无法执行。如果权限配置正确但仍报错,先临时设为宽容模式测试:setenforce 0。若问题解决,再学习正确的 SELinux 上下文标签 (chcon, restorecon),而不是直接关闭 SELinux。

  2. PHP 时区问题
    在 php.ini 中设置 date.timezone = Asia/Shanghai,否则时间戳会混乱。

  3. 文件权限
    Web 目录所有权应为 www-data:www-data (Ubuntu) 或 nginx:nginx (CentOS),而非 root。上传文件时,确保 PHP-FPM 有写入权限,但不要给整个目录 777 权限。

  4. 备份策略
    没有面板意味着没有一键备份。你必须自行编写脚本,定期备份数据库 (mysqldump) 和项目代码,并上传到对象存储(如阿里云 OSS、腾讯云 COS)。

总结

手动搭建服务器环境的意义不在于“炫耀技术”,而在于掌控力。当你遇到高并发瓶颈、内存泄漏或安全漏洞时,只有深入理解每一层服务的配置原理,才能快速定位问题。

对于个人小站或初期项目,使用 Docker Compose 是最平衡的选择;对于企业级生产环境,则应进一步引入 Kubernetes 或云原生架构。无论哪种方式,安全加固和日志监控都是不可妥协的底线。

未经允许不得转载:CLOUD云枢 » 不用宝塔面板如何手动搭建服务器环境?