<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>网站 on Colinx Blog</title>
    
    
    
    <link>/tags/%E7%BD%91%E7%AB%99/</link>
    <description>Recent content in 网站 on Colinx Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 08 Apr 2019 00:00:00 +0000</lastBuildDate>
    
	<atom:link href="/tags/%E7%BD%91%E7%AB%99/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>Colin&#39;s Blog 1.0 构建心得</title>
      <link>/posts/colins-blog-1.0-%E6%9E%84%E5%BB%BA%E5%BF%83%E5%BE%97/</link>
      <pubDate>Mon, 08 Apr 2019 00:00:00 +0000</pubDate>
      
      <guid>/posts/colins-blog-1.0-%E6%9E%84%E5%BB%BA%E5%BF%83%E5%BE%97/</guid>
      <description>
        
          
          
          
        
        
        

&lt;p&gt;经过两三天的折腾，从 Linux 结构及指令，到 LNMP 框架搭建，再到数据库的配置，最后端口转发 + 内网穿透，博客终于成功上线！在此将部署过程及踩过的坑记录下来，一方面是纪念，另一方面希望能够后来人提供一点帮助。&lt;/p&gt;

&lt;h2 id=&#34;从想法到实现&#34;&gt;从想法到实现&lt;/h2&gt;

&lt;p&gt;第一代博客采用树莓派 3B + 构建。当初作为寒假的练手项目，入手了树莓派 3B + 以及智能小车所需的配件。由于时间没有规划好，最后在寒假前匆匆完成了小车硬件的组装，智能控制部分（wifi 遥控、红外循迹等）没能够完成。开学只带了树莓派的板子。闲置良久，想利用起来，刚好又有搭建大学生竞赛信息服务网站及公众号的想法，就开始着手构建基于树莓派的服务器，先从 Wordpress 搭建博客开始。&lt;/p&gt;

&lt;h2 id=&#34;lnmp-wordpress-框架搭建&#34;&gt;LNMP+Wordpress 框架搭建&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;L=Linux&lt;br /&gt;
N=Nginx&lt;br /&gt;
M=MySQL&lt;br /&gt;
P=PHP&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;LNMP 架构是广泛使用的服务器架构。与此类似的还有 LAMP，A=Apache。Nginx 与 Apache 作为目前市场上高度流行的两种服务器程序，网络上已经有非常多的相关的文档和教程。&lt;br /&gt;
关于 Nginx 与 Apache 的选择，这里只简单做个介绍：&lt;br /&gt;
&lt;strong&gt;Nginx&lt;/strong&gt;：资源占用低，性能好，配置简洁，功能有限。&lt;br /&gt;
&lt;strong&gt;Apache&lt;/strong&gt;：相对 Nginx 占用资源要多一点，不过插件和文档更丰富，设置某些功能的时候会方便一点。&lt;br /&gt;
具体两者的区别和测试可自行百度。刚开始考虑到树莓派的配置以及访问量，我选择使用 Nginx。具体部署过程此处不再赘述。&lt;br /&gt;
设置好 Nginx，开始配置 MySQL 和 PHP。安装 php 的时候开始遇到了一些小波折：网络上大部分教程都是基于 php5.0，安装包的时候都是类似于&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;sudo apt-get install php5-fpm

&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;这样的，但在实际安装过程中会报错，说找不到这个名字的包。这个还算好解决，又搜索了几个教程，发现最新的版本为 php7.0，根据新版本 php 的教程按部就班做就基本 OK 了。&lt;/p&gt;

&lt;p&gt;WordPress 部署比较简单，但是对于新手而言，需要熟悉 Linux 基本指令：cd 目录切换，wget 文件下载，tar\zip 解压等。但是相对于有很多依赖项的或者配置繁琐的程序，Wordpress 安装其实已经算很简单了。&lt;/p&gt;

&lt;h3 id=&#34;第一个大坑-mysql&#34;&gt;第一个大坑：MySQL&lt;/h3&gt;

&lt;p&gt;安装 MySQL 一马平川，配置数据库，创建账户的时候也没有任何问题。然而第二次开始使用时，却发现刚刚设置的账户登不上去了？!! 翻来覆去又重装了几遍 MySQL，排除了账户密码错误、屏蔽了远程连接等可能性。最后一直停留在报错说登陆失败。无论是测试用户还是 root，有密码还是无密码，统统失败。Wordpress 里面连接数据库也一直失败&lt;/p&gt;

&lt;p&gt;这时怀疑不是数据库的问题，开始怀疑是 Nginx 或者 php。简单看了一下 Nginx 竟然无法启动？根据报错查了下日志发现与 php 的什么 fpm 和 fastcgi 通信有问题，又百度来百度去，改了下配置文件，把 fastcgi 通信的问题解决了。重启 nginx 服务又发现 80 端口被占用，又是一通百度。。。网上的解决方案无非两种：一种是 nginx 服务已经启动，直接另外用命令启动 nginx 服务必然会导致上述的问题。另外一种就是其他程序占用 80 端口，找到进程 kill 掉即可。然而我的问题并不是上面两种，无限郁闷 ing。。。&lt;/p&gt;

&lt;p&gt;但是测试网页的时候却发现网页可以正常显示？？? 又细查了一遍发现不知道什么时候又装了 Apache。。。又比 Nginx 先启动，自然会占用做网络服务器会用到的 80 端口。突然想起来安装 MYSQL 的时候好像弹出了个窗口。。。一阵哭笑不得。&lt;/p&gt;

&lt;p&gt;然而经过一晚上折腾，MySQL 这个问题依然没有解决。迫不得已，决定第二天尝试 SQlite。&lt;/p&gt;

&lt;h3 id=&#34;第二个大坑-pdo-driver&#34;&gt;第二个大坑：PDO Driver&lt;/h3&gt;

&lt;p&gt;在决定弃用 MySQL 后，毅然卸载了 MySQL 并删除了残留，全新安装 SQLite。这里简单介绍一下两者的区别：&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;MySQL：功能强，效率高，支持多用户，安全性好，但是占用资源较多&lt;/p&gt;

&lt;p&gt;SQLite：精简版的 SQL，没有多用户概念，文件方式存储，方便迁移，占用资源少，运行快。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;满怀期待装好了 Sqlite，配置好了数据库，以及 Wordpress 配置文件 wp-config.php，没想到进去 Wordpress 报错。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;PHP PDO Extension is missing

&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;百度了下，说是 php 对 sqlite 的支持没有打开。需要到 php.ini 把对应属于 sqlite 的扩展启用，把被注释的部分提出来。&lt;/p&gt;

&lt;p&gt;一顿操作过后，进 Wordpress，又报&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;PHP PDO Extension is not loaded

&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;又是一顿猛肝，身心俱疲（无限查百度，查必应，查 StackOverflow，查官方文档）。一开始是看到有人说 php 扩展的目录默认是被注释的，看了下的却如此，就把改掉了。没想还是出错&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;;extension path= ../

&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;当时的代码大致如此。改了之后还是没效果，又继续查。查到晚上两点困了累了，遂罢。&lt;/p&gt;

&lt;p&gt;第二天起床继续肝。早上起来和熬夜的效果就是不一样，没两下就突然想起来，被我解除注释的，php 扩展路径的那一行，它代表的是配置文件所在目录的父文件夹。但是他那个父文件夹底下根本就！！没有！！扩展名为 so 的扩展库文件！！！&lt;/p&gt;

&lt;p&gt;所以！是扩展目录问题了。&lt;/p&gt;

&lt;p&gt;但是他的扩展目录又到底在哪儿呢？百度的结果是说不同机子不一样。采用源代码编译安装的时候可以指定路径，但是我是用 apt 安装的。接下来是疯狂的找 php 扩展所在目录了。把百度的几个目录找了一遍，，又在其他地方又 php 字样的目录找了一遍，可算给我找到了。回去把 php.ini 一改，重启。哈！终于成了！&lt;/p&gt;

&lt;p&gt;第三个大坑：外网访问&lt;/p&gt;

&lt;p&gt;博客能够在内网正常访问了，折腾了两天总算有了成果。但是作为一个服务器只能在内网访问就没多大意思了。最终要做成的网站是要给人看的嘛。于是开始找树莓派外网访问的方案。大概有四种：&lt;/p&gt;

&lt;blockquote&gt;
&lt;ol&gt;
&lt;li&gt;&lt;p&gt;使用路由器做端口转发 + 花生壳做动态域名解析。但是我手头用的不是路由器，是手机热点。放弃。&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;树莓派安装花生壳 + 花生壳内网穿透服务。内网穿透付费且评价不是很好，放弃。&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;使用 frp 内网穿透。但是需要有另外一台有公网 IP 的 VPS。这还不如直接买一台阿里云的服务器呢。放弃。&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;使用 Ngrok 做内网转发。Ngrok 免费且评价还不错，就决定是你了！&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;Ngrok 的安装部署不难，简单来说就是注册账号，树莓派上安装 Ngrok，然后在树莓派上启动，与账号绑定。他会给你分配一个二级域名，打开这个域名，虽然有点慢，因为服务器在美国，但是成功地跳转到了我的博客主页！&lt;/p&gt;

&lt;p&gt;但是接下来的测试中发现，通过那个二级域名会指向我博客的主页，这时候点击页面上的任何连接都会跳转到我的树莓派的内网 IP。很明显，网站的博客的页面上的链接都是绝对地址，这也是为什么 Wordpress 的设置里面有一项是让你填写自己的网站的域名。这个比较好办，用相对路径就可以了。Wordpress 插搜索 Relative URL，就可以找到将全站链接转换为相对链接的插件。&lt;/p&gt;

&lt;p&gt;考虑到树莓派性能有限，网站在内网访问已经有点慢了，通过外网访问会更慢。于是就对站点进行了一些优化，速度大幅提升，外网访问的速度也可以接受了。具体教程可参见另一篇博文。&lt;/p&gt;

&lt;h2 id=&#34;大功告成&#34;&gt;大功告成&lt;/h2&gt;

&lt;p&gt;至此，FXZ‘s Blog 部署完成，正式上线！&lt;/p&gt;

&lt;p&gt;所谓努力与收获成正比自有它的道理，非常庆幸，也非常感谢自己坚持了下来。在这短短的两三天时间里，克服了众多困难，拒绝了数次开黑邀请。所幸结果是令人欣慰的，特此写下这第一篇博文。&lt;em&gt;2019 年 4 月 8 日晚于重庆&lt;/em&gt;&lt;/p&gt;

        
        </description>
    </item>
    
  </channel>
</rss>