15-Deployment On Linux

在本章,我将会把应用部署到Linux服务器, 与上一章相比,这种是比较传统的方式

本章的GitHub链接为: Source, Diff, Zip

Vultr

当提到“传统托管”时,意思是应用是手动或通过原始服务器机器上的脚本安装部署的。 该过程涉及安装应用程序、其依赖项和生产规模的Web服务器,并配置系统以确保其安全。

当你要部署自己的项目时,要问的第一个问题是在哪找服务器。 目前有很多经济的托管服务。 只需每月2.5 - 5美元,Vultr,Digital OceanLinode

这里我选择的是 Vultr 创建了 CentOS 7 的linux 服务器

广告: 这里大家可以通过这个地址注册 Vultr,我会得到 10 dollar 的奖励,如果想搞个VPS自己玩玩的同学可以考虑下,还能搭个那啥用(自己体会) 链接: https://www.vultr.com/?ref=7079936

ssh 免密登陆

  1. $ ssh-keygen -t rsa -C 'your email'
  2. $ scp ~/.ssh/id_rsa.pub username@hostname:~/ # 将公钥文件复制至ssh服务器
  3. $ ssh username@hostname # 使用用户名和密码方式登录至ssh服务器
  4. $ mkdir .ssh # 若.ssh目录已存在,可省略此步
  5. $ cat id_rsa.pub >> .ssh/authorized_keys # 将公钥文件id_rsa.pub文件内容追加到authorized_keys文件

以后登录ssh 只要输入 ssh username@hostname 即可不用输入密码啦

安装mysql

  1. $ ssh username@hostname
  2. # Install
  3. $ yum -y install mariadb mariadb-serve
  4. # Start mariadb
  5. $ sudo systemctl start mariadb
  6. $ sudo systemctl enable mariadb
  7. # Securing the MariaDB Server
  8. # Set Password
  9. $ sudo mysql_secure_installation
  10. # crate database
  11. $ mysql -uroot -p
  12. $ MariaDB > create database go-mega;

部署应用

与 Python 相比,Go 部署应用还是算比较方便的,因为它可以编译

Makefile

为了方便部署,我们这边建一个 Makefile 方便我们部署

Makefile

  1. .PHONY: clean upload-vps
  2. # Put your server ip or nickname here
  3. host = ny
  4. clean:
  5. @echo "clean..."
  6. @rm -rf app/
  7. @echo "success clean"
  8. build-db:
  9. @echo "run build db..."
  10. @env GOOS=linux go build -o app/db cmd/db_init/main.go
  11. @echo "success build db"
  12. build-server:
  13. @echo "begin build server..."
  14. @env GOOS=linux go build -o app/server main.go
  15. @echo "success build server"
  16. upload-vps: clean build-db build-server
  17. @echo "begin run vps upload..."
  18. @echo "Host: $(host)"
  19. @scp -r app root@$(host):go-mega
  20. @scp config.yml root@$(host):go-mega/
  21. @scp -r templates root@$(host):go-mega/templates
  22. @echo "success vps upload"

注意 上面的 Host 修改成 你自己的 Host ip address 或者 Host 别名

然后我们就比较方便了运行

  1. $ make upload-vps

就可以了,我们可以登录到我们的vps上查看,就多了一个 go-mega 的文件夹了

这里简要做个说明

  • clean: 清楚上次的编译二进制文件
  • build-db: 编译 cmd/db_init/main.go -> app/db
  • build-server: 编译 main.go -> app/server
  • upload-vps: 将 /app 和 templates 文件夹上传到 vps的 ~/go-mega 里

运行

  1. $ ssh ssh username@hostname
  2. $ cd go-mega
  3. # 设置环境变量 以及 config.yml
  4. $ vi config.yml # 按照config.yml.sample 设置
  5. $ export PORT=8000
  6. # 初始化数据库
  7. $ ./db
  8. # 启动应用
  9. $ nohup ./server &
  10. # 这个时候服务已经启动了,这个时候如果想要访问应用可以使用 nginx反代到 80端口 或者 防火墙开放你设置的端口
  11. # 最好是使用nginx,不过这里为了演示,我们开放下端口
  12. $ firewall-cmd --zone=public --add-port=8000/tcp

这个时候我们访问 http://xxx.xxx.xxx.xxx:8000 就可以访问你刚才发布的应用了, 大功告成

这里暂时不是HTTPS的,如果设置HTTPS,需要你自己申请HTTPS证书和配置nginx,这方面比 Heroku 还是麻烦点