这个网站
- Webserver: Nginx
- Appserver: Puma
- Web Framework: Ruby on Rails
- DB: Postgres
- CI: CircleCI
- CD: AWS Codedeploy
- Server: Ubuntu 16.04 AWS EC2 Instance
- Storage: AWS S3
- DNS: Cloudflare
本地开发
首先我们在local新建一个rails5 app,(db我选的是postgres),然后在gemfile中加入
spina CMS。
gem 'spina'
spina用到了active storage,所以也需要setup一下
active storage。
然后我们跑一下
rails g spina:install
先在本地的app安装一下这个gem。
装完之后rails s,打开localhost/admin看一下是否安装成功。
(optional) 安装rspec或别的testing framework
设置CI/CD
我选择的是CircleCI + CodeDeploy,因为比较熟悉这两个。
CircleCI Config,
CodeDeploy Scripts需要注意的是在Circle CI中跑migration之前我们需要保证db service is up,所以需要这样一个step:
- run: dockerize -wait tcp://localhost:5432 -timeout 1m
我选择的server是AWS EC2,
我们需要在上面装一下codedeploy的agent,还需要在Instance上设置需要的environment variable,比如RAILS_MASTER_KEY,还有数据库的密码等等。
为了方便我安装了一个gem
gem 'figaro'
来帮助我管理这些ENV。
设置cloud storage
我选择用S3来host我的照片,attachment等等。我们只需在S3上建立一个bucket,然后建立一个IAM User来access这个bucket,再更新storage.yml
amazon:
service: S3
access_key_id: <%= ENV['AWS_S3_ACCESS_KEY_ID'] %>
secret_access_key: <%= ENV['AWS_S3_SECRET_ACCESS_KEY'] %>
region: us-west-2
bucket: blog-spina-storage
需要注意的是我们同时需要更新一下production.yml
config.active_storage.service = :amazon
否则prod上的文件不会被上传到s3。
设置puma app server
我们需要更改一下rails生成的puma
config,让它能bind socket。
然后我们需要在
systemd中设置puma,让puma能够在我们的ubuntu服务器上自动启动。
设置Nginx web server
设置完了App server,就要设置web server了。我们需要在nginx
config中指定puma的socket。
购买域名
我是在AWS上购买的域名,17刀一年,可以接受。
设置DNS
购买域名后我们可以注册一个Cloudflare的个人账号,能够免费解析一个网站。Cloudflare还提供诸如访问者分析,防火墙等服务。
我们需要在AWS中将域名的name server改成Cloudflare的。
设置SSL
启动https通常能让访问者更放心。我们需要在Cloudflare中下载SSL certificate和一个private key,然后根据
这里设置nginx即可
到这里就大功告成啦,开始享用你的个人部落格吧!