标签 lnmp 下的文章

文章更新

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

问题提出

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

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

解决方案

  1. 做一些准备工作:

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

  1. 安装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用户密码,按提示输入,输入完成按"回车键"即可提交。

  1. 安装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

  1. 配置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"

  1. 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服务

  1. 做完这一步后,访问"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服务

  1. 在局域网中访问部署在树莓派中的多个站点:
    在上面的步骤中,我们在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

文章更新

20161019 初次成文

问题提出

在写这篇文章之前,小苏本身有一台腾讯云的学生主机,但是因为域名没有备案的原因,小苏一直没有把网站部署在腾讯云上。最近小苏比较有时间,于是就在腾讯云申请了域名备案。在写这篇文章的时候,小苏已经通过了域名备案初审在等待幕布到货了。

根据管局要求,域名备案期间要求网站不能正常访问才可以通过备案,所以这篇文章可能是mlapp.cn这个域名在备案之前的最后一篇文章了。

于是写篇文章来纪念一下(这个理由也太牵强了吧)。

解决方案

在这篇文章中,我们将从重装系统开始,在Centos上部署LNMP环境并安装amh控制面板。

不知道amh为何物?请点击这里

登陆腾讯云的云主机控制台,选中你想要配置的腾讯云主机,选择"重装系统" - "公共镜像" - "Centos6.5 64位",耐心等待系统重装完成后,使用ssh方式登录进服务器执行以下操作:

yum install -y wget #安装wget
yum install -y screen #安装screen

这里不得不吐槽,腾讯云的yum源有问题。所以我们需要手动更换可以使用yum源:

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak #备份默认的yum源(默认源本来就就有问题,所以在腾讯云上这一步几乎没有什么卵用)
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo #更换默认的yum源为阿里云镜像源

同时,腾讯云的EPEL源也有问题,所以我们还需要修改EPEL源:

cp /etc/yum.repos.d/CentOS-Epel.repo /etc/yum.repos.d/CentOS-Epel.repo.bak #备份默认EPEL源(虽然在腾讯云上这一步也没有什么卵用)
vim /etc/yum.repos.d/CentOS-Epel.repo #编辑EPEL源文件

执行以上命令之后,我们将使用vim编辑器编辑EPEL源配置文件,键入按键i后可以进入编辑模式,使用退格键清除文件全部内容之后,我们在vim编辑器中粘贴以下内容:

[epel]
name=epel
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-$releasever&arch=$basearch
enabled=1
gpgcheck=0

粘贴完成之后,键盘键入:wq!强制保存文件并退出vim编辑器。

这里不得不再次吐槽,在腾讯云上,我在ssh界面使用编辑器是有问题的,不论是vi还是vim,都不能正常编辑文件(但是装其他系统就没有这个问题)。所以小苏推荐大家使用sftp登陆云主机,找到并编辑/etc/yum.repos.d/CentOS-Epel.repo这个文件,清除文件所有内容并粘贴以上内容,保存并上传文件,和先前我们用vim编辑这个文件的操作实质上是一样的。

做完以上操作之后,我们需要执行makecache生成缓存:

yum clean all
yum makecache

至此,腾讯云换源操作完成。接下来我们进行amh控制面板的安装:

screen -S amh #新建一个名为amh的screen,当ssh意外断开时可以恢复原来的会话
cd ~
rm -rf amh* #清除可能残留的amh文件

做完以上准备工作我们就可以安装amh4.2了。amh4.2是一款免费的主机控制面板(amh从5.0版本开始收费,4.2是amh的最后一个免费版本),管理员可以在web端对主机进行操作,无需在终端敲代码进行繁复的命令行操作。

此次安装中,小苏使用的是amh4.2彩虹修改版。详情请看:http://blog.cccyun.cc/?post=233

同时,小苏也推荐大家使用amh4.2麦葱修改版:https://maicong.me/t/145

当然,你也可以使用amh4.2官方的一键安装脚本,详情请看:https://amh.sh/install.htm

彩虹修改版提供了两个版本,小苏推荐大家使用支持php7.0的版本。我们继续在ssh中执行:

wget http://api.cccyun.cc/amh.sh && chmod 775 amh.sh && ./amh.sh 2>&1 | tee amh.log #获取并执行amh4.2一键安装脚本(php7.0)

执行脚本后,终端将返回:


[Notice] Confirm Install/Uninstall AMH? please select: (1~3)
1) Install AMH 4.2
2) Uninstall AMH 4.2
3) Exit

这个提示为询问用户是要安装amh还是卸载amh,由于我们是要安装amh,所以我们键入1并回车:


[OK] You Selected: Install AMH 4.2
[Error] empty server ip.
[Notice] Please input server ip:

这个提示为询问此云主机的公网IP,我们将云主机控制台的云主机公网IP键入,并回车(这里以公网IP为123.123.123.123做示例):


[OK] Your server ip is:
123.123.123.123
[Notice] Please input MySQL password:

此提示为要求用户设置一个MySQL数据库密码,建议设置得复杂一些(这里以MySQL密码设置为mysqlpassword做示例):


[OK] Your MySQL password is:
mysqlpassword
[Notice] Please input AMH password:

此提示为要求用户设置amh控制面板的登陆密码,同样不要设置得太简单(这里以amhpassword做示例):


[OK] Your AMH password is:
amhpassword

回车之后amh就开始安装了。由于各模块为编译安装,所以安装时间较长(大约20~40分钟)。当你看到终端返回以下结果时代表amh安装成功:


[AMH] Congratulations, AMH 4.2 install completed.
AMH Management: http://123.123.123.123:8888
User:admin
Password:amhpassword
MySQL Password:mysqlpassword

安装完成后你可以通过访问http://公网IP:8888进入amh控制面板,默认的用户名为admin,密码为安装最开始时你输入的控制面板密码。

虽然在之前我们已经做了大量的准备工作,但是在安装过程中,还是不可避免地出现一些问题,当安装过程中出现以下问题时,你可以采取以下解决方法:

1.安装过程中,在Nginx部分可能会出现错误(在安装成功尝试启动nginx时可能也会报错):


Nginx [emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)

这个错误代表80端口被其他程序占用,此错误出现时,nginx不会正常启动,所以也无法通过访问http://ip:8888进入控制面板。

为了解决这个问题,我们需要进入amh的nginx命令行控制选项,在终端中执行:

amh nginx

终端返回:


[AMH] Nginx Management please select: (1~4)
1) start
2) stop
3) restart
4) reload
5) exit

我们先键入2来停止nginx(停止前nginx应该为未启动状态),然后执行:

fuser -k 80/tcp

停止占用80端口的程序,执行成功之后,再次执行amh nginx,键入1启动nginx,当终端提示:[OK] Nginx start 时表示nginx已成功启动,但是小苏还是建议重启云主机然后访问amh控制面板来测试一下是否能够成功打开页面(不出意外的话应该是没问题的)。

2.安装过程中,ssh连接意外中断:
由于amh4.2为编译安装,且只有编译安装这一种方式(在amh5.x版本上,是可以免编译安装amh的,安装速度很快,奈何收费),所以安装时间比较长(20~40分钟)。在等待安装的过程中,ssh必须一直处于连接状态,如果ssh连接意外中断,安装过程也会随之中止。但如果你是按照小苏的流程走下来的,由于我们在安装amh之前已经安装了screen程序,并且我们的整个安装过程都在screen中进行,所以即使ssh连接断开,会话还是会在screen中继续进行的,那么如何恢复断开的会话呢?很简单,只需要在终端中执行:

screen -r

即可恢复原来的会话。

参考资料

将Centos的yum源更换为国内的阿里云源
CentOS使用EPEL源
自用的amh4.2优化版,已升级到php7 - 彩虹博客
AMH 4.2 – 麦葱修改版 [20150526更新] - 麦田一根葱
screen命令 - Linux命令大全
fuser命令 - Linux命令大全