1造挽、生產環(huán)境&測試環(huán)境的規(guī)劃和部署
1.1酌心、說明
1)項目
此處以一個演示項目的形式來進行環(huán)境的規(guī)劃和部署。此項目名稱默認定義為:“demo”东且,且主要功能為前端應用提供 API 接口服務割以,項目下面包含兩個站點:一個測試站點和一個生產站點金度;主要特點如下:
- 項目支持 http 和 https 訪問
- 默認按最簡配置傻瓜式安裝、卸載严沥,安裝猜极、卸載簡單
- 可根據需要添加配置參數,擴展靈活
- 腳本化執(zhí)行祝峻,在 shell 里運行腳本即可實現自動化的安裝和卸載
2)站點:
站點一般由 nginx + php + mariadb 組成魔吐, nginx 提供路由訪問服務扎筒, php 程序提供業(yè)務處理能力莱找, mariadb 提供 mysql 數據庫服務。此項目有兩個站點:測試站點和生產站點嗜桌,生產站點作為正式發(fā)布的版本奥溺,測試站點提供開發(fā)過程中的功能測試。測試站點的默認名稱為:“test”骨宠,域名為: myapitest.xxxxxx.com 浮定;生產站點的默認名稱為:“prod”,域名為: myapi.xxxxxx.com 层亿;由于本示例中生產環(huán)境和測試環(huán)境架設在同一臺服務器上桦卒,所以采用一個 nginx 為兩個站點提供訪問服務。
3)服務
此項目中使用到的: nginx 匿又、 php 方灾、 mariadb 等,就是服務,包括一個 nginx 裕偿、兩個 php 洞慎、兩個 mariadb ;
4) ssl 證書
此演示項目是在騰訊云服務器上安裝嘿棘,里面用到的 ssl 證書是從騰訊云申請的劲腿,具體申請流程請看騰訊云的相關說明文檔,包含兩個文件鸟妙,具體文件名格式為: 1_myapitest.xxxxxx.com_bundle.crt 和 2_myapitest.xxxxxx.com.key 焦人,其中 myapitest.xxxxxx.com 為申請時使用的域名,此處為非真實的域名重父,請讀者使用自己的域名垃瞧。如果是其他云,也可以從對應的云服務器里找到相關證書申請的訊息坪郭,當然還可以從第三方直接申請免費證書个从,具體就請在網上搜索吧。
1.2歪沃、演示項目安裝完成后的結果
為了使大家對安裝后的環(huán)境有個宏觀的了解嗦锐,也便于講解,所以從結果倒著看沪曙,先看看安裝完成后的情況奕污,了解一下即可,文章最后會給出相關安裝的腳本及配置文件液走。此處約定的參數為:
- 項目名稱:project_name -->> demo
- 測試站點名稱:test_site_name -->> test
- 生產站點名稱:prod_site_name -->> prod
1.2.1碳默、安裝完成后的主機掛載目錄的結構
在使用腳本進行安裝時,腳本會先建立相關目錄以及對應的文件缘眶。
1.2.2嘱根、安裝用到的關鍵配置文件
1)docker-compose.yml
version: "3.5"
services:
demo_test_mariadb:
container_name: demo_test_mariadb
image: mariadb:10.3
restart: always
privileged: true
ports:
- 13306:3306
volumes:
- $ROOT_DIR/demo/test/data/mariadb:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: demo_test_db
MYSQL_USER: demo_test_user
MYSQL_PASSWORD: 654321
command: [
'--character-set-server=utf8mb4',
'--collation-server=utf8mb4_unicode_ci'
]
networks:
- demo_test_network
demo_test_php:
container_name: demo_test_php
image: php:7.2.3-fpm
privileged: true
restart: always
networks:
- demo_test_network
volumes:
- $ROOT_DIR/demo/test/www:/var/demo/test/www
environment:
- TZ=Asia/Shanghai
links:
- demo_test_mariadb
demo_prod_mariadb:
container_name: demo_prod_mariadb
image: mariadb:10.3
restart: always
privileged: true
ports:
- 23306:3306
volumes:
- $ROOT_DIR/demo/prod/data/mariadb:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: 123456
MYSQL_DATABASE: demo_prod_db
MYSQL_USER: demo_prod_user
MYSQL_PASSWORD: 654321
command: [
'--character-set-server=utf8mb4',
'--collation-server=utf8mb4_unicode_ci'
]
networks:
- demo_prod_network
demo_prod_php:
container_name: demo_prod_php
image: php:7.2.3-fpm
privileged: true
restart: always
networks:
- demo_prod_network
volumes:
- $ROOT_DIR/demo/prod/www:/var/demo/prod/www
environment:
- TZ=Asia/Shanghai
links:
- demo_prod_mariadb
demo_nginx:
container_name: demo_nginx
image: nginx:1.13
privileged: true
restart: always
networks:
- demo_test_network
- demo_prod_network
ports:
- 80:80
- 443:443
volumes:
- $ROOT_DIR/demo/test/www:/var/demo/test/www
- $ROOT_DIR/demo/prod/www:/var/demo/prod/www
- $ROOT_DIR/demo/nginx/conf.d:/etc/nginx/conf.d
- $ROOT_DIR/demo/nginx/ssl:/etc/nginx/ssl
environment:
- TZ=Asia/Shanghai
links:
- demo_test_php
- demo_prod_php
networks:
demo_test_network:
name: demo_test_network
demo_prod_network:
name: demo_prod_network
docker-compose.yml 文件說明:
- 版本
version: "3.5"
版本選的是3.5,主要是考慮用來支持網卡命名特性巷懈,見docker-compose.yml 文件的末尾部分该抒,networks的定義:
networks:
demo_test_network:
name: demo_test_network
demo_prod_network:
name: demo_prod_network
- docker服務、相關參數顶燕、網卡命名規(guī)范
以服務mariadb的命名為例:demo_test_mariadb凑保,將項目名稱為demo、站點名稱為test涌攻、服務為mariadb的三個名字用下劃線“_”連接起來欧引,就可以保證主機上服務命名的唯一性,主機上的多個服務不會有重復命名的情況出現恳谎,demo_test_mariadb 可以這樣理解:demo項目的test測試站點的mariadb服務芝此;
同理還有類似的命名有:demo_prod_php(php服務)、demo_test_db(mariadb數據庫)、demo_prod_network(demo項目中生產站點的網卡)
由于demo項目里的nginx服務同時為生產環(huán)境和測試環(huán)境提供服務癌蓖,所以其命名為:demo_nginx(demo項目的nginx服務) - docker目錄規(guī)范
/dockers/demo/test/www --- 表示 demo項目中測試站點的網頁目錄
/dockers/demo/prod/data --- 表示 demo項目中生產站點的數據目錄
/dockers/demo/nginx/ssl --- 表示 demo項目中 nginx 服務的 ssl 證書目錄 - 環(huán)境變量 ROOT_DIR
環(huán)境變量 ROOT_DIR 為此腳本作用范圍內的環(huán)境變量瞬哼,用來指定項目目錄的上一級目錄,該環(huán)境變量在 install.sh 里定義租副。
2)/dockers/demo/nginx/conf.d/default.conf
server {
listen 80;
listen 443 ssl;
server_name myapitest.xxxxxx.com;
#ssl on;
ssl_certificate /etc/nginx/ssl/1_myapitest.xxxxxx.com_bundle.crt;
ssl_certificate_key /etc/nginx/ssl/2_myapitest.xxxxxx.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照這個協議配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照這個套件配置
ssl_prefer_server_ciphers on;
location / {
root /var/demo/test/www;
index index.html index.htm index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
fastcgi_pass demo_test_php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/demo/test/www$fastcgi_script_name;
include fastcgi_params;
}
}
server {
listen 80;
listen 443 ssl;
server_name myapi.xxxxxx.com;
#ssl on;
ssl_certificate /etc/nginx/ssl/1_myapi.xxxxxx.com_bundle.crt;
ssl_certificate_key /etc/nginx/ssl/2_myapi.xxxxxx.com.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照這個協議配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照這個套件配置
ssl_prefer_server_ciphers on;
location / {
root /var/demo/prod/www;
index index.html index.htm index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
fastcgi_pass demo_prod_php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/demo/prod/www$fastcgi_script_name;
include fastcgi_params;
}
}
安裝demo項目的基本流程為:
- 第一步:將相關文件拷貝到主機掛載目錄(包括docker-compose.yml 和 default.conf)
- 第二步:配置好 docker-compose.yml
- 第三步:配置好 default.conf
- 第四步:運行 docker-compose up -d 安裝
- 第五步:安裝PDO驅動等
2坐慰、腳本化安裝
2.1、安裝文件目錄結構
從上圖可以看出用僧,安裝文件的目錄結構還是很簡單的结胀,其中模版目錄下除了default.conf.tpl、docker-compose.yml.tpl比較重要和相對復雜以外责循,其他模版文件都很簡單糟港,可有可無,不關鍵院仿,只是為了配合測試秸抚。
2.2、自定義變量說明
此項目為了簡化文件生成歹垫,在模版文件中使用了自定義變量剥汤,自定義變量的書寫形式為:{{自定義變量_xxxx}},可以在腳本中根據變量的配置值排惨,對模版文件的自定義變量區(qū)域進行動態(tài)替換吭敢。例如:我們在config.sh文件中定義了變量“project_name”,“test_site_name”
["project_name"]="demo" # 項目名稱
["test_site_name"]="test" # 測試站點名稱
同時暮芭,我們在docker-compose.yml.tpl中使用了自定義變量域{{project_name}}鹿驼、{{test_site_name}}
version: "3.5"
services:
{{project_name}}_{{test_site_name}}_mariadb:
運行腳本后,生成的配置文件的自定義變量域會被替換辕宏,比如上面的模版對應的配置文件會變成:
version: "3.5"
services:
demo_test_mariadb:
需要說明的是:在本配置中畜晰,自定義變量實現了“即加即用”,且用戶可以根據需要定義匾效,在congfig.sh文件里定義一個變量舷蟀,在模版文件里加上對應的自定義變量域,不用修改其他代碼面哼,就能自動進行替換。
2.3扫步、關鍵文件說明
2.3.1魔策、config.sh
#!/bin/bash
declare -A config=(
["project_name"]="demo" # 項目名稱
["mariadb_image"]="mariadb:10.3" # mariadb 鏡像名和版本
["php_image"]="php:7.2.3-fpm" # php 鏡像名和版本
["nginx_image"]="nginx:1.13" # nginx 鏡像名和版本
["test_site_name"]="test" # 測試站點名稱
["mysql_root_password_test"]="123456" # 測試站點數據庫root密碼
["mysql_password_test"]="654321" # 測試站點數據庫用戶密碼,用戶名會自動生成
["mysql_mapped_port_test"]=13306 # 測試站點數據庫管理端口映射河胎,便于客戶端管理
["dns_test"]="myapitest.xxxxxx.com" # 測試站點域名
# 測試站點 ssl 證書文件名配置
["ssl_certificate_test"]="1_myapitest.xxxxxx.com_bundle.crt"
["ssl_certificate_key_test"]="2_myapitest.xxxxxx.com.key"
["prod_site_name"]="prod" # 生產站點名稱
["mysql_root_password_prod"]="123456" # 生產站點數據庫root密碼
["mysql_password_prod"]="654321" # 生產站點數據庫用戶密碼闯袒,用戶名會自動生成
["mysql_mapped_port_prod"]=23306 # 生產站點數據庫管理端口映射,便于客戶端管理
["dns_prod"]="myapi.xxxxxx.com" # 生產站點域名
# 生產站點 ssl 證書文件名配置
["ssl_certificate_prod"]="1_myapi.xxxxxx.com_bundle.crt"
["ssl_certificate_key_prod"]="2_myapi.xxxxxx.com.key"
)
配置文件里定義了一個map來存儲相關配置參數,用戶可以根據需要進行修改政敢、增加其徙、刪除配置。
2.3.2喷户、tpl/docker-compose.yml.tpl
version: "3.5"
services:
{{project_name}}_{{test_site_name}}_mariadb:
container_name: {{project_name}}_{{test_site_name}}_mariadb
image: {{mariadb_image}}
restart: always
privileged: true
ports:
- {{mysql_mapped_port_test}}:3306
volumes:
- $ROOT_DIR/{{project_name}}/{{test_site_name}}/data/mariadb:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: {{mysql_root_password_test}}
MYSQL_DATABASE: {{project_name}}_{{test_site_name}}_db
MYSQL_USER: {{project_name}}_{{test_site_name}}_user
MYSQL_PASSWORD: {{mysql_password_test}}
command: [
'--character-set-server=utf8mb4',
'--collation-server=utf8mb4_unicode_ci'
]
networks:
- {{project_name}}_{{test_site_name}}_network
{{project_name}}_{{test_site_name}}_php:
container_name: {{project_name}}_{{test_site_name}}_php
image: {{php_image}}
privileged: true
restart: always
networks:
- {{project_name}}_{{test_site_name}}_network
volumes:
- $ROOT_DIR/{{project_name}}/{{test_site_name}}/www:/var/{{project_name}}/{{test_site_name}}/www
environment:
- TZ=Asia/Shanghai
links:
- {{project_name}}_{{test_site_name}}_mariadb
{{project_name}}_{{prod_site_name}}_mariadb:
container_name: {{project_name}}_{{prod_site_name}}_mariadb
image: {{mariadb_image}}
restart: always
privileged: true
ports:
- {{mysql_mapped_port_prod}}:3306
volumes:
- $ROOT_DIR/{{project_name}}/{{prod_site_name}}/data/mariadb:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: {{mysql_root_password_prod}}
MYSQL_DATABASE: {{project_name}}_{{prod_site_name}}_db
MYSQL_USER: {{project_name}}_{{prod_site_name}}_user
MYSQL_PASSWORD: {{mysql_password_prod}}
command: [
'--character-set-server=utf8mb4',
'--collation-server=utf8mb4_unicode_ci'
]
networks:
- {{project_name}}_{{prod_site_name}}_network
{{project_name}}_{{prod_site_name}}_php:
container_name: {{project_name}}_{{prod_site_name}}_php
image: {{php_image}}
privileged: true
restart: always
networks:
- {{project_name}}_{{prod_site_name}}_network
volumes:
- $ROOT_DIR/{{project_name}}/{{prod_site_name}}/www:/var/{{project_name}}/{{prod_site_name}}/www
environment:
- TZ=Asia/Shanghai
links:
- {{project_name}}_{{prod_site_name}}_mariadb
{{project_name}}_nginx:
container_name: {{project_name}}_nginx
image: {{nginx_image}}
privileged: true
restart: always
networks:
- {{project_name}}_{{test_site_name}}_network
- {{project_name}}_{{prod_site_name}}_network
ports:
- 80:80
- 443:443
volumes:
- $ROOT_DIR/{{project_name}}/{{test_site_name}}/www:/var/{{project_name}}/{{test_site_name}}/www
- $ROOT_DIR/{{project_name}}/{{prod_site_name}}/www:/var/{{project_name}}/{{prod_site_name}}/www
- $ROOT_DIR/{{project_name}}/nginx/conf.d:/etc/nginx/conf.d
- $ROOT_DIR/{{project_name}}/nginx/ssl:/etc/nginx/ssl
environment:
- TZ=Asia/Shanghai
links:
- {{project_name}}_{{test_site_name}}_php
- {{project_name}}_{{prod_site_name}}_php
networks:
{{project_name}}_{{test_site_name}}_network:
name: {{project_name}}_{{test_site_name}}_network
{{project_name}}_{{prod_site_name}}_network:
name: {{project_name}}_{{prod_site_name}}_network
2.3.3唾那、tpl/default.conf.tpl
server {
listen 80;
listen 443 ssl;
server_name {{dns_test}};
#ssl on;
ssl_certificate /etc/nginx/ssl/{{ssl_certificate_test}};
ssl_certificate_key /etc/nginx/ssl/{{ssl_certificate_key_test}};
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照這個協議配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照這個套件配置
ssl_prefer_server_ciphers on;
location / {
root /var/{{project_name}}/{{test_site_name}}/www;
index index.html index.htm index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
fastcgi_pass {{project_name}}_{{test_site_name}}_php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/{{project_name}}/{{test_site_name}}/www$fastcgi_script_name;
include fastcgi_params;
}
}
server {
listen 80;
listen 443 ssl;
server_name {{dns_prod}};
#ssl on;
ssl_certificate /etc/nginx/ssl/{{ssl_certificate_prod}};
ssl_certificate_key /etc/nginx/ssl/{{ssl_certificate_key_prod}};
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照這個協議配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照這個套件配置
ssl_prefer_server_ciphers on;
location / {
root /var/{{project_name}}/{{prod_site_name}}/www;
index index.html index.htm index.php;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ \.php$ {
fastcgi_pass {{project_name}}_{{prod_site_name}}_php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/{{project_name}}/{{prod_site_name}}/www$fastcgi_script_name;
include fastcgi_params;
}
}
2.3.4、install.sh
#!/bin/bash
export ROOT_DIR="/dockers" # 項目發(fā)布目錄的上一級目錄
. config.sh # 引入配置文件腳本
. common/create_yml.sh # 引入創(chuàng)建 docker-compose.yml 文件的腳本
project_name=${config["project_name"]} # 項目名稱
test_site_name=${config["test_site_name"]} # 測試站點名稱
prod_site_name=${config["prod_site_name"]} # 生產站點名稱
# 在主機上創(chuàng)建相關掛載目錄褪尝,會在安裝時掛載到 docker 上
mkdir -p $ROOT_DIR/$project_name/$test_site_name/www # 測試站點頁面目錄
mkdir -p $ROOT_DIR/$project_name/$prod_site_name/www # 生產站點頁面目錄
mkdir -p $ROOT_DIR/$project_name/nginx/conf.d # nginx 配置目錄
mkdir -p $ROOT_DIR/$project_name/nginx/ssl # ssl 證書文件目錄
# 從安裝模版目錄里拷貝相關模板到掛載目錄下
cp -f tpl/index_1.html.tpl $ROOT_DIR/$project_name/$test_site_name/www/index.html
cp -f tpl/index_2.html.tpl $ROOT_DIR/$project_name/$prod_site_name/www/index.html
cp -f tpl/index_1.php.tpl $ROOT_DIR/$project_name/$test_site_name/www/index.php
cp -f tpl/index_2.php.tpl $ROOT_DIR/$project_name/$prod_site_name/www/index.php
cp -f tpl/testdb_1.php.tpl $ROOT_DIR/$project_name/$test_site_name/www/testdb.php
cp -f tpl/testdb_2.php.tpl $ROOT_DIR/$project_name/$prod_site_name/www/testdb.php
cp -f tpl/default.conf.tpl $ROOT_DIR/$project_name/nginx/conf.d/default.conf
# 根據模版自動生成相應文件
for key in ${!config[@]}
do
sed -i "s/{{$key}}/${config[$key]}/g" $ROOT_DIR/$project_name/$test_site_name/www/index.html
sed -i "s/{{$key}}/${config[$key]}/g" $ROOT_DIR/$project_name/$prod_site_name/www/index.html
sed -i "s/{{$key}}/${config[$key]}/g" $ROOT_DIR/$project_name/$test_site_name/www/index.php
sed -i "s/{{$key}}/${config[$key]}/g" $ROOT_DIR/$project_name/$prod_site_name/www/index.php
sed -i "s/{{$key}}/${config[$key]}/g" $ROOT_DIR/$project_name/$test_site_name/www/testdb.php
sed -i "s/{{$key}}/${config[$key]}/g" $ROOT_DIR/$project_name/$prod_site_name/www/testdb.php
sed -i "s/{{$key}}/${config[$key]}/g" $ROOT_DIR/$project_name/nginx/conf.d/default.conf
done
# 將安裝源 ssl 目錄里的證書文件分發(fā)到對應的掛載目錄下
cp -f ssl/*.* $ROOT_DIR/$project_name/nginx/ssl/.
cp -f ssl/*.* $ROOT_DIR/$project_name/nginx/ssl/.
#安裝 docker
docker-compose up -d
#向測試站點的 php 容器里安裝 PDO 擴展
echo "往 $project_name_$test_site_name 的php容器里安裝 PDO擴展..."
docker cp common/install_pdo_in_container.sh ${project_name}_${test_site_name}_php:/var/$project_name/$test_site_name/. # 將 pdo 安裝腳本文件由屬主機拷入 php 容器里的/var/homework_test 目錄下
docker exec -i ${project_name}_${test_site_name}_php bash /var/$project_name/$test_site_name/install_pdo_in_container.sh # 在 php 容器里運行 pdo 腳本闹获,安裝 mysq 的 pdo 驅動
docker restart ${project_name}_${test_site_name}_php # 重啟 php 容器里的 php 服務
echo "往php容器里安裝 PDO擴展結束!"
#向生產站點的 php 容器里安裝 PDO 擴展
echo "往 $project_name_$prod_site_name 的php容器里安裝 PDO擴展..."
docker cp common/install_pdo_in_container.sh ${project_name}_${prod_site_name}_php:/var/$project_name/$prod_site_name/. # 將 pdo 安裝腳本文件由屬主機拷入 php 容器里的/var/homework_test 目錄下
docker exec -i ${project_name}_${prod_site_name}_php bash /var/$project_name/$prod_site_name/install_pdo_in_container.sh # 在 php 容器里運行 pdo 腳本河哑,安裝 mysq 的 pdo 驅動
docker restart ${project_name}_${prod_site_name}_php # 重啟 php 容器里的 php 服務
echo "往php容器里安裝 PDO擴展結束避诽!"
2.3.5、uninstall.sh
#!/bin/bash
export ROOT_DIR="/dockers" # 項目發(fā)布目錄的上一級目錄
. config.sh # 引入配置文件腳本
. common/create_yml.sh # 引入創(chuàng)建 docker-compose.yml 文件的腳本
# 卸載 docker
docker-compose down
2.3.6璃谨、common/create_yml.sh
#!/bin/bash
# 從安裝模版目錄里拷貝 docker 編排文件模板到掛載目錄下
cp -f tpl/docker-compose.yml.tpl docker-compose.yml
# 根據 docker 編排模版自動生成 docker 編排文件
for key in ${!config[@]}
do
echo $key
sed -i "s/{{$key}}/${config[$key]}/g" docker-compose.yml
done
2.3.7沙庐、common/install_pdo_in_container.sh
#!/bin/bash
# 以下操作是進入 php 的 docker 容器里執(zhí)行的
cd /usr/local/bin
./docker-php-ext-install pdo_mysql
./docker-php-ext-install mysql
exit
2.3.8、其他幾個測試網頁模板文件
1)tpl/index_1.html.tpl
{{dns_test}}/index.html
2)tpl/index_1.php.tpl
<?php
echo "{{dns_test}}/index.php";
?>
3)tpl/testdb_1.php.tpl
<?php
$PDO = new PDO('mysql:host={{project_name}}_{{test_site_name}}_mariadb;dbname=mysql', 'root', '{{mysql_root_password_test}}');
var_dump($PDO);
$stmt=$PDO->prepare('select count(*) as userCount from user');
$stmt->execute();
echo '<br>';
echo 'rowCount='.$stmt->rowCount().'<br>';
while ($row=$stmt->fetch(PDO::FETCH_ASSOC)) {
echo 'userCount='.$row['userCount'].'<br>';
}
?>
4)tpl/index_2.html.tpl
{{dns_prod}}/index.html
5)tpl/index_2.php.tpl
<?php
echo "{{dns_prod}}/index.php";
?>
6)tpl/testdb_2.php.tpl
<?php
$PDO = new PDO('mysql:host={{project_name}}_{{prod_site_name}}_mariadb;dbname=mysql', 'root', '{{mysql_root_password_prod}}');
var_dump($PDO);
$stmt=$PDO->prepare('select count(*) as userCount from user');
$stmt->execute();
echo '<br>';
echo 'rowCount='.$stmt->rowCount().'<br>';
while ($row=$stmt->fetch(PDO::FETCH_ASSOC)) {
echo 'userCount='.$row['userCount'].'<br>';
}
?>
2.4佳吞、運行安裝腳本
為了便于說明轨功,我按照我的安裝目錄結構來進行安裝,您可以根據自己的喜好來選擇容达。安裝目錄為:/dockers/demo_install古涧,該目錄下包含的文件如下圖:
在 shell 里運行命令,檢查 dockers 安裝情況
[root@VM_16_17_centos demo_install]# docker ps
發(fā)現我的電腦里目前沒有 docker 容器在運行
運行 install.sh
[root@VM_16_17_centos demo_install]# ./install.sh
如果不出意外花盐,會自動完成安裝羡滑!安裝結果如下圖:
2.5、瀏覽器訪問測試
利用瀏覽器訪問網址:
- http://myapitest.xxxxxx.com/index.html
- http://myapitest.xxxxxx.com/index.php
- http://myapitest.xxxxxx.com/testdb.php
- http://myapi.xxxxxx.com/index.html
- http://myapi.xxxxxx.com/index.php
- http://myapi.xxxxxx.com/testdb.php
- https://myapitest.xxxxxx.com/index.html
- https://myapitest.xxxxxx.com/index.php
- https://myapitest.xxxxxx.com/testdb.php
- https://myapi.xxxxxx.com/index.html
- https://myapi.xxxxxx.com/index.php
-
https://myapi.xxxxxx.com/testdb.php
經測試都能成功訪問算芯,選其中有代表性的訪問實例截圖如下:
瀏覽器訪問站點實例
同理可以測試卸載:
[root@VM_16_17_centos demo_install]# ./uninstall.sh
以上腳本安裝柒昏、卸載測試成功。請參考熙揍!
至此职祷,已經完全實現了Docker在一臺服務器上搭建支持80、443端口訪問的測試届囚、生產雙站點系統有梆。下面的工作就是利用git給兩個網站進行代碼開發(fā)和部署工作了!
本實例代碼已上傳到 github 意系,敬請下載試用泥耀、參考。地址為:
https://github.com/tanbushi/DNMP
上一篇:Docker搭建LNMP環(huán)境實戰(zhàn)(九):安裝mariadb
下一篇:完結
所屬文集:Docker搭建LNMP環(huán)境實戰(zhàn)