<?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'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>经过两三天的折腾，从 Linux 结构及指令，到 LNMP 框架搭建，再到数据库的配置，最后端口转发 + 内网穿透，博客终于成功上线！在此将部署过程及踩过的坑记录下来，一方面是纪念，另一方面希望能够后来人提供一点帮助。&lt;/p>
&lt;h2 id="从想法到实现">
从想法到实现
&lt;a href="#%e4%bb%8e%e6%83%b3%e6%b3%95%e5%88%b0%e5%ae%9e%e7%8e%b0" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>第一代博客采用树莓派 3B + 构建。当初作为寒假的练手项目，入手了树莓派 3B + 以及智能小车所需的配件。由于时间没有规划好，最后在寒假前匆匆完成了小车硬件的组装，智能控制部分（wifi 遥控、红外循迹等）没能够完成。开学只带了树莓派的板子。闲置良久，想利用起来，刚好又有搭建大学生竞赛信息服务网站及公众号的想法，就开始着手构建基于树莓派的服务器，先从 Wordpress 搭建博客开始。&lt;/p>
&lt;h2 id="lnmpwordpress-框架搭建">
LNMP+Wordpress 框架搭建
&lt;a href="#lnmpwordpress-%e6%a1%86%e6%9e%b6%e6%90%ad%e5%bb%ba" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;blockquote>
&lt;p>L=Linux&lt;br>
N=Nginx&lt;br>
M=MySQL&lt;br>
P=PHP&lt;/p>
&lt;/blockquote>
&lt;p>LNMP 架构是广泛使用的服务器架构。与此类似的还有 LAMP，A=Apache。Nginx 与 Apache 作为目前市场上高度流行的两种服务器程序，网络上已经有非常多的相关的文档和教程。&lt;br>
关于 Nginx 与 Apache 的选择，这里只简单做个介绍：&lt;br>
&lt;strong>Nginx&lt;/strong>：资源占用低，性能好，配置简洁，功能有限。&lt;br>
&lt;strong>Apache&lt;/strong>：相对 Nginx 占用资源要多一点，不过插件和文档更丰富，设置某些功能的时候会方便一点。&lt;br>
具体两者的区别和测试可自行百度。刚开始考虑到树莓派的配置以及访问量，我选择使用 Nginx。具体部署过程此处不再赘述。&lt;br>
设置好 Nginx，开始配置 MySQL 和 PHP。安装 php 的时候开始遇到了一些小波折：网络上大部分教程都是基于 php5.0，安装包的时候都是类似于&lt;/p>
&lt;pre tabindex="0">&lt;code>sudo apt-get install php5-fpm
&lt;/code>&lt;/pre>&lt;p>这样的，但在实际安装过程中会报错，说找不到这个名字的包。这个还算好解决，又搜索了几个教程，发现最新的版本为 php7.0，根据新版本 php 的教程按部就班做就基本 OK 了。&lt;/p>
&lt;p>WordPress 部署比较简单，但是对于新手而言，需要熟悉 Linux 基本指令：cd 目录切换，wget 文件下载，tar\zip 解压等。但是相对于有很多依赖项的或者配置繁琐的程序，Wordpress 安装其实已经算很简单了。&lt;/p>
&lt;h3 id="第一个大坑mysql">
第一个大坑：MySQL
&lt;a href="#%e7%ac%ac%e4%b8%80%e4%b8%aa%e5%a4%a7%e5%9d%91mysql" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>安装 MySQL 一马平川，配置数据库，创建账户的时候也没有任何问题。然而第二次开始使用时，却发现刚刚设置的账户登不上去了？!! 翻来覆去又重装了几遍 MySQL，排除了账户密码错误、屏蔽了远程连接等可能性。最后一直停留在报错说登陆失败。无论是测试用户还是 root，有密码还是无密码，统统失败。Wordpress 里面连接数据库也一直失败&lt;/p>
&lt;p>这时怀疑不是数据库的问题，开始怀疑是 Nginx 或者 php。简单看了一下 Nginx 竟然无法启动？根据报错查了下日志发现与 php 的什么 fpm 和 fastcgi 通信有问题，又百度来百度去，改了下配置文件，把 fastcgi 通信的问题解决了。重启 nginx 服务又发现 80 端口被占用，又是一通百度。。。网上的解决方案无非两种：一种是 nginx 服务已经启动，直接另外用命令启动 nginx 服务必然会导致上述的问题。另外一种就是其他程序占用 80 端口，找到进程 kill 掉即可。然而我的问题并不是上面两种，无限郁闷 ing。。。&lt;/p>
&lt;p>但是测试网页的时候却发现网页可以正常显示？？? 又细查了一遍发现不知道什么时候又装了 Apache。。。又比 Nginx 先启动，自然会占用做网络服务器会用到的 80 端口。突然想起来安装 MYSQL 的时候好像弹出了个窗口。。。一阵哭笑不得。&lt;/p>
&lt;p>然而经过一晚上折腾，MySQL 这个问题依然没有解决。迫不得已，决定第二天尝试 SQlite。&lt;/p>
&lt;h3 id="第二个大坑pdo-driver">
第二个大坑：PDO Driver
&lt;a href="#%e7%ac%ac%e4%ba%8c%e4%b8%aa%e5%a4%a7%e5%9d%91pdo-driver" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>在决定弃用 MySQL 后，毅然卸载了 MySQL 并删除了残留，全新安装 SQLite。这里简单介绍一下两者的区别：&lt;/p>
&lt;blockquote>
&lt;p>MySQL：功能强，效率高，支持多用户，安全性好，但是占用资源较多&lt;/p>
&lt;/blockquote>
&lt;blockquote>
&lt;p>SQLite：精简版的 SQL，没有多用户概念，文件方式存储，方便迁移，占用资源少，运行快。&lt;/p>
&lt;/blockquote>
&lt;p>满怀期待装好了 Sqlite，配置好了数据库，以及 Wordpress 配置文件 wp-config.php，没想到进去 Wordpress 报错。&lt;/p>
&lt;pre tabindex="0">&lt;code>PHP PDO Extension is missing
&lt;/code>&lt;/pre>&lt;p>百度了下，说是 php 对 sqlite 的支持没有打开。需要到 php.ini 把对应属于 sqlite 的扩展启用，把被注释的部分提出来。&lt;/p>
&lt;p>一顿操作过后，进 Wordpress，又报&lt;/p>
&lt;pre tabindex="0">&lt;code>PHP PDO Extension is not loaded
&lt;/code>&lt;/pre>&lt;p>又是一顿猛肝，身心俱疲（无限查百度，查必应，查 StackOverflow，查官方文档）。一开始是看到有人说 php 扩展的目录默认是被注释的，看了下的却如此，就把改掉了。没想还是出错&lt;/p>
&lt;pre tabindex="0">&lt;code>;extension path= ../
&lt;/code>&lt;/pre>&lt;p>当时的代码大致如此。改了之后还是没效果，又继续查。查到晚上两点困了累了，遂罢。&lt;/p>
&lt;p>第二天起床继续肝。早上起来和熬夜的效果就是不一样，没两下就突然想起来，被我解除注释的，php 扩展路径的那一行，它代表的是配置文件所在目录的父文件夹。但是他那个父文件夹底下根本就！！没有！！扩展名为 so 的扩展库文件！！！&lt;/p>
&lt;p>所以！是扩展目录问题了。&lt;/p>
&lt;p>但是他的扩展目录又到底在哪儿呢？百度的结果是说不同机子不一样。采用源代码编译安装的时候可以指定路径，但是我是用 apt 安装的。接下来是疯狂的找 php 扩展所在目录了。把百度的几个目录找了一遍，，又在其他地方又 php 字样的目录找了一遍，可算给我找到了。回去把 php.ini 一改，重启。哈！终于成了！&lt;/p>
&lt;h3 id="heading">
&lt;a href="#heading" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h3>
&lt;p>第三个大坑：外网访问&lt;/p>
&lt;p>博客能够在内网正常访问了，折腾了两天总算有了成果。但是作为一个服务器只能在内网访问就没多大意思了。最终要做成的网站是要给人看的嘛。于是开始找树莓派外网访问的方案。大概有四种：&lt;/p>
&lt;blockquote>
&lt;ol>
&lt;li>使用路由器做端口转发 + 花生壳做动态域名解析。但是我手头用的不是路由器，是手机热点。放弃。&lt;/li>
&lt;/ol>
&lt;/blockquote>
&lt;blockquote>
&lt;ol start="2">
&lt;li>树莓派安装花生壳 + 花生壳内网穿透服务。内网穿透付费且评价不是很好，放弃。&lt;/li>
&lt;/ol>
&lt;/blockquote>
&lt;blockquote>
&lt;ol start="3">
&lt;li>使用 frp 内网穿透。但是需要有另外一台有公网 IP 的 VPS。这还不如直接买一台阿里云的服务器呢。放弃。&lt;/li>
&lt;/ol>
&lt;/blockquote>
&lt;blockquote>
&lt;ol start="4">
&lt;li>使用 Ngrok 做内网转发。Ngrok 免费且评价还不错，就决定是你了！&lt;/li>
&lt;/ol>
&lt;/blockquote>
&lt;p>Ngrok 的安装部署不难，简单来说就是注册账号，树莓派上安装 Ngrok，然后在树莓派上启动，与账号绑定。他会给你分配一个二级域名，打开这个域名，虽然有点慢，因为服务器在美国，但是成功地跳转到了我的博客主页！&lt;/p>
&lt;p>但是接下来的测试中发现，通过那个二级域名会指向我博客的主页，这时候点击页面上的任何连接都会跳转到我的树莓派的内网 IP。很明显，网站的博客的页面上的链接都是绝对地址，这也是为什么 Wordpress 的设置里面有一项是让你填写自己的网站的域名。这个比较好办，用相对路径就可以了。Wordpress 插搜索 Relative URL，就可以找到将全站链接转换为相对链接的插件。&lt;/p>
&lt;p>考虑到树莓派性能有限，网站在内网访问已经有点慢了，通过外网访问会更慢。于是就对站点进行了一些优化，速度大幅提升，外网访问的速度也可以接受了。具体教程可参见另一篇博文。&lt;/p>
&lt;h2 id="大功告成">
大功告成
&lt;a href="#%e5%a4%a7%e5%8a%9f%e5%91%8a%e6%88%90" class="h-anchor" aria-hidden="true">#&lt;/a>
&lt;/h2>
&lt;p>至此，FXZ‘s Blog 部署完成，正式上线！&lt;/p>
&lt;p>所谓努力与收获成正比自有它的道理，非常庆幸，也非常感谢自己坚持了下来。在这短短的两三天时间里，克服了众多困难，拒绝了数次开黑邀请。所幸结果是令人欣慰的，特此写下这第一篇博文。&lt;em>2019 年 4 月 8 日晚于重庆&lt;/em>&lt;/p></description></item></channel></rss>