单节点服务架构(论坛小实验)

LNMP架构:
  • L:Linux系统
  • N:nginx,负责处理静态页面以及转发动态请求
  • M:mysql数据库,是作为后端服务器保存用户和密码信息,以及论坛的信息
  • P:php,负责处理和转发动态请求

流程简述:

  • 如果用户发送的是静态请求,nginx会自己处理完,并响应给用户
  • 如果用户发送的是动态请求,nginx会将请求转发给php,如果这个请求不涉及后端服务器,那么php会自己处理完动态请求后将响应结果发给nginx,nginx再转发给用户
  • 如果用户发送的是动态请求,nginx会将请求转发给php,如果这个请求涉及了后端服务器,在这里是mysql数据库,那么php会将请求转发给mysql,mysql将响应结果发给php,php再转发给nginx,nginx再转发给用户

实验:用LNMP架构搭建一个论坛

     0. 在开始前请先确保虚拟机有8G以上内存,4核以上的处理器,这是为了编译起来快一点,另外最好把防火墙关了

  1. 先安装nginx服务
    1. 安装依赖包:
      yum -y install pcre-devel zlib-devel gcc gcc-c++ make
    2. 创建一个运行用户:
      useradd -M -s /sbin/nologin nginx
      
    3. 解压:
      tar zxvf /opt/nginx-1.22.0.tar.gz
    4. 配置:
      cd /opt/nginx-1.22.0/
      ./configure \
      --prefix=/usr/local/nginx \
      --user=nginx \
      --group=nginx \
      --with-http_stub_status_module
      
    5. 编译安装:
      make && make install
    6. 优化路径:
      ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
    7. 添加nginx系统服务:
      vim /lib/systemd/system/nginx.service
      [Unit]
      Description=nginx
      After=network.target
      [Service]
      Type=forking
      PIDFile=/usr/local/nginx/logs/nginx.pid
      ExecStart=/usr/local/nginx/sbin/nginx
      ExecReload=/bin/kill -s HUP $MAINPID
      ExecStop=/bin/kill -s QUIT $MAINPID
      PrivateTmp=true
      [Install]
      WantedBy=multi-user.target
    8. 启动服务:
      systemctl start nginx.service
      systemctl enable nginx.service
  2. 安装mysql服务
    1. 安装依赖包:
      yum -y install \
      ncurses \
      ncurses-devel \
      bison \
      cmake
    2. 创建一个运行用户:
      useradd -M -s /sbin/nologin  mysql
    3. 解压:
      tar zxvf /opt/mysql-boost-5.7.20.tar.gz
    4. 配置:
      cd /opt/mysql-5.7.20/
      cmake \
      -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
      -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
      -DSYSCONFDIR=/etc \
      -DSYSTEMD_PID_DIR=/usr/local/mysql \
      -DDEFAULT_CHARSET=utf8  \
      -DDEFAULT_COLLATION=utf8_general_ci \
      -DWITH_EXTRA_CHARSETS=all \
      -DWITH_INNOBASE_STORAGE_ENGINE=1 \
      -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
      -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
      -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
      -DMYSQL_DATADIR=/usr/local/mysql/data \
      -DWITH_BOOST=boost \
      -DWITH_SYSTEMD=1
      #指定安装路径
      -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
      #指定mysql进程监听的套接字文件(数据库连接文件)的存储路径
      -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
      #指定配置文件的存储路径
      -DSYSCONFDIR=/etc \
      #指定进程文件的存储路径
      -DSYSTEMD_PID_DIR=/usr/local/mysql \
      #指定默认使用的字符集编码
      -DDEFAULT_CHARSET=utf8  \
      #指定默认使用的字符集校对规则
      -DDEFAULT_COLLATION=utf8_general_ci \
      -DWITH_EXTRA_CHARSETS=all \
      #安装INNOBASE存储引擎
      -DWITH_INNOBASE_STORAGE_ENGINE=1 \
      #安装ARCHIVE存储引擎
      -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
      #安装BLACKHOLE存储引擎
      -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
      #安装PREFSCHEMA存储引擎
      -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
      #指定数据库文件的存储路径
      -DMYSQL_DATADIR=/usr/local/mysql/data \
      #指定boost的路径
      -DWITH_BOOST=boost \
      -DWITH_SYSTEMD=1
      
    5. 编译安装:
      #4核编译安装,会快很多,但请不要超过自己的虚拟机核数
      make -j 4 && make install
    6. 修改mysql配置文件:
      vim /etc/my.cnf
      [client]
      port = 3306
      socket=/usr/local/mysql/mysql.sock
      
      [mysqld]
      user = mysql
      basedir=/usr/local/mysql
      datadir=/usr/local/mysql/data
      port = 3306
      character-set-server=utf8
      pid-file = /usr/local/mysql/mysqld.pid
      socket=/usr/local/mysql/mysql.sock
      bind-address = 0.0.0.0
      skip-name-resolve
      max_connections=2048
      default-storage-engine=INNODB
      max_allowed_packet=16M
      server-id = 1
      
      sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES

      部分解释:

      #客户端的配置
      [client]
      #端口号3306
      port = 3306
      #客户端连接mysql服务器使用的socket文件路径
      socket=/usr/local/mysql/mysql.sock
      
      #服务端配置
      [mysqld]
      #用户名
      user = mysql
      #mysql安装目录
      basedir=/usr/local/mysql
      #mysql数据文件的路径
      datadir=/usr/local/mysql/data
      #mysql服务监听的端口
      port = 3306
      #使用的字符集
      character-set-server=utf8
      #保存mysql服务器进程id的文件路径
      pid-file = /usr/local/mysql/mysqld.pid
      #mysql服务器监听的socket文件路径
      socket=/usr/local/mysql/mysql.sock
      #MySQL服务器绑定的IP地址,0.0.0.0表示允许任何IP地址访问MySQL服务器
      bind-address = 0.0.0.0
      #禁用DNS反向解析,可以提高性能
      skip-name-resolve
      #MySQL服务器支持的最大并发连接数
      max_connections=2048
      #设置默认的存储引擎为InnoDB
      default-storage-engine=INNODB
      #MySQL服务器接收的最大数据包大小
      max_allowed_packet=16M
      #设置MySQL服务器的唯一ID,在主从复制设置中使用
      server-id = 1
      
      sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
    7. 更改mysql安装目录和配置文件的属主属组:
      chown -R mysql:mysql /usr/local/mysql/
      chown mysql:mysql /etc/my.cnf
    8. 设置路径环境变量:
      echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile	
      
      #使配置生效
      source /etc/profile
      
    9. 初始化数据库:
      cd /usr/local/mysql/bin/
      ./mysqld \
      --initialize-insecure \
      --user=mysql \
      --basedir=/usr/local/mysql \
      --datadir=/usr/local/mysql/data
    10. 添加mysqld系统服务:
      cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
      systemctl daemon-reload
      systemctl start mysqld.service
      systemctl enable mysqld
    11. 修改mysql 的登录密码:
      mysqladmin -u root -p password "123456"

    12. 授权远程登录:

      详解:grant all privileges on *.* to 'root'@'%' identified by '123456';
      grant:授权语句的关键字
      all privileges:授予所有权限(权限指增删改查等)
      *.*:第一个*代表任意数据库,填具体的数据库也可以,第二个*表示任意表,填具体表也可以,这就代表用户在所有数据库的所有表上都有权限
      'root'@'%':指定的用户为root,%表示任意主机,这句就表示root用户可以从任何主机连接
      identified by '123456':设置密码为123456,远程连接的密码
  3. 安装PHP
    1. 安装依赖环境:
      yum -y install gd \
      libjpeg libjpeg-devel \
      libpng libpng-devel \
      freetype freetype-devel \
      libxml2 libxml2-devel \
      zlib zlib-devel \
      curl curl-devel \
      openssl openssl-devel
    2. 解压:
      tar jxvf /opt/php-7.1.10.tar.bz2
    3. 配置:
      cd /opt/php-7.1.10
      ./configure \
      --prefix=/usr/local/php \
      --with-mysql-sock=/usr/local/mysql/mysql.sock \
      --with-mysqli \
      --with-zlib \
      --with-curl \
      --with-gd \
      --with-jpeg-dir \
      --with-png-dir \
      --with-freetype-dir \
      --with-openssl \
      --enable-fpm \
      --enable-mbstring \
      --enable-xml \
      --enable-session \
      --enable-ftp \
      --enable-pdo \
      --enable-tokenizer \
      --enable-zip

      解释:

      ./configure \
      #指定安装目录
      --prefix=/usr/local/php \
      #指定mysql的socket文件路径,用于与mysql建立连接
      --with-mysql-sock=/usr/local/mysql/mysql.sock \
      #启用mysqli扩展
      --with-mysqli \
      #启用zlib库,用于压缩和解压数据
      --with-zlib \
      #启用curl库,用于支持对url操作
      --with-curl \
      #启用GD库,用于处理图像
      --with-gd \
      #指定JPEG库的路径,用于GD库对JPEG格式图片的处理
      --with-jpeg-dir \
      #指定PNG库的路径,用于GD库对PNG格式图片的处理
      --with-png-dir \
      #指定FreeType库的路径,用于GD库对字体的支持
      --with-freetype-dir \
      #启用OpenSSL库,用于支持SSL加密和HTTPS协议
      --with-openssl \
      #启用PHP-FPM(FastCGI Process Manager),用于提供更高效的PHP进程管理和请求处理
      --enable-fpm \
      #启用多字节字符串支持,用于处理多字节字符集的操作
      --enable-mbstring \
      #启用XML支持,用于处理XML文档和数据
      --enable-xml \
      #启用会话支持,用于在不同页面间保持用户会话状态
      --enable-session \
      #启用FTP支持,用于对FTP服务器进行操作
      --enable-ftp \
      #启用PDO(PHP Data Objects),用于支持数据库访问的统一接口
      --enable-pdo \
      #启用Tokenizer扩展,用于对字符串进行分词处理
      --enable-tokenizer \
      #启用Zip扩展,用于对ZIP文件进行操作
      --enable-zip
    4. 编译安装:
      make -j 4 && make install
    5. 路径优化:
      ln -s /usr/local/php/bin/* /usr/local/bin/
      ln -s /usr/local/php/sbin/* /usr/local/sbin/
    6. 修改PHP主配置文件:php.ini
      先把php自带的模板文件复制过来:
      cp /opt/php-7.1.10/php.ini-development /usr/local/php/lib/php.ini

      进入配置文件修改:

    7. 修改进程服务配置文件:php-fpm.conf
      先将默认模板文件复制过来:
      cd /usr/local/php/etc/
      cp  php-fpm.conf.default php-fpm.conf

      进入配置文件修改:

    8. 修改扩展配置文件:www.conf
      复制默认模板文件:
      cd /usr/local/php/etc/php-fpm.d/
      cp www.conf.default www.conf
    9. 启动php-fpm:
      /usr/local/php/sbin/php-fpm -c /usr/local/php/lib/php.ini

      可以用 netstat -anpt | grep 9000 检查一下是否开启成功:

    10. 启动服务:
      cd /opt/php-7.1.10/sapi/fpm
      cp php-fpm.service /usr/lib/systemd/system/php-fpm.service
      systemctl restart php-fpm.service
  4. 配置nginx,使其支持php
    1. 修改 /usr/local/nginx/conf/nginx.conf:

      重启服务:
      systemctl restart nginx.service
  5. 验证
    1. 验证php:
      vim /usr/local/nginx/html/index.php

      在里面输入一些内容:

      <?php
      phpinfo();
      ?>

      浏览器输入/ip/index.php进行验证:

    2. 验证数据库
      vim /usr/local/nginx/html/index.php

      在里面输新的内容:

      <?php
      $link=mysqli_connect('192.168.188.12','bbsuser','admin123');
      if($link) echo "<h1>Success!!</h1>";
      else echo "Fail!!";
      ?>

      访问测试:

  6. 部署DISCUZ论坛
    1. 解压,顺便改个名:
      unzip /opt/Discuz_X3.4_SC_UTF8.zip  -d /opt/dis
    2. 复制默认页面到nginx工作目录下:
      cd /opt/dis/dir_SC_UTF8/
      cp -r upload/ /usr/local/nginx/html/bbs/
    3. 调整论坛目录的权限:
      cd /usr/local/nginx/html/bbs/
      chown -R nginx ./config/
      chown -R nginx ./data/
      chown -R nginx ./uc_client/
      chown -R nginx ./uc_server/
      chmod -R 777 ./config/
      chmod -R 777 ./data/
      chmod -R 777 ./uc_client/
      chmod -R 777 ./uc_server/
  7. 访问测试:




    没有问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值