使用云服务器搭建 Web 运行环境,尤其是搭建常见的 LNMPR(Linux+Nginx+MySQL+PHP+Redis) 环境,对于开发人员是必备的职场基本技能之一。在这里,借着搭建我的“魚立说”个人网站的机会,整理了从零搭建 LNMPR 环境的详细过程,期间遇到的问题也一一进行了记录。

本文来源:魚立说。本文链接:https://www.yulisay.com/d/lnmpr2.html,支持微信浏览器打开。

更多精彩文章,请移步 魚立说个人网站 翻看。欢迎欣赏,吐槽不足之处。


本主题使用到的服务器是 Aliyun 的 ECS 体验机,适用于在 CentOS 操作系统下搭建 LNMPR 运行环境,整个系列由以下两个文章部分组成:

2. 配置运行(带配置+运行)

在《编译安装 LNMPR》中,我们已经编译安装好 LNMPR 服务,接下来对它们进行配置,从而让我们的 Web 项目运行起来。

2.1 配置 NMPR

下面依次对 Nginx、MySQL、PHP、Redis 进行了配置。

2.1.1 配置 Nginx

找到 /usr/local/nginx/conf/nginx.conf 文件,并做如下配置:

  1. user www admin;
  2. worker_processes auto;
  3. pid /data/run/nginx.pid;
  4. events {
  5. worker_connections 1024;
  6. }
  7. http {
  8. include mime.types;
  9. default_type application/octet-stream;
  10. log_format main '$remote_addr - $remote_user [$time_local] "$request" '
  11. '$status $body_bytes_sent "$http_referer" '
  12. '"$http_user_agent" "$http_x_forwarded_for"';
  13. access_log /data/log/nginx/access.log main;
  14. error_log /data/log/nginx/error.log warn;
  15. sendfile on;
  16. tcp_nopush on;
  17. client_max_body_size 100M;
  18. keepalive_timeout 60;
  19. server {
  20. listen 80;
  21. server_name localhost;
  22. access_log /data/log/php/test.access.log main;
  23. error_log /data/log/php/test.error.log warn;
  24. root /data/project/www;
  25. index index.php index.html index.htm;
  26. location ~ \.php$ {
  27. fastcgi_pass 127.0.0.1:9000;
  28. fastcgi_index index.php;
  29. include fastcgi_params;
  30. fastcgi_param PATH_INFO $fastcgi_path_info;
  31. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  32. }
  33. }
  34. }

2.1.2 配置 MySQL

找到 /etc/my.cnf 文件,并做如下配置:

  1. [mysqld]
  2. port=3306
  3. datadir=/var/lib/mysql
  4. socket=/var/lib/mysql/mysql.sock
  5. default_authentication_plugin = mysql_native_password
  6. symbolic-links=0
  7. log-error=/data/log/mysqld.log
  8. pid-file=/data/run/mysqld/mysqld.pid
  9. character-set-client-handshake = FALSE
  10. character-set-server = utf8mb4
  11. collation-server = utf8mb4_unicode_ci
  12. init_connect='SET NAMES utf8mb4'
  13. default-time-zone='+8:00'
  14. slow_query_log=ON
  15. long_query_time=3
  16. slow-query-log-file=/data/log/mysql/slow.log
  17. [mysqld_safe]
  18. log-error=/data/log/mysql/error.log
  19. [mysql]
  20. default-character-set=utf8mb4
  21. [client]
  22. port=3306
  23. default-character-set=utf8mb4
  24. socket=/var/lib/mysql/mysql.sock

2.1.3 配置 PHP

找到 /usr/local/php/etc/php-fpm.d/www.conf 文件,并做如下配置:

  1. [www]
  2. user = www
  3. group = admin
  4. listen = 127.0.0.1:9000
  5. pm = dynamic
  6. pm.max_children = 5
  7. pm.start_servers = 2
  8. pm.min_spare_servers = 1
  9. pm.max_spare_servers = 3
  10. request_slowlog_timeout = 3
  11. slowlog = /data/log/php/fpm.slow.log

还需要配置 /usr/local/php/etc/php.ini:

  1. [PHP]
  2. engine = On
  3. zend.enable_gc = On
  4. max_execution_time = 30
  5. max_input_time = 60
  6. memory_limit = 256M
  7. error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
  8. display_errors = On
  9. display_startup_errors = On
  10. log_errors = On
  11. log_errors_max_len = 1024
  12. html_errors = On
  13. error_log = /data/log/php/php.error.log
  14. default_mimetype = "text/html"
  15. default_charset = "UTF-8"
  16. [Date]
  17. date.timezone = "Asia/Shanghai"
  18. [opcache]
  19. opcache.enable=1
  20. opcache.enable_cli=1
  21. opcache.memory_consumption=128
  22. opcache.interned_strings_buffer=8
  23. opcache.max_accelerated_files=4000
  24. opcache.revalidate_freq=60
  25. opcache.file_cache=/tmp
  26. zend_extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/opcache.so

2.1.4 配置 Redis

找到 /usr/local/redis/bin/redis.conf 文件,调整这些配置项:

设置后台启动:daemonize yes

设置密码:requirepass password

注释掉这一行:bind 127.0.0.1

2.1.5 为 firewalld 添加开放端口

  1. systemctl start firewalld && \
  2. firewall-cmd --zone=public --add-port=80/tcp --permanent && \
  3. firewall-cmd --zone=public --add-port=3306/tcp --permanent && \
  4. firewall-cmd --zone=public --add-port=6379/tcp --permanent && \
  5. firewall-cmd --reload

2.2 运行 NMPR

由于服务依赖,需要注意服务的运行顺序。

2.2.1 运行 PHP

PHP 的相关命令:

启动 PHP-FPM:/etc/init.d/php-fpm start

重启 PHP-FPM:/etc/init.d/php-fpm restart

停止 PHP-FPM:/etc/init.d/php-fpm stop

2.2.2 运行 Nginx

Nginx 的相关命令:

启动 Nginx:nginx

关闭 Nginx:nginx -s stop

退出 Nginx:nginx -s quit

更新配置 Nginx:nginx -s reload

Nginx 启动成功后,在浏览器打开公网地址就可以看到 Nginx 欢迎页,这时会打印出 PHP 的版本信息:

2.2.3 运行 MySQL

MySQL 的相关命令:

启动 MySQL:systemctl start mysqld

停止 MySQL:systemctl stop mysqld

设置 MySQL 开机自启:systemctl enable mysqld

查看 MySQL 状态:systemctl status mysqld

首次登录 MySQL 需要在日志文件中找出临时密码:grep 'temporary password' /data/log/mysqld.log

然后使用 root 账号登陆,输入上面找到的临时密码:mysql -uroot -p

我们首先修改下用户密码:ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';

并开启远程访问,这里的 Your_IP 需要替换成你本地的外网 IP:

  1. grant all privileges on *.* to 'root'@'Your_IP' identified by 'password' with grant option;
  2. flush privileges;

这时可以在 Your_IP 发起连接:mysql -hYour_IP -uroot -p'password' -P3306,我们便可以在远程访问 ECS 上的 MySQL:

2.2.4 运行 Redis

启动 Redis:redis-server /usr/local/redis/bin/redis.conf

停止 Redis:redis-cli -h 127.0.0.1 -p 6379 -a password shutdown

在远程访问 ECS 上的 Redis:

到这里,我们的 LNMPR 基础环境就算搭建完成了。当然,后续的正式 ECS 还有更多的工作要做,比如配置 SSL、额外的扩展等,还要结合自己的代码进行具体的部署,比如部署代码、crontab 等。

2.3 可能出现的问题

2.3.1 CentOS 报错:FirewallD is not running

需要设置一下防火墙,开启远端访问功能,但是出于安全考虑最好打开防火墙。

2.3.2 外网无法连接 Redis

除了设置防火墙外,需要修改redis.conf 配置文件,注释掉 bind 127.0.0.1 这一行。

以Aliyun体验机为例,从零搭建LNMPR环境(下)的更多相关文章

  1. 以Aliyun体验机为例,从零搭建LNMPR环境(上)

    使用云服务器搭建 Web 运行环境,尤其是搭建常见的 LNMPR(Linux+Nginx+MySQL+PHP+Redis) 环境,对于开发人员是必备的职场基本技能之一.在这里,借着搭建我的" ...

  2. 通过create-react-app从零搭建react环境

    一. 快速开始: 全局安装脚手架: $ npm install -g create-react-app 通过脚手架搭建项目: $ create-react-app <项目名称> 开始项目: ...

  3. 从零搭建LNMP环境

    Linux就是环境所在的操作系统: Nginx则是一个「高性能的HTTP和反向代理服务器」,官网地址:http://nginx.org/: MySQL则是一个方便地对数据进行增删改查的数据库管理系统, ...

  4. 从零搭建 webpack3 环境 #1 - 安装使用

    目录: (1)什么是webpack (2)webpack核心概念 (3)环境安装 (4)开始使用webpack 1.什么是webpack 官网的一幅图对webpack的解释,从图中可以看出,webpa ...

  5. 从零搭建生产环境的ghost2.0博客

    当前安装过程是在ghost cli 1.9.2上的,由于ghost更新特别快,我安装我个人博客cmlanche.com的时候还是1.9.1,当时没碰到啥问题,到1.9.2就有一点点不一样了,所以要注意 ...

  6. webpack-从零搭建vuecli环境

    模块化思想 // 1最早期就只是html和css处理网页 // 2发明一种语言来操作html和css js // 3早期只是在html文件里直接在script标签里写一些脚本代码 // 4随着Ajax ...

  7. 一、在windows环境下修改pip镜像源的方法(以python3为例)

    在windows环境下修改pip镜像源的方法(以python3为例) 1.在windows文件管理器中,输入 %APPDATA% 2.会定位到一个新的目录下,在该目录下新建pip文件夹,然后到pip文 ...

  8. React Native从零到一搭建开发环境

    React Native从零到一搭建开发环境 ReactNative环境搭建 安装Homebrew 安装rvm 安装nvm 安装node 安装react-native-cli 安装watchman i ...

  9. 从零搭建docker+jenkins 自动化部署环境

    从零搭建docker+jenkins+node.js自动化部署环境 本次案例基于CentOS 7系统 适合有一定docker使用经验的人阅读 适合有一定linux命令使用经验的人阅读 1.docker ...

随机推荐

  1. Android混合Flutter

    官方文档 实验性:将Flutter添加到Android 测试仓库 取决于模块的源代码 方法测试成功

  2. Flutter 删除AppBar的返回icon

    设置automaticallyImplyLeading: false即可,替换可以修改"leading"参数 ... appBar: AppBar( automaticallyIm ...

  3. 星空值、SPC、算力组成三元永动机制!VAST带你把握时代!

    目前中心化金融体系为用户提供的服务在便捷性和易用性方面已经达到了新高度,但随着时代发展,大众对于金融安全性和可控性的需求进一步提升,需要去中心化金融服务商来提供更具创意的解决方案.盛大公链为此在应用层 ...

  4. 生态建设者为何青睐低风险、低成本的NGK算力?

    自从BGV推向市场以来,生态建设者的目光都聚集于BGV这个去中心化金融的新星,其实NGK的其他项目也都在稳健进行当中. NGK在未来将推出"算力市场奖励计划",NGK将会对算力市场 ...

  5. NGK公链有发展前景吗?

    最近网络中经常能看到一个新公链项目NGK的消息,很多朋友也都私下表示过,非常看好今年的NGK.对此,小编对NGK做了一些功课,发觉到NGK未来在商业Dapp应用的发展前景,下面就给大家分享一下我的理解 ...

  6. 翻译:《实用的Python编程》01_06_Files

    目录| 上一节(1.5 列表) | 下一节 (1.7 函数) 1.6 文件管理 大多数的程序需要从某处读取输入.本节讨论文件访问. 文件输入和输出 打开一个文件: f = open('foo.txt' ...

  7. 注解处理器APT详解

    本文转载自ANNOTATION PROCESSING 101 Introduction In this blog entry I would like to explain how to write ...

  8. 《Activity显示界面历险记》—说说View的那些理不清的关系

    前言 在Activity显示View的过程中,有一些重要的角色总让人理不清,比如PhoneWindow.DecorView.ViewRootImpl. 也常常有面试题会问到,他们四者之间的关系?创建的 ...

  9. 死磕Spring之IoC篇 - BeanDefinition 的解析阶段(XML 文件)

    该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...

  10. vue-axios插件、django-cors插件、及vue如何使用第三方前端样式库:element/jQuery/bootstrap

    目录 一.vue的ajax插件:axios 1.安装axios 2.axios参数 二.CORS跨域问题(同源策略) 1.Django解决CORS跨域问题方法 三.前端请求携带参数及Django后台如 ...