PHP 个人博客程序的建站步骤

Photo by sergio souza

wordpress 、zblog 都是基于 PHP 搭建的博客程序,建站流程大同小异。这篇文章里把一些步骤要点记录下来,方便以后查阅。

购买域名

  1. 挑选域名很耗时间,尽早行动
  2. 尽量选择.net、.com 这类常规域名,新后缀虽然便宜但不好记
  3. 在万网找到 万网预释放 ,可以竞拍即将满期释放的域名,偶尔能淘到一些好货。

购买服务器

  1. 阿里的突发性能实例 T5 只给了 10% 的基准性能,喜欢折腾者慎用
  2. 购买 ECS 可以完全掌控服务器,方便后续学习

域名备案

  1. 备案分两种,ICP备案 和 公安备案
  2. 在 ICP备案 完成之前无法通过域名访问网站,这意味这后续申请 SSL 证书、配置 CDN 都无法完成。
  3. 每种备案都大概需要 7-30 个工作日,尽早进行 ICP备案
类型备案限制审核时长
ICP 备案完成 ICP 备案才能域名解析和设置 CDN7-30 个工作日
公安备案完成 ICP 备案的 30 天内提交公安备案申请 7-30 个工作日

配置安全组

  1. 一个服务器允许加入多个安全组,一个安全组允许配置多个服务器
  2. 安全组策略之间根据权重判断优先级,最高等级 1,最低等级 100
  3. 建议完成服务器购买之后马上建立并配置 基本安全组 和 全局黑名单
类型作用
基本安全组常规的安全组策略,初始策略建议只开放 22 端口,避免暴露服务器
全局黑名单快速屏蔽恶意 IP

配置服务器

  1. Windows 平台使用 Xshell 和 Xftp 管理服务器
  2. 登陆服务器之后 升级CentOS 并 修改SSH端口

依次执行以下指令升级 CentOS

1
2
3
4
$ cat /etc/redhat-release //检查当前centos版本号
$ sudo yum clean all
$ sudo yum update
$ sudo reboot

按照以下步骤修改 SSH 端口

  1. 在基本安全组为本地 IP 开放新端口号,比如 13579
  2. 登录 Xftp 编辑 /etc/ssh/sshd_config 文件,去掉#Port 22 一行开头的#号,改为 Port 13579,保存后退出
  3. 返回 Xshell 输入 service sshd restart 重启 sshd 服务

可以通过 netstat -natlp 检查 SSH 服务是否侦听到了新端口,如果出现 0.0.0.0:13579,即表示修改生效。

更改 SSH 端口号后建议删除默认 22 端口策略,若默认策略无法删除,可以新建一条策略屏蔽 22 端口,设置权重值高于原有 22 端口。

申请域名证书

  1. Let’s Encrypt 通过 acme.sh 生成免费证书并自动更新
  2. OneinStack 一键安装包自带的 acme.sh 配置不能灵活处理泛域名
  3. 建议先完成证书申请,再配置 LNMP 环境

在阿里云控制台创建 RAM 子账户,分配 AliyunDNSFullAccess 权限,获取 AccessKeyID 和 AccessKeySecret,然后 SSH 到服务器:

1
2
3
4
5
6
7
8
9
# 下载安装 acme.sh
curl https://get.acme.sh | sh

# 配置Aliyun账户
export Ali_Key="xxxxxxxxxxx"
export Ali_Secret="xxxxxxxxxxxxxxxxxxxxxxxxxxxx"

# 换成自己的域名,多个域名添加多个 "-d <doman>",支持泛域名,生成的证书会以第一个 -d 域名来命名
acme.sh --issue --dns dns_ali -d *.imczw.com -d imczw.com

acme 将自动向服务器添加 TXT 记录并验证,中间会倒计时 120 秒等待解析生效。

搭建 LNMP 环境

  1. 使用整合包快速搭建 LNMP 环境,节省时间
  2. 个人习惯使用 oneinstack,因为更新快
  3. 使用方法见 官方网站
1
2
3
4
5
6
yum -y install wget screen
wget http://mirrors.linuxeye.com/oneinstack-full.tar.gz
tar xzf oneinstack-full.tar.gz
cd oneinstack
screen -S oneinstack
./install.sh
  1. 网络上很多爆破攻击,需修改数据库路径
  2. 删除各类自带探针,或全部改名,避免暴露服务器信息
1
2
3
# 以oneinstack为例
进入/data/wwwroot/default,将phpMyAdmin文件夹改名
进入/data/wwwroot/default,将探针文件改名或删除

创建 vhost

  1. 用 vhost 可以在一台服务器配置多个网站
  2. oneinstack 自带 vhost 配置
  3. 具体的操作方式见官方指引

由于前面申请了域名证书,在创建 vhost 时有几个选项要指定

  1. 选择 Use your own SSL Certificate and Key
  2. 选择添加更多域名,选择 n
  3. 强制把 http 请求都转发到 https

配置 SSL 证书

将泛域名证书配置到 vhost,避免使用 xftp 直接复制的方式,不然以后域名证书自动续期时不会更新到站点目录下

1
2
3
4
5
# 换成自己的域名
acme.sh --install-cert -d *.imczw.com \
--key-file /usr/local/nginx/conf/ssl/*.imczw.com.key \
--fullchain-file /usr/local/nginx/conf/ssl/fullchain.cer \
--reloadcmd "systemctl --force restart nginx"

找到 /usr/local/nginx/conf/vhost/www.imczw.com.conf,修改 ssl_certificate 和 ssl_certificate_key 两个字段

1
2
ssl_certificate /usr/local/nginx/conf/ssl/fullchain.cer;
ssl_certificate_key /usr/local/nginx/conf/ssl/*.imczw.com.key;

之后重启 nginx

1
service nginx restart

配置 CDN

  1. CDN 除了加速访问,还能隐藏服务器真实 IP 避免攻击。
  2. 阿里云全站加速会自动将静态文件缓存,动态文件通过软路由获取最佳路径,省事
  3. 由于前面通过 vhost 搭建网站,直接访问服务器 IP 不会回源到博客所在目录,需要设置回源host

阿里云全站加速

  • 在全站加速控制台,添加 www.imczw.com 域名,源站信息填写服务器外网IP,443 端口。
  • 进入配置 - 回源配置,设置回源HOST 为创建 vhost 时填写的域名。
  • 进入配置 -HTTPS配置,选择证书类型为自定义,内容和私钥分别填写 fullchain.crt 和 *.imczw.com.key 的内容,实现证书托管。
  • 系统分配域名为 www.imczw.com.w.kunluncan.com,把 www.imczw.com CNAME 到该地址

为了节省带宽和服务器资源,可以把 OSS 作为图床,为图床分配另一个静态加速地址并配置 CDN 加速。

上传博客程序

  1. 通过 {服务器IP地址}/修改后的phpMyAdmin文件夹,登陆 phpmyadmin
  2. 新建一个数据库,排序选择 utf8-general-ci
  3. 将博客程序上传到 vhost 地址 /data/wwwroot/www.imczw.com
  4. 通过域名访问博客,链接第 6 步新建的数据库,完成搭建配置
  5. 如果后续有改动到该文件目录下的内容,记得重新分配授权组
1
chown -R www /data/wwwroot/www.imczw.com