开发容易部署难。将本地代码折腾上服务器还是花了挺多功夫的。在这里简单记录一下吧
代码托管
Github是很好用的代码托管平台,没有例外,本博客的代码也是托管在Github上的。地址是:https://github.com/YanxinTang/blog.git
Linux 环境配置
防火墙配置,允许http
, https
流量
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload
部署
在服务器上安装Go, Git, Mariadb,拉取最近的代码并进行编译,都可以很顺利的完成。
守护进程,我使用了 Linux 的系统工具 Systemd。Service 配置如下
# /usr/lib/systemd/system/blog.service
[Unit]
Description=Simple Blog
[Service]
Type=simple
Restart=on-failure
RestartSec=10s
Environment=GIN_MODE=release // 环境变量,release 模式
WorkingDirectory=/home/opc/blog // 这里一定要指定工作目录,否则会因为模板路径问题而报错
ExecStart=/home/opc/blog/blog // 执行文件所在路径
[Install]
WantedBy=multi-user.target
添加完成,即可使用sudo systemctl start blog
来启动我们的程序了。
配置Nginx反向代理
安装Nginx, 将/etc/nginx/nginx.conf
里面server
部分内容注释。然后新建配置文件
# /etc/nginx/conf.d/blog.conf
server {
listen 80 default_server;
server_name _;
location / {
proxy_pass http://localhost:8080;
}
}
sudo systemctl restart nginx
, 重启Nginx, 此时访问你的服务器,不出意外,可以看到首页了已经。如果访问出错,请检查SELinux的httpd_can_network_connect
配置项是否开启
上面只是简单的转发http请求到http,正式环境中,还需要配置https来增强连接安全性
配置https
我使用的是Let's Encrypt的免费证书,因此直接是用https://github.com/Neilpang/acme.sh这个工具来进行申请的。具体的步骤请参考此工具的wiki。只是需要说明的是,申请的时候指定域名时www
和@
均需要添加到cert证书中。否则未添加的域名无法使用https访问。
申请成功后,下面是 Nginx https 的简单配置。
# 监听80端口请求,然后重定向到https
server {
listen 80 default_server;
server_name www.chihv.com chihv.com;
return 301 https://chihv.com$request_uri; # http请求重定向至https
}
server {
listen 443 ssl;
server_name www.chihv.com chihv.com;
# ssl
ssl_certificate /etc/nginx/ssl/fullchain.cer;
ssl_certificate_key /etc/nginx/ssl/chihv.key;
# ssl_dhparam
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
# gzip
gzip on;
gzip_disable "msie6";
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_min_length 256;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/vnd.ms-fontobject application/x-font-ttf font/opentype image/svg+xml image/x-icon;
location / {
proxy_pass http://localhost:8080;
}
}
nginx -t
检查配置,通过之后使用sudo systemctl restart nginx
重启Nginx来应用配置。不出意外,现在已经可以使用https来访问网站了。
后续
Nginx 和 Systemd 的配置项都是现查资料然后照猫画虎写的,后面还需要多多学习,避免在运维阶段捉襟见肘。
参考
http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html
https://stackoverflow.com/questions/23948527/13-permission-denied-while-connecting-to-upstreamnginx