CentOS7+Oneinstack+WordPress搭建个人博客

CentOS7+Oneinstack+WordPress搭建个人博客

术语解释

CentOS7一种Linux系统,Linux服务器大多都使用CentOS系统。
Oneinstack一个集成脚本,可快速搭建php网站运行环境或java网站运行环境。
WordPress最流行的一个博客系统,使用php语言编写。

安装前准备

  • 1、你需要一台买一台服务器(推荐国外服务器,因为便宜并且不需要备案那么麻烦还可以顺便用它到墙外学习国外先进科学技术)。
  • 2、你需要一个域名,如果你没有,推荐在Freenom注册,免费一年。
  • 3、把域名添加两条A记录,都指向你的服务器,一条是www,一条是default,下图是CloudFlare的域名解析,如果你是阿里云腾讯云什么的都有对应的地方添加的,自己找找:
    Xnip2019-06-08_02-57-48.jpg
    添加后你就有了两个域名,一个是“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 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

按以下现张图填写对应数字(点击图片可放大,数据库密码设置后要记下来):
Xnip2019-06-07_21-32-34.jpg

Xnip2019-06-07_21-37-45.jpg

到了HHVM那一步选择n之后,就会开始安装了,整个安装时间看不同机器性能,大概要25分钟左右,最多不会超过半小时

安装完成会提示你是否要重启,我们输入n,选择不重启:
Xnip2019-06-08_02-03-00.jpg

获取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:
Api keys

在你的~/.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=63072000; 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,看到以下界面说明成功了一半:
Xnip2019-06-08_03-17-49.jpg

点击上图中的“phpMyadmin”可进入到这里,账号是root,输入之前安装时的数据库密码:
Xnip2019-06-08_03-18-25.jpg

如图,输入数据库名为“wordpress”,选择数据库默认编码类型为“utf8mb4_general_ci”,然后点击右侧的“创建”:
Xnip2019-06-08_03-23-06.jpg

然后打开www.xxxx.com(再说一遍,xxxx.com要换成你自己注册的域名),正常的话会看到以下界面。

选择自己想要的语言,点击继续:
Xnip2019-06-08_13-21-45.jpg

点击“现在就开始”:
Xnip2019-06-08_13-22-09.jpg

填上数据库信息,按下图填写即可,除了密码要改成你自己的(还记得前面安装的时候的密码吗?):
Xnip2019-06-08_13-30-26.jpg

点击现在安装:
Xnip2019-06-08_13-23-22.jpg

填写你博客的信息(主要是用户名和密码,这是用来登录你的博客后台的):
Xnip2019-06-08_13-27-29.jpg

安装完成,点登录进入后台登录页面:
Xnip2019-06-08_13-33-07.jpg

输入刚才设置的用户名和密码登录吧:
Xnip2019-06-08_13-34-03.jpg

登录进去后可以看到博客后台:
Xnip2019-06-08_13-34-45.jpg

点左上角这里,可以进入你的博客前台:
Xnip2019-06-08_13-35-26.jpg

博客前台页面:
Xnip2019-06-08_13-36-01.jpg

本教程只涉及安装博客,涉及如何使用,如果有什么不明白,自己网上搜索吧,Wordpress的资料非常多,好了,现在你可以开始使用你的博客了!!

给nginx添加http认证

如果你有留意,你会发现刚才的default.xxxx.com直接就能打开,也不用密码,而且这并不是你才能打开,任何人只要知道你的域名,或者猜测前面是default等等都能打开,这就把你很多配置信息,包括数据库管理工具phpMyAdmin的入口都暴露在外,所以你需要给你nginx配置文件中的“default”对应的配置添加一个密码认证(配置文件在/usr/local/nginx/conf/nginx.conf),这样当你打开default.xxxx.com时,就需要输入账号密码了,注意你的网站可别加这个,可了别人就无法访问你网站了。

添加的方法请查看这篇文章:Nginx添加HTTP密码认证

打赏

Leave a Reply

avatar

This site uses Akismet to reduce spam. Learn how your comment data is processed.

  Subscribe  
Notify of

扫码在手机查看
iPhone请用自带相机扫
安卓用UC/QQ浏览器扫

CentOS7+Oneinstack+WordPress搭建个人博客