日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

20分钟完成Mac上的 LNMP 环境部署,优雅·高效开发(Docker方式)

發布時間:2023/12/4 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 20分钟完成Mac上的 LNMP 环境部署,优雅·高效开发(Docker方式) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、前言

對于很多開發者來說,突然轉到在 mac 系統開發,可能會非常難受,主要有以下幾個原因

1、mac 上安裝軟件程序坑多,比如安裝 PHP、Nginx,會存在很多使用 linux 或 windows 時沒有遇到過的坑

2、對 mac 系統不熟悉,就導致排查錯誤很難快速定位,網上資料都是復制粘貼一頓抄,很難得到借鑒

3、mac 對文件的權限掌握比較煩,比如執行一個 find / -name ... 都會報出一大趟 permission ,心情瞬間跌入谷底

4、windows 上用習慣的很多軟件,到了 mac 系統,找不到了,并且一時半會還找不到替代品

基于此,用博主自己的難受經歷,幫助后來者不再體會這種難受,讓 轉到 mac 開發的開發者快速上手,不至于把時間浪費在環境不一致上。

?

可以采用的部署方案

1、使用 mac 自帶的雙系統功能,安裝 windows 系統,完全放棄使用 mac 系統,改為使用熟悉的 windows 系統開發

2、在 mac 系統安裝虛擬機,虛擬機上運行 windows 環境

3、使用 mac 的集成環境 mamp pro,它和 windows 上 phpstudy 類似,工具里可以選擇使用 apache、nginx、mysql5.7,以及多個PHP 版本、Redis、MongoDB

4、使用 docker 在mac 系統上部署開發環境,不使用 mac 自身的軟件,轉而使用 docker 部署的環境,將 docker 容器的端口與 mac 系統的端口進行映射

?

最終采用的部署方案

前兩種方案都是轉為使用 windows 系統。

第三種方案是使用集成環境,就像在 windows 上使用 phpstudy 一樣,只要簡單的配置就可以快速集成開發,但因為其依托的還是Mac系統,因此mac系統上的文件權限以及一些其他問題,后期可能還是會出現,放棄使用。

第四種方案,使用docker部署 LNMP 環境,使整個開發環境獨立于 mac 之外,好處在于容錯率高,不受 mac 系統特性的約束,且其依托于 centos 運行,出現問題更易排查,并且使用 docker 可以方便后期快速以秒級實踐微服務、集群等操作。

因此最終,決定使用第四種方案,采用 docker 部署 LNMP 環境,鏡像包我之前已經制作過,屬于拿來就可以用,預計采用這種方式部署完成 + 測試完成 時間不會超過 20 分鐘,將大大的減少在環境部署上浪費的時間。

?

簡單描述 docker 的作用

這里簡單說下docker的作用,docker在團隊中一般用于集成統一開發環境,并且 使用 docker 可以快速的部署集群,docker 的作用和虛擬機類似,但是它的性能卻是秒級,甚至是毫秒級的,在對機器的性能利用上,遠遠超過虛擬機。

Docker 技術并不難掌握,使用起來卻極為方便。

?


二、正式使用 Docker 在 mac 上部署開發環境


1、下載 docker 的 dmg 包

官網下載地址:https://www.docker.com/products/docker-app

注:如果下載速度慢,可以下載我上傳到百度網盤的

鏈接: https://pan.baidu.com/s/1oNMCdokjCAcK93Nr3IIfpw ?密碼: h6ra

 
2、在 mac 系統上安裝 docker

這個就不說了,就和安裝 phpstorm 是一個套路,安裝后,它是長這個樣子的:

 
3、你可以在 mac 的最上面找到它

在這里,我們可以關閉或重啟 docker 服務

 
4、在 mac 上,配置 docker 的國內下載鏡像

注:默認會從國外的 dockerhub上拉取鏡像,這樣下載鏡像會非常慢的

cd ~ cd .docker vi daemon.json#將文件內容替換為下面內容{"registry-mirrors": ["http://hub-mirror.c.163.com"] }

 
5、下載別人制作好的 LNMP 集成環境鏡像

注:這里,我制作了一個 集成 Linux-centos7.6、Nginx、MySQL5.7、PHP7.3、Redis 的鏡像,供大家使用。該鏡像內部還下載了一些 PHP 常用的擴展,比如 PDO、curl、fileinfo、openssl、memcache、memcached、redis、swoole、yaf、yar、amq,以減少大家在安裝擴展時浪費的時間。拉取后,創建容器就可以直接使用,非常便捷。

在mac終端執行:

docker pull haveyb/lnmp

點擊進入該 docker LNMP 鏡像使用介紹

 
6、創建容器

這里就可以按照需求來自定義創建了。

這里在創建時,指定了將宿主機的 /Users/data 與 容器內的 /data 同步,并且做了3個端口的映射。

也就是將常用的 nginx 的80端口,redis 的 6379 端口、mysql 的3306 端口都與宿主機 mac 系統的端口做了映射。這樣,我們就可以在mac 通過 navicat、redis desktop manager 來連接容器內的mysql和redis,實現無縫連接。

docker run -itd --name lnmp --privileged -p 6379:6379 -p 80:80 -p 3307:3306 -v /Users/SH-Server:/data haveyb/lnmp /usr/sbin/init

容器創建成功,會返回容器ID。

參數解釋:

-itd:指定容器以交互的方式運行

--name:指定創建的容器叫什么名字

-p:指定宿主機 mac 和容器內的端口映射,比如,-p 3307:3306,則表示,連接mac 的3307 端口,實際上就會請求到容器內的3306端口,-p 參數可以指定多個

-v:指定目錄共享,比如 -v /Users/SH-Server:/data,則表示,將宿主機 mac 的 /Users/SH-Server?目錄與容器內的 /data?目錄共享同步,-v 參數也可以指定多個

--privileged:賦予特殊權限,如果不指定,有些命令在容器內將不能執行

haveyb/lnmp:命令中的?haveyb/lnmp 表示指定使用哪個鏡像為基礎創建容器(可以將鏡像理解成一個包裝好的模具,而容器就是模具生產出來的實際可以使用的產品)

/usr/sbin/init:指定啟動容器使用的命令,指定這個啟動命令,將可以使用 systemctl 等命令

點擊快速查看 docker 常用命令

 
7、創建容器后,進入容器

docker exec -it lnmp bash

發現沒,是我們最熟悉的linux界面,如果你細心的話,會發現,用戶名變成了root,并且后面跟著的字符串就是我們運行的容器的容器ID標識
 
注:在 mac 系統中執行命令

docker exec -it 容器名 bash 進入指定的容器

docker images 將顯示現在mac 系統所有的docker 鏡像

docker ps -a? ? ?將顯示所有容器,并且如果指定了端口映射,端口映射也會打印出來

docker start/stop 容器ID,開啟或關閉容器

docker rm 容器ID,移除指定的容器(前提是要先關閉這個容器)

docker rmi 鏡像ID,移除指定的鏡像(前提是已經沒有通過這個鏡像創建的容器存在了)

注:在容器中執行命令:

exit 退出容器,返回 mac 系統


8、由于鏡像已經集成 LNMP 環境了,因此我們這里可以直接開始搭建測試站點了
 
(1)修改mac環境的hosts 文件,把指定域名的請求,轉為請求本地。在mac 上執行:

sudo vi /etc/hosts

將要測試的域名添加到這里,比如這樣:

 
(2)到容器中編寫 nginx 站點配置文件

因為前面我們已經做了 宿主機的 80 端口 映射到 容器內的 80 端口,因此,在mac上瀏覽器域名訪問時,請求的mac系統的 80 端口,將直接將請求打到容器內的80端口

# 先從mac進入容器內部 docker exec -it lnmp bash

然后到 /usr/local/nginx/cond.d 目錄下創建一個名為 ttt.haveyb.com.conf 的文件,內容如下:

server {listen ? ? ? 80;server_name ?ttt.haveyb.com;client_max_body_size 128M;charset utf-8;error_log ? ?/usr/local/nginx/logs/error/ttt.haveyb.com.log error;access_log ?/usr/local/nginx/logs/access/ttt.haveyb.com.log main;root ? /data/ttt;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;}}


(3)編寫測試文件,到定義的網站目錄下編寫一個測試的PHP文件,這里就是上面指定的 /data/ttt 目錄

cd /data mkdir ttt vi index.php<?php phpinfo();

 
9、在mac上通過瀏覽器訪問我們配置的域名 ttt.haveyb.com

將直接將請求打到容器內的nginx,由容器內的 nginx 處理請求,如果不出意外,將會返回 PHPINFO 的信息:

?


10、結語

到這里,就已經很簡單的配置好了 MAC 上的 PHP開發環境,并能夠正常訪問了,并且除了 hosts 文件外,并沒有其他任何文件涉及到 mac 本身的,都是 linux 的,完美實現前期的期望。

整個部署過程 + 測試過程,應該不會超過 20 分鐘。

對比直接在 mac 系統上搭建環境,節省了很多時間。并且避免了mac 系統使用上的許多坑。

?

 

三、程序管理(在docker 容器中操作)

1、Nginx 的管理:

systemctl status/start/stop/restart/reload nginx# 站點的配置文件放在 /usr/local/nginx/conf.d 目錄下

2、PHP 的管理

systemctl status/start/stop/restart/reload php-fpm# php.ini 文件位于/usr/local/php/etc/php.ini# phpize全局可用

 3、MySQL 的管理

systemctl status/start/stop/restart/reload mysql# MySQL 數據文件、慢查詢日志、錯誤日志位于 /usr/local/mysql/data 目錄下# 配置文件位于 /etc/my.cnf# 初始密碼:123456

(1)可以通過設置mysql錯誤日志級別 log_error_verbosity 來減少mysql錯誤日志的記錄,默認是都記錄,建議添加 log_error_verbosity = 1,即只記錄error

(2)如果restart報錯,則執行 chown -R mysql:mysql /usr/local/mysql/ (這個過程大約會用1分鐘左右的時間),然后再restart

(3)如果你的云服務器配置沒有到 2核cpu-4G內存,那很有可能會出現 mysql 重啟失敗 ,這是內存容量導致的。因此建議運行docker的云服務器配置不說太高,但是2核4G是最少的了。

(4)云服務器可以和我一樣,選購騰訊云的,主要是cpu性能不閹割,價格還便宜 。點擊進入?購買直通車騰訊云限時秒殺?
?

4、Redis 的管理

systemctl status/start/stop/restart/reload redis# conf 配置文件位于 /etc/redis.conf,哨兵sentinel配置文件位于 /etc/redis-sentinel.conf# 初始密碼:haveyb

5、memcached 的管理

systemctl status/start/stop/restart/reload memcached?


 

四、Docker 使用過程中可能遇到的問題及解決方案

1、Docker創建容器后并映射端口號后,navicat 遠程連接mysql

2、Docker中使用git clone 報錯 Could not resolve host: github.com; Unknown error

3、進入容器后,沒有clear指令

yum install ncurses

?

五、使用 mac 開發過程中,建議使用的軟件

博主在 windows 上開發時,使用的是 phpstudy + xshell + filezilla,換到 mac 上,發現一個沒有mac版本的,經過實驗各個類似軟件,我這里只推薦我認為替代最完美的軟件,供你參考。

1、開發idea 還是使用 PHPStorm

?

2、連接本地使用 Termius

相當于 windows 上的 cmd 和 cmder,蘋果自帶的工具叫做“終端”,但這里推薦我認為更好用的?Termius

?

3、連接遠程服務器使用 Termius

相當于win10 上的 xshell,對,還是這個軟件,用過幾乎市面上的所有ssh終端,發現只有它能夠完美替代 xshell,最主要的是顏值高,看著就舒服

它是收費的,但我相信一個程序員的素養,是絕對可以找到破解版的,對嗎

?

4、本地與遠程服務器之間傳輸文件:Termius

在 windows 上,實現這個功能,使用的工具是 filezilla,在mac上,推薦使用的還是Termius

而且它不僅可以本地與遠程服務器之間傳輸,還可以兩個不同的遠程服務器之間傳輸

?

5、虛擬機:vmware fusion

虛擬機性能并不高,因此這里建議只將一些mac上無法替代的辦公軟件放到這里,我在虛擬機里只放了一個 mindmaster思維導圖工具,當然,mac 上也有 xmind 和 mindNode,但畢竟用習慣了,也不準改了

?

6、連接數據庫:navicat Premium

在連接數據庫上,不論是 windows 還是 mac,使用的都是這個,沒得說

?

7、接口測試

postman,沒錯,mac 上也是有 postman 的

?

維護搜索生態,從我做起,拒絕任何人轉載。

之所以這樣說,是因為之前在mac上部署開發環境時,遇到問題,搜索出來的結果居然都一樣,都是復制粘貼的,這樣,浪費了很多時間。為了避免這種情況發生,維護搜索生態,打擊一切符合粘貼式的文章發表是十分有必要的。也倡導所有人都能夠寫自己確實的文章,而不是轉載復制粘貼。


@老遲筆記 https://www.haveyb.com

 

 
?

總結

以上是生活随笔為你收集整理的20分钟完成Mac上的 LNMP 环境部署,优雅·高效开发(Docker方式)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。