本文是筆者實踐總結的技巧,介紹搭建雲主機的方法,主要基於Docker部署系列服務。從我的開發者需求出發,一步一步搭建本身的服務。
本文適合兜裏沒不少?又但願擁有屬於本身的雲服務的開發者,完成下面的操做,須要基本的Linux使用技能。nginx
因爲使用#
作註釋,全部命令行使用$
作前綴,表示當前是一行命令git
雲主機國內不少平臺能夠購買,騰訊的,阿里的,網易的等等,可根據本身的喜愛進行選擇,筆者選擇的是阿里雲。github
選擇好雲主機品牌之後,須要選購雲主機了,雲主機配置越高價格越貴,筆者選擇的是最低配的配置單核CPU
,1GB內存
,1M帶寬
,活動價購買的330RMB
一年,經測,能夠穩定運行後面提到的全部服務。人民幣玩家能夠選購更高的配置。
筆者購買的服務器是活動套餐,包含了1M
帶寬,因此不另外選擇。若是是直接購買,建議我的開發者能夠帶寬選擇按量計費,去年一年下來用不了幾塊錢,而1M帶寬一年200+。web
這個可根據本身的使用習慣進行選擇,下面的操做都是基於Ubuntu 16.04 x64
進行操做,若是你們跟着輸入命令,建議使用選擇同樣的系統。
我我的更喜歡Ubuntu,由於附帶的命令行工具使用起來比較便捷,默認狀況下的配置就很好,只須要不多的配置改動,用戶體驗比較好。sql
本地主機操做:docker
# 檢查公鑰是否存在 $ cat ~/.ssh/id_rsa.pub
看到一長串字符串輸出,這個是你本地電腦的公鑰,將它複製到粘貼板。若是看不到任何輸出,則輸入下面的命令生成,注意備份這兩個文件:~/.ssh/id_rsa
~/.ssh/id_rsa.pub
若是你還不知道這兩個文件是什麼,趕忙百度學習。知道他們是什麼很很很很很很很很很很很重要。shell
# 一直按回車就能夠了 $ ssh-keygen
鏈接到雲主機,配置信任公鑰apache
# xx.xx.xx.xx表示你的雲主機公網IP,此時還須要輸入密碼才能鏈接 $ ssh root@xx.xx.xx.xx $ mkdir ~/.ssh # 把粘貼板裏面的公鑰粘貼到~/.ssh/authorized_keys文件內【文件不存在vi會自動建立】 $ vi ~/.ssh/authorized_keys # 設置正確的權限,只有權限正確,纔會生效 $ chmod 700 .ssh $ chmod 600 .ssh/authorized_keys
驗證配置後端
# 退出剛剛的鏈接回到本地電腦 $ exit # 從新鏈接,若是此時不須要輸入密碼就能鏈接成功,配置正確進入下一步,若是配置失敗請回到上一步仔細檢查操做是否正確 $ ssh root@xx.xx.xx.xx
請務必確保已經驗證配置的正確性再進行下面的步驟,不然可能致使關閉ssh密碼登陸後你沒法鏈接到雲主機
api
# 編輯sshd配置文件 # 找到其中的兩個參數配置: # PasswordAuthentication # ChallengeResponseAuthentication # 將這兩個參數值修改成no: # PasswordAuthentication no # ChallengeResponseAuthentication no $ vi /etc/ssh/sshd_config # 重啓服務 $ service sshd restart
至此,你不再用擔憂ssh會被黑客破解了,只有擁有你本地電腦密匙對的人才能夠遠程登陸到雲主機。
ho-my-zsh
是一個很火爆的開源工具在github上star數5W+,能夠顯著提升命令行操做的效率,很是推薦你們安裝使用,詳細瞭解請訪問項目地址:
https://github.com/robbyrusse...
$ apt-get install zsh $ sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
因爲我選購的主機內存比較低,下降系統徹底卡死的機率,須要掛載一個虛擬內存。
虛擬內存的大小,通常不要超過當前內存大小,筆者選購的雲主機是1GB內存,因此設置1GB虛擬內存。
# 建立虛擬內存文件 $ dd if=/dev/zero of=/mnt/swap bs=1024 count=1048576 # 格式化虛擬內存文件 $ mkswap /mnt/swap # 掛載虛擬內存 $ swapon /mnt/swap # 檢查虛擬內存掛載成功 $ free -h total used free shared buff/cache available Mem: 992M 476M 77M 3.9M 438M 345M Swap: 1.0G 0B 1.0G # 配置重啓電腦後自動掛載虛擬內存 # 添加如下內容到/ect/fstab文件 # /mnt/swap swap swap defaults 0 0 $ vi /etc/fstab
爲何不開啓防火牆,由於Docker跟防火牆有衝突,某些狀況下會致使防火牆失效,爲了配置方便,系統內不開啓防火牆,直接使用雲主機提供商提供的防火牆進行端口防禦。若是使用阿里雲,在網頁後臺能夠進行配置。
域名購買的渠道不少,com
域名比較貴,cn
域名性價比最高,筆者買的是cn
域名,10年,費用300+RMB
DNS配置一個A
記錄*
指向主機公網IP便可。
DNS服務商,能夠選用域名購買放的配置後臺,也能夠轉到別的平臺上配置,騰訊家的DNSPod配置簡單易用,因此筆者一直在用這個。
DNS配置好了之後,後面ssh鏈接就能夠直接使用域名鏈接了,不須要記憶晦澀的IP地址了。
原本Docker官方安裝步驟比較多,並且服務器在國外,速度很是慢。還好,阿里工程師作了國內景象,而且寫好了一鍵安裝腳本,一行命令搞定。
另外,國內的DaoCloud也提供相似的鏡像服務https://download.daocloud.io/...,也可加速安裝過程。
$ curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -
這裏用的是DaoCloud的鏡像加速下載,固然也可到源項目地址裏面下載,只是速度略慢:
https://github.com/docker/com...
$ curl -L https://get.daocloud.io/docker/compose/releases/download/1.12.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose $ chmod +x /usr/local/bin/docker-compose
在國內從Docker官方服務器拉取鏡像,速度很是慢,還好國內不少公司作了免費的加速鏡像,阿里雲、DaoCloud都有提供這樣的免費服務。
針對 Ubuntu 15.04 16.04 的用戶,下面的配置裏面,最關鍵的是加速地址https://xxxx.mirror.aliyuncs.com
,使用阿里雲的話,須要登陸阿里雲後臺之後,訪問如下地址便可獲取到:
https://cr.console.aliyun.com...
DaoCloud在這裏獲取:
https://www.daocloud.io/mirro...
$ mkdir -p /etc/systemd/system/docker.service.d $ tee /etc/systemd/system/docker.service.d/mirror.conf <<-'EOF' [Service] ExecStart= ExecStart=/usr/bin/dockerd --registry-mirror=https://xxxx.mirror.aliyuncs.com EOF $ systemctl daemon-reload $ systemctl restart docker
提及HTTP網關,你們聽到過最多的,我想應該是 nginx
apache
,這兩個軟件確實是穩定、功能強大,而且你們都比較熟悉,可是,惟一的問題是,他們的配置實在是太太太太太太太太太繁瑣了,配置文件能夠寫得很長,老鳥也須要備份一些經常使用配置片斷,菜鳥們更是常常被一堆配置嚇到,亦或是由於一點點配置細節沒注意到耽誤了一個下午。
當咱們的站點須要支持HTTPS時,還須要額外弄到證書,購買或者申請免費的Let's Encrypt,而且咱們還得關注證書是否已通過期,我偶爾也會看到一些站點,由於證書過時,瀏覽器提示訪問不安全。
爲了解決上面提到的問題,咱們請出今天的主角Caddy Server
go
語言開發,單二進制文件運行,無任何依賴使用https://myssl.com進行評估:
第一個是筆者的網站,直接使用Caddy的默認配置,後面三個都是站點你們都認識,你們能夠感覺一下測試結果。使用Caddy,最少只須要一行配置,就能夠擁有A級的HTTPS安全防禦!
Caddyfile
是caddy的配置文件,詳細文檔查看這裏https://caddyserver.com/docs/...
如下是一個Caddyfile
示例,它的效果是,啓動www.ineva.cn
ineva.cn
兩個靜態文件虛擬主機,訪問這兩個站點時,若是訪問的是http
協議,會自動跳轉到https
,開啓HTTP2.0
支持,網站資源文件在/www
目錄下。
www.ineva.cn, ineva.cn { root /www }
開啓gzip
壓縮支持
www.ineva.cn, ineva.cn { gzip root /www }
反向代理
api.ineva.cn { proxy / localhost:8080 }
反向代理,而且讓後端服務感知到客戶端
api.ineva.cn { proxy / localhost:8080 { transparent } }
反向代理,並支持websocket
api.ineva.cn { proxy / localhost:8080 { websocket } }
文件清單
官方的caddy docker鏡像,只有基本功能,找了個alpine版的zzrot/alpine-caddy
,全部功能都編譯到裏面了,而且包很小,下面是配置內容
version: '2' services: web: image: zzrot/alpine-caddy:v0.9.5 restart: always network_mode: host
ineva.cn
須要改爲你的域名
www.ineva.cn, ineva.cn { gzip proxy / localhost:8080 { transparent } }
把上面兩個文件上傳到雲主機/docker/caddy
目錄
$ cd /docker/caddy # 啓動服務 $ docker-compose up
瀏覽器訪問你的域名,看看瀏覽器地址,恭喜你,已經部署了本身的https
服務,可是因爲你服務器8080
端口上沒有開啓服務,因此頁面應該是看到500。
git服務有不少選擇,除了大名鼎鼎的 https://github.com
國內還有:
https://git.oschina.net
https://coding.net
上面的服務都是註冊帳號就可使用的。可是提及自部署的git服務,你們可能第一個想到的是
https://gitlab.com/
gitlab大法是好,而且也能夠很容易用docker一鍵部署,可是它2G內存起步的配置要求,單核1G內存的低配主機表示吃不消。
gogs對配置要求極地,而且功能基本齊全,是很是好的選擇
NAME CID CPU MEM NET RX/TX IO R/W PIDS ◉ gogs_gogs_1 655cea130d96 0% 91M / 1.95G 12M / 74M 5.98G / 28M 17
/docker/gogs/docker-compose.yml
version: "2" services: gogs: image: gogs/gogs:0.11.4 restart: always ports: - "9002:9002" - "9003:9003" volumes: - ${PWD}/data:/data
/docker/gogs/data/gogs/conf/app.ini
配置文件須要本身修改一些關鍵值
APP_NAME:站點標題
DOMAIN:域名
ROOT_URL:外部URL
SECRET_KEY:安全密碼
APP_NAME = Gogs RUN_USER = git RUN_MODE = prod [database] DB_TYPE = sqlite3 HOST = 127.0.0.1:3306 NAME = gogs USER = root PASSWD = SSL_MODE = disable PATH = data/gogs.db [repository] ROOT = /data/git/gogs-repositories [server] DOMAIN = git.xxxxx.cn HTTP_PORT = 9002 ROOT_URL = https://git.xxxxx.cn/ DISABLE_SSH = false SSH_PORT = 9003 OFFLINE_MODE = false START_SSH_SERVER = true [mailer] ENABLED = false [service] REGISTER_EMAIL_CONFIRM = false ENABLE_NOTIFY_MAIL = false DISABLE_REGISTRATION = true ENABLE_CAPTCHA = true REQUIRE_SIGNIN_VIEW = true [picture] DISABLE_GRAVATAR = false [session] PROVIDER = file [log] MODE = file LEVEL = Info ROOT_PATH = /app/gogs/log [security] INSTALL_LOCK = true SECRET_KEY = xxxxxx [other] SHOW_FOOTER_BRANDING = false SHOW_FOOTER_VERSION = false
啓動服務
$ cd /docker/gogs $ docker-compose up
瀏覽器訪問 http://git.xxxx.cn 搞定