【新手教程】从零部署你的第一个网站:服务器+域名+HTTPS全流程实操(2026版)
声明: 本文为个人技术分享,所有操作均基于开源工具(Nginx、Let’s Encrypt、宝塔面板等)和通用命令,不涉及任何商业推广,与任何服务商无利益关系。文中示例命令均在 CentOS 7 / Ubuntu 20.04 环境实测通过。
前言
很多新手想搭一个自己的网站,却卡在"部署"这一步——买了服务器不知道怎么用,域名解析不会配,HTTPS 证书更是摸不着头脑。
本文按完整顺序拆成 8 个步骤,从最基础的"什么是服务器"讲起。每个步骤都同时提供 ①宝塔面板图形化操作(新手推荐)②纯命令行操作(进阶参考),并且每一步后面都附带"常见问题排查"——把你操作中 90% 会遇到的报错和解决办法提前列出来。跟着做,即使从未接触过命令行,也能在 1 小时内让网站上线。
重要提示: 请按顺序操作,不要跳步。特别是"域名解析"必须先于"安装 WordPress"完成,否则 WordPress 安装向导会无法正常访问。
一、部署前准备:这些东西先备齐
| 项目 | 说明 | 获取方式 |
|---|---|---|
| 一台服务器 | 一台 24 小时开机的远程电脑,系统为 Linux | 任意云服务商购买,1核2G 起步 |
| 一个域名 | 你的网站地址,比如 myblog.com |
任意域名注册商购买 |
| SSH 工具 | 远程连接服务器的软件 | Windows 推荐 Xshell/PuTTY;Mac 用自带终端 |
名词解释(新手必读):
- 服务器:放在机房里、永远开机、有公网 IP 的远程电脑。
- 公网 IP:服务器的"门牌号",形如
123.45.67.89。 - 域名:给 IP 取的好记名字,如
myblog.com,背后指向 IP。 - SSH:安全远程连接协议,相当于"远程登录服务器的通道"。
实例依据: 以部署一个 WordPress 博客为例,1核2G + 3Mbps 带宽可稳定支撑日访问量 500-1000。参考 WordPress 官方服务器推荐配置文档(wordpress.org/about/requirements)。
二、第一步:用 SSH 连接你的服务器
2.1 Windows 用户(Xshell)
- 下载安装 Xshell(个人免费版,xshell.com)
- 打开 Xshell →「新建」→「主机」填公网 IP → 端口
22→「连接」 - 安全提示选「接受并保存」
- 输入用户名
root,回车;输入密码,回车(屏幕不显示字符是正常的)
2.2 Mac 用户(终端)
ssh [email protected]
首次连接提示 Are you sure you want to continue connecting?,输入 yes 回车;再输入密码。
2.3 连接成功后的环境检查
cat /etc/os-release # 系统版本
nproc # CPU 核数
free -h # 内存
df -h # 磁盘
curl -s ifconfig.me # 公网 IP
常见问题排查
Q:提示 Connection refused(连接被拒绝)或一直超时?
① 服务器没开机(去云服务商控制台确认运行中);② 安全组没放行 22 端口——这是新手第一坑,登录云服务商控制台 →「安全组/防火墙」→ 添加入方向规则:协议 TCP、端口 22、来源 0.0.0.0/0;③ 密码输错超过次数被临时锁定,等几分钟再试。
Q:提示 Permission denied (publickey)?
服务商默认只允许密钥登录。解决:在控制台重置 root 密码,或用服务商提供的密钥文件登录(Xshell 里「用户身份验证」→ 方法选 Public Key → 导入密钥文件)。
Q:提示 Host key verification failed?
之前连过这台机器但系统重装过。执行 ssh-keygen -R 123.45.67.89 清除旧记录后重连。
Q:Xshell 一直弹出"用户身份验证"无法登录?
在「用户身份验证」→ 方法选 Password,不要用默认的 Keyboard Interactive(部分服务器不支持)。
Q:输入密码没反应/退格键乱码?
密码输入本身不显示任何字符,这是安全设计。按回车即可;如果出现 ^H 乱码,是终端问题,换 Xshell 或检查终端编码。
三、第二步:安装 Web 环境(LNMP)
方案 A:宝塔面板一键安装(新手推荐)
# CentOS
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
# Ubuntu
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh
安装完会显示面板地址/用户名/密码,务必截图保存。浏览器打开面板 → 登录 →「LNMP」一键安装,等 3-5 分钟。
方案 B:纯命令行安装 LNMP(进阶参考)
# CentOS:
yum install -y epel-release nginx php php-fpm php-mysql php-gd php-mbstring php-xml php-json mariadb-server mariadb
systemctl start nginx php-fpm mariadb
systemctl enable nginx php-fpm mariadb
mysql_secure_installation
# Ubuntu:
apt update && apt install -y nginx php-fpm php-mysql php-gd php-mbstring php-xml php-curl mysql-server
systemctl start nginx php8.1-fpm mysql
systemctl enable nginx php8.1-fpm mysql
mysql_secure_installation
常见问题排查
Q:宝塔安装脚本卡住/下载失败?
① 网络问题,重跑一次;② 服务器时间不对导致证书校验失败,先执行 date -s "$(curl -sI https://www.baidu.com | grep -i '^date:' | sed 's/^[Dd]ate: //')" 校准时间;③ 内存不足(1G 以下建议先加 Swap):fallocate -l 2G /swapfile && chmod 600 /swapfile && mkswap /swapfile && swapon /swapfile。
Q:宝塔面板打不开?
① 确认外网面板地址完整(含端口和随机字符串);② 安全组放行 8888 端口;③ 服务器内防火墙放行 8888:firewall-cmd --permanent --add-port=8888/tcp && firewall-cmd --reload。
Q:面板登录提示密码错误?
用 bt 命令重置:SSH 里执行 bt → 输入 5(修改密码)→ 输入 14(查看面板默认信息)。
Q:一键安装 LNMP 失败/超时?
① 换源:宝塔「软件商店」→「设置」→ 切换国内源;② 手动安装:在「软件商店」分别点击安装 Nginx、MySQL、PHP,装完一个再装下一个。
Q:命令行安装后 nginx -t 报 unknown directive "fastcgi_pass"?
说明 PHP 的 Nginx 模块没装全,确认装了 php-fpm。CentOS 还要检查 SELinux 是否拦截:setenforce 0(临时关闭)或 yum install -y policycoreutils-python && semanage port -a -t http_port_t -p tcp 9000。
四、第三步:配置域名解析(必须先于 WordPress 安装!)
4.1 添加 A 记录
登录域名注册商后台 →「DNS 解析」→「添加记录」:
| 字段 | 填什么 | 解释 |
|---|---|---|
| 记录类型 | A |
域名指向一个 IP |
| 主机记录 | @ |
根域名 myblog.com |
| 记录值 | 你的服务器公网 IP | 如 123.45.67.89 |
| TTL | 默认 600 | 不用改 |
再加一条 www 的 A 记录(主机记录填 www)。
4.2 验证解析生效
ping myblog.com # 返回的 IP 应是你服务器 IP
nslookup myblog.com # 查看解析结果
4.3 绑定域名到网站
宝塔方式:「网站」→「添加站点」→ 域名填 myblog.com www.myblog.com → PHP 7.4/8.0 → 提交。
命令行方式: 创建 Nginx 配置 /etc/nginx/conf.d/myblog.conf:
server {
listen 80;
server_name myblog.com www.myblog.com;
root /www/wwwroot/myblog.com;
index index.php index.html;
access_log /var/log/nginx/myblog_access.log;
error_log /var/log/nginx/myblog_error.log;
location ~ \.php$ {
fastcgi_pass unix:/run/php-fpm/www.sock; # Ubuntu: unix:/run/php/php8.1-fpm.sock
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~* \.(css|js|jpg|jpeg|png|gif|ico|svg)$ { expires 7d; }
location ~ /\. { deny all; }
}
mkdir -p /www/wwwroot/myblog.com
nginx -t && nginx -s reload
常见问题排查
Q:ping 域名返回的不是我服务器 IP?
① 解析记录值填错了,回去检查;② DNS 缓存未刷新:本机执行 ipconfig /flushdns(Windows)或 sudo dscacheutil -flushcache(Mac),等 10-30 分钟再试;③ 用了 CDN 的域名被指向 CDN 节点,属正常。
Q:nslookup 提示 server can't find?
解析还没生效或记录删了。用 dnschecker.org 查全球解析状态,确认记录确实存在。
Q:域名访问显示"Welcome to Nginx"?
Nginx 默认页生效,但网站根目录是空的。这是正常的——下一步装 WordPress 就覆盖了。如果已经装完还显示默认页,检查 root 路径是否指向了 WordPress 文件所在目录。
Q:访问域名 403 Forbidden?
① 根目录不存在或没权限:ls -ld /www/wwwroot/myblog.com,执行 chown -R nginx:nginx(或 www-data)+ chmod -R 755;② SELinux 拦截(CentOS):setenforce 0 测试,确认是它的问题再配规则。
Q:访问域名 404?
① Nginx 配置里 root 路径写错了;② WordPress 文件没在根目录(多嵌套了一层 wordpress 文件夹);③ 伪静态规则没配(WordPress 后台打开链接 404,需在站点设置里加 location / { try_files $uri $uri/ /index.php?$args; })。
五、第四步:部署 WordPress 网站程序
5.1 下载解压(宝塔:远程下载 / 命令行如下)
cd /www/wwwroot/myblog.com
wget https://cn.wordpress.org/latest-zh_CN.zip
yum install -y unzip # Ubuntu: apt install -y unzip
unzip latest-zh_CN.zip
mv wordpress/* . && mv wordpress/.[!.]* . 2>/dev/null
rm -rf wordpress latest-zh_CN.zip
chown -R nginx:nginx /www/wwwroot/myblog.com # Ubuntu: www-data
chmod -R 755 /www/wwwroot/myblog.com
5.2 创建数据库(宝塔:数据库→添加 / 命令行如下)
mysql -u root -p
CREATE DATABASE wp_myblog DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY '你的强密码';
GRANT ALL PRIVILEGES ON wp_myblog.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
5.3 浏览器运行安装向导
访问 http://myblog.com(用域名,不用 IP)→ 选简体中文 →「现在就开始」→ 填数据库信息 → 安装 → 登录后台。
常见问题排查
Q:访问域名还是显示 Nginx 欢迎页/宝塔默认页?
① WordPress 文件没放对位置——检查 /www/wwwroot/myblog.com 下是否有 wp-login.php;② Nginx 没有 index.php 索引:确认配置里有 index index.php;③ 还没重启 Nginx:nginx -s reload。
Q:wget 下载 WordPress 失败/超时?
① 外网到 cn.wordpress.org 慢,改用国内镜像:wget ``https://wordpress.org/latest-zh_CN.zip(官方国际站)或换本机下载后上传;② 服务器 DNS 有问题:echo "nameserver 223.5.5.5" > /etc/resolv.conf(换成阿里 DNS 再试)。
Q:安装向导提示"数据库连接失败"?
① 库名/用户名/密码填错(注意大小写);② 用户在 localhost 但填了远程主机;③ MySQL 没启动:systemctl status mariadb && systemctl start mariadb;④ 密码含特殊字符需在 PHP 配置里转义,直接复制粘贴最稳妥。
Q:提示"无法连接到该网站/连接已重置"?
① 80 端口没放行(安全组 + 防火墙都要查);② 域名解析没生效;③ 宝塔默认的站点目录和 Nginx 配置不一致。
Q:安装完成但页面空白/只有代码?
① PHP 没生效——确认 Nginx 的 fastcgi_pass 指向的 socket 路径正确(php -v 查版本,php-fpm 的 socket 一般在 /run/php-fpm/www.sock);② 文件权限不对:chmod -R 755 + chown -R nginx:nginx;③ PHP 扩展缺失:装 php-mysql、php-gd、php-xml 后 systemctl restart php-fpm。
Q:后台能进但前台 404(固定链接问题)?
Nginx 没配伪静态。在站点配置的 server 块里加:
location / {
try_files $uri $uri/ /index.php?$args;
}
然后 nginx -s reload,再在 WordPress 后台「设置→固定链接」保存一次。
Q:登录后台提示"无法建立到数据库的连接"?
数据库服务挂了或信息变了。systemctl status mariadb 检查;确认 wp-config.php 里的 DB_NAME/DB_USER/DB_PASSWORD 正确。
Q:上传图片提示"无法创建目录"?
wp-content/uploads 权限问题:
mkdir -p /www/wwwroot/myblog.com/wp-content/uploads
chown -R nginx:nginx /www/wwwroot/myblog.com/wp-content
chmod -R 755 /www/wwwroot/myblog.com/wp-content
六、第五步:配置 HTTPS 安全证书
6.1 宝塔方式
「网站」→ 站点「设置」→「SSL」→ 选 Let’s Encrypt → 勾选域名 →「申请」→ 开启「强制 HTTPS」。
6.2 命令行方式(certbot)
# 安装
yum install -y epel-release certbot python3-certbot-nginx # Ubuntu: apt install -y certbot python3-certbot-nginx
# 申请并自动配置
certbot --nginx -d myblog.com -d www.myblog.com
# 测试自动续期
certbot renew --dry-run
# 添加定时续期任务
echo "0 0,12 * * * root certbot renew --quiet --deploy-hook 'nginx -s reload'" >> /etc/crontab
# 查看证书状态
certbot certificates
常见问题排查
Q:申请失败提示"无法验证域名/授权问题"?
① 域名解析未生效(ping myblog.com 确认指向服务器 IP);② 80 端口未放行——Let’s Encrypt 通过 80 端口验证域名所有权,安全组+防火墙都要放行 80;③ 开了 CDN 或云 WAF——先暂停再申请;④ 申请太频繁(Let’s Encrypt 有频率限制,一周内同一域名多次申请会失败)——等几天或改用 --staging 测试。
Q:提示 Too many certificates already issued?
Let’s Encrypt 限流。检查 /etc/letsencrypt/live/ 下是否有残留旧证书,或等几天再申请。
Q:申请成功但浏览器还是显示"不安全"/证书错误?
① 访问的还是 http://——确认开了强制跳转(宝塔开「强制 HTTPS」;命令行确认 Nginx 配置里有 301 跳转);② 证书域名不匹配——用 https://myblog.com 访问时证书必须包含 myblog.com,检查 certbot certificates 里的 Domains 列表;③ 浏览器缓存——强制刷新(Ctrl+F5)。
Q:证书 90 天过期了没自动续?
① 检查定时任务:crontab -l;② 手动续一次:certbot renew;③ 续期需要 80 端口可用且域名解析正常,都确认后再 certbot renew --dry-run。
Q:强制 HTTPS 后网站打不开/死循环跳转?
① Nginx 里 301 配置和 WordPress 站点地址不一致——后台「设置」里把两个地址都改成 https://myblog.com;② 代理/CDN 缓存了旧跳转——清 CDN 缓存。
七、第六步:安全加固(必做,别跳过)
7.1 修改 SSH 端口(22 → 50022)
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sed -i 's/#Port 22/Port 50022/' /etc/ssh/sshd_config
grep "^Port" /etc/ssh/sshd_config # 应输出 Port 50022
firewall-cmd --permanent --add-port=50022/tcp && firewall-cmd --reload
systemctl restart sshd
# 新窗口验证:ssh -p 50022 [email protected]
7.2 防火墙
# CentOS (firewalld)
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --permanent --add-port=50022/tcp
firewall-cmd --reload
firewall-cmd --list-all
# Ubuntu (ufw)
ufw allow 80/tcp && ufw allow 443/tcp && ufw allow 50022/tcp && ufw enable && ufw status
7.3 Fail2ban
yum install -y epel-release fail2ban # Ubuntu: apt install -y fail2ban
vi /etc/fail2ban/jail.local
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
ignoreip = 127.0.0.1/8
[sshd]
enabled = true
port = 50022
logpath = /var/log/secure
maxretry = 3
[nginx-http-auth]
enabled = true
logpath = /var/log/nginx/error.log
[nginx-limit-req]
enabled = true
logpath = /var/log/nginx/error.log
systemctl enable fail2ban && systemctl start fail2ban
fail2ban-client status sshd # 查看封禁列表
fail2ban-client set sshd unbanip 1.2.3.4 # 解封
7.4 禁用 root 登录(进阶)
useradd username && passwd username
usermod -aG wheel username # Ubuntu: usermod -aG sudo username
# 新用户能登录并 sudo 后:
sed -i 's/^PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_config
systemctl restart sshd
常见问题排查
Q:改完端口后连不上服务器了(被锁在门外)?
① 别慌,去云服务商控制台 →「VNC/远程连接」应急登录(这个不走 SSH 端口);② 把 /etc/ssh/sshd_config 的 Port 改回 22 或确认新端口已放行(安全组+防火墙都要);③ systemctl restart sshd 后重试。
Q:systemctl restart sshd 后旧连接还开着,新连接失败?
旧连接不受影响。新连接失败几乎都是防火墙没放行新端口——确认安全组和 firewall-cmd --list-all 都包含 50022。
Q:SELinux 拦截导致 SSH 新端口无法连接(CentOS)?
执行 semanage port -a -t ssh_port_t -p tcp 50022(需安装 policycoreutils-python),或临时 setenforce 0 验证。
Q:Fail2ban 启动报错 Failed to load jail?
① jail.local 格式错(缩进用空格,注释前空行);② 日志路径不存在——先 touch /var/log/secure(Ubuntu 是 /var/log/auth.log,对应配置也要改);③ 端口号写错。
Q:Fail2ban 把我自己的 IP 封了?
解封:fail2ban-client set sshd unbanip 你的IP;然后在 jail.local 的 ignoreip 里加上你的 IP(如 ignoreip = 127.0.0.1/8 你家里宽带IP),重启 systemctl restart fail2ban。
Q:禁用了 root 登录后新用户登录失败?
① 确认新用户密码设置成功、用户组正确(id username 看输出);② 新用户要有 SSH 权限(CentOS 默认允许,若 /etc/ssh/sshd_config 有 AllowUsers 或 AllowGroups 限制需要加上新用户);③ 回退:用 VNC 登录后把 PermitRootLogin 改回 yes。
八、扩展 FAQ(综合排查)
Q:网站突然全部 502 Bad Gateway?
① PHP-FPM 挂了或 socket 不对:systemctl status php-fpm,重启 systemctl restart php-fpm;② 内存不足导致 php-fpm 被 kill:free -h 看,加 Swap 或升级内存;③ Nginx 和 PHP-FPM 的 socket 路径不匹配(配置里 fastcgi_pass 写的和 php-fpm.conf 里的实际 socket 不一致)。
Q:网站 503 / 连接数超限?
① Fail2ban 封禁误伤——查 fail2ban-client status 解封;② 云服务商限流(带宽打满)——看控制台流量监控;③ Nginx worker 数不够——调 /etc/nginx/nginx.conf 的 worker_processes 为核数,worker_connections 调大。
Q:MySQL 占用 CPU 100% / 数据库卡死?
① 慢查询多——宝塔「MySQL→慢日志」看哪条 SQL 慢,装查询缓存插件;② 索引缺失——给常用查询字段加索引;③ 内存不足 OOM——dmesg | grep -i oom 看有没有被 kill,加 Swap 或升级。
Q:网站被挂马/首页被篡改?
① 立即改所有密码(SSH、数据库、WordPress 后台);② 检查 /www/wwwroot/myblog.com/wp-content 下是否有可疑文件(ls -lt 按时间排序,找最近修改的 php 文件);③ 用 Wordfence 插件全盘扫描;④ 恢复:用最近的备份覆盖,或找服务商快照回滚。
Q:怎么备份和恢复网站?
# 备份网站文件
tar -czf /backup/myblog_$(date +%F).tar.gz /www/wwwroot/myblog.com
# 备份数据库
mysqldump -u root -p wp_myblog > /backup/myblog_db_$(date +%F).sql
# 恢复文件
tar -xzf /backup/myblog_2026-08-19.tar.gz -C /
# 恢复数据库
mysql -u root -p wp_myblog < /backup/myblog_db_2026-08-19.sql
宝塔用户可直接用「计划任务」设置每日自动备份到对象存储,更省心。
Q:网站被搜索引擎降权了怎么办?
① 确认网站打开速度快(参考 Q4 排查);② 检查 robots.txt 是否误屏蔽:curl ``https://myblog.com/robots.txt;③ 确认有 sitemap:装 Yoast SEO 插件自动生成;④ 到 Google Search Console / 百度搜索资源平台提交站点。
总结
| 步骤 | 做什么 | 关键提醒 |
|---|---|---|
| 1 | SSH 连接服务器 | 密码不显示是正常的;安全组放行 22 |
| 2 | 装 LNMP 环境 | 新手用宝塔一键装;记住面板地址密码 |
| 3 | 先配域名解析 | 必须先于 WordPress 安装! |
| 4 | 装 WordPress | 用域名访问安装向导,别用 IP |
| 5 | 申请 HTTPS 证书 | 80 端口必须放行,certbot 自动续期 |
| 6 | 安全加固 | 改 SSH 端口 + 防火墙 + Fail2ban |
遇到问题时的通用排查顺序:
- 看日志:
tail -f /var/log/nginx/error.log、journalctl -u nginx - 查端口:
ss -tlnp(看 80/443/22 是否在监听) - 查防火墙:安全组 +
firewall-cmd --list-all两头都看 - 查资源:
free -h、df -h、uptime、dmesg | grep -i oom - 最后才重装/回滚(有快照先快照)
核心原则:先配域名再装程序,先用图形化工具跑通流程,再逐步深入命令行原理。部署不是终点,运维才是长期工作——监控、备份、更新补丁缺一不可。我自己目前在用的是灰白云铂金区2C2G跑个人博客+API服务,稳定跑了3个月零宕机,晚高峰延迟也没超过30ms,体验比之前用的某大厂普通线路好太多了。感兴趣可以去 https://idc.hbyzn.cn/ 看看,按需选择就好。有问题评论区交流。