這兩天翻了翻之前的技術文件,發現有一篇值得拿出來和大家分享:如何給一臺全新的阿里雲伺服器,搭建環境 —— 來部署 PHP 專案,Node.js 專案等。
讓我們開始吧:
1. 利用 Docker 製作 Centos 伺服器
2. 安裝 Nginx
3. 安裝 PHP 7
4. 安裝 composer
5. 安裝Node.js
6. 安裝 git 和 svn
利用 Docker 製作 Centos 伺服器
因為我自己沒有阿里雲伺服器,所以沒法在真實的伺服器上搭建環境;但我們可以利用 Docker 來模擬。
首先需要一個 systemd 整合的 Centos 映象。
Dockerfile 內容如下所示:
FROM daocloud.io/centos:7
MAINTAINER "yemeishu" <yemeishu@126.com>
ENV container docker
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup" ]
CMD ["/usr/sbin/init"]複製程式碼
然後就可以啟動容器了,但這裡要避免「執行Docker 使用systemctl報錯」的問題,解決方案是:掛載 /sys/fs/cgroup 目錄到容器的 /sys/fs/cgroup 目錄並配置只讀許可權,但是docker run 命令只能使用-d引數,不能使用-it引數,使用-it引數仍然會卡死。
docker run -d -v /sys/fs/cgroup:/sys/fs/cgroup:ro local/centos7-systemd複製程式碼
執行容器:
當我們執行 vim 想開啟編輯某個檔案時,發現 vim 並沒有安裝,這時候我們可以直接在容器中安裝,但為了模擬的更徹底,我們再修改修改 Dockerfile 檔案,讓映象帶上 vim:
FROM daocloud.io/centos:7
MAINTAINER "yemeishu" <yemeishu@126.com>
ENV container docker
RUN yum -y install vim-enhanced
RUN yum -y install vim*
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup" ]
CMD ["/usr/sbin/init"]複製程式碼
製作映象,生成容器,執行容器,驗證 vim 是否安裝成功,直接看圖:
安裝工具
有了 「centos 伺服器」了,我們開始配置 PHP (Laravel / Lumen) 環境了。
安裝 Nginx
安裝 Nginx 之前,我們需要修改 yum 源映象,我們使用阿里雲的,
首先安裝 wget:
yum install wget -y複製程式碼
# CentOS 5
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo
# CentOS 6
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
# CentOS 7
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo複製程式碼
yum clean all
yum -y install epel-release
yum install nginx -y
systemctl start nginx
systemctl enable nginx // 開機自啟動複製程式碼
安裝 PHP 7
新增源:
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm複製程式碼
安裝:
yum install php70w -y複製程式碼
安裝常規需要使用的 php 外掛:
yum install php70w-json php70w-xml php70w-mbstring php70w-mysqlnd php70w-fpm -y複製程式碼
安裝 composer
Composer 是 PHP 的一個依賴管理工具。它允許你申明專案所依賴的程式碼庫,它會在你的專案中為你安裝他們。
Composer 不是一個包管理器。是的,它涉及 "packages" 和 "libraries",但它在每個專案的基礎上進行管理,在你專案的某個目錄中(例如 vendor)進行安裝。預設情況下它不會在全域性安裝任何東西。因此,這僅僅是一個依賴管理。這種想法並不新鮮,Composer 受到了 node's npm 和 ruby's bundler 的強烈啟發。而當時 PHP 下並沒有類似的工具。
Composer 將這樣為你解決問題:
a) 你有一個專案依賴於若干個庫。
b) 其中一些庫依賴於其他庫。
c) 你宣告你所依賴的東西。
d) Composer 會找出哪個版本的包需要安裝,並安裝它們(將它們下載到你的專案中)。
參考:docs.phpcomposer.com/00-intro.ht…
1.使用 php 命令安裝
# 下載安裝指令碼 - composer-setup.php - 到當前目錄。
php -r "copy('https://install.phpcomposer.com/installer', 'composer-setup.php');"
# 執行安裝過程。
php composer-setup.php
# 刪除安裝指令碼。
php -r "unlink('composer-setup.php');"
# 開啟命令列視窗並執行如下命令將前面下載的 composer.phar 檔案移動到 /usr/local/bin/ 目錄下面
mv composer.phar /usr/local/bin/composer複製程式碼
2.使用 Packagist / Composer 中國全量映象加速
修改 composer 的全域性配置檔案(推薦方式)
composer config -g repo.packagist composer https://packagist.phpcomposer.com複製程式碼
更多檢視:pkg.phpcomposer.com/
3.並行 composer install,讓下載如有神助
composer global require hirak/prestissimo複製程式碼
4.實時更新
提示:不要忘了經常執行 composer selfupdate 以保持 Composer 一直是最新版本哦!
安裝 Node.js
yum -y install nodejs npm --enablerepo=epel複製程式碼
安裝國內映象:
npm install -g cnpm --registry=https://registry.npm.taobao.org複製程式碼
安裝 n 來管理和選擇nodejs版本 // 保持和現有伺服器版本一致
cnpm install -g n複製程式碼
安裝最新的stable版:
n stable複製程式碼
或者安裝指定版本:如 n 0.8.20
安裝 git 和 svn
yum -y install git
yum -y install subversion複製程式碼
測試
現在基礎的工具和環境已經有了,那我們開始試試效果,安裝一個 Lumen 專案試試:
配置 nginx。在/etc/nginx/conf.d/ 路徑下建立 blog.conf
server {
listen 80;
server_name blog.xxx.com;
#index index.php index.html;
location / {
root /www/html/blog/public;
try_files $uri $uri/ /index.php?$query_string;
index index.php index.html index.htm;
}
location ~ \.php$ {
#try_files $uri = 404;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /www/html/blog/public$fastcgi_script_name;
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
}
}複製程式碼
啟動php-fpm,然後利用 curl 命令訪問試試:
可以正常列印出:Lumen (5.5.0) (Laravel Components 5.5.*),表示我們的 nginx 和 php-fpm 啟動並配置成功了。
總結
溫故而知新,本文繼續通過簡單的學習 docker 模擬 Centos 伺服器來配置環境。
如果你有阿里雲伺服器或者騰訊雲伺服器,並且是 Centos 7 系統的,正常通過以上的步驟,安裝必要的工具,部署常規的 PHP 或者 Node.js 專案應該問題不大了。接下來就可以部署常規的運營工具和防護工具了。
下面羅列一些問題和知識點:
1. centos7 docker容器報 docker Failed to get D-Bus connection 錯誤
報這個錯的原因是 dbus-daemon 沒能啟動。systemctl 並不是不能使用。將 CMD 或者 entrypoint 設定為 /usr/sbin/init 即可。docker 容器會自動將 dbus 等服務啟動起來。如下:
docker run --privileged -ti --name test docker.io/centos:7 /usr/sbin/init複製程式碼
2. 報Error: xz compression not available 的解決方法
yum remove epel-release
# Sometimes that is not enough, you need to remove the cache as well by:
rm -rf /var/cache/yum/x86_64/6/epel
# Then you can install the epel-release again
yum -y install epel-release
# yum clean all is doing great for cleaning the cache複製程式碼
3. FastCgi 與 php-fpm之間是個什麼樣的關係?
可以詳細參考這篇帖子:segmentfault.com/q/101000000…
「完」
coding01 期待您關注
感謝您能看到這了