树莓派折腾记:部署LNMP环境并实现多站点共存

文章更新:

  20161212 初次成文
  20170601 更新多站点的部署方式并增加注意事项

问题提出:

  谈到树莓派能折腾些什么,不得不提的就是把树莓派部署所需环境在小派上跑网站了。在这篇文章中,小苏会向大家介绍如何在树莓派上部署LNMP环境并实现多站点访问。

  由于树莓派在软件和硬件上的更新,互联网中大多数有关在树莓派上部署LNMP环境的教程大多基于"树莓派2代",经过小苏的测试,这些教程已经不再适用于小苏手中的"树莓派3代"了,经过一番搜索和折腾,小苏最终找到了使用于3代的部署教程,并且经过进一步折腾,终于在树莓派3代上成功实现了"多站点共存"。

解决方案:

  1. 做一些准备工作:

sudo apt-get update #更新软件源索引
sudo apt-get upgrade #更新已安装的软件(可选)

  2. 安装Nginx,PHP,MySQL和它们的一些依赖组件:

sudo apt-get install nginx php5-fpm php5-cgi php5-cli php5-curl php5-gd php5-mcrypt php5-mysql php5-memcache php5-gd php5-sqlite php5-cgi php5-xmlrpc mysql-server mysql-client

  值得一提的是,这个过程是直接安装编译好的deb包,而不是下载源码另外编译,但即使如此,这个过程还是可能需要较长时间。

  在安装过程中,需要用户输入MySQL的Root用户密码,按提示输入,输入完成按"回车键"即可提交。

  3. 安装phpmyadmin:

sudo apt-get install phpmyadmin

  在安装过程中需要用户选择已安装的服务器类型,有apache和lighthttpd两个选择,但我们刚刚安装的nginx却不在选择列表内,选择apache即可,没有影响。

  如果你在安装phpmyadmin的过程中遇到了类似以下内容的提示,可以按Tab键切换光标,选择"Yes"后按Enter键确认以进行接下来的操作(若未遇到此提示请忽略):


The phpmyadmin package must have a database installed and configured before it can be used. This
can be optionally handled with dbconfig-common.
If you are an advanced database administrator and know that you want to perform this configuration
manually, or if your database has already been installed and configured, you should refuse this
option. Details on what needs to be done should most likely be provided in
/usr/share/doc/phpmyadmin.

Otherwise, you should probably choose this option.
Configure database for phpmyadmin with dbconfig-common?
  

  
  在安装过程中还需要MySQL的Root用户密码,输入刚刚设置好的即可,并且还需要输入phpmyadmin的管理密码,输入并按回车键提交即可。

  安装phpmyadmin完成后,我们需要创建一个链接将phpmyadmin文件夹链接到Nginx的网页文件夹中:

sudo ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin

  4. 配置Nginx网站文件夹属性:
  将Nginx默认的网页文件夹:/var/www/html/赋予可执行权限,并且将其用户组改为"www-data"。

sudo chmod 755 /var/www/html/ #将/var/www/html/文件夹赋予可执行权限
sudo chown -R www-data:www-data /var/www/html #将/var/www/html/文件夹的用户组改为"www-data"

  5. Nginx配置:
  在这一步中,我们通过修改Nginx站点属性文件来配置Nginx:

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak #备份Nginx默认站点属性文件
sudo vim /etc/nginx/sites-available/default #使用vim编辑默认站点属性文件

  在vim中,我们清空原文件的内容,粘贴以下内容:


server
{
    listen       80;
    server_name yourdomain.com; #server_name end
    index index.html index.htm index.php; #index end
    charset utf-8;

    root  /var/www/html;

    location ~ .*\.php(\/.*)*$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi.conf;
  }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp3|wma)$
    {
        expires      30d;
    }

    location ~ .*\.(js|css)$
    {
        expires      12h;
    }

    access_log off; #access_log end
    error_log /dev/null; #error_log end
}

  
  其中,我们需要修改文件中的"yourdomain1.com"为你想要绑定的域名,其他保持默认,保存文件。

  这个站点为默认站点,所谓的默认站点,为访问者访问树莓派的IP地址后显示在访问者屏幕上的站点。

  保存文件后我们需要重启一下Nginx:

sudo service nginx restart #重启Nginx服务

  6. 做完这一步后,访问"http://你的树莓派IP地址/phpmyadmin"即可看到phpmyadmin的登陆页面,代表LNMP环境部署成功。

  至此为止,LNMP环境部署成功,我自己折腾的时候卡在第5步好久,最后以AMH面板的配置文件为基础,结合教程中fastcgi部分重新做了一份配置文件,终于成功(捂脸哭)。
  
  
  下面开始介绍LNMP的多站点配置过程:

  LNMP环境搭建完成后,如果你想在树莓派上部署多个网站,可以通过下面的方式操作:

  在Nginx中实现多站点共存的方式是在/etc/nginx/conf.d中新建多个后缀为conf的多站点配置文件。

  1. 配置第二个站点:
  接下来我们创建第二个站点:站点文件夹路径为/var/www/site1,第二个站点的配置文件为/etc/nginx/conf.d/site1.conf ,其中,站点文件夹可以在网站配置文件(/etc/nginx/conf.d/site1.conf)中更改。

  首先我们建立并配置第二个站点文件夹:

cd /var/www #将工作目录定位到/var/www
sudo mkdir site1 #新建第二个站点的网站文件夹
sudo chmod 755 ./site1 #赋予site1文件夹可执行权限
sudo chown -R www-data:www-data ./site1 #将site1文件夹的用户组改为"www-data"

  配置站点配置文件/etc/nginx/conf.d/site1.conf:

sudo vim /etc/nginx/conf.d/site1.conf #新建site1.conf文件

  将下面的内容粘贴到site1.conf中,修改domain2.com为你绑定的域名,保存并退出vim:


server
{
    listen       81;
    server_name domain2.com; #server_name end
    index index.html index.htm index.php; #index end
    charset utf-8;

    root  /var/www/site1;

    location ~ .*\.php(\/.*)*$ {
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi.conf;
  }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp3|wma)$
    {
        expires      30d;
    }

    location ~ .*\.(js|css)$
    {
        expires      12h;
    }

    access_log off; #access_log end
    error_log /dev/null; #error_log end
}

  
  其中,81为此站点监听的端口,你也可以将此端口改成你想要的其他端口(只要不与其他服务的端口冲突就可以)。

  接下来,我们重启Nginx服务:

sudo service nginx restart #重启Nginx服务

  2. 在局域网中访问部署在树莓派中的多个站点:
  在上面的步骤中,我们在Nginx中部署了多个站点,在局域网下的其他设备上,我们可以通过在树莓派的IP地址后加入各站点的监听端口来实现。

  在上面的步骤中,默认站点的监听端口为80,所以我们可以直接访问树莓派的IP地址(IP地址后无需增加端口)即可访问到默认站点,比如树莓派在局域网中的IP地址为192.168.123.152,那么我们直接在同局域网下的其他设备的浏览器中输入:

  http://192.168.123.152/

  即可访问默认站点,如果你是按以上方法配置的,访问第二个站点只需要在树莓派的IP地址后加入:监听端口号,因为第二个站点的监听端口号为81,所以我们在同局域网下的其他设备的浏览器中输入:

  http://192.168.123.152:81/

  即可访问到第二个站点。
  
  

参考资料:

  在Raspberry Pi 3上搭建Typecho+LNMP:
  http://www.51hei.com/bbs/dpj-55369-1.html

  树莓派从系统安装到搭建nginx+php+mysql - hongfeizhou:
  http://www.cnblogs.com/hongfeizhou/p/5307013.html

已有 3 条评论
  1. 博主想问下,你的树莓派如何公网IP是怎么弄得?还有树莓派3带typecho负载大不?

    1. 文章中所指的多站点共存需要访问树莓派的设备与树莓派处于同一局域网下,比如树莓派连接手机开的热点/树莓派与手机通过数据线连接并开启USB网络共享/树莓派和手机处于同一WIFI热点下等。通过修改访问设备的Hosts文件代替DNS服务器进行域名解析,在以上条件下不需要公网IP。

      如果实际所处的网络环境不满足"在同一局域网下"的条件,还可以通过"内网穿透"来实现在公网中访问内网中的树莓派,同样不需要公网IP。

      我所知道的适用于树莓派的内网穿透方法大概有三种:

      1.花生壳内网穿透(需要交几块钱的初始费用)
      2.ngork内网穿透(如果有vps的话可以自己搭建ngork,如果没有的话也可以使用第三方的免费ngork服务,如Natapp)
      3.Frp内网穿透(推荐,但必须有一台vps才可以实现)

      在之后我可能会写一篇适用于树莓派的内网穿透文章,但是由于最近挖的坑比较多,我得慢慢填。

    2. 至于树莓派跑Typecho的话,应该没问题的。负载应该会小到可以忽略的程度。但是如果访问人数不多的话数据库还是建议使用Sqlite,资源占用更小一些~

添加新评论