阿里云vapor部署走起
上次雙12捺癞,用新賬戶擼了個3年的阿里云服務器夷蚊,決定就把服務器端部署在阿里云上。
1.安裝 寶塔面板
沒啥說的髓介,管理省事惕鼓,圖形化對于我這種菜鳥來說比較友好。我阿里云的服務器是centOS 7.6.
ssh root@xxx.xxx.xxx.x ? ? ? ? ? ?//ip地址
連接到服務器以后唐础,進入 寶塔官網(wǎng)?選擇你的系統(tǒng)箱歧,復制口令安裝,選擇centOS的原因是寶塔這貨基于這個系統(tǒng)開發(fā)的一膨,我想應該在這個系統(tǒng)上會好一些呀邢。
經(jīng)過一陣等待以后,終端會給一個網(wǎng)址(服務器的ip+端口號)豹绪,賬號密碼价淌,復制進瀏覽器里,進入面板。
編譯安裝Nginx蝉衣,其它的軟件暫且不裝括尸。
安裝完成以后,點擊網(wǎng)站病毡,創(chuàng)建一個網(wǎng)站濒翻。創(chuàng)建個網(wǎng)站,然后點擊設置啦膜。
打開設置界面有送,選中配置文件,更改網(wǎng)站Nginx的配置
內(nèi)容參考如下:
server
{
? ? listen 80 default_server;
? ? server_name 域名;
? ? #靜態(tài)文件的地址
? ? root /home/server/Public;?
? ? index ?index.html?
? ? try_files $uri @proxy;
? ? location @proxy {
? ? ? ? proxy_pass http://localhost:8080;
? ? ? ? proxy_pass_header Server;
? ? ? ? proxy_set_header Host $host;
? ? ? ? proxy_set_header X-Real-IP $remote_addr;
? ? ? ? proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
? ? ? ? proxy_pass_header Server;
? ? ? ? proxy_connect_timeout 3s;
? ? ? ? proxy_read_timeout 10s;
? ? }
? ? #SSL-START SSL相關配置僧家,請勿刪除或修改下一行帶注釋的404規(guī)則
? ? #error_page 404/404.html;
? ? #REWRITE-START URL重寫規(guī)則引用,修改后將導致面板設置的偽靜態(tài)規(guī)則失效
? ? #include /www/server/panel/vhost/rewrite/178huigo.com.conf;
? ? #REWRITE-END
? ? access_log? /www/wwwlogs/178huigo.com.log;
? ? error_log? /www/wwwlogs/178huigo.com.error.log;
}
保存娶眷,然后配置ssl,在阿里云申請一個免費的域名證書啸臀,下載Nginx版本的届宠,解壓以后,包含一個key類型文件和一個pem類型文件乘粒,右鍵--打開方式--更多--文本文檔打開(也可以直接在終端 cat 文件名來顯示)豌注,然后將上面的內(nèi)容分別復制下來,填入寶塔面板的對應位置灯萍。
保存轧铁,就可以了,試著訪問下你的域名吧旦棉。
但是現(xiàn)在網(wǎng)站上啥都沒有齿风,開始布置vapor的服務器吧。
1. 安裝 docker
沒啥說的绑洛,進入官方網(wǎng)站救斑,找到服務器版本對應的文檔,我是用centOS真屯,所以安裝centOS 版本的脸候,按照官方文檔的安裝步驟,一步一步執(zhí)行即可
(1)卸載老版本
$ sudo yum remove docker \
? ? ? ? ? ? ? ? ? docker-client \
? ? ? ? ? ? ? ? ? docker-client-latest \
? ? ? ? ? ? ? ? ? docker-common \
? ? ? ? ? ? ? ? ? docker-latest \
? ? ? ? ? ? ? ? ? docker-latest-logrotate \
? ? ? ? ? ? ? ? ? docker-logrotate \
? ? ? ? ? ? ? ? ? docker-selinux \
? ? ? ? ? ? ? ? ? docker-engine-selinux \
? ? ? ? ? ? ? ? ? docker-engine
新機器跳過此步绑蔫。
(2)設置倉庫
$ sudo yum install -y yum-utils \
? device-mapper-persistent-data \
? lvm2
$ sudo yum-config-manager \
? ? --add-repo \
? ? https://download.docker.com/linux/centos/docker-ce.repo
(3)開始安裝
$ sudo yum install docker-ce
(4)啟動docker
$ sudo systemctl start docker
2.安裝postgresql
$ docker pull postgres ? ? ? ? ? ? ? ? ? //拉取官方最新鏡像
$ docker run --name data -v 本機文件路徑:/var/lab/progres/data/ ?--restart=always?-e POSTGRES_PASSWORD=密碼 -e POSTGRES_USER=用戶 -e DATABASE=數(shù)據(jù)庫 -d -p 5432:5432 postgres
說明下运沦,--name 是給容器設置的名字,可以讓同一局域網(wǎng)的容器使用name進行訪問配深,比如我們之前在代碼里寫的數(shù)據(jù)庫hostname:“data”携添。
-v 是設置數(shù)據(jù)卷,冒號前面的是主機的文件夾篓叶,冒號后面是容器里的文件夾烈掠,倆文件夾映射同步羞秤,可用來備份容器里的資料啥的。
--restart=always ?自啟動向叉,docker啟動就會運行數(shù)據(jù)庫。
-e 設置參數(shù)嗦董,分別設置了數(shù)據(jù)庫名母谎,數(shù)據(jù)庫用戶,數(shù)據(jù)庫密碼
-p端口映射
postgres是鏡像的名字京革。
3. 安裝Vapor?
在此之前奇唤,我們先對自己的代碼做些更改,以印證數(shù)據(jù)庫安裝成功匹摇。
實現(xiàn)功能: 在數(shù)據(jù)庫里創(chuàng)建一個webs表 里面包含倆字段咬扇,一個是name,一個是webURL
然后在Mac端運行的vapor服務器上post到數(shù)據(jù)庫一個 百度廊勃,www.baidi.com的行進數(shù)據(jù)庫懈贺。
之后在阿里云的服務器上get出來。
(1)代碼修改
用Xcode打開hello 工程坡垫,在Model文件夾中梭灿,新添一個Web.swift文件,targets選擇APP,內(nèi)容如下:
import?Foundation
import Vapor
import?FluentPostgreSQL
final class Web: PostgreSQLUUIDModel {? //遵守這個協(xié)議或者PostrgeSQLModel協(xié)議
? ? static?var?entity: String ? ?{return?self.name+"s"} ? ??//數(shù)據(jù)庫建表的時候會加個s
? ? var ??id: UUID?
? ? var ??name: String
? ? var ??webURL: String
? ? init(name: String,webURL: String) {
? ? ? ? self.name= name
? ? ? ? self.webURL= webURL
? ? }
}
extension Web: Migration { }
extension Web: Content { }
在configure.swif里面
添加:
migrations.add(model: Web.self,database: .psql)
在Controllers文件夾里增加一個文件:WebsController.self
import?Foundation
import Vapor
finalclass?WebsController:RouteCollection{
? ? func?boot(router:Router)?throws{
? ? ? ? let?webs = router.grouped("webs")? //創(chuàng)建一個路由組/webs
? ? ? ? webs.get("all", use:getAllHandle)//獲取所有的web
? ? ? ? webs.post(Web.self, at:"creart", use:createHandle)//創(chuàng)建一個
? ? }
}
extension WebsController {
? ? func?getAllHandle(req:Request)?throws->Future<[Web]> {
? ? ? ? return?Web.query(on: req).all()
? ? }
? ? func?createHandle(req:Request, web:Web)throws->Future {
? ? ? ? return?try?req.content.decode(Web.self).map(to:HTTPStatus.self, { (web)? in
? ? ? ? ? ? _= web.save(on: req)
? ? ? ? ? ? return?HTTPStatus.created
? ? ? ? })
? ? }
}
在這個控制器里寫了一個路由組冰悠,/webs堡妒,然后寫了倆路由請求,一個是/webs/all 獲取所有溉卓,一個是/webs/create皮迟。添加一個新的。
下面將路由控制器注冊一下桑寨。
在 routes.swift中添加:
try?router.register(collection:WebsController())
運行伏尼,顯示服務開啟在localhost:8080 ,由于我們的代碼中指定在mac環(huán)境下尉尾,就訪問阿里云的域名:5432端口的烦粒,如果運行成功,就代表代赁,現(xiàn)在阿里云的數(shù)據(jù)庫已經(jīng)正常在運行了扰她,并且已經(jīng)連接上了。
下面我們來請求一下試試芭碍,
再添加幾個之后俊戳,我們來測試一下get
這說明我們的阿里云上面的數(shù)據(jù)庫容器運行正臭镎郏。現(xiàn)在來把這個vapor版的hello world 上傳到服務器上吧杉女。
docker build -》docker push 參照前文來一遍即可。
現(xiàn)在回到阿里云鸳吸,將你現(xiàn)在的鏡像pull下來
然后開始運行
$ docker run --name vapor -itd -p 8080:80 xiaocainiao/vapor:v1.0.1 ? ?//具體的根據(jù)你的鏡像來
不出意外的話熏挎,容器里的程序直接崩了,然后容器退出晌砾,為啥呢坎拐,因為代碼里配置的主機名:data:5432 ,它現(xiàn)在還訪問不到,所以崩了养匈,我們需要把它們加在一個局域網(wǎng)里
$ docker network create vapor_net
然后將你現(xiàn)在的這倆需要請求的容器添加到這個網(wǎng)絡中
$ docker ps -a ? ?//查詢所有的容器
$ docker network connect ?vapor_ net ?容器ID ? ? // 執(zhí)行這條命令將已存在的容器加入到網(wǎng)絡中
然后重啟vapor的容器
$ docker start vapor容器的ID
然后訪問站點試試吧~ vapor is work~