AWS EC2 インスタンスの準備
AWS コンソールにアクセスする
「Launch Instance」をクリックする
Step 1: Enter nand and tags
インスタンス名とタグを入力する
Step 2: Choose an Amazon Machine Image (AMI)
「Ubuntu Server 22.04 LTS (HVM), SSD Volume Type 64bit (x86」を選択する
Step 3: Choose an Instance Type and Key pair
インスタンスタイプは「t2.micro」とSSH用のキーペアを選択する
Step 4: Network settings
バブネットやセキュリティグループなどを選択する
Step 5: Configure storage
無料利用枠だと最大30GBまで利用できる
そして、「Launch instance」をクリックしてインスタンスを立てる
インスタンスへアクセス
先ほどダウンロードしたキーペアを.ssh/key.pem
とします。
権限を与える
1
sudo chmod 400 .ssh/key.pem
1
ssh -i .ssh/key.pem ubuntu@xx.xx.xxx.xxx
デプロイ用のユーザーを作成
「deploy」というユーザー名とすると
1
sudo adduser deploy
1
%deploy ALL=(ALL) NOPASSWD:ALL
deployユーザーに切り替える
1
sudo su - deploy
1
2
3
4
mkdir .ssh
sudo chmod 700 .ssh
touch ~/.ssh/authorized_keys
sudo chmod 600 ~/.ssh/authorized_keys
1
2
<ローカル環境で「cat ~/.ssh/id_rsa.pub」の内容>
もしまだなければ「ssh-keygen -t rsa -C」で作成する
これからローカル環境でssh deploy@xx.xx.xxx.xxx
でインスタンスにアクセスできます。
サーバーで環境を準備
デプロイ用フォルダとファイルを作成
例えばアプリ名はmyapp
とすると:
1
2
3
4
5
6
7
8
9
10
sudo mkdir /deploy
sudo mkdir /deploy/apps
sudo mkdir /deploy/apps/myapp
sudo mkdir /deploy/apps/myapp/shared
sudo mkdir /deploy/apps/myapp/shared/config
sudo touch /deploy/apps/myapp/shared/config/application.yml
sudo touch /deploy/apps/myapp/shared/config/database.yml
sudo chown -R deploy:deploy /deploy/apps/
- rbenv
- ruby
- rails
- libmysqlclient-dev / libpq-dev
- git
- bundler
Dockerをインストール
Dockerをインストールする方法は以下のリンクにあります。ベトナム語ですが、簡単なコマンドをコピーするだけでインストールできます。
Ubuntu 22.04でDockerをインストールする方法
dockerをビルド
1
cd /deploy/apps/myapp/shared/config
以下はmysql
とredis
を使うdocker-compose.yml
の例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
version: '3.3'
services:
myapp_mysql:
container_name: myapp_mysql
image: mysql:8.2.0
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
restart: always
volumes:
- myapp_mysql:/var/lib/mysql
environment:
MYSQL_DATABASE: myapp_production
MYSQL_ROOT_PASSWORD: admin
TZ: 'Asia/Tokyo'
ports:
- '3306:3306'
myapp_redis:
container_name: myapp_redis
image: redis:latest
restart: always
volumes:
- myapp_redis:/data
ports:
- '6379:6379'
volumes:
myapp_mysql:
external: true
myapp_redis:
external: true
そして、ビルド!
1
docker-compose build
1
docker-compose up -d
1
2
3
4
5
6
7
8
production:
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
database: myapp_production
username: admin
password: admin
host: "127.0.0.1"
秘密キー設定
ローカル環境で秘密キーを取得してから、サーバーのapplication.yml
に貼ります。
1
RAILS_ENV=production rails secret
1
SECRET_KEY_BASE: '<secret_key>'