CentOS7+Oneinstack+WordPress搭建个人博客
Table of Contents
术语解释
CentOS7:一种Linux系统,Linux服务器大多都使用CentOS系统。
Oneinstack:一个集成脚本,可快速搭建php网站运行环境或java网站运行环境。
WordPress:最流行的一个博客系统,使用php语言编写。
安装前准备
- 1、你需要一台买一台服务器。
- 2、你需要一个域名,如果你没有,推荐在Freenom注册,免费一年。
- 3、把域名添加两条A记录,都指向你的服务器,一条是www,一条是default,下图是CloudFlare的域名解析,如果你是阿里云腾讯云什么的都有对应的地方添加的,自己找找:
添加后你就有了两个域名,一个是“www.xxxx.com”,一个是“default.xxxx.com”。
确定两个域名能ping通(注意“xxxx.com”要换成你自己申请的域名):
ping www.xxxx.com
ping default.xxxx.com
安装wordpress网站运行环境
先设置一下系统本地化:
echo "LANG=zh_CN.utf-8" >> /etc/environment && \
echo "" && \
echo "LC_ALL=zh_CN.utf-8" >> /etc/environment
使配置生效:
source ~/.bashrc
安装和更新一些需要用到的工具:
yum -y install epel-release nss curl libcurl wget screen
执行以下命令下载oneinstack:
wget -c http://mirrors.linuxeye.com/oneinstack-full.tar.gz
解压oneinstack-full.tar.gz:
tar -zxvf oneinstack-full.tar.gz
进入解压出来的文件夹中:
cd oneinstack
创建screen会话窗口:
screen -S oneinstack
这是防止安装时间长了中途会中断,如果因为电脑睡眠、断网等原因中断了是可以恢复的,怎么恢复查看这里:Linux技巧 – 使用 screen 管理你的远程会话。
运行安装脚本,运行后它可能会先更新一下yum仓库(不用管,等它停了你再操作):
./install.sh
按以下现张图填写对应数字(点击图片可放大,数据库密码设置后要记下来):
到了HHVM那一步选择n之后,就会开始安装了,整个安装时间看不同机器性能,大概要25分钟左右,最多不会超过半小时。
安装完成会提示你是否要重启,我们输入n,选择不重启:
获取https证书
在获取证书之前,先保证你要获取证书的域名能ping通,ping不通是无法获取证书的。
你的域名在哪里解析,就在哪里获取证书,因为以下获取证书工具需要用到这些网站的api,比如你的域名可能是阿里云注册的,有可能是freenom注册的,也有可能在阿里云或freenom注册后使用了CloudFlare的cdn,这时候阿里云或freenom那边的解析就没用了,而是交给CloudFlare来解析了,所以你就要在CloudFlare上来申请证书了。
以下我申请证书的例子就是在CloudFlare申请,如果你的域名不是用CloudFlare解析,而是用阿里云或者freenom之类的,阿里云可以用我下边说到的acme.sh
,请看:https证书自动续订(renew)问题,但freenmon不行,因为freenom没有提供接口,需要手动申请,手动申请请看:为你的网站配置免费的HTTPS支持。
当然,如果你是阿里云或freenom注册的域名,但又想用我现在这种方法也可以,但你得先把你的域名解析先转到CloudFlare,怎么转?请看使用CloudFlare免费cdn隐藏服务器ip(防风)。
点击CloudFlare的右上角头像→点击下拉菜单中的My Profile,滚到差不多到底部,你就可以看到一个“Global API Key”和一个“Origin CA Key”,“Global API Key”就是我们要的Key:
在你的~/.bashrc
文件中添加CloudFlare的这两个变量(如果你用的是zsh那就添加到~/.zshrc
),其中的CF_Email是你注册CloudFlare的邮箱,CF_Key就是你刚才拿到的“Global API Key”:
echo '' >> ~/.bashrc && \
echo "export [email protected]" >> ~/.bashrc && \
echo "export CF_Key=8530fsdfifsdfsdfsdf2dfdb46" >> ~/.bashrc
安装自动证书管理工具“acme.sh”:
curl https://get.acme.sh | sh
重新加载配置以生效:
source ~/.bashrc
运行以下命令获取通配符证书(注意要把两个“example.com”改成你的域名,不要带www或者其他开头,就纯粹的“xxxx.com”,“xxxx.top”等等),注意执行该命令前保证域名能ping通(命令哪执行就在哪ping):
acme.sh --issue --dns dns_cf -d example.com -d '*.example.com'
在nginx目录内创建存放https证书的目录:
mkdir /usr/local/nginx/letsencrypt
获取的时候,要等待一会儿(有倒计时),等获取成功后,使用以下命令进行安装(还是一样,“example.com”改成你的域名“xxxx.com”):
acme.sh --install-cert -d 'example.com' \
--key-file /usr/local/nginx/letsencrypt/private.pem \
--fullchain-file /usr/local/nginx/letsencrypt/fullchain.pem
关于配置https证书,详见https证书自动续订(renew)问题。
下载wordpress
进入以下目录:
cd /data/wwwroot
下载wordpress:
wget https://wordpress.org/latest.tar.gz
解压“latest.tar.gz”,解压出来是一个名为“wordpress”的文件夹:
tar -zxvf latest.tar.gz
设置wordpress文件夹的所有者和所属组为www:www
:
chown -R www:www wordpress
删除“latest.tar.gz”压缩包(如果你硬盘够的话也可以留着):
rm -f latest.tar.gz
配置nginx
安装完成后,创建虚拟主机配置文件夹:
mkdir /usr/local/nginx/conf/vhost/
然后创建虚拟主机文件,注意要把“www.example.com”改成你的域名(要保持“.conf”后缀结尾):
vim /usr/local/nginx/conf/vhost/www.example.com.conf
英文输入法下,按“shift+冒号”进入底行模式,输入“set paste”回车进入粘贴模式(不会显示什么,但已经进入了),按i
进入编辑模式,然后把以下配置文件粘贴进去,最后按esc
→“shift+冒号”→“输入w”→按回车保存:
# 虚拟主机
server {
listen 80;
listen 443 ssl;
server_name www.example.com example.com;
access_log /data/wwwlogs/www.example.com_nginx.access.log combined buffer=1k;
error_log /data/wwwlogs/www.example.com_nginx.error.log error;
if ($scheme = http){
return 302 https://$host$request_uri;
}
if ($host = example.com){
return 302 $scheme://www.$host;
}
index index.html index.htm index.php;
root /data/wwwroot/wordpress;
#https start
ssl_certificate /usr/local/nginx/letsencrypt/fullchain.pem;
ssl_certificate_key /usr/local/nginx/letsencrypt/private.pem;
ssl_session_timeout 5m;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHellA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload";
#https end
#=======gzip start =======
#gzip on; #在http模块已经统一设置gzip
gzip_min_length 1k;
gzip_buffers 4 16k;
#gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";
#=======gzip end =======
location /youcannotfindme {
proxy_redirect off;
proxy_pass http://127.0.0.1:32875;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
rewrite /wp-admin$ $scheme://$host$uri/ permanent;
rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.xml$ "/index.php?xml_sitemap=params=$2" last;
rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.xml\.gz$ "/index.php?xml_sitemap=params=$2;zip=true" last;
rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.html$ "/index.php?xml_sitemap=params=$2;html=true" last;
rewrite ^/sitemap(-+([a-zA-Z0-9_-]+))?\.html.gz$ "/index.php?xml_sitemap=params=$2;html=true;zip=true" last;
location ~* ^/wp-content/uploads/.*\.php$ {
deny all;
}
#error_page 404 /404.html;
#error_page 502 /502.html;
location ~ .*\.(wma|wmv|asf|mp3|mmf|zip|rar|jpg|gif|png|swf|flv|mp4)$ {
valid_referers none blocked *.xiebruce.xyz www.xiebruce.xyz *.example.com www.example.com;
if ($invalid_referer) {
return 403;
}
}
location ~ [^/]\.php(/|$) {
#fastcgi_pass remote_php_ip:9000;
fastcgi_pass unix:/dev/shm/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
expires 30d;
access_log off;
}
location ~ .*\.(js|css)?$ {
expires 7d;
access_log off;
}
location ~ /\.ht {
deny all;
}
}
注意,如果你只是单纯的搭建网站,那么以下这部分配置是可以删掉的:
location /youcannotfindme {
proxy_redirect off;
proxy_pass http://127.0.0.1:32866;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
这部分配置的作用是转发websocket请求到另外的服务端的,如果你没有这个需要,就可以删除,当然不删除也不会影响网站的使用。
把配置中的所有“example.com”都替换成你的域名,比如你的域名是zhangsan.com的话,那么可以先“shift+冒号”进入底行模式,输入%s/example.com/zhangsan.com/g
回车即可替换,然后“shift+冒号”,输入x
回车即可保存并退出,还是不会的话请看:vi/vim基础使用教程。
创建一个软链,以便把nginx包含在环境变量中:
ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx
平滑重载nginx(让配置文件生效):
nginx -s reload
访问default.xxxx.com,看到以下界面说明成功了一半:
点击上图中的“phpMyadmin”可进入到这里,账号是root,输入之前安装时的数据库密码:
如图,输入数据库名为“wordpress”,选择数据库默认编码类型为“utf8mb4_general_ci”,然后点击右侧的“创建”:
然后打开www.xxxx.com(再说一遍,xxxx.com要换成你自己注册的域名),正常的话会看到以下界面。
选择自己想要的语言,点击继续:
点击“现在就开始”:
填上数据库信息,按下图填写即可,除了密码要改成你自己的(还记得前面安装的时候的密码吗?):
点击现在安装:
填写你博客的信息(主要是用户名和密码,这是用来登录你的博客后台的):
安装完成,点登录进入后台登录页面:
输入刚才设置的用户名和密码登录吧:
登录进去后可以看到博客后台:
点左上角这里,可以进入你的博客前台:
博客前台页面:
本教程只涉及安装博客,涉及如何使用,如果有什么不明白,自己网上搜索吧,Wordpress的资料非常多,好了,现在你可以开始使用你的博客了!!
给nginx添加http认证
如果你有留意,你会发现刚才的default.xxxx.com
直接就能打开,也不用密码,而且这并不是你才能打开,任何人只要知道你的域名,或者猜测前面是default等等都能打开,这就把你很多配置信息,包括数据库管理工具phpMyAdmin的入口都暴露在外,所以你需要给你nginx配置文件中的“default”对应的配置添加一个密码认证(配置文件在/usr/local/nginx/conf/nginx.conf
),这样当你打开default.xxxx.com
时,就需要输入账号密码了,注意你的网站可别加这个,可了别人就无法访问你网站了。
添加的方法请查看这篇文章:Nginx添加HTTP密码认证。