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

Photo by sergio souza

wordpresszblog 都是基于 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 平台使用 XshellXftp 管理服务器
  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 权限,获取 AccessKeyIDAccessKeySecret,然后 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_certificatessl_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 域名,源站信息填写服务器外网IP443 端口。
  • 进入配置 - 回源配置,设置回源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