从零开始安装lnmp及部署多站点laravel

前言

网上有很多关于一键安装lnmp的教程,但是在做了一个很小的vps服务器上很多时候会显示内存不足而无法安装,运行内存为1G的vps在一键编译安装lnmp的MySQL是也会出现内存不足而无法安装,今天这里讲的是在线的安装

安装列表:
Ubuntu14.04
Nginx1.4
PHP 7.1.3
MySQL5.7
composer
laravel

个人习惯问题,得到一台新的服务器会先检查及安装 git,vim,gcc,curl.如下

$ apt-get update
$ apt-get install git
$ apt-get install vim
$ apt-get install gcc
$ apt-get install curl
安装准备

首先用SSH连接到你的服务器,我这里是Windows所以用的xshell来连接,在将WinSCP也链接到服务器,服务器没有开21端口的话可以用22端口链接,这里为什么要用WinSCP也连接呢?也是个人的习惯,WinSCP链接上之后配置好默认的自己喜欢的编辑器可以和方便的打开和编写远程服务上的脚本和项目!如果你用了一次WinSCP来打开和编写远程服务器上的项目之后,相信不会爱上这种方式的

安装 Php7.1 之前,要先安装language-pack-en-base这个包,运行:

apt-get install -y language-pack-en-base  

这个包是为了解决系统不同语言之间可能发生的冲突,安装之后可以减少许多因语言编码带来的问题。其中-y参数表明直接安装,无需确认。

安装完成之后,运行:

locale-gen en_US.UTF-8  

设定语言编码为UTF-8

安装php7.1

本教程采用ppa方式安装php7.1,运行:

apt-get install software-properties-common  

software-properties-commonadd-apt-repository所依赖的包,安装成功后,运行:

 LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php  

来添加php7.1ppaLC_ALL=en_US.UTF-8参数告诉我们系统语言为UTF-8

安装完成之后,运行sudo apt-get update更新安装包,把刚才添加的包拉取下来。 运行apt-cache search php7.1搜索php7.1开头的包检验是否安装成功,输出如下:

php-radius - radius client library for PHP
php-http - PECL HTTP module for PHP Extended HTTP Support
php-yaml - YAML-1.1 parser and emitter for PHP
php-mongodb - MongoDB driver for PHP
php-all-dev - package depending on all supported PHP development packages
php-apcu - APC User Cache for PHP
php-xdebug - Xdebug Module for PHP
php-imagick - Provides a wrapper to the ImageMagick library
php-ssh2 - Bindings for the libssh2 library
php-redis - PHP extension for interfacing with Redis
php-memcached - memcached extension module for PHP, uses libmemcached
php-apcu-bc - APCu Backwards Compatibility Module
php-amqp - AMQP extension for PHP
php-rrd - PHP bindings to rrd tool system
php-uuid - PHP UUID extension
php-memcache - memcache extension module for PHP
php-gmagick - Provides a wrapper to the GraphicsMagick library
php-zmq - ZeroMQ messaging bindings for PHP
php-igbinary - igbinary PHP serializer
php-msgpack - PHP extension for interfacing with MessagePack
php-geoip - GeoIP module for PHP
php-tideways - Tideways PHP Profiler Extension
php-yac - YAC (Yet Another Cache) for PHP
php-mailparse - Email message manipulation for PHP
php-libsodium - PHP wrapper for the Sodium cryptographic library
php-oauth - OAuth 1.0 consumer and provider extension
php-gnupg - PHP wrapper around the gpgme library
php-propro - propro module for PHP
php-raphf - raphf module for PHP
php-solr - PHP extension for communicating with Apache Solr server
php-stomp - Streaming Text Oriented Messaging Protocol (STOMP) client module for PHP
php-gearman - PHP wrapper to libgearman
libapache2-mod-php7.1 - server-side, HTML-embedded scripting language (Apache 2 module)
libphp7.1-embed - HTML-embedded scripting language (Embedded SAPI library)
php7.1-cgi - server-side, HTML-embedded scripting language (CGI binary)
php7.1-cli - command-line interpreter for the PHP scripting language
php7.1-dev - Files for PHP7.1 module development
php7.1-fpm - server-side, HTML-embedded scripting language (FPM-CGI binary)
php7.1-phpdbg - server-side, HTML-embedded scripting language (PHPDBG binary)
php7.1-bcmath - Bcmath module for PHP
php7.1-bz2 - bzip2 module for PHP
php7.1-common - documentation, examples and common module for PHP
php7.1-curl - CURL module for PHP
php7.1-dba - DBA module for PHP
php7.1-enchant - Enchant module for PHP
php7.1-gd - GD module for PHP
php7.1-gmp - GMP module for PHP
php7.1-imap - IMAP module for PHP
php7.1-interbase - Interbase module for PHP
php7.1-intl - Internationalisation module for PHP
php7.1-json - JSON module for PHP
php7.1-ldap - LDAP module for PHP
php7.1-mbstring - MBSTRING module for PHP
php7.1-mcrypt - libmcrypt module for PHP
php7.1-mysql - MySQL module for PHP
php7.1-odbc - ODBC module for PHP
php7.1-pgsql - PostgreSQL module for PHP
php7.1-pspell - pspell module for PHP
php7.1-readline - readline module for PHP
php7.1-recode - recode module for PHP
php7.1-snmp - SNMP module for PHP
php7.1-soap - SOAP module for PHP
php7.1-sqlite3 - SQLite3 module for PHP
php7.1-sybase - Sybase module for PHP
php7.1-tidy - tidy module for PHP
php7.1-xml - DOM, SimpleXML, WDDX, XML, and XSL module for PHP
php7.1-xmlrpc - XMLRPC-EPI module for PHP
php7.1-zip - Zip module for PHP
php7.1-opcache - Zend OpCache module for PHP
php7.1 - server-side, HTML-embedded scripting language (metapackage)
php7.1-xsl - XSL module for PHP (dummy)
php-phalcon - full-stack PHP framework delivered as a C-extension
php-ds - PHP extension providing efficient data structures for PHP 7

正式在安装php7.1

apt-get -y install php7.1  

安装成功后运行php -v查看是否安装成功,输出如下信息表示安装成功:

PHP 7.1.3-3+deb.sury.org~trusty+1 (cli) (built: Mar 25 2017 14:24:10) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies
    with Zend OPcache v7.1.3-3+deb.sury.org~trusty+1, Copyright (c) 1999-2017, by Zend Technologies

安装php7.1-mysql,就是 Php7.1 与 mysql 的通信用的:

apt-get -y install php7.1-mysql  

安装 fpm,Nginx 用来解析php文件的:

apt-get install php7.1-fpm  

在安装php必备的扩展

apt-get install php7.1-curl php7.1-xml php7.1-mcrypt php7.1-json php7.1-gd php7.1-mbstring  

以上与php相关的扩展安装完成。

安装Mysql
  1. 下载.deb包到你的服务器:
wget http://dev.mysql.com/get/mysql-apt-config_0.5.3-1_all.deb 
  1. 然后使用dpkg命令添加Mysql的源:
 dpkg -i mysql-apt-config_0.5.3-1_all.deb

在添加源的时候,会叫你选择安装MySQL 哪个应用,这里选择 Server 即可,再选择 MySQL 5.7后又会回到选择应用的那个界面,此时选择 Apply 即可。

  1. 安装
 apt-get update  
apt-get install mysql-server  

安装完成之后运行mysql -V查看版本:

root@ydxred:~# mysql -V 
mysql  Ver 14.14 Distrib 5.7.17, for Linux (x86_64) using  EditLine wrapper
  1. 注意
    如果你已经通过 ppa的方式安装了 MySQL 5.6,首先得去掉这个源
apt-add-repository --remove ppa:ondrej/mysql-5.6  
#如果没有 apt-add-repository 先安装上
 apt-get install software-properties-common
`注意:`运行上3个步骤如果`MySQL`安装不成功的话请运行步骤4在重新运行 `apt-get install mysql-server` 运行中会提示有个包没有通过`mysql-server `的验证,问你是否继续,默认是否也就是 `N`,这里不要默认回车,输入`y`,选择是在回车继续.
  1. 运行查看mysql -u root -p,显示如下则表示成功了..

    从零开始安装lnmp及部署多站点laravel_第1张图片

    安装Nginx

    这给简单,运行如下

    apt-get -y install nginx  
    

    即可,然后运行curl 127.0.0.1查看是否运行成功。你也可以直接访问你的IP地址,如下:

    curl -i 127.0.0.1


    从零开始安装lnmp及部署多站点laravel_第2张图片

    输入域名查看

从零开始安装lnmp及部署多站点laravel_第3张图片
配置
  1. 配置php:

    vim /etc/php/7.1/fpm/php.ini  
    

    输入/cgi.fix_pathinfo=1搜索,将cgi.fix_pathinfo=1注释去掉并改为cgi.fix_pathinfo=0

    从零开始安装lnmp及部署多站点laravel_第4张图片
  2. 编辑fpm的配置文件: 运行:

vim /etc/php/7.1/fpm/pool.d/www.conf  
找到`listen = /run/php/php7.1-fpm.sock`修改为`listen = 127.0.0.1:9000。使用9000`端口。
  1. 配置Nginx:
    为了防止配置出错而改不回来,在修改配置文件之前先复制一份原本的文件,
cp /etc/nginx/sites-available/default  /etc/nginx/sites-available/default1

然后在运行

vim /etc/nginx/sites-available/default  

基本配置如下:

server {  
       #listen 80 default_server;
        listen 80; #端口
       #listen [::]:80 default_server ipv6only=on;

       root /var/www/laravel5.4; #站点目录
       index index.php index.html index.htm; #添加了,index.php,告诉Nginx先解析index.php文件 

       # Make site accessible from http://localhost/
       server_name www.myydx.com; #可以添加自定义域名或者IP地址

       location / {
               # First attempt to serve request as file, then
               # as directory, then fall back to displaying a 404.
               try_files $uri $uri/ /index.php?$query_string; #添加url重定向
               # Uncomment to enable naxsi on this location
               # include /etc/nginx/naxsi.rules
       }
       location ~ \.php$ { #部分告诉Nginx怎么解析Php
               try_files $uri /index.php =404;
               fastcgi_split_path_info ^(.+\.php)(/.+)$;
                               #fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;这个的目录要和fpm的配置文件中的listen一致。这里配置出现错误可以以改成下面这样
               fastcgi_pass 127.0.0.1:9000;
               fastcgi_index index.php;
               fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
               include fastcgi_params;
       }
       location ~ /\.ht {
          deny all;
       }
}

命令确认一下配置文件的正确性 运行nginx -t显示如下表示ok

root@ydxred:/# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
root@ydxred:/# 

  1. 重启Nginxphp

service php7.1-fpm restart
service nginx restart
```

  1. 测试

    新建文件/var/www/laravel5.4/index.php,内容如下:

 

访问http://www.myydx.com/ 查看结果

 ![](http://upload-images.jianshu.io/upload_images/3640880-0a8dfb2f47e94377.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

php的环境搭建成功...

安装composer

参考文档:https://pkg.phpcomposer.com/

下载Composer

命令行并依次执行下列命令安装最新版本的 Composer

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"

执行第一条命令下载下来的 composer-setup.php脚本将简单地检测 php.ini 中的参数设置,如果某些参数未正确设置则会给出警告;然后下载最新版本的 composer.phar 文件到当前目录。

上述 3 条命令的作用依次是:

  • 下载安装脚本 - composer-setup.php - 到当前目录。
  • 执行安装过程。
  • 删除安装脚本。
局部安装

上述下载 Composer的过程正确执行完毕后,可以将composer.phar 文件复制到任意目录(比如项目根目录下),然后通过 php composer.phar 指令即可使用 Composer 了!

全局安装

命令行窗口并执行如下命令将前面下载的composer.phar 文件移动到 /usr/local/bin/目录下面:

mv composer.phar /usr/local/bin/composer

composer config -g repo.packagist composer https://packagist.phpcomposer.com
任意目录下运行composer 输出以下表示成功

从零开始安装lnmp及部署多站点laravel_第5张图片

配置多站点laravel

假如我们需要部署两个网站:

www.mylaravel.com
www.yoularavel.com
  1. 为每个站点创建server block文件
    如上所述,默认情况下Nginx已经配置了一个默认的server block,因此我们可以将默认的server block配置文件拷贝过来稍作修改:
cp /etc/nginx/sites-available/default /etc/nginx/sites-available/mylaravel
cp /etc/nginx/sites-available/default /etc/nginx/sites-available/yoularavel

打开文件vim /etc/nginx/sites-available/mylaravel 配置如下:
```
server {
#listen 80 default_server;
listen 80;
#listen [::]:80 default_server ipv6only=on;

    root /var/www/mylaravel/public; 
    index index.php index.html index.htm; 

    server_name www.mylaravel.com; 

    location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            try_files $uri $uri/ /index.php?$query_string; 
           location
           
    }
    location ~ \.php$ { 
            try_files $uri /index.php =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
                            #fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
            fastcgi_pass 127.0.0.1:9000;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
    }
    location ~ /\.ht {
       deny all;
    }
}
```

第二个站点www.yoularavel.com也做类似修改!

root /var/www/yoularavel/public; 
 server_name www.yoularavel.com; 
  1. 激活两个站点的server block
ln -s /etc/nginx/sites-available/yoularavel /etc/nginx/sites-enabled/
ln -s /etc/nginx/sites-available/mylaravel /etc/nginx/sites-enabled/

这样这些文件(链接)就位于激活的目录内了。到目前为止我们有3个激活了的server block了。服务器根据listen指令和server_name来确定该访问那个目录。

最后然后检查下nginx配置文件的正确性重启nginx:

nginx -t
service nginx restart

  1. 本地测试环境
    由于www.mylaravel.comwww.yoularavel.com这两个域名并非我们真实拥有的域名,因此需要在本地机器修改下hosts来测试访问。
    修改/etc/hosts文件:
 127.0.0.1 localhost
 ....
 XXX.XXX.XXX.XXX www.mylaravel.com
 XXX.XXX.XXX.XXX www.yoularavel.com

XXX.XXX.XXX.XXX表示你服务器的IP地址

  1. 安装laravel (5.4)
    参看文档http://laravelacademy.org/post/6665.html
composer create-project --prefer-dist laravel/laravel mylaravel
composer create-project --prefer-dist laravel/laravel yoularavel

耀眼的安装界面

从零开始安装lnmp及部署多站点laravel_第6张图片

都下载好之后将 /var/www/分配给 Nginx的用户名和用户组 www-data

chown -R www-data:www-data /var/www/

进入mylaravel项目分配权限

cd /var/www/mylaravel
chmod 775 -R storage/
chmod 775 -R vendor/
chmod 775 -R bootstrap/

进入yoularavel项目分配权限

cd /var/www/yoularavel
chmod 775 -R storage/
chmod 775 -R vendor/
chmod 775 -R bootstrap/

重启nginx

service nginx restart

最后分别访问
http://www.mylaravel.com/

从零开始安装lnmp及部署多站点laravel_第7张图片

http://www.yoularavel.com/
从零开始安装lnmp及部署多站点laravel_第8张图片

ok 配置完成...

你可能感兴趣的:(从零开始安装lnmp及部署多站点laravel)