项目背景:
接到通知公司某项目业务需要上线,运维人员需要部署一套开发环境并配合开发拉取代码上线,并要求测试无误,最后确定采用docker部署LNMP环境方式,先整理了一下思路,并列出有哪几部分,大概每步做什么,最后话不多说,干!
环境要求:
CentOS Linux release 7.5.1804 (Core)
docker 版本:19.03.11
nginx/1.17.6
php 7.3 .23
RDS MySQL 5.7
目录章节:
- 项目背景
- 环境要求
- 目录章节
- docker底层环境部署
- docker运行安装php7.3
- 源码编译Nginx环境配置
- 报错问题排查
- 测试验证
docker底层环境部署
1、docker软件安装
docker-ce的yum源下载(任选其一)
- 下载docker官方ce版
[root@yunweilaoxu ~]# wget https://download.docker.com/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
- 或者使用aliyun的docker-ce源
[root@yunweilaoxu ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
docker安装
[root@yunweilaoxu ~]# yum clean all
[root@yunweilaoxu ~]# yum install docker-ce -y
PS: 注意要安装docker-ce版,不要安装docker(否则可能安装1.13老版本)
启动服务
[root@yunweilaoxu ~]# systemctl start docker
[root@yunweilaoxu ~]# systemctl enable docker
[root@yunweilaoxu ~]# systemctl status docker
查看版本信息
[root@yunweilaoxu ~]# docker -v
Docker version 18.09.7, build 2d0083d
[root@yunweilaoxu ~]# docker info
[root@yunweilaoxu ~]# docker version
Client:
Version: 18.09.7
API version: 1.39
Go version: go1.10.8
Git commit: 2d0083d
Built: Thu Jun 27 17:56:06 2019
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 18.09.7
API version: 1.39 (minimum version 1.12)
Go version: go1.10.8
Git commit: 2d0083d
Built: Thu Jun 27 17:26:28 2019
OS/Arch: linux/amd64
Experimental: false
2、镜像加速器
国内的几个互联网巨头都有自己的容器服务。这里以阿里云为例
阿里云容器镜像服务地址:https://cr.console.aliyun.com/cn-hangzhou/new 申请一个阿里账号登录
[root@yunweilaoxu ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://42h8kzrh.mirror.aliyuncs.com"]
}
以上要是多个要在尾部,号隔开
[root@yunweilaoxu ~]# systemctl daemon-reload
[root@yunweilaoxu ~]# systemctl restart docker
docker安装运行PHP7.3.25
1. docker pull php:7.3.25-fpm
2. docker run -d -p 9005:9000 --name myphp7-fpm -v /home/data/webserver4:/usr/share/nginx/html --privileged=true docker.io/php:7.3.25-fpm
3. docker container update --restart=always myphp7 为容器设置开机自启
4. docker ps
注:--privileged=true 为真root运行,此参数多数用户普通运维账户管理维护容器
docker安装运行Nginx环境配置
1、拉取Nginx镜像
1. docker pull nginx:1.17.6
2、运行Nginx容器镜像
2. docker run -d -p 8085:80 --name mynginx4 -v /home/data/webserver4:/usr/share/nginx/html --privileged=true -v /opt/nginx1/conf.d:/etc/nginx/conf.d -v /opt/nginx4/conf.d/logs:/etc/nginx/conf.d/logs --link myphp7-fpm:php docker.io/nginx:latest
3、配置Nginx配置文件
server {
listen 80;
listen [::]:80;
listen 443 ssl; #SSL协议访问端口号为443。此处如未添加ssl,可能会造成Nginx无法启动。
server_name xxxxxxx;
ssl_certificate cert/3266544__xxx.com.pem;
ssl_certificate_key cert/3266544__xxx.com.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #使用此加密套件。
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #使用该协议进行配置。
ssl_prefer_server_ciphers on;
if ($scheme = http) {
return 301 https://$server_name$request_uri;
}
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
access_log /opt/logs/operate_access.log;
error_log /opt/logs/operate_error.log;
add_header 'Access-Control-Allow-Origin' "*";
add_header 'Access-Control-Allow-Headers' "X-Requested-With,token";
add_header 'Access-Control-Allow-Methods' "GET,POST,OPTIONS";
add_header 'Access-Control-Allow-Credentials' "true";
location / {
root /usr/share/nginx/html/xinzhi;
index index.html index.htm index.php;
try_files $uri $uri/ /index.php?$query_string;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
root html;
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/xinzhi/$fastcgi_script_name;
include fastcgi_params;
}
}
}
4、给容器做开机自启
docker container update --restart=always mynginx4
RDS连接
注:因公司采用阿里云RDS云端数据库,连接时候只需要阿里云提供内链地址,然后紧接着在项目文件中的.env里面进行输入相关数据库信息连接即可!
报错问题排查
1、数据库连接出现问题
故障排查
1. 去/home/data/webserver4/jsyixin_prd/application/config/config.php 检查php连接数据库账号信息是否准确
2. 查看RDS的白名单是否将所在这台服务器的内网IP加入到白名单中
3. 中再次核实数据库的连接信息,如果还是不行的话,看一下PhP扩展是否安装了,一般这种情况只会出现在docker部署的容器中,如果没有的话安装pdo_mysql扩展;
注:pdo_mysql 是PHP用来访问mysql服务的扩展。
# docker容器实例中执行:docker-php-ext-install pdo_mysql
# 如果还是不可以的话看一下以下插件对比以下是否安装
[PHP Modules]
bcmath
Core
ctype
curl
date
dom
filter
ftp
gd
gettext
hash
iconv
json
libxml
mbstring
mysqli
mysqlnd
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
posix
Reflection
session
shmop
SimpleXML
soap
sockets
SPL
sqlite3
standard
sysvsem
tokenizer
xml
xmlreader
xmlrpc
xmlwriter
zip
zlib
[Zend Modules]
注:缺少哪个进行安装,然后安装完以后进行重启PHP容器镜像,然后web界面访问URL查询;
2、项目目录权限问题等问题导致报错
故障排查:
此问题是权限问题直接给目录所属子目录权限设置为777,然后打开网页再次访问
chmond -R 777 /home/data/webserver5/career/storage/
故障排查:
2.1、打开php debug 调试模式
1. 进入docker php镜像容器
docker exec -it bcb0168ebc4b /bin/bash
2. 查找php容器中 php.ini 配置文件
php -i |grep php.ini 或: find / -name php
路径地址:/usr/local/etc/php/php.ini
3. 474行 display_errors=on
4. 打开浏览器再次访问
2.2、以下界面出现php插件连接mysql等问题
解决方法:
1. 进入docker php镜像容器
docker exec -it bcb0168ebc4b /bin/bash
2. docker-php-ext-install pdo_mysql
3. exit
4. 重启php
docker restart bcb0168ebc4b
5. 再次访问
2.3、项目路径问题导致bootstrap 没有写权限
解决方法:
chmond -R 755 /home/data/webserver5/career/bootstrap 即可解决此问题
2.4、关闭debug调式模式
474行 display_errors=Off
测试验证
此时出现这个代表项目上线成功
作者:运维老许
联系方式:strive120620@163.com
微信公众号:Linux必修之路
声明1:本站部分资源收集自互联网,仅供个人学习交流,如不慎侵犯了您的权益,请联系我,我将尽快处理!
声明2:本文版权归作者,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利!
你认识孟强吗 ?
认识。