部署社交网站
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了部署社交网站相关的知识,希望对你有一定的参考价值。
部署社交网站
案例概述
公司的社交网站采用php语言开发,为了管理PHP程序员开发的代码,上级领导要求搭建SVN服务器进行版本控制。社交网站的第一个版本部署在LNMP平台上,前端为nginx,通过fastcgi协议访问后端的PHP服务器。为了保证数据安全,要求搭建mysql数据库主从集群。
社交网站包含用户的相册功能,允许用户上传照片,上传照片需要使用共享存储来存放。公司决定使用MFS分布式文件系统,并将MFS挂载到PHP服务器的相关目录下。
案例环境
案例环境要求见下表
主机 | 操作系统 | IP地址 | 主要软件 |
---|---|---|---|
Nginx | CentOS 7 x86_64 | 192.168.58.134 | nginx |
PHP | CentOS 7 x86_64 | 192.168.58.132 | php |
MySQL Master | CentOS 7 x86_64 | 192.168.58.130 | mysql-5.5.24 |
MySQL Slave | CentOS 7 x86_64 | 192.168.58.138 | mysql-5.5.24 |
SVN | CentOS 7 x86_64 | 192.168.58.140 | subversion |
搭建LNMP服务器
部署Nginx服务器
首先安装环境包,依赖包。
[[email protected] opt]# yum -y install pcre-devel zlib-devel
[[email protected] opt]# useradd -M -s /sbin/nologin nginx #添加管理nginx的用户和组
[[email protected] mnt]# tar xf nginx-1.6.0.tar.gz -C /opt/ #将软件包解压到指定目录
[[email protected] opt]# cd nginx-1.6.0/ #到解压目录中
[[email protected] nginx-1.6.0]# ./configure #开始配置
> --prefix=/usr/local/nginx #指定安装目录
> --user=nginx #指定管理用户
> --group=nginx #指定管理组
> --with-http_stub_status_module #开启stub_status状态统计模块
[[email protected] nginx-1.6.0]# make && make install #开始编译和安装
[[email protected] nginx-1.6.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[[email protected] nginx-1.6.0]# nginx #开启nginx服务
#建立软链接,使系统识别nginx命令
到宿主机上访问192.168.58.134,查看访问成功。
修改Nginx配置
这里需要修改nginx配置文件中的fastcgi访问接口,这样才能访问PHP页面。
[[email protected] nginx-1.6.0]# vim /usr/local/nginx/conf/nginx.conf
location ~ .php$ {
root /var/www/html/webphp; #指定PHP服务器站点家目录
fastcgi_pass 192.168.58.132:9000; #指定PHP服务器地址及端口
fastcgi_index index.php;
include fastcgi.conf;
}
重启Nginx服务
部署PHP服务器
安装PHP,并且通过配置php-fpm进程监听9000端口来接受Nginx的请求。首先安装环境包和依赖包。
[[email protected] ~]# yum -y install > gd > libxml2-devel > libjpeg-devel > libpng-devel > zlib-devel > fontconfig-devel > openssl-devel > bzip2-devel
添加php管理进程用户
useradd -M -s /sbin/nologin php
将php-5.4.5软件包解压到指定目录。
[[email protected] mnt]# tar xf php-5.4.5.tar.bz2 -C /opt/
切换至php-5.4.5解压包目录下,进行配置。
[[email protected] mnt]# cd /opt/php-5.4.5
./configure --prefix=/usr/local/php5 #指定安装路径
--with-gd #打开gd库的支持
--with-zlib #开启zlib库的支持
--with-config-file-path=/usr/local/php5 #指定php配置文件所在路径
--enable-mbstring #多字节,字符串的支持
--with-jpeg-dir #开启对jpeg图片的支持
--with-openssl #openssl的支持,加密传输会用到
--disable-ipv6 #关闭ipv6功能
--with-mysql #最后几项都是让php支持mysql模块
--with-mysqli --with-pdo-mysq --enable-fpm
#启用fpm进程
[[email protected] php-5.4.5]# make
#进行编译
不过在编译过程中出现一个错误,如下图,经过研究找到了解决办法。
/opt/php-5.4.5/ext/dom/node.c: 在函数‘dom_canonicalization’中:
/opt/php-5.4.5/ext/dom/node.c:1898:21: 错误:提领指向不完全类型的指针
下面是解决办法,需要打一个patch包。
[[email protected] opt]# curl -o php-5.2.17.patch https://mail.gnome.org/archives/xml/2012-August/txtbgxGXAvz4N.txt
#下载patch包
[[email protected] opt]# ls
php-5.2.17.patch php-5.4.5 rh
[[email protected] opt]# cd php-5.4.5/
[[email protected] php-5.4.5]# patch -p0 -b <../php-5.2.17.patch
#将patch导入到php软件包中。
patching file ext/dom/node.c
patching file ext/dom/documenttype.c
patching file ext/simplexml/simplexml.c
#显示导入成功
[[email protected] php-5.4.5]# make && make install
#重新编译和安装
编译安装成功后,开始修改配置文件和进行一些优化。
[[email protected] php-5.4.5]# cp php.ini-development /usr/local/php5/php.ini
#将配置文件模版复制出来
[[email protected] php-5.4.5]# ln -s /usr/local/php5/bin/* /usr/local/bin/
[[email protected] php-5.4.5]# ln -s /usr/local/php5/sbin/* /usr/local/sbin/
#以上两项都是让系统能够识别php相关命令
为PHP安装加速器。
[[email protected] php-5.4.5]# tar xf /mnt/ZendGuardLoader-php-5.3-linux-glibc23-x86_64.tar.gz -C /opt/
#将加速器解压到指定目录下
[[email protected] php-5.4.5]# cd /opt/ZendGuardLoader-php-5.3-linux-glibc23-x86_64/
[[email protected] ZendGuardLoader-php-5.3-linux-glibc23-x86_64]# cd php-5.3.x/
[[email protected] php-5.3.x]# cp ZendGuardLoader.so /usr/local/php5/lib/php
#将加速器模块放在能够识别的路径下
[[email protected] php-5.3.x]#
配置PHP识别加速器。
[[email protected] php-5.3.x]# vim /usr/local/php5/php.ini
[Zend Guard Loader]
zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so
zend_loader.enable=1
#将这段话加入到php.ini配置文件中
开启nginx的php-fpm支持。
[[email protected] php-5.3.x]# cd /usr/local/php5/etc/
[[email protected] etc]# cp php-fpm.conf.default php-fpm.conf
[[email protected] etc]# vim php-fpm.conf #修改配置文件的相关参数
pid = run/php-fpm.pid
user = php
group = php
pm.max_children=50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
listen = 0.0.0.0:9000
#监听端口修改下,监听所有ip,如果只是127.0.0.1,那么php服务器无法监听到nginx服务器
启动php-fpm进程,查看9000端口开启。
[[email protected] etc]# /usr/local/sbin/php-fpm
[[email protected] etc]# netstat -ntap | grep 9000 #9000端口已经开启
tcp 0 0 0.0.0.0:9000 0.0.0.0:* LISTEN 38234/php-fpm: mast
刚才我们在nginx配置文件中,配置的php服务器站点,我们需要去创建站点目录即index.php。
[[email protected] etc]# mkdir -p /var/www/html/webphp
#创建站点目录
[[email protected] etc]# cd /var/www/html/webphp/
[[email protected] webphp]# echo "123">index.php
#创建站点首页
测试,访问192.168.58.134/index.php,可以看到php站点首页。
部署MySQL服务器
安装MySQL依赖包和环境包。
[[email protected] ~]# yum -y install ncurses-devel cmake
#ncurses是字符终端下屏幕控制的基本库
将软件包解压到指定目录并配置
[[email protected] ~]# cd /mnt/
[[email protected] mnt]# tar xf mysql-5.5.24.tar.gz -C /opt/
[[email protected] mnt]# cd /opt/mysql-5.5.24/
[[email protected] mysql-5.5.24]# cmake > -DCMAKE_INSTALL_PREFIX=/usr/local/mysql > -DDEFAULT_CHARSET=utf8 > -DDEFAULT_COLLATION=utf8_general_ci > -DWITH_EXTRA_CHARSETS=all > -DSYSCONFDIR=/etc > -DMYSQL_DATADIR=/home/mysql/ > -DMYSQL_UNIX_ADDR=/home/mysql/mysql.sock > -DWITH_MYISAM_STORAGE_ENGINE=1 > -DWITH_INNOBASE_STORAGE_ENGINE=1 > -DWITH_ARCHIVE_STORAGE_ENGINE=1 > -DWITH_BLACKHOLE_STORAGE_ENGINE=1 > -DENABLED_LOCAL_INFILE=1 > -DWITH_SSL=system > -DMYSQL_TCP_PORT=3306 > -DENABLE_DOWNLOADS=1 > -DWITH_SSL=bundled
[[email protected] mysql-5.5.24]# make && make install
#编译后安装
编译安装完后进行优化。
[[email protected] mysql-5.5.24]# cp support-files/my-medium.cnf /etc/my.cnf
#复制配置文件到/etc中
cp:是否覆盖"/etc/my.cnf"? y
[[email protected] mysql-5.5.24]# cp support-files/mysql.server /etc/init.d/mysqld
#方便mysqld被service服务管理
[[email protected] mysql-5.5.24]# echo "PATH=$PATH:/usr/local/mysql/bin/" >> /etc/profile
#更改环境变量
[[email protected] mysql-5.5.24]# source /etc/profile
#使环境变量文件刷新生效
[[email protected] mysql-5.5.24]# useradd -s /sbin/nologin mysql
#添加mysql服务用户
[[email protected] mysql-5.5.24]# chown -R mysql.mysql /usr/local/mysql
#更改主文件夹的属主和属组
初始化mysql。
[[email protected] mysql-5.5.24]# /usr/local/mysql/scripts/mysql_install_db > --user=mysql > --ldata=/var/lib/mysql > --basedir=/usr/local/mysql
将mysql.sock文件建立软链接
[[email protected] mysql-5.5.24]# ln -s /var/lib/mysql/mysql.sock /home/mysql/mysql.sock
修改mysql启动脚本文件。
[[email protected] mysql-5.5.24]# vim /etc/init.d/mysqld
basedir=/usr/local/mysql
datadir=/home/mysql
[[email protected] mysql-5.5.24]# chmod +x /etc/init.d/mysqld
[[email protected] mysql-5.5.24]# service mysqld start
Starting MySQL.. SUCCESS!
[[email protected] mysql-5.5.24]# netstat -ntap | grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 13702/mysqld
#启动成功
创建mysql的root用户。
[[email protected] mysql-5.5.24]# mysqladmin -u root -p password ‘abc123‘
[[email protected] mysql-5.5.24]# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or g.
Your MySQL connection id is 2
Server version: 5.5.24 Source distribution
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type ‘help;‘ or ‘h‘ for help. Type ‘c‘ to clear the current input statement.
#登录成功
部署MySQL主从数据库
修改MySQL主服务器(192.168.58.130)配置文件。
[[email protected] mysql-5.5.24]# vim /etc/my.cnf
server-id = 11
#server-id主从服务器不能一样
log-bin=master-bin #主服务器日志文件
log-slave-updates=true #从服务器更新二进制日志
[[email protected] mysql-5.5.24]# service mysqld restart
Shutting down MySQL. SUCCESS!
Starting MySQL.. SUCCESS!
#重启数据库
[[email protected] mysql-5.5.24]# mysql -u root -p
Enter password:
#登录数据库
MySQL [(none)]> GRANT REPLICATION SLAVE ON *.* TO ‘myslave‘@‘192.168.58.%‘ IDENTIFIED BY ‘123456‘;
Query OK, 0 rows affected (0.06 sec)
#授权给192.168.58.0网段的服务器同步权限
MySQL [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
#刷新权限
MySQL [(none)]> show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 | 338 | | |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
#这两个值很重要,下面要用到
修改MySQL从服务器配置文件
[[email protected] ~]# vim /etc/my.cnf
server-id = 12
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
[[email protected] ~]# service mysqld restart
ERROR! MySQL server process #62735 is not running!
Starting MySQL........ SUCCESS!
#重启数据库
[[email protected] ~]# mysql -u root -p
Enter password:
mysql> change master to master_host=‘192.168.58.130‘,master_user=‘myslave‘,master_password=‘123456‘,master_log_file=‘master-bin.000001‘,master_log_pos=338
#指定主服务器,登录账号和密码,同步文件和文件偏移量
mysql> start slave;
Query OK, 0 rows affected (0.28 sec)
#开启slave同步功能
mysql> show slave statusG;
可以看到主从同步成功,做个验证在主数据库上创建friend数据库,在从数据库上也自动生成。
部署SVN服务器
安装SVN服务
[[email protected] ~]# yum install subversion -y #通过yum仓库安装
[[email protected] ~]# svnserve --version #查看版本信息
svnserve,版本 1.7.14 (r1542130)
编译于 Apr 11 2018,02:40:28
创建仓库目录repo
[[email protected] ~]# mkdir -p /opt/svn/repo #创建一个目录
[[email protected] ~]# svnadmin create /opt/svn/repo/ #将这个目录作为仓库
[[email protected] ~]# cd /opt/svn/repo/
[[email protected] repo]# ls #查看仓库目录下的文件
conf db format hooks locks README.txt
配置svnserve.conf文件
[[email protected] repo]# vim /opt/svn/repo/conf/svnserve.conf
anon-access = none #匿名用户u没有任何权限
auth-access = write #认证用户具有写的权限
password-db =/opt/svn/repo/conf/passwd #用户的密码文件
authz-db =/opt/svn/repo/conf/authz #用户的信息文件
配置passwd文件
[[email protected] repo]# vim /opt/svn/repo/conf/passwd
[users]
# harry = harryssecret
# sally = sallyssecret
alpha=abc123 #格式:用户名=密码
配置authz文件
[[email protected] repo]# vim /opt/svn/repo/conf/authz
[/]
alpha = r #在/opt/svn/repo目录下有读取权限
[/webphp]
alpha = rw #对于webphp木有有读写权限,用于上传下载代码
启动SVN服务
[[email protected] repo]# svnserve -d -r /opt/svn/repo/ #关闭通过kill‘进程
[[email protected] repo]# netstat -ntap | grep svn*
tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 3566/svnserve
导入webphp文件夹
[[email protected] repo]# cd webphp/
[[email protected] webphp]# ls
[[email protected] webphp]# touch 123.txt 234.txt
[[email protected] webphp]# svn import webphp file:///opt/svn/repo/webphp -m "initial"
#初始化webphp目录
测试svn服务
这时候我们切换到nginx服务器的/usr/local/nginx/html/webphp目录下将svn服务器中更新内容下载下来
[[email protected] ~]# yum install subversion -y #安装subversion
[[email protected] html]# svn co svn://192.168.58.140/webphp #将svn服务器的webphp目录下载下来
认证领域: <svn://192.168.58.140:3690> 07d793c7-c030-4485-8f7a-f531171e80ca
“root”的密码:
认证领域: <svn://192.168.58.140:3690> 07d793c7-c030-4485-8f7a-f531171e80ca
用户名: alpha
“alpha”的密码:
-----------------------------------------------------------------------
注意! 你的密码,对于认证域:
<svn://192.168.58.140:3690> 07d793c7-c030-4485-8f7a-f531171e80ca
只能明文保存在磁盘上! 如果可能的话,请考虑配置你的系统,让 Subversion
可以保存加密后的密码。请参阅文档以获得详细信息。
你可以通过在“/root/.subversion/servers”中设置选项“store-plaintext-passwords”为“yes”或“no”,
来避免再次出现此警告。
-----------------------------------------------------------------------
保存未加密的密码(yes/no)?yes
A webphp/555.txt
A webphp/1
A webphp/2
A webphp/3
A webphp/123.txt
A webphp/4
A webphp/234.txt
取出版本 4。
[[email protected] html]# ls
50x.html index.html webphp
[[email protected] html]# cd webphp/
[[email protected] webphp]# ls
1 123.txt 2 234.txt 3 4 555.txt
可以看到将webphp仓库中的内容都同步到nginx服务器的指定路径下了。
以上是关于部署社交网站的主要内容,如果未能解决你的问题,请参考以下文章