php+node+nginx环境配置

200 阅读3分钟

centOS

1.下载与安装

# 提前安装依赖
yum install libxml2-devel  
yum install sqlite-devel 

# 下载 
cd /usr/local/src/ 
wget https://www.php.net/distributions/php-8.2.0.tar.gz
tar zvxf php-8.2.0.tar.gz
cd php-8.2.0
./configure  --prefix=/home/oduyub/tools/php/source --enable-fastcgi --enable-debug --enable-fpm

./configure --prefix=/usr/local/php8 --with-config-file-path=/usr/local/php8/etc --with-fpm-user=www --with-fpm-group=www --with-curl --with-openssl --with-mysqli --with-pdo-mysql --with-iconv --with-mhash --with-zlib --enable-mbstring --enable-gd --enable-gd-jis-conv --enable-sockets --enable-fpm --enable- --enable-xml --enable-pdo --enable-cli --enable-pcntl --enable-soap --enable-opcache --enable-fileinfo --disable-rpath --enable-mysqlnd --with-zip --enable-simplexml --with-libxml --with-sqlite3 --with-pdo-sqlite --enable-phar --enable-tokenizer --enable-cgi

make
make install 

2. 添加环境变量

# PATH=$PATH:/usr/local/php8/bin/
# export PATH
# :wq 保存并退出
> source /etc/profile # 立刻生效配置
> php -v # 获得如下信息

3、设置配置

cp /usr/local/src/php-8.2.0/php.ini-production /usr/local/php8/etc/php.ini 
# 开机启动脚本
cp /usr/local/src/php-8.2.0/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
cp /usr/local/php8/etc/php-fpm.conf.default /usr/local/php8/etc/php-fpm.conf 
cp /usr/local/php8/etc/php-fpm.d/www.conf.default /usr/local/php8/etc/php-fpm.d/www.conf

4. 设置权限与启动

chmod +x /etc/init.d/php-fpm # 添加可执行权限
# 进入php文件夹
cd /usr/local/php
# 启动php服务
 ./sbin/php-fpm
 # 检查
 lsof -i:9000
 
 # 查看进程 
 ps -aux |grep php-fpm

 # 关闭
 kill -INT 上面查询的id
# 重启
 kill -USR2 上面查询的id

5.插件安装

php扩展mcrypt安装

wget  http://pecl.php.net/get/mcrypt-1.0.1.tgz
tar xf mcrypt-1.0.1.tgz
cd mcrypt-1.0.1

phpize # 直接运行phpize ,一般docker里  安装在  /usr/local/bin/phpize
./configure --with-php-config=/usr/local/bin/php-config  && make && make install

# 在php.ini 底部 添加
extension=mcrypt.so

#重启
service php-fpm restart

mac

Xcode Command Line Tools

# 查看是否已安装
xcode-select -v 
xcode-select -p
# 删除已安装
rm -rf /Library/Developer/CommandLineTools
# 安装
xcode-select --install

brew

注意下面地址的替换

  • 老mac电脑,地址为/usr/local/opt/
  • m1为/opt/homebrew/

应该根据自己电脑实际情况调整,如果是m1 需要把usr/bin 改成/opt/homebrew/bin

  • usr/bin 改成 /opt/homebrew/bin
  • usr/sbin 改成 /opt/homebrew/sbin
# 安装 Homebrew,官网 brew.sh
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 根据输出可能需要将一两句话追加到你的 ~/.zshrc 去,可能是 ~/.bash_profile
echo 'export PATH="usr/bin:$PATH"' >> ~/.zshrc
echo 'export PATH="usr/sbin:$PATH"' >> ~/.zshrc

# 重新加载
source ~/.zshrc

# 查看版本
brew -v

# git
brew install git
which git
# 查看版本
git --version

nginx

brew install nginx

# 查看版本
nginx -v

# 启动 nginx 注意mac下不建议使用下面命令,
brew services start|stop|restart nginx # start 会使得 php-fpm 变为开机自启
# 推荐使用nginx 直接操作
nginx -s reload # 直接热加载
nginx -s reload # 直接热加载

# 一般生成的地址
nginx 配置地址 /usr/local/etc/nginx/
# 部署html地址
/opt/homebrew/var/www
# 配置部署路径
/opt/homebrew/etc/nginx/nginx.conf
/opt/homebrew/etc/nginx/servers/
# 其他启动命令
/opt/homebrew/opt/nginx/bin/nginx -g daemon off


系统修改host 
# sudo vim /etc/hosts
127.0.0.1    test.my.com
127.0.0.1    test2.my.com

php

# 由于brew 的软件库内,PHP7.2 官方已不再维护 需第三方仓库加入brew
brew tap shivammathur/php
    
# 安装PHP
brew install shivammathur/php/php@7.2

# php@7.2 是一个 keg-only(可以理解成过旧) 的项目,可执行文件是不会自动加入到环境变量的
# 方案一
echo 'export PATH="/usr/local/opt/php@7.2/bin:$PATH"' >> ~/.zshrc
echo 'export PATH="/usr/local/opt/php@7.2/sbin:$PATH"' >> ~/.zshrc
# 重新加载 profile 文件
source ~/.zshrc
# 方案二,强制链接
brew link php@7.2

# 查看版本
php -v
# 启动 php-fpm,start 会使得 php-fpm 变为开机自启
brew services start|stop|restart php@7.2 

php 扩展

# 1. composer
brew install composer
composer --version

# 2. php 的扩展
# 2.1 几个前置扩展库
brew install libyaml # php 的 yaml 扩展会使用到 libyaml 的 lib 库
brew install libmemcached # php 的 memcached 扩展会使用到这个 lib 库;如果本地安装memcached,也会需要使用这个库
brew install zlib # php 的 memcached 扩展会使用到 这个 lib 库

# 2.2 php 的 yaml 扩展
pecl install yaml
# 过程中会需要输入 prefix of libyaml,输入 /usr/local/opt/libyaml 然后回车,这也是 brew --prefix --installed libyaml 的输出
php --ri yaml # 查看是否安装成功和版本

# 2.3 php 的 memcached 扩展
pecl install memcached
# 过程中会需要输入 libmemcached directory,输入 /usr/local/opt/libmemcached,回车
# 过程中会需要输入 zlib directory,输入 /usr/local/opt/zlib,回车
# 接下来还会需要一些输入,统统直接回车
php --ri memcached # 查看是否安装成功和版本

# 2.4 php 的 yaf 扩展
pecl install yaf-3.3.5 
# 需要修改 php 的 yaf 扩展的配置,追加如下几行(位置随便)(php 的配置文件,可以通过 php --ini 来查到,其中的 Loaded Configuration File 行,应该在 /usr/etc/php/7.2/php.ini)
# 查看配置 地址 
php --ini
/usr/local/etc/php/7.2/php.ini

yaf.environ=development
yaf.use_namespace=1
yaf.use_spl_autoload=1
# 查看是否安装成功和版本 和 被我们修改的配置是否正确
php --ri yaf

# 2.5 phalcon
# 销售站点会用到,但现在基本不开发
PHALCON_VERSION=3.4.5
curl -sSL "https://codeload.github.com/phalcon/cphalcon/tar.gz/v${PHALCON_VERSION}" | tar -xz
cd cphalcon-${PHALCON_VERSION}/build
./install
cp ../tests/_ci/phalcon.ini $(php-config --configure-options | grep -o "with-config-file-scan-dir=\([^ ]*\)" | awk -F'=' '{print $2}')      
cd ../../
rm -r cphalcon-${PHALCON_VERSION}
# 查看是否安装成功和版本
php --ri phalcon

# 2.6 redis
pecl install redis
# 中间会需要一些输入,不用理会,全部回车
# 查看是否安装成功和版本
php --ri redis

# 3. 最终需要重启 php-fpm
brew services restart php@7.2

node

brew install node@16

# node@16 是一个 keg-only(可以理解成过旧) 的项目,可执行文件是不会自动加入到环境变量的
# 方案一,按照输出,需要配置环境变量
    # 或者按照下面的几句
    echo 'export PATH="/opt/homebrew/opt/node@16/bin:$PATH"' >> ~/.zshrc
    # 重新加载 profile 文件
    source ~/.zshrc
# 方案二,强制链接。但这个方案,brew安装了最新版本 和 旧版本的的情况下,link会有点问题,到时再说
    brew link node@16

# 查看是否安装成功和版本
node -v
# node 自带了 npm
npm -v

# node 使用的 openssl 版本不同,导致一些老旧的加密函数不能使用,需要做特殊处理
# 将这几句话放在 profile 文件里,且重新加载 profile 文件
    # 如果当前 node 使用 openssl 3,则启用 legacy-provider
    unset NODE_OPTIONS
    [[ $(node -p "process.versions.openssl") > "3" ]] && export NODE_OPTIONS=--openssl-legacy-provider
    # 重新加载 profile 文件
    source ~/.zshrc

node 扩展

# 有时前端的某些依赖,需要用到 python2.7 (比如 node-sass,会依靠一个二进制的执行文件,但该库未提供 mac m 版本的可执行文件,会从python源码开始编译,所以需要本地有python环境)
# 可以等用时遇到问题再安装

# brew 的软件库里,没有旧版本的 python
# 可以通过 pyenv 来安装和管理(以及切换)python ,这种方式类似于 node 里面的 v、jenv 等
# 或者去官网下载对应版本的pkg

brew install pyenv
# 配置环境变量
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc

# 重新加载 profile 文件
source ~/.zshrc
    
# 安装python 2.7.18
pyenv install 2.7.18

# 全局管理python版本,这种 pyenv 是有能力指定什么范围内使用什么版本,比如默认全局2.7,但某个项目用3
pyenv global 2.7.18
    
#检查版本
python --version

mysql redis

# mysql 5.7
brew install mysql@5.7 #
brew link mysql@5.7
# 启动
brew services start mysql@5.7

# memcached
brew install memcached
# 启动
brew services start memcached
# 测试连接
telnet 127.0.0.1 11211
# 没有telnet
brew install telnet

# redis
brew install redis

brew 命令

# brew 的各种自检,如果有问题,按照输出,可以解决掉很多问题
brew doctor

# brew 搜索、查看、安装、卸载 软件
brew search|info|install|uninstall XXX

# brew 查看安装的服务(服务是一种特殊的软件,可以被后台运行,开机自启,比如mysql、php-fpm
brew services list

# brew 启动、停止、重启 服务
brew service start|stop|resart php@7.2|mysql@5.7|nginx|memcached
# ps:不要使用sudo去启动服务,这样会导致用户是root,某些文件会没有权限写入,不是不能修,但是很麻烦,尽量不要

# /usr/local/opt/
# brew 管理的软件的配置目录,都在 /usr/local/etc/ 下
    # nginx 的 config 目录 /usr/local/etc/nginx/
    # php 的 config 目录 /usr/local/etc/php/7.2/

# brew 管理的软件的日志目录,都在 /usr/local/var/log/ 下
# nginx 的日志目录 /usr/local/var/log/nginx/
# php 的日志目录 /usr/local/var/log/php*

node 版本切换

#下载版本
https://github.com/nvm-sh/nvm/archive/refs/tags/v0.38.0.tar.gz
vi ~/.zshrc

# 在底部加入配置信息
export NVM_DIR="$HOME/nvm-0.38.0"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion"  # This loads nvm bash_completion 

# 配置生效
source ~/.zshrc