網站運行環境(從0到1寫一個網站)

這是《從0到1寫一個網站》系列第3篇文章。這篇文章主要介紹基於雲服務器的生產環境的搭建,以及CI/CD等其它工具的搭建。雲服務器要想做一個網站,首先你得有一臺服務器。感謝我們來到瞭雲時代,現在在雲平臺上搭建一臺雲服務器非常方便,不用自己去折騰硬件搭建一臺服務器瞭。我自己是用的阿裡雲。用什麼平臺取決於你自己喜好,以及去哪能薅到羊毛。AWS和GCP好像都是用信用卡可以薅,而國內的雲平臺一般是可以用學生身份比較便宜地薅到。偶爾也會搞雙十一之類的活動,價格也比較便宜,一年就一兩百塊左右。買雲服務器要註意的主機所在的機房。國外或者香港地區所在的機房的服務器一般會貴一點,但是可以順便搭個梯子自己用。國內的機房,盡量選自己的目標用戶更近的機房,這樣網絡訪問延遲能夠稍微低一些。個人網站的話,一般最低配置就行瞭。我的個人網站現在就是用的阿裡雲的1核2G,1M帶寬的最低配版服務器。但低配的話,需要在性能上和開發過程中多下一些功夫。因為帶寬低,前端資源需要盡量放在CDN加速;CPU和內存低,盡量使用本地機器來做CI/CD的runner機器。這些小技巧會在後面的文章慢慢介紹。域名雲服務器給我們的是一個固定的公網IP。有瞭公網IP,別人就能夠訪問到我們的服務瞭。但是ip不太容易記,而且有些場景是需要域名的(比如做微信公眾號的時候、使用HTTPS等),所以申請一個域名還是很有必要的。域名申請比較簡單,在很多雲平臺上也可以直接購買域名和配置ip到域名的映射關系。域名後綴無所謂,看自己喜歡。.com是用得最廣泛、最多的。國內也有一些.com.cn,自己的個人網站的話,也可以使用.me、.site等。一年大概幾十塊錢,首次購買一般有優惠。但域名備案比較耗時,如果是國內申請的域名或者用瞭國內的服務器,就需要備案(在阿裡雲上買域名可以在上面直接上傳資料備案),建議盡早申請。安裝docker操作系統隻要是Linux就行,具體哪個發行版影響不大。服務器搞定後,先把自己本地ssh生成的公鑰放到服務器的authorized_keys裡面,方便以後可以不需要密碼直接登錄服務器。然後下載安裝docker,推薦自帶的yum/apt安裝就行瞭,安裝docker完成後,可以用啟動一個nginx實例,在本地用瀏覽器,看能不能訪問到。這裡如果有域名的就可以配置一下域名瞭,看是否能正常解析。sudo apt-get install docker可以啟動一個portainer,它是一個管理docker的web界面工具,輕量級。特別適合對docker命令不太熟悉或者不喜歡使用docker命令的同學。使用下面這個命令可以輕松創建一個portainer容器:docker run -d -p 9000:9000 \
–privileged –restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
–name portainer portainer/portainer安裝gogsgogs是一個代碼托管平臺,類似於Github、Gitlab等。但是Github網速較慢,而Gitlab比較耗資源,如果服務器資源很少的話,就不適合瞭。gogs非常輕量,而且可以使用docker快速部署。sudo docker run -d \
–name=gogs –restart=always \
-p 10022:22 -p 10080:3000 \
gogs/gogs啟動後,在瀏覽器訪問服務器的10080端口,就可以打開gogs瞭,第一次打開需要進行初始化設置,這裡註意端口和url的設置:安裝完成後,去個人信息裡面配置一下ssh的公鑰,然後創建自己的項目,這個就不詳細介紹瞭。安裝dronedrone是一個輕量級的CI/CD工具。使用docker可以快速部署一個drone服務,並自動與gogs連接:它也可以支持Github、Gitlab、Gitea、Bitbucket等平臺,需要在創建時傳入不同的環境變量。具體用法可以參考官方文檔:https://docs.drone.io/docker run \
-e DRONE_AGENTS_ENABLED=true \
-e DRONE_GOGS_SERVER=http://yasinshaw.com:10080 \
-e DRONE_RPC_SECRET=your_drone_secret \
-e DRONE_SERVER_HOST=yasinshaw.com:20080 \
-e DRONE_SERVER_PROTO=http \
-e DRONE_USER_CREATE=username:yasin,admin:true \
-p 20080:80 \
-p 20443:443 \
–restart=always \
–detach=true \
–name=drone \
drone/drone:1用瀏覽器打開服務器的20080端口,會出現一個登錄界面。需要使用gogs的管理員賬號密碼登錄。這裡需要加上DRONE_USER_CREATE配置,username的值為你的管理員用戶名,這樣才能開啟項目的Trusted Mode,才能在構建項目過程中掛主機的volume。具體參考:https://docs.drone.io/quickstart/cli/#trusted-mode登錄以後,會自動同步gogs的項目,並且會在gogs那邊自動創建一個webhook。在我們的項目根目錄創建一個.drone.yml文件,即可配置drone的CI/CD流程,然後提交代碼就可以自動觸發CI/CD瞭,是不是非常簡單?但是這個時候我們隻有drone server,沒有drone runner,所以觸發後沒有runner去執行任務,會一直卡在那。drone支持多種類型的runner,包括docker、ssh等。我們可以創建一個docker runner用來執行build等任務,創建一個ssh runner用來遠程登錄到我們的服務器重啟部署服務。我們可以在服務器或者我們本機創建runner。個人更推薦用本機的,因為服務器比較垃圾,本機資源更多。 docker run -d \
-e DRONE_RPC_PROTO=http \
-e DRONE_RPC_HOST=yasinshaw.com:20080 \
-e DRONE_RPC_SECRET=your_drone_secret \
-e DRONE_RUNNER_CAPACITY=2 \
-e DRONE_RUNNER_NAME=runner-docker \
-e DOCKER_API_VERSION=1.38 \
-v /var/run/docker.sock:/var/run/docker.sock \
-p 21300:3000 \
–restart always \
–name runner \
drone/drone-runner-docker

docker run -d \
-e DRONE_RPC_PROTO=http \
-e DRONE_RPC_HOST=yasinshaw.com:20080 \
-e DRONE_RPC_SECRET=your_drone_secret \
-e DOCKER_API_VERSION=1.38 \
-p 22300:3000 \
–restart always \
–name runner-ssh \
drone/drone-runner-ssh這裡需要設置一下DOCKER_API_VERSION,即使用的docker API的版本。默認是使用的drone支持的最高的版本,但如果機器的docker版本更低,drone會提示,docker api不能高於xx版本,這裡啟動runner的時候設置一下DOCKER_API_VERSION就好。配置drone具體的配置後面可以在開源的項目代碼中找到。這裡可以先給大傢看一下之前配置的一個前端項目。大概的流程就是在本地build,build完成後打包鏡像,然後上傳到阿裡雲鏡像倉庫。然後上服務器拉取最新的鏡像,再重啟docker。僅供參考:kind: pipeline
name: build

steps:
– name: npm install
  image: node:12-buster-slim
  commands:
    – npm install -g cnpm –registry=https://registry.npm.taobao.org
    – cnpm install
    – cnpm i @nuxtjs/axios
    – cnpm i @nuxtjs/toast
    – cnpm i @nuxtjs/proxy

– name: npm build
  image: node:12-buster-slim
  commands:
    – npm run build

– name: docker
  image: plugins/docker
  settings:
    username: yasinshaw
    password:
      from_secret: docker_password
    repo: registry.cn-hangzhou.aliyuncs.com/yasinshaw/yasinshaw-portal
    registry: registry.cn-hangzhou.aliyuncs.com
    mirror: https://mzayqkhl.mirror.aliyuncs.com
    tags: latest


kind: pipeline
type: ssh
name: deploy

server:
host: yasinshaw.com
user: root
ssh_key:
  from_secret: ssh_key

steps:
– name: pull image
  environment:
    DOCKER_PASSWORD:
      from_secret: docker_password
  commands:
    – docker login –username=yasinshaw –password=$DOCKER_PASSWORD registry.cn-hangzhou.aliyuncs.com
    – docker pull registry.cn-hangzhou.aliyuncs.com/yasinshaw/yasinshaw-portal:latest

– name: remove old container
  failure: ignore
  commands:
    – docker rm -f -v portal

– name: start container
  commands:
    – docker run -d –name=portal –restart=always -p 3000:3000 registry.cn-hangzhou.aliyuncs.com/yasinshaw/yasinshaw-portal:latest
depends_on:
– build這裡的secret需要去drone的界面上配置。secret的具體用法可以參考官方文檔:https://docs.drone.io/secret/至此,一個基於docker的簡單的CI/CD流程就搭建完成,下一步就可以創建項目開始開發啦~關於作者我是Yasin,一個愛寫博客的技術人微信公眾號:編瞭個程個人網站:https://yasinshaw.com公眾號排版最佳,第一時間發佈,閱讀體驗Max,歡迎關註。還有學習資源、技術交流群和大廠內推哦

本文出自快速备案,转载时请注明出处及相应链接。

本文永久链接: https://kuaisubeian.cc/48685.html

kuaisubeian