分类目录归档:乱七八糟

bitnami/php-fpm:5.6配置

感谢一位朋友(osn)帮助建立了多版本php环境(php5-fpm和php7-fpm共存),centos7+nginx+php-fpm7.1。这个环境下需要用到5.6版本的PHP。直接用yum装5.6版,会和之前装的7.1冲突。所以只好让PHP5跑在docker里了。下面是配置说明。 参考这个说明,如果系统跑php5.6,docker中跑php7,也可以。 或者用docker跑多个版本的php也行。 centos7安装后,用epel源安装nginx1.12,然后用webtatic源装php71w-fpm和php71w-cli。然后装了很多php71w-gd,php71w-pdo,…..的php支持。 php7在nginx的配置,支持PATH_INFO: 创建文件:/etc/nginx/default.d/php71w-fpm.conf ————– location ~ \.php($|/) { fastcgi_pass   127.0.0.1:9000; fastcgi_index  index.php; fastcgi_split_path_info   ^(.+?\.php)(/.*)$;   # 非贪婪匹配 if (!-e   $document_root$fastcgi_script_name) { return   404; } fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name; fastcgi_param  PATH_INFO   $fastcgi_path_info  if_not_empty; include   fastcgi_params; } ————– docker是用自带源(extras)  yum安装的。 php的docker镜像有很多。选择了bitnami/php-fpm。因为他的images体积小,才200多MB,版本齐,5.6, 7.0, 7.1, 7.2都有。 这个镜像的说明: https://store.docker.com/community/images/bitnami/php-fpm 拉取镜像,指定php5.6版本,执行: docker pull bitnami/php-fpm:5.6 测试容器,先启动起来看看,9000已经被7.1占用,5.6映射到9001: docker run -d –name phpfpm56 -v /data/web/php5:/app/web/php5 -p 127.0.0.1:9001:9000 bitnami/php-fpm:5.6 我的nginx网站的 root是 /data/web 修改nginx的配置,增加php5.6在目录/data/web/php5/的支持。 在server{  }中添加一个location{  }。这个配置是支持php的PATH_INFO的。 我把配置写在独立文件中了,然后在nginx配置中 include 进去。 我的例子:server { listen …. server_name …. root ….. include /data/config/nginx/phpfpm56.conf;   <—-加了这行 ……. } 我的独立配置文件为 /data/config/nginx/phpfpm56.conf  内容如下。 ————– location /php5/ { location ~ \.php($|/) { fastcgi_pass   127.0.0.1:9001; fastcgi_index  index.php; fastcgi_split_path_info   ^(.+?\.php)(/.*)$;   # 非贪婪匹配 if (!-e   $document_root$fastcgi_script_name) { return   404; } fastcgi_param  SCRIPT_FILENAME   /app/web$fastcgi_script_name; #fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name; fastcgi_param  PATH_INFO   $fastcgi_path_info  if_not_empty; include   fastcgi_params; fastcgi_param  DOCUMENT_ROOT   /app/web; } } ————– 建个文件 /data/web/php5/info.php   内容为 <?php   phpinfo(); ?> 浏览器访问 http://你的站/php5/info.php ,如果看到,说明成功了。 —————- 正式配置php-fpm5.6: 把php-fpm56 的配置文件copy到宿主机上,方便修改配置。 之前测试,启动的phpfpm56的容器,先别关。 cd /data/config/phpfpm56/    # 这个目录是宿主机上的目录,把配置文件copy出来。 docker cp phpfpm56:/opt/bitnami/php/etc/php-fpm.conf . docker cp phpfpm56:/opt/bitnami/php/etc/environment.conf . docker cp phpfpm56:/opt/bitnami/php/etc/common.conf . docker cp phpfpm56:/opt/bitnami/php/etc/php.ini . ——– 如果以后需要进入容器,以apache的身份执行命令(因为容器里头没有sudo),则做,否则跳过。 docker cp phpfpm56:/etc/passwd . #增加一行, apache:x:48:48:apache:/app:/bin/bash docker cp passwd phpfpm56:/etc/passwd # 就可以在container中su apache 了 ——– #host机上的配置文件,刚才从容器中copy出来的。 /data/config/phpfpm56/common.conf /data/config/phpfpm56/environment.conf /data/config/phpfpm56/php-fpm.conf /data/config/phpfpm56/www.conf     #如果需要,自行创建 /opt/bitnami/php/etc/php.ini # 以上配置文件中,对log的配置(我在php-fpm.conf中配置了log输出,具体配置不贴出来了) /opt/bitnami/php/logs/phpfpm56-error.log /opt/bitnami/php/logs/phpfpm56-www-slow.log /opt/bitnami/php/logs/phpfpm56-www.log ————— ## 未使用的配置 # common.conf 中就是 user=48   group=48 两行。一般php-fpm都以apache身份运行。 -v /data/config/phpfpm56/common.conf:/opt/bitnami/php/etc/common.conf \   # 抛弃。因内容直接写入 www.conf 或 php-fpm.conf 了 # 这个www.conf 我没用到。 -v /data/config/phpfpm56/www.conf:/opt/bitnami/php/etc/www.conf:ro \ # 这个配置应该可以获取到宿主机的IP。但失败了,不知道为什么。所以没用它。直接把IP写参数里了。 $(docker network inspect –format='{{range .IPAM.Config}}{{.Gateway}}{{end}}’ bridge) ————— docker container stop phpfpm56       # 停止container docker rm phpfpm56                          # 删除container # 重建container docker run -d –name phpfpm56 \ –add-host=mainhost:172.17.0.1 \    <—-宿主机的机器名, IP. –restart always \ -v /data/config/phpfpm56/php-fpm.conf:/opt/bitnami/php/etc/php-fpm.conf:ro \ -v /data/config/phpfpm56/php.ini:/opt/bitnami/php/etc/php.ini:ro \ -v /var/log/phpfpm56:/opt/bitnami/php/logs \ -v /data/web:/app/web \        <—-直接把网站的root映射到容器中。 -p 127.0.0.1:9001:9000   bitnami/php-fpm:5.6 # 设置容器开机自动启动。 docker update –restart always phpfpm56 # 检查 iptables 规则,允许container访问mysql, 检查mysql用户可以从 172.17.0.% 登陆和访问数据库。 # 下面这句,是用来进入容器执行命令的。 docker container exec -it phpfpm56 /bin/bash ————— 增加php5.6的工作目录, 比如 /data/web/newphp56 1. 修改 /data/config/nginx/phpfpm56.conf , 增加一个 location /newphp56/ {  } 配置, 内容copy前一个location的。 2. service nginx reload 注: php5.6-docker 中访问主机的MySQL,使用机器名, mysql-hostname:’mainhost’, 比如: $db=new mysqli(‘mainhost’,’用户名’,’密码’,’db name’); 或(不建议直接用IP): $db=new mysqli(‘172.17.0.1′,’用户名’,’密码’,’db name’); 因为如果容器迁移,宿主机的IP有可能会改变。 ————— 或者把location 中的关于php5.6的配置,单独写到一个文件中。比如 /xxx/handlephp56.conf 需要增加那个目录 就写: location /xxxx/ { include /xxx/handlephp56.conf; } 重启nginx,就行了。 —————

WordPress htaccess 默认内容

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

在Centos+Apache+Mysql环境下搭建私有NextCloud云盘+office文件在线协作

遇到个项目需要用到office协作,找了一圈nc比较合适,就开工了

环境:httpd 2.4.5 and later

php7 or later

安装mod_proxy

yum -y install mod_proxy_uwsgi mod_proxy_html

安装docker

yum -y install docker

参考:https://nextcloud.com/collaboraonline/

开始用docker安装collaboraonline,

docker pull collabora/code

这里遇到报错:Using default tag: latest
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

结果是docker服务没启动,跑起来:service docker start

再pull,成功

最后会得到:Status: Downloaded newer image for docker.io/collabora/code:latest

接下来,用你喜欢的方式,创建反向代理,conf文件内容如下:

<VirtualHost *:443>
#ServerName改成collabora服务实际运行的域名,一般和nextcloud不同
ServerName yourfiles.yourdomain.com:443

# SSL configuration, you may want to take the easy route instead and use Lets Encrypt!
SSLEngine on
#签名证书位置
SSLCertificateFile /path/to/signed_certificate
#中间证书位置
SSLCertificateChainFile /path/to/intermediate_certificate
#私钥
SSLCertificateKeyFile /path/to/private/key
SSLProtocol             all -SSLv2 -SSLv3
SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS
SSLHonorCipherOrder     on

# Encoded slashes need to be allowed
AllowEncodedSlashes NoDecode

# Container uses a unique non-signed certificate
SSLProxyEngine On
SSLProxyVerify None
#下面这2行如果引起报错 ,可以注释掉,测过不影响,因为前面已经禁用SSLProxyVerify,不知道为什么还要画蛇添足
SSLProxyCheckPeerCN Off
SSLProxyCheckPeerName Off

# keep the host
ProxyPreserveHost On

# static html, js, images, etc. served from loolwsd
# loleaflet is the client part of LibreOffice Online
ProxyPass           /loleaflet https://127.0.0.1:9980/loleaflet retry=0
ProxyPassReverse    /loleaflet https://127.0.0.1:9980/loleaflet

# WOPI discovery URL
ProxyPass           /hosting/discovery https://127.0.0.1:9980/hosting/discovery retry=0
ProxyPassReverse    /hosting/discovery https://127.0.0.1:9980/hosting/discovery

# Main websocket
ProxyPassMatch "/lool/(.*)/ws$" wss://127.0.0.1:9980/lool/$1/ws nocanon

# Admin Console websocket
ProxyPass   /lool/adminws wss://127.0.0.1:9980/lool/adminws

# Download as, Fullscreen presentation and Image upload operations
ProxyPass           /lool https://127.0.0.1:9980/lool
ProxyPassReverse    /lool https://127.0.0.1:9980/lool
</VirtualHost>

然后,就可以把docker跑起来了,先给docker加上开机启动

ckhconfig docker on

再把容器跑起来:

docker run -t -d -p 127.0.0.1:9980:9980 -e ‘domain=nextcloud\\.yourdomain\\.com’ -e “username=username” -e “password=password” –restart always –cap-add MKNOD collabora/code

 

这里的domain,是nextcloud运行的domain,需要用\\转义.,-p后面绑定在127.0.0.1是为了安全,因为最后是用反向代理对nc使用的,测试期间可以不加ip,就绑定在所有IP了

username和password是指定管理后台的用户名和密码,之前没有指定走了不少弯路,虽然这个后台在正常使用后不会再被用到,配置过程中也其实是不需要用的。

运行后会得到一个容器id,然后netstat看一下

netstat -an|grep 9980

有listening,就可以下一步了

先打开后台,看下有没有什么问题https://yourfiles.yourdomain.com/loleaflet/dist/admin/admin.html

如果登陆后有404,或者任何错误,可能是Apache版本不够高,不支持websock反向代理,自己换Apache吧,最低版本要求是2.4.5或者换nginx

nextcloud的安装就非常简单了,wget到服务器,unzip解包,按流程安装,完

接下来,在应用>office&text中启用Collabora Online

然后到设置》在线协作中,填入之前配置的Collabora Online地址,完工

 

在centos7上yum安装php7.1

rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

yum -y install php71w-cli php71w-devel php71w-fpm php71w-gd php71w-mbstring php71w-mcrypt php71w-mysql php71w-opcache php71w-pdo php71w-pecl-imagick-devel php71w-pecl-memcached php71w-pgsql php71w-xmlrpc php71w-xml

 

坐等,完事