整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          如何設計出轉化率高的網站

          如何設計出轉化率高的網站

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



          1、導航清晰簡單 導航一定要清晰簡單,如果客戶來到網站,卻因為導航復雜而不能快速找到需要的信息或產品,這必然會流失很大一部分潛在客戶。另外網站除了在視覺上吸引客戶外,還需要保證網站的穩定性、功能性和易用性。

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

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

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

          了解更多網絡營銷請關注珠海網站建設-杰作科技:

          www.jiezuo.org

          www.jiezuo.net

          www.jzuo.cn

          ww.zhjiezuo.com

          珠海網站建設.com

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

          者:等你歸去來

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

          使是最小的側項目也值得它的CI/CD管道

          前言

          使用當今的工具,建立一個簡單的CI/CD管道并不困難。即使是做一個小項目,這樣做也是學習很多東西的好方法。Docker、GitLab和Portainer是用于此設置的一些很棒的組件。

          一個Demo小項目

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

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

          廢話不說,直接上代碼

          {
          "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]模板應用于此文件,以生成最終的web頁面。

          基于Docker的多層構建

          生成web 頁面之后,將它們復制到nginx image中——部署在目標機器上的image。

          然后構建完成了兩個部分,由于多階段構建:

          · 資產的生成

          · 創建包含資產的最終映像

          這是Dockerfile用于構建:

          # 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
          

          本地測試

          測試目的:只需要clone repo 然后在運行test.sh。test.sh 會創建一個image然后運行。

          $ 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
          

          在輸出的信息下面有一個網址 http://localhost:32768

          我們打開網址:

          環境

          在swarm中運行docker

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

          讓應用程序運行在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私有倉庫中

          · 服務處于具有兩個副本的復制模式,這意味著服務的兩個任務/容器同時運行。VIP(虛擬IP地址)通過集群與服務相關聯,因此每個針對服務的請求都在兩個副本之間實現負載平衡。

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

          · 該服務附加到外部代理網絡,因此TLS終端(運行于部署在集群上的另一個服務中,但不在此項目中)可以向www服務發送請求。

          我們通過如下命令運行docker服務:

          docker stack deploy -c sophia.yml sophia_events
          

          Docker管理平臺portainer.io

          Portainer平臺有一個很棒的web UI界面,它允許用戶非常容易地管理Docker主機和Docker集群。下面是Portainer界面的截圖,它列出了集群中可用的應用。

          我們看到有三個實例

          · portainer自己

          · Sophia_events

          · TLS

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

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

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

          然后,所有針對端口8888上的本地機器的請求都通過ssh發送到虛擬機上的端口9000。9000是Portainer在VM上運行的端口,但是這個端口不對外開放,所以是相對安全的。

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

          Gitlab runner

          GitLab runner 是一個負責執行. GitLab –ci.yml 文件的驅動 ,當代碼被push到主分支的時候,會自動執行預先寫好的腳本,從而實現自動化。對于這個項目,我們將自己的GitLab runner定義為VM上的docker服務。

          下面是配置腳本:

          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上注冊額外的runners

          注冊后,我們直接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成功,我們就會在gitlab上看到項目的信息:

          當研發把代碼提交到gitlab上,runners會一次執行:測試、構建、部署等在.gitlab-ci.yml里面定義好的操作。

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

          · 構建階段構建image并將其推送到GitLab registry 。

          · deploy階段通過發送到Portainer的webhook觸發服務的更新。WWW_WEBHOOK變量在GitLab.com項目頁面的CI/CD設置中定義。

          注:

          這個runners在swarm的容器中運行。我們可以使用一個共享的runner——他們可以在托管的主機上共享資源——但是,runner需要訪問Portainer endpoint (發送webhook),因為我不希望Portainer被玩不訪問。

          此外,因為運行器在容器中運行,所以它將webhook發送到Docker0橋接網絡的IP地址,以便通過它在主機上公開的端口9000與Portainer聯系。因此,webhook的格式如下:http://172.17.0.1:9000/api[…]a7-4af2-a95b-b748d92f1b3b

          部署過程回顧

          網站新版本的更新工作流程如下:

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

          2. GitLab運行器執行. GitLab -ci.yml中定義的操作。

          3. GitLab運行器調用Portainer中定義的webhook。

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

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

          小案例

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

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

          下面的截圖顯示了GitLab.com項目頁面中的提交觸發的信息

          在Portainer端,接收webhook并執行服務更新。我們無法在這里清楚地看到它,但是已經更新了一個副本,使web站點可以通過第二個副本訪問。然后,幾秒鐘后,第二個副本被更新。

          總結

          即使對于這個小項目,設置一個CI/CD管道也是一個很好的練習,尤其是要更加熟悉GitLab。這是一個優秀的產品。這也是使用期待已久的Portainer(1.19.2)最新版本的webhook特性的好機會。另外,對于像這樣的一個小項目,使用Docker Swarm是很簡單的——它很酷,而且很容易使用!

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

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


          主站蜘蛛池模板: 无码人妻久久久一区二区三区| 一区二区视频在线免费观看| 日韩在线视频一区| 精品成人一区二区三区四区| 精品国产毛片一区二区无码| 精品一区二区三区视频在线观看 | 久久精品国产一区二区三区日韩| 一区二区三区内射美女毛片| 精品3d动漫视频一区在线观看| 日本一区中文字幕日本一二三区视频 | 蜜桃视频一区二区| 黄桃AV无码免费一区二区三区| 亚洲成a人一区二区三区| 久久一本一区二区三区| 呦系列视频一区二区三区| 午夜精品一区二区三区在线观看| 国模无码一区二区三区不卡| 日本免费一区二区三区| 日韩一区二区三区不卡视频 | 国产在线观看精品一区二区三区91 | 大伊香蕉精品一区视频在线 | 伊人无码精品久久一区二区| 夜夜嗨AV一区二区三区| 久久无码AV一区二区三区| 亚洲日韩中文字幕一区| 久久一区二区精品| 香蕉视频一区二区三区| 日本中文字幕在线视频一区| 精品爆乳一区二区三区无码av| 波多野结衣AV无码久久一区| 国产精品日韩欧美一区二区三区 | 国产精品高清视亚洲一区二区| 中文字幕在线观看一区| 国产成人精品一区在线| 国产aⅴ一区二区| 美女视频一区二区三区| 日韩精品无码Av一区二区| 无码av不卡一区二区三区| 日韩有码一区二区| 99久久精品国产高清一区二区| 亚洲片一区二区三区|