搭建我的開發者雲主機全過程-新雲主機一步到位配置指南-免費HTTPS網關【小公司一樣適用】【持續更新中】

0x00

本文是筆者實踐總結的技巧,介紹搭建雲主機的方法,主要基於Docker部署系列服務。從我的開發者需求出發,一步一步搭建本身的服務。
本文適合兜裏沒不少?又但願擁有屬於本身的雲服務的開發者,完成下面的操做,須要基本的Linux使用技能。nginx

說明

因爲使用#作註釋,全部命令行使用$作前綴,表示當前是一行命令git

選購雲主機

雲主機品牌選擇

雲主機國內不少平臺能夠購買,騰訊的,阿里的,網易的等等,可根據本身的喜愛進行選擇,筆者選擇的是阿里雲。github

雲主機配置選擇

選擇好雲主機品牌之後,須要選購雲主機了,雲主機配置越高價格越貴,筆者選擇的是最低配的配置單核CPU1GB內存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

關閉ssh密碼登陸

# 編輯sshd配置文件
# 找到其中的兩個參數配置:
# PasswordAuthentication
# ChallengeResponseAuthentication
# 將這兩個參數值修改成no:
# PasswordAuthentication no
# ChallengeResponseAuthentication no
$ vi /etc/ssh/sshd_config
# 重啓服務
$ service sshd restart

至此,你不再用擔憂ssh會被黑客破解了,只有擁有你本地電腦密匙對的人才能夠遠程登陸到雲主機。

安裝oh-my-zsh提升命令行效率(可選)

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配置

DNS配置一個A記錄*指向主機公網IP便可。

clipboard.png

DNS服務商,能夠選用域名購買放的配置後臺,也能夠轉到別的平臺上配置,騰訊家的DNSPod配置簡單易用,因此筆者一直在用這個。
DNS配置好了之後,後面ssh鏈接就能夠直接使用域名鏈接了,不須要記憶晦澀的IP地址了。

Docker安裝部署配置

Docker安裝

原本Docker官方安裝步驟比較多,並且服務器在國外,速度很是慢。還好,阿里工程師作了國內景象,而且寫好了一鍵安裝腳本,一行命令搞定。
另外,國內的DaoCloud也提供相似的鏡像服務https://download.daocloud.io/...,也可加速安裝過程。

$ curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -

安裝Docker Compose

這裏用的是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 pull 加速

在國內從Docker官方服務器拉取鏡像,速度很是慢,還好國內不少公司作了免費的加速鏡像,阿里雲、DaoCloud都有提供這樣的免費服務。

clipboard.png

針對 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網關(使用caddy,支持https)

背景

提及HTTP網關,你們聽到過最多的,我想應該是 nginx apache,這兩個軟件確實是穩定、功能強大,而且你們都比較熟悉,可是,惟一的問題是,他們的配置實在是太太太太太太太太太繁瑣了,配置文件能夠寫得很長,老鳥也須要備份一些經常使用配置片斷,菜鳥們更是常常被一堆配置嚇到,亦或是由於一點點配置細節沒注意到耽誤了一個下午。

當咱們的站點須要支持HTTPS時,還須要額外弄到證書,購買或者申請免費的Let's Encrypt,而且咱們還得關注證書是否已通過期,我偶爾也會看到一些站點,由於證書過時,瀏覽器提示訪問不安全。

解決方案

爲了解決上面提到的問題,咱們請出今天的主角Caddy Server

clipboard.png

主要特色

  • 默認開啓HTTPS,自動管理HTTPS證書(利用Let's Encrypt
  • 使用go語言開發,單二進制文件運行,無任何依賴
  • 很是適合初學者(老鳥用着也省心)
  • 性能穩定,可用於線上產品
  • 默認開啓 HTTP 2.0 支持
  • 配置起來瘋狂地簡單

HTTPS安全檢測

使用https://myssl.com進行評估:
第一個是筆者的網站,直接使用Caddy的默認配置,後面三個都是站點你們都認識,你們能夠感覺一下測試結果。使用Caddy,最少只須要一行配置,就能夠擁有A級的HTTPS安全防禦!

圖片描述

Caddyfile簡介

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 }
}

快速部署

文件清單

  • docker-compose.yml

官方的caddy docker鏡像,只有基本功能,找了個alpine版的zzrot/alpine-caddy,全部功能都編譯到裏面了,而且包很小,下面是配置內容

version: '2'

services:
  web:
    image: zzrot/alpine-caddy:v0.9.5
    restart: always
    network_mode: host
  • Caddyfile

ineva.cn須要改爲你的域名

www.ineva.cn, ineva.cn {
  gzip
  proxy / localhost:8080 { transparent }
}

把上面兩個文件上傳到雲主機/docker/caddy目錄

$ cd /docker/caddy
# 啓動服務
$ docker-compose up

瀏覽器訪問你的域名,看看瀏覽器地址,恭喜你,已經部署了本身的https服務,可是因爲你服務器8080端口上沒有開啓服務,因此頁面應該是看到500。

clipboard.png

部署git服務(使用gogs)

背景介紹

git服務有不少選擇,除了大名鼎鼎的 https://github.com
國內還有:
https://git.oschina.net
https://coding.net
上面的服務都是註冊帳號就可使用的。可是提及自部署的git服務,你們可能第一個想到的是
https://gitlab.com/
gitlab大法是好,而且也能夠很容易用docker一鍵部署,可是它2G內存起步的配置要求,單核1G內存的低配主機表示吃不消。
gogs對配置要求極地,而且功能基本齊全,是很是好的選擇

gogs簡介

  • 開源項目地址:https://github.com/gogits/gogs
  • 基於go開發,單二進制文件便可運行
  • 徹底仿照gihub設計,大部分功能都已經完成了
  • 對配置要求極地,下面是閒置時獲取的數據指標,內存佔用不到100M
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 搞定

懶人包

快捷系統備份還原

相關文章
相關標籤/搜索