mac m1 docker 搭建lnmp

前提:
安裝好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
image.png

瀏覽器訪問(wèn):
http://dev_docker.slyp_shop.com/

image.png

開(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
image.png

到這里就搭建成功了!

六撬呢、一些說(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ò)


image.png

點(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
image.png


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末毛仪,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子芯勘,更是在濱河造成了極大的恐慌箱靴,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荷愕,死亡現(xiàn)場(chǎng)離奇詭異衡怀,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)路翻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)狈癞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人茂契,你說(shuō)我怎么就攤上這事蝶桶。” “怎么了掉冶?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵真竖,是天一觀的道長(zhǎng)脐雪。 經(jīng)常有香客問(wèn)我,道長(zhǎng)恢共,這世上最難降的妖魔是什么战秋? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮讨韭,結(jié)果婚禮上脂信,老公的妹妹穿的比我還像新娘。我一直安慰自己透硝,他們只是感情好狰闪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著濒生,像睡著了一般埋泵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上罪治,一...
    開(kāi)封第一講書(shū)人閱讀 51,541評(píng)論 1 305
  • 那天丽声,我揣著相機(jī)與錄音,去河邊找鬼觉义。 笑死雁社,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的谁撼。 我是一名探鬼主播歧胁,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼滋饲,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼厉碟!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起屠缭,我...
    開(kāi)封第一講書(shū)人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤箍鼓,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后呵曹,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體款咖,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年奄喂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了铐殃。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡跨新,死狀恐怖富腊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情域帐,我是刑警寧澤赘被,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布是整,位于F島的核電站,受9級(jí)特大地震影響民假,放射性物質(zhì)發(fā)生泄漏浮入。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一羊异、第九天 我趴在偏房一處隱蔽的房頂上張望事秀。 院中可真熱鬧,春花似錦野舶、人聲如沸秽晚。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)赴蝇。三九已至,卻和暖如春巢掺,著一層夾襖步出監(jiān)牢的瞬間句伶,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工陆淀, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留考余,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓轧苫,卻偏偏與公主長(zhǎng)得像楚堤,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子含懊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容