前提:
安裝好docker蹬刷,并且修改了鏡像加速,啟動(dòng)docker
一笨忌、安裝lnmp
1. 拉取鏡像蓝仲,haveyb/lnmp 集成 Linux-centos7.6、Nginx官疲、MySQL5.7袱结、PHP7.3、Redis 的鏡像
docker pull haveyb/lnmp
2. 創(chuàng)建容器
小插曲:
因?yàn)樽约阂婚_(kāi)始安裝途中會(huì)報(bào)錯(cuò):
Failed to get D-Bus connection: No such file or directory
原因是開(kāi)啟privileged途凫,但是設(shè)置這個(gè)參數(shù)并沒(méi)有生效垢夹,所以可以先解決這個(gè)問(wèn)題:
1). 前往訪達(dá)資源庫(kù),我的地址為/Users/xxx/Library/Group Containers/group.com.docker
2). 找到settings.json
3). 把deprecatedCgroupv1的false改成true:
"deprecatedCgroupv1": true,
4). 重啟docker
開(kāi)始創(chuàng)建容器维费,將宿主機(jī)的 /Users/xxx/Desktop/docker 與 容器內(nèi)的 /data 目錄同步果元,并且將 nginx 的80端口促王,redis 的 6379 端口、mysql 的3306 端口都與 mac 系統(tǒng)的端口做了映射:
docker run -itd --name lnmp7.4 --privileged -p 6379:6379 -p 80:80 -p 3307:3306 -v /Users/xxx/Desktop/docker:/data haveyb/lnmp /usr/sbin/init
參數(shù)說(shuō)明:
-p:指定 mac 和容器內(nèi)的端口映射而晒,比如蝇狼,-p 3307:3306,表示連接mac 的3307 端口倡怎,實(shí)際上就會(huì)請(qǐng)求到容器內(nèi)的3306端口
-v:指定目錄共享
--privileged:賦予特殊權(quán)限
/usr/sbin/init:可以使用 systemctl 等命令
3. 進(jìn)入容器
docker exec -it lnmp7.4 bash
4. 查看php版本
php -v
PHP 7.3.16
二迅耘、php7.3升級(jí)為php7.4
lnmp已經(jīng)搭建好了,不過(guò)我項(xiàng)目要用的是php7.4监署,所以接下來(lái)是升級(jí)颤专,不需要升級(jí)的可以跳過(guò)這塊
編譯安裝libzip包(centos7自帶的是0.10版本,編譯環(huán)境需要0.10版本以上但不包含1.3和1.7版本的包)
yum remove libzip libzip-devel -y
wget https://libzip.org/download/libzip-1.2.0.tar.gz
tar -zxvf libzip-1.2.0.tar.gz
cd libzip-1.2.0
./configure
make -j4 && make install
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig/"
先安裝需要的依賴(lài)包
yum -y install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses curl gdbm-devel db4-devel libXpm-devel libX11-devel gd-devel gmp-devel expat-devel xmlrpc-c xmlrpc-c-devel libicu-devel libmcrypt-devel libmemcached-devel libsqlite3x-devel oniguruma-devel
先備份
mv /usr/local/php /usr/local/php-7.3.16
下載新的版本https://www.php.net/distributions/php-7.4.33.tar.bz2钠乏,我放在共享目錄下
cp /data/php-7.4.33.tar.bz2 /usr/local/src/php-7.4.33.tar.bz2
cd /usr/local/src
解壓
tar -xjvf php-7.4.33.tar.bz2
cd php-7.4.33
停止php-fpm
systemctl stop php-fpm
編譯并且安裝栖秕,這個(gè)是簡(jiǎn)易版的,少了很多擴(kuò)展缓熟,先別急著安裝累魔,請(qǐng)接著往下看
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm
編譯并且安裝摔笤,開(kāi)啟相應(yīng)擴(kuò)展够滑,需要的擴(kuò)展都裝上,后續(xù)不用追加吕世,省心省力(強(qiáng)烈推薦這種)
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm --with-fpm-user=php-fpm --with-fpm-group=php-fpm --enable-opcache --enable-inline-optimization --disable-debug --enable-shared -enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-mysqlnd-compression-support --with-zlib --enable-xml --enable-bcmath --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbstring --enable-intl --enable-ftp --enable-gd --enable-gd-jis-conv --with-jpeg --with-freetype --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --with-zip --enable-soap --with-gettext --enable-fileinfo --with-pear
PASS:
1)make編譯過(guò)程出現(xiàn)(在make之前還是先進(jìn)行這步操作吧彰触,不然等make很長(zhǎng)一段時(shí)間再報(bào)錯(cuò),會(huì)很奔潰)
undefined reference to `libiconv' 錯(cuò)誤的解決方法
在執(zhí)行完 ./configure … 之后命辖,修改下 Makefile况毅,找到其中的EXTRA_LIBS,在最后面添加 -liconv尔艇,修改后如下:
EXTRA_LIBS = ......這是本來(lái)就有的一大段尔许,需要保留..... -liconv
2) 如果編譯出現(xiàn)
configure: error: Cannot find ldap.h
yum install openldap openldap-devel -y
編譯好長(zhǎng)一段時(shí)間
make && make install
復(fù)制默認(rèn)配置文件,從備份的php-7.3.16里面復(fù)制就行
cp /usr/local/php-7.3.16/etc/php.ini /usr/local/php/etc/php.ini
cp /usr/local/php-7.3.16/etc/php-fpm.conf /usr/local/php/etc/php-fpm.conf
cp /usr/local/php-7.3.16/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
啟動(dòng)php-fpm
systemctl start php-fpm
查看版本
php -v
PHP 7.4.33
顯示加載yar.so终娃、amqp.so擴(kuò)展失敗
vi /usr/local/php/etc/php.ini 味廊,兩個(gè)擴(kuò)展用不上艾杏,extension前面加上分號(hào)注釋掉
;extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20180731/yar.so
;extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20180731/amqp.so
三歪脏、安裝php擴(kuò)展(安裝自己需要的擴(kuò)展即可)
我的擴(kuò)展都是本地下載好呆盖,放到共享目錄/Users/xxx/Desktop/docker里面纫谅,拷貝到/usr/local/src目錄進(jìn)行源碼編譯安裝的炉擅,源碼安裝一般步驟都是phpize如庭、./configure套蒂、make与境、make install蕊退,編譯安裝php7.4的時(shí)候郊楣,最好帶上自己需要的擴(kuò)展憔恳,就沒(méi)后續(xù)這么多麻煩事了,如果后續(xù)發(fā)現(xiàn)少了什么擴(kuò)展的話净蚤,也可以補(bǔ)充上去
3.1安裝swoole擴(kuò)展
cp -r /data/swoole-4.8.12 /usr/local/src
cd /usr/local/src/swoole-4.8.12
phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
vi /usr/local/php/etc/php.ini
加上擴(kuò)展
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/swoole.so
查看安裝成功的擴(kuò)展
php -m | grep swoole
返回
swoole
3.2 安裝swoole-loader擴(kuò)展
cp /data/slyp_shop/install/swoole-loader/swoole_loader74.so /usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/swoole_loader74.so
vi /usr/local/php/etc/php.ini
加上擴(kuò)展
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/swoole_loader74.so
查看安裝成功的擴(kuò)展
php -m | grep swoole
返回
swoole
swoole_loader
3.3 安裝redis擴(kuò)展
cp /data/redis-5.3.7.tgz /usr/local/src/redis-5.3.7.tgz
cd /usr/local/src
tar zxvf redis-5.3.7.tgz
cd redis-5.3.7
phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
vi /usr/local/php/etc/php.ini
加上:
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/redis.so
php -m | grep redis
返回:redis
最后喇嘱,重啟一下php
systemctl restart php-fpm
四、配置虛擬域名
編輯mac的hosts文件
sudo vim /etc/hosts
127.0.0.1 dev_docker.test.com
回到容器內(nèi)塞栅,切換到nginx配置目錄(conf.d 目錄下有配置例子者铜,可以復(fù)制修改)
cd /usr/local/nginx/conf.d
vi dev_docker.test.com.conf
server {
listen 80;
server_name dev_docker.test.com;
client_max_body_size 128M;
charset utf-8;
error_log /usr/local/nginx/logs/error/dev_docker.test.com.log error;
access_log /usr/local/nginx/logs/access/dev_docker.test.com.log main;
root /data/test;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ ^/assets/.*\.php$ {
deny all;
}
location /favicon.ico {
log_not_found off;
access_log off;
}
error_page 404 403 500 502 503 504 /404.html;
location = /404.html {
root /data/errorPage;
}
location ~ \.php$ {
fastcgi_pass unix:/dev/shm/php-cgi.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
cd /data
mkdir test
vi index.php
加入:
<?php
phpinfo();
重啟nginx
systemctl restart nginx
瀏覽器訪問(wèn):
http://dev_docker.test.com/index.php
![image.png](https://upload-images.jianshu.io/upload_images/1638771-6117d29148c1bd5f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
五、跑crmeb項(xiàng)目(本人項(xiàng)目需要放椰,可以跳過(guò))
到這里已經(jīng)基本完成了作烟,因?yàn)槲业捻?xiàng)目是crmeb二開(kāi),需要往下繼續(xù)操作砾医,我配置的項(xiàng)目域名是dev_docker.slyp_shop.com拿撩,在mac系統(tǒng)hosts配置域名,同上面第四點(diǎn)如蚜,這里不贅述
crmeb需要配置反向代理压恒,這里貼一下代碼
cd /usr/local/nginx/conf.d
vi dev_docker.slyp_shop.com.conf
server {
listen 80;
server_name dev_docker.slyp_shop.com;
client_max_body_size 128M;
charset utf-8;
error_log /usr/local/nginx/logs/error/dev_docker.slyp_shop.com.log error;
access_log /usr/local/nginx/logs/access/dev_docker.slyp_shop.com.log main;
root /data/slyp_shop;
index index.html index.htm index.php;
location ^~ / {
proxy_pass http://127.0.0.1:8326;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header Upgrade $http_upgrade;
# proxy_set_header Connection $connection_upgrade;
proxy_http_version 1.1;
# proxy_hide_header Upgrade;
add_header X-Cache $upstream_cache_status;
#Set Nginx Cache
set $static_filebUUocfuv 0;
if ( $uri ~* "\.(gif|png|jpg|css|js|woff|woff2)$" )
{
set $static_filebUUocfuv 1;
expires 1m;
}
if ( $static_filebUUocfuv = 0 )
{
add_header Cache-Control no-cache;
}
}
}
重啟nginx
systemctl restart nginx
啟動(dòng)項(xiàng)目
systemctl start redis
cd /data/slyp_shop
php think swoole start
瀏覽器訪問(wèn):
http://dev_docker.slyp_shop.com/
開(kāi)啟proc_open
vi /usr/local/php/etc/php.ini
在php.ini中,找到disable_functions選項(xiàng),看看是否有proc_open函數(shù)被禁用了错邦,如果有的話探赫,去掉即可
systemctl restart php-fpm
mysql設(shè)置sql_mode
vi /etc/my.cnf
[mysqld]
sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
systemctl restart mysql
到這里就搭建成功了!
六撬呢、一些說(shuō)明
php管理
systemctl start/stop/restart/reload php-fpm
配置文件:/usr/local/php/etc/php.ini
nginx管理
systemctl start/stop/restart/reload nginx
站點(diǎn)配置文件:/usr/local/nginx/conf.d
mysql管理
systemctl status/start/stop/restart/reload mysql
配置文件: /etc/my.cnf
初始密碼:123456
redis管理
systemctl start/stop/restart/reload redis
配置文件:/etc/redis.conf
密碼:haveyb
navicat連接mysql伦吠,上面配置的端口是3307,注意端口別搞錯(cuò)
點(diǎn)擊測(cè)試連接返回:is not allowed to connect to this mysql server
出現(xiàn)這種原因是mysql設(shè)置了不允許遠(yuǎn)程連接魂拦,進(jìn)入容器
docker exec -it lnmp7.4 bash
mysql -u root -p 密碼(默認(rèn)123456)
use mysql;
select host from user where user='root';
update user set host = '%' where user ='root';
flush privileges;
exit; 退出mysql