vm 安装Ubantu 并搭建PHP运行环境笔记(二)

搭建php7.1+nginx+mongodb3.2线上环境

准备

先更新本机内置的程序。

sudo apt-get update sudo apt-get upgrade

再判断系统是否内置了add-apt-repository命令,如果没有执行下列命令安装

sudo apt-get install software-properties-common

git

安装一下git程序,很多地方会用到

sudo apt-get install git

设置一下自己的git名字和邮箱

git config --global user.name "你的名字或昵称"git config --global user.email "你的邮箱"

php

添加最新php的源,然后安装php

sudo add-apt-repository ppa:ondrej/php sudo apt-get update sudo apt-get install php7.1 php7.1-common php7.1-fpm php7.1-dev sudo apt-get install php7.1-mbstring php7.1-xml

安装结束之后就可以执行php -i命令查看到php-cli的信息 

不过要配合nginx的话,需要用php-fpm来管理php的进程。

service php7.1-fpm start service php7.1-fpm stop service php7.1-fpm restart

php -v

关于php5.4--php5.6版本

sudo apt-get install python-software-properties sudo add-apt-repository ppa:ondrej/php sudo apt-get update sudo apt-get -y install php5.6 php5.6-mcrypt php5.6-mbstring php5.6-curl php5.6-cli php5.6-mysql php5.6-gd php5.6-intl php5.6-xsl php5.6-zip

nginx

直接安装nginx

sudo apt-get install nginx

nginx的操作命令如下:

service nginx start service nginx stop service nginx restart

查看nginx使用的config配置文件或者软重启的命令是

nginx -t nginx -s reload

sudo service nginx -s reload

一般配置文件在/etc/nginx目录下。

全局配置

修改nginx配置解析php

cd /etc/nginx/sites-enabled

sudo vim default

找到location 添加以下

  location ~ \.php$ {        fastcgi_split_path_info ^(.+\.php)(/.+)$;        fastcgi_pass unix:/run/php/php7.1-fpm.sock;        fastcgi_index index.php;        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;        include fastcgi_params;    }

或者还可以设置站点

设置站点

不过要配置一个新的网站,不需要在nginx.conf里添加,只需要在sites-enabled文件夹下加一个对应文件即可(文件名随意)

cd /etc/nginx/sites-enabled touch demo

上面的demo文件是随便命名,用vi打开

vim demo

然后添加下面的内容

server {    listen 80;    server_name demo.com;    root /home/www/demo/public;    index index.html index.htm index.php;    location / {        try_files $uri $uri/ /index.php?$query_string;    }    location ~ \.php$ {        fastcgi_split_path_info ^(.+\.php)(/.+)$;        fastcgi_pass unix:/run/php/php7.1-fpm.sock;        fastcgi_index index.php;        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;        include fastcgi_params;    } }

解释一下上面的配置:

  1. 独立的一个服务器配置需要用server{}包裹起来

  2. listen 80表示监听80端口,也就是http访问的默认端口,其它端口在浏览器上需要输入端口号。

  3. server_name表示绑定的是哪个域名。

  4. root表示该域名访问到路径对应的实际文件夹

  5. index表示域名的path为空的时候对应访问哪个文件,默认都是index.html、index.htm和index.php

  6. location /这里是对所有路径做路由重写,里面的try_files $uri $uri/ /index.php?$query_string;是laravel框架的路径重写配置。

  7. location ~ \.php$是指访问所有后缀名带.php的路径时候,需要执行的操作,这里也就是配置php的fastcgi

  8. fastcgi里的最重要部分是fastcgi_pass,它代表nginx服务器如何与php通信,这里的unix:/run/php/php7.1-fpm.sock;是php7.1-fpm启动后生成的套接字文件,可以和nginx通信。

mongodb

导入mongodb的公钥

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv EA312927

看一下自己的系统版本是多少

cat lsb-release | grep 'description' -i

如果是16.x的话执行

echo "deb http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list

如果是15或者是14的话执行

echo "deb http://repo.mongodb.org/apt/ubuntu trusty/mongodb-org/3.2 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.2.list

安装mongodb

sudo apt-get update sudo apt-get install -y mongodb-org mongodb-org-server mongodb-org-shell mongodb-org-mongos mongodb-org-tools

安装结束之后就能使用mongodb的server和本地shell了,不过先要配置一下。 

默认配置文件是/etc/mongod.conf

storage:  dbPath: /var/lib/mongodb  journal:    enabled: true systemLog:  destination: file  logAppend: true  path: /var/log/mongodb/mongod.log net:  port: 27017  bindIp: 0.0.0.0#security:  #authorization: 'enabled'

这里的配置解释如下:

  1. storage代表数据库存储在硬盘的地方,所以dbPath这个路径需要注意权限设置,让mongdb有权限可读可写。

  2. systemLog代表的是mongodb日志存放配置。

  3. net下的port代表mongodb的访问端口,默认是27017,bindIp如果不设置0.0.0.0,那么非本机无法访问。

  4. security和它下面的都加了#号注释掉,这个是开启用户名和密码验证,暂时不开启。

mongodb的操作命令如下:

service start mongod service stop mongod service restart mongod

先启动mongod,然后输入mongo命令看是否能连接到本机mongodb服务器,如果不能,表示mongodb server没有正常启动,注意排查dbPath等路径的权限,例如可以设置数据库文件的owner

sudo chown -R mongodb:mongodb /var/lib/mongodb

首先重启mongo

mongo命令启动shell之后,可以设置一下数据库的用户名密码 

创建root级的超级用户,用户名密码可更改

use admin db.createUser({    user: "root",    pwd: "admin",    roles: [ { role: "__system", db: "admin" } ] })

root级别的超级用户一般不会直接使用,针对单个数据库级别的管理员更实用。 

假设数据库名为demo,那么创建一个demo的管理员

use demo db.createUser({    user: "demo",    pwd: "admin",    roles: [ { role: "dbOwner", db: "demo" } ] })

配置完毕之后可以用

db.auth("demo","admin")

来验证一下是否设置成功,返回1就是成功

然后再编辑/etc/mongod.conf文件,删除掉

#security:  #authorization: 'enabled'

之前的两个#号,service mongod restart之后,安全用户配置成功。

php扩展

ubuntu源里没有php7.1-mongodb,所以需要自己安装

sudo pecl install mongodb

会报错未找到openssl

先安装openssl

sudo apt-get install openssl

解决办法:

        root@test2:~/php-5.3.27# find / -name libssl.so

      输出结果为: /usr/lib/x86_64-linux-gnu/libssl.so

 

   初步判断它可能只会在 /usr/lib/ 下寻找 libssl.so 文件,于是:

    ln -s /usr/lib/x86_64-linux-gnu/libssl.so  /usr/lib

可能(检查是否已安装openssl:

sudo apt-get install openssl

如果已安装执行以下操作:

sudo apt-get install libssl-dev

sudo apt-get install libssl0.9.8

Ubuntu 下安装 GTK+ 开发库

sudo apt-get install libgtk2.0-dev)

这里的pecl命令是安装php7.1-dev的时候带来的。

扩展会自动下载并安装,不过开启扩展需要手动添加一下。 

php-cli的配置文件在/etc/php/7.1/cli/php.ini 

php-fpm的配置文件路径和php-cli不同,/etc/php/7.1/fpm/php.ini

\\echo "\nextension=mongodb.so" | sudo tee /etc/php/7.1/cli/php.ini \\echo "\nextension=mongodb.so" | sudo tee /etc/php/7.1/fpm/php.ini

echo "extension=mongodb.so" | sudo tee /etc/php/7.1/cli/php.ini echo "extension=mongodb.so" | sudo tee /etc/php/7.1/fpm/php.ini

此时再重启php-fpm,就可以正常看到phpinfo里有mongodb了。

composer

直接用php下载并安装composer

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"php -r "if (hash_file('SHA384', 'composer-setup.php') === 'e115a8dc7871f15d853148a7fbac7da27d6c0030b848d9b3dc09e2a0388afed865e6a3d6b3c0fad45c48e2b5fc1196ae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"php composer-setup.php --install-dir=/usr/sbin --filename=composer php -r "unlink('composer-setup.php');"

安装结束后输入composer检查是否安装成功,其中安装地址指定为/usr/sbin,也可以设置为其它地方。

项目代码

直接通过git clone https……下拉代码。

如果是laravel项目,需要进入项目之后,composer install一下。 

并且配置好.env文件的环境,写上数据库账号和密码。

项目的完整路径要在nginx的/etc/nginx/sites-enabled/demo里写上,并加上自己想要访问的域名。

结束之后软重启nginx

nginx -s reload

项目已经可以线上访问了。

开机自动启动

可以通过修改 /etc/rc.local文件来管理启动项。

service mongodb start service php7.1-fpm start service nginx start

Ubuntu 16.04 安装 Redis

Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的API。

本帖记录在 Ubuntu 16.04 上安装配置 Redis 的步骤。

Redis 默认在 Ubuntu 的仓库中,可以使用apt安装:

1

$ sudo apt install redis-server

但是仓库中并不是最新版,为了使用最新的Redis,我从源代码编译安装。

首先,安装基本的编译工具:

1

$ sudo apt install build-essential tcl

1)下载Redis源代码:

sudo apt-get install curl

sudo apt-get install tcl

1

2

$ cd /tmp

$ curl -O http://download.redis.io/redis-stable.tar.gz

2)解压tar包:

1

$ tar xzvf redis-stable.tar.gz

3)编译安装:

1

2

3

4

$ cd redis-stable

$ make

$ make test

$ sudo make install

4)配置Redis:

创建Redis配置目录 /etc/redis:

1

$ sudo mkdir /etc/redis

拷贝配置文件:

1

$ sudo cp /tmp/redis-stable/redis.conf /etc/redis

编辑配置文件:

1

$ sudo vim /etc/redis/redis.conf

找到supervised一行,把no改为systemd:

1

supervised systemd

Ubuntu 16.04 安装 Redis

找到dir一行,配置数据库的保存目录:

1

dir /var/lib/redis

Ubuntu 16.04 安装 Redis

保存退出。

5)创建systemd Unit文件:

把Redis配置成系统服务。

创建redis.service文件:

1

$ sudo vim /etc/systemd/system/redis.service

写入如下内容:

1

2

3

4

5

6

7

8

9

10

11

12

13

[Unit]

Description=Redis In-Memory Data Store

After=network.target

[Service]

User=redis

Group=redis

ExecStart=/usr/local/bin/redis-server /etc/redis/redis.conf

ExecStop=/usr/local/bin/redis-cli shutdown

Restart=always

[Install]

WantedBy=multi-user.target

保存退出文件。

6)创建redis用户、组和目录:

创建redis用户和组:

1

$ sudo adduser --system --group --no-create-home redis

创建数据库目录,对应上面的配置:

1

2

3

$ sudo mkdir /var/lib/redis

$ sudo chown redis:redis /var/lib/redis

$ sudo chmod 770 /var/lib/redis

7)启动Redis服务:

1

2

$ sudo systemctl start redis

$ sudo systemctl enable redis

Ubuntu 16.04 安装 Redis

重启服务:

1

$ sudo systemctl restart redis

8)测试:

使用命令行客户端连接Redis服务:

1

$ redis-cli

测试连通状态:

设置key – value:

设置Redis认证密码

不需要密码,直接可操作

为了安全我要为Redis数据库设置密码。

# 设置Redis认证密码

编辑配置文件:

将bind 127.0.0.1改为bind 0.0.0.0不限制访问

1

sudo vim /etc/redis/redis.conf

找到如下一行:

1

# requirepass foobared

去掉#号注释,把foobared替换为密码。

例如我要把密码设置为test1234:

1

requirepass test1234

设置Redis认证密码

重启redis服务:

1

sudo systemctl restart redis

# 测试

设置Redis认证密码

Share the post "设置Redis认证密码"

Ubuntu 16.04环境中安装PHP7.0 Redis扩展

安装php7.0 Redis扩展

cd /tmp

安装配置步骤如下:

1.root@ubuntu:/tmp# git clone -b php7 https://github.com/phpredis/phpredis.git

可能没有预先安装git,只需要按照提示安装即可。

2.root@ubuntu:/tmp#sudo mv phpredis/ /etc/

3.root@ubuntu:/tmp#  cd /etc/phpredis

4.root@ubuntu://etc/phpredisphpize

5.root@ubuntu://etc/phpredis# ./configure

6.root@ubuntu://etc/phpredis#make

6.root@ubuntu://etc/phpredis#make test

6.root@ubuntu://etc/phpredis#sudo make install

7.root@ubuntu://etc/phpredis#vi /etc/PHP/7.0/fpm/conf.d/redis.ini  中 写入(extension=/etc/phpredis/modules/redis.so)退出保存。此操作需要先创建fpm/conf.d/文件夹。

zyf@ubuntu:~$ sudo vim /etc/php/7.1/fpm/conf.d/20-redis.ini

zyf@ubuntu:~$ sudo vim /etc/php/7.1/cli/conf.d/20-redis.ini

zyf@ubuntu:~$ sudo vim /etc/php/7.1/mods-available/conf.d/20-redis.ini

9. 重启 sudo service nginx restart

sudo service php7.1-fpm restart

安装过程中可能出现其他提示,只要按着提示做就行。

最后建一个test.php

  1. <?php  

  2. echo phpinfo();  

  3. ?>  

通过浏览器访问,如果出现以下图,图中含有redis的说明,则说明安装成功

二、使用php去访问redis

  派生到我的代码片

  1. <?php  

  2.   

  3. //连接本地Redis服务  

  4. $redis=new Redis();  

  5. $redis->connect('localhost','6379'); //$redis->auth('admin123');//如果设置了密码,添加此行  

  6. //查看服务是否运行  

  7. $redis->ping();  

  8.   

  9. //选择数据库  

  10. $redis->select(5);  

  11.  

  12. //设置数据  

  13. $redis->set('school','WuRuan');  

  14. //设置多个数据  

  15. $redis->mset(array('name'=>'jack','age'=>24,'height'=>'1.78'));  

  16.   

  17. //存储数据到列表中  

  18. $redis->lpush("tutorial-list""Redis");  

  19. $redis->lpush("tutorial-list""Mongodb");  

  20. $redis->lpush("tutorial-list""Mysql");  

  21.   

  22. //获取存储数据并输出  

  23. echo $redis->get('school');  

  24.   

  25. echo '
    '
    ;  

  26.   

  27. $gets=$redis->mget(array('name','age','height'));  

  28. var_dump($gets);  

  29.   

  30. echo '
    '
    ;  

  31.   

  32. $tl=$redis->lrange("tutorial-list", 0 ,5);  

  33. var_dump($tl);  

  34. ?>  

运行效果如图:


004005449769.png