Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 国产成人精品免费午夜,欧美日韩亚洲国产综合,国产成人精品一区二区免费

          整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          如何設(shè)計(jì)出轉(zhuǎn)化率高的網(wǎng)站

          如何設(shè)計(jì)出轉(zhuǎn)化率高的網(wǎng)站

          化率高的網(wǎng)站著陸頁是指用戶在搜索相差產(chǎn)品信息關(guān)鍵詞時(shí),進(jìn)到你的網(wǎng)站并且發(fā)起咨詢,那么怎樣的著陸頁能夠吸引用戶呢?下面就讓珠海建站杰作科技小編帶大家來了解一下。



          1、導(dǎo)航清晰簡單 導(dǎo)航一定要清晰簡單,如果客戶來到網(wǎng)站,卻因?yàn)閷?dǎo)航復(fù)雜而不能快速找到需要的信息或產(chǎn)品,這必然會(huì)流失很大一部分潛在客戶。另外網(wǎng)站除了在視覺上吸引客戶外,還需要保證網(wǎng)站的穩(wěn)定性、功能性和易用性。

          2、突出產(chǎn)品的價(jià)值 大多數(shù)用戶訪問網(wǎng)站是帶著需求的,希望網(wǎng)站能幫助他們解決一定的問題,這就需要網(wǎng)站突出產(chǎn)品或服務(wù)能解決哪些問題,用戶購買后有些什么好處,這樣的信息才能抓住用戶眼球。也許你會(huì)問,如何知道網(wǎng)站的信息是否滿足客戶的需求,最簡單的方法是做在線調(diào)查。

          3、網(wǎng)頁設(shè)計(jì)大氣美觀 網(wǎng)頁大氣美觀的網(wǎng)站能提升企業(yè)的形象,顯得更專業(yè),給用戶一種“高大上”感覺。這個(gè)需要UI設(shè)計(jì)師根據(jù)企業(yè)的情況用心設(shè)計(jì),打造出既符合企業(yè)氣質(zhì)又能提升企業(yè)形象的網(wǎng)頁效果。

          4、分享用戶評(píng)價(jià) 產(chǎn)品好不好,除了本身質(zhì)量之外,還要看產(chǎn)品的口碑好不好。網(wǎng)站上的用戶評(píng)價(jià)是體現(xiàn)口碑最直接的一種方式,如果網(wǎng)站分享出客戶的綜合評(píng)價(jià)或評(píng)分,一方面能幫助新客戶直觀的了解產(chǎn)品在別的客戶那里的使用情況,另一方面大大促進(jìn)產(chǎn)品銷售機(jī)會(huì)。 5、持續(xù)改進(jìn) 為了持續(xù)提升用戶體驗(yàn),還需要不斷改進(jìn)完善網(wǎng)站設(shè)計(jì),嘗試新的方法和技術(shù),減少客戶流失,提升轉(zhuǎn)化率。

          了解更多網(wǎng)絡(luò)營銷請(qǐng)關(guān)注珠海網(wǎng)站建設(shè)-杰作科技:

          www.jiezuo.org

          www.jiezuo.net

          www.jzuo.cn

          ww.zhjiezuo.com

          珠海網(wǎng)站建設(shè).com

          原文鏈接:http://www.jiezuo.net/yingxiaodongtai/857.html

          者:等你歸去來

          出處:https://www.cnblogs.com/yougewe/p/13865184.html

          使是最小的側(cè)項(xiàng)目也值得它的CI/CD管道

          前言

          使用當(dāng)今的工具,建立一個(gè)簡單的CI/CD管道并不困難。即使是做一個(gè)小項(xiàng)目,這樣做也是學(xué)習(xí)很多東西的好方法。Docker、GitLab和Portainer是用于此設(shè)置的一些很棒的組件。

          一個(gè)Demo小項(xiàng)目

          這里我們以https://sophia.events/為案例,我們保證頁面的event為最新的。頁面的events在這里[1]

          免責(zé)聲明:這是一個(gè)簡單的項(xiàng)目,但是項(xiàng)目的復(fù)雜性在這里并不重要。我們將詳細(xì)介紹的CI/CD管道的組件可以以幾乎相同的方式用于更復(fù)雜的項(xiàng)目。不過,它們非常適合微服務(wù)。

          廢話不說,直接上代碼

          {
          "events": [
          {
          "title": "All Day DevOps 2018",
          "desc": "We're back with 100, 30-minute practitioner-led sessions and live Q&A on Slack. Our 5 tracks include CI/CD, Cloud-Native Infrastructure, DevSecOps, Cultural Transformations, and Site Reliability Engineering. 24 hours. 112 speakers. Free online.",
          "date": "17 octobre 2018, online event",
          "ts": "20181017T000000",
          "link": "https://www.alldaydevops.com/",
          "sponsors": [{"name": "all-day-devops"}]
          },
          {
          "title": "Création d'une Blockchain d'entreprise (lab) & introduction aux smart contracts",
          "desc": "Venez avec votre laptop ! Nous vous proposons de nous rejoindre pour réaliser la création d'un premier prototype d'une Blockchain d'entreprise (Lab) et avoir une introduction aux smart contracts.",
          "ts": "20181004T181500",
          "date": "4 octobre à 18h15 au CEEI",
          "link": "https://www.meetup.com/fr-FR/IBM-Cloud-Cote-d-Azur-Meetup/events/254472667/",
          "sponsors": [{"name": "ibm"}]
          },
          …
          ]
          }
          

          將mustache[2]模板應(yīng)用于此文件,以生成最終的web頁面。

          基于Docker的多層構(gòu)建

          生成web 頁面之后,將它們復(fù)制到nginx image中——部署在目標(biāo)機(jī)器上的image。

          然后構(gòu)建完成了兩個(gè)部分,由于多階段構(gòu)建:

          · 資產(chǎn)的生成

          · 創(chuàng)建包含資產(chǎn)的最終映像

          這是Dockerfile用于構(gòu)建:

          # Generate the assets
          FROM node:8.12.0-alpine AS build
          COPY . /build
          WORKDIR /build
          RUN npm i
          RUN node clean.js
          RUN ./node_modules/mustache/bin/mustache events.json index.mustache > index.html# Build the final image used to serve 
          them 
          FROM nginx:1.14.0
          COPY --from=build /build/*.html /usr/share/nginx/html/
          COPY events.json /usr/share/nginx/html/
          COPY css /usr/share/nginx/html/css
          COPY js /usr/share/nginx/html/js
          COPY img /usr/share/nginx/html/img
          

          本地測(cè)試

          測(cè)試目的:只需要clone repo 然后在運(yùn)行test.sh。test.sh 會(huì)創(chuàng)建一個(gè)image然后運(yùn)行。

          $ git clone :lucj/sophia.events.git$ cd 
          sophia.events$ ./test.sh
          Sending build context to Docker daemon 2.588MB
          Step 1/12 : FROM node:8.12.0-alpine AS build 
          ---> df48b68da02a
          Step 2/12 : COPY . /build 
          ---> f4005274aadf
          Step 3/12 : WORKDIR /build 
          ---> Running in 5222c3b6cf12Removing intermediate container 5222c3b6cf12 
          ---> 81947306e4af
          Step 4/12 : RUN npm i 
          ---> Running in de4e6182036bnpm notice created a lockfile as package-lock.json. You should commit this file.npm WARN www@1.0.0 No repository field.added 2 packages from 3 contributors and audited 2 packages in 1.675sfound 0 vulnerabilitiesRemoving intermediate container de4e6182036b ---> d0eb4627e01f
          Step 5/12 : RUN node clean.js 
          ---> Running in f4d3c4745901Removing intermediate container f4d3c4745901 
          ---> 602987ce7162
          Step 6/12 : RUN ./node_modules/mustache/bin/mustache events.json index.mustache > index.html 
          ---> Running in 05b5ebd73b89Removing intermediate container 05b5ebd73b89 
          ---> d982ff9cc61c
          Step 7/12 : FROM nginx:1.14.0 
          ---> 86898218889a
          Step 8/12 : COPY --from=build /build/*.html /usr/share/nginx/html/ 
          ---> Using cache 
          ---> e0c25127223f
          Step 9/12 : COPY events.json /usr/share/nginx/html/ 
          ---> Using cache 
          ---> 64e8a1c5e79d
          Step 10/12 : COPY css /usr/share/nginx/html/css 
          ---> Using cache 
          ---> e524c31b64c2
          Step 11/12 : COPY js /usr/share/nginx/html/js 
          ---> Using cache 
          ---> 1ef9dece9bb4
          Step 12/12 : COPY img /usr/share/nginx/html/img 
          ---> e50bf7836d2fSuccessfully built e50bf7836d2fSuccessfully tagged registry.gitlab.com/lucj/sophia.events:latest=> web site available on http://localhost:32768
          

          在輸出的信息下面有一個(gè)網(wǎng)址 http://localhost:32768

          我們打開網(wǎng)址:

          環(huán)境

          在swarm中運(yùn)行docker

          在這里我們用swarm來管理docker。而不是用K8s,swarm稍微簡單些, 也便于大家通過這篇文章來自己實(shí)現(xiàn)CI/CD。

          讓應(yīng)用程序運(yùn)行在docker中

          docker compose 如下

          version: "3.7"
          services: 
           www: 
           image: registry.gitlab.com/lucj/sophia.events 
           networks: 
           - proxy 
           deploy: 
           mode: replicated 
           replicas: 2 
           update_config: 
           parallelism: 1 
           delay: 10s 
           restart_policy: 
           condition: on-failurenetworks: 
           proxy: 
           external: true
          

          簡單說明:

          · image被放在了gitlab.com私有倉庫中

          · 服務(wù)處于具有兩個(gè)副本的復(fù)制模式,這意味著服務(wù)的兩個(gè)任務(wù)/容器同時(shí)運(yùn)行。VIP(虛擬IP地址)通過集群與服務(wù)相關(guān)聯(lián),因此每個(gè)針對(duì)服務(wù)的請(qǐng)求都在兩個(gè)副本之間實(shí)現(xiàn)負(fù)載平衡。

          · 每次更新服務(wù)(部署web站點(diǎn)的新版本)時(shí),更新一個(gè)副本,10秒后更新第二個(gè)副本。這確保在更新過程中web站點(diǎn)仍然可用。我們也可以使用回滾策略,但是現(xiàn)在還不需要。

          · 該服務(wù)附加到外部代理網(wǎng)絡(luò),因此TLS終端(運(yùn)行于部署在集群上的另一個(gè)服務(wù)中,但不在此項(xiàng)目中)可以向www服務(wù)發(fā)送請(qǐng)求。

          我們通過如下命令運(yùn)行docker服務(wù):

          docker stack deploy -c sophia.yml sophia_events
          

          Docker管理平臺(tái)portainer.io

          Portainer平臺(tái)有一個(gè)很棒的web UI界面,它允許用戶非常容易地管理Docker主機(jī)和Docker集群。下面是Portainer界面的截圖,它列出了集群中可用的應(yīng)用。

          我們看到有三個(gè)實(shí)例

          · portainer自己

          · Sophia_events

          · TLS

          下面列出位于Sophia_events中的www服務(wù)的詳細(xì)信息,我們可以看到服務(wù)webhook已被激活。自從Portainer 1.19.2(到目前為止的最后一個(gè)版本)以來,這個(gè)特性就可用了,它允許我們定義一個(gè)HTTP Post端點(diǎn),可以調(diào)用它來觸發(fā)服務(wù)的更新。稍后我們將看到,GitLab運(yùn)行器負(fù)責(zé)調(diào)用這個(gè)webhook。

          注意:從屏幕截圖中可以看到,我從localhost:8888訪問Portainer UI。由于我不想將Portainer實(shí)例暴露給外部世界,所以通過ssh隧道進(jìn)行訪問,使用以下命令打開ssh隧道:

          ssh -i ~/.docker/machine/machines/labs/id_rsa -NL 8888:localhost:9000 $USER@$HOST
          

          然后,所有針對(duì)端口8888上的本地機(jī)器的請(qǐng)求都通過ssh發(fā)送到虛擬機(jī)上的端口9000。9000是Portainer在VM上運(yùn)行的端口,但是這個(gè)端口不對(duì)外開放,所以是相對(duì)安全的。

          注意:在上面的命令中,用于連接VM的ssh密鑰是Docker機(jī)器在創(chuàng)建VM期間生成的密鑰。

          Gitlab runner

          GitLab runner 是一個(gè)負(fù)責(zé)執(zhí)行. GitLab –ci.yml 文件的驅(qū)動(dòng) ,當(dāng)代碼被push到主分支的時(shí)候,會(huì)自動(dòng)執(zhí)行預(yù)先寫好的腳本,從而實(shí)現(xiàn)自動(dòng)化。對(duì)于這個(gè)項(xiàng)目,我們將自己的GitLab runner定義為VM上的docker服務(wù)。

          下面是配置腳本:

          docker run — rm -t -i \
          -v $CONFIG_FOLDER:/etc/gitlab-runner \
          gitlab/gitlab-runner register \
          --non-interactive \
          --executor "docker" \
          --docker-image docker:stable \
          --url "" \
          --registration-token "$PROJECT_TOKEN" \
          --description "Exoscale Docker Runner" \
          --tag-list "docker" \
          --run-untagged \
          --locked="false" \
          --docker-privileged
          

          可以使用PROJECT_TOKEN在gitlab上注冊(cè)額外的runners

          注冊(cè)后,我們直接start

          CONFIG_FOLDER=/tmp/gitlab-runner-configdocker run -d \ 
          --name gitlab-runner \ 
          --restart always \ 
          -v $CONFIG_FOLDER:/etc/gitlab-runner \ 
          -v /var/run/docker.sock:/var/run/docker.sock \ 
          gitlab/gitlab-runner:latest
          

          一旦start成功,我們就會(huì)在gitlab上看到項(xiàng)目的信息:

          當(dāng)研發(fā)把代碼提交到gitlab上,runners會(huì)一次執(zhí)行:測(cè)試、構(gòu)建、部署等在.gitlab-ci.yml里面定義好的操作。

          · 測(cè)試階段運(yùn)行一些預(yù)檢查以確保events. json文件格式正確并且images完整 。

          · 構(gòu)建階段構(gòu)建image并將其推送到GitLab registry 。

          · deploy階段通過發(fā)送到Portainer的webhook觸發(fā)服務(wù)的更新。WWW_WEBHOOK變量在GitLab.com項(xiàng)目頁面的CI/CD設(shè)置中定義。

          注:

          這個(gè)runners在swarm的容器中運(yùn)行。我們可以使用一個(gè)共享的runner——他們可以在托管的主機(jī)上共享資源——但是,runner需要訪問Portainer endpoint (發(fā)送webhook),因?yàn)槲也幌M鸓ortainer被玩不訪問。

          此外,因?yàn)檫\(yùn)行器在容器中運(yùn)行,所以它將webhook發(fā)送到Docker0橋接網(wǎng)絡(luò)的IP地址,以便通過它在主機(jī)上公開的端口9000與Portainer聯(lián)系。因此,webhook的格式如下:http://172.17.0.1:9000/api[…]a7-4af2-a95b-b748d92f1b3b

          部署過程回顧

          網(wǎng)站新版本的更新工作流程如下:

          1. 開發(fā)人員將一些更改推給GitLab。這些更改基本上涉及事件中的一個(gè)或多個(gè)新事件。json文件加上一些額外的贊助商的標(biāo)志。

          2. GitLab運(yùn)行器執(zhí)行. GitLab -ci.yml中定義的操作。

          3. GitLab運(yùn)行器調(diào)用Portainer中定義的webhook。

          4. 在webhook接收端,Portainer部署了www服務(wù)的新版本。它這樣做,調(diào)用Docker Swarm API。Portainer可以作為套接字/var/run/ dockerr訪問API。襪子啟動(dòng)時(shí)是綁定安裝的

          5. 然后用戶就可以在web上看到最新的信息了。

          小案例

          修改一些配置,然后push到gitlab。

          $ git commit -m 'Fix image'$ git push origin master
          

          下面的截圖顯示了GitLab.com項(xiàng)目頁面中的提交觸發(fā)的信息

          在Portainer端,接收webhook并執(zhí)行服務(wù)更新。我們無法在這里清楚地看到它,但是已經(jīng)更新了一個(gè)副本,使web站點(diǎn)可以通過第二個(gè)副本訪問。然后,幾秒鐘后,第二個(gè)副本被更新。

          總結(jié)

          即使對(duì)于這個(gè)小項(xiàng)目,設(shè)置一個(gè)CI/CD管道也是一個(gè)很好的練習(xí),尤其是要更加熟悉GitLab。這是一個(gè)優(yōu)秀的產(chǎn)品。這也是使用期待已久的Portainer(1.19.2)最新版本的webhook特性的好機(jī)會(huì)。另外,對(duì)于像這樣的一個(gè)小項(xiàng)目,使用Docker Swarm是很簡單的——它很酷,而且很容易使用!

          [1]:https://gitlab.com/lucj/sophia.events

          [2]:https://gitlab.com/lucj/sophia.events/blob/master/index.mustache


          主站蜘蛛池模板: 精品无码人妻一区二区三区18| 国产主播福利一区二区| 好爽毛片一区二区三区四| 国产高清在线精品一区二区三区| 伊人久久大香线蕉AV一区二区 | 亚洲AV成人精品日韩一区18p| 久久精品免费一区二区| 久99精品视频在线观看婷亚洲片国产一区一级在线 | 中文国产成人精品久久一区| 国产高清一区二区三区| 久久精品无码一区二区三区| 无码欧精品亚洲日韩一区夜夜嗨| 日韩一区精品视频一区二区 | 91香蕉福利一区二区三区| 好吊视频一区二区三区| 色系一区二区三区四区五区| 少妇一晚三次一区二区三区| 亚洲av乱码一区二区三区| 精品国产福利第一区二区三区| 无人码一区二区三区视频| 一区二区三区在线| 亚洲国产精品一区二区三区久久| 国产精品亚洲一区二区三区 | 国产精品一区不卡| 精品无码国产一区二区三区麻豆| 无码福利一区二区三区| 亚洲欧美日韩一区二区三区| 亚洲视频一区网站| 无码国产精品一区二区免费式直播| 国产无套精品一区二区| 久久久久一区二区三区| 日韩精品一区二区亚洲AV观看| 日韩精品无码一区二区三区免费| 亚洲一区二区电影| 中文字幕精品一区二区2021年| 亚洲AV无码一区二区大桥未久| 天堂Av无码Av一区二区三区| 日韩美女视频一区| 精品视频在线观看你懂的一区 | 亚州日本乱码一区二区三区| 亚洲一区二区三区在线|