Golang on さくらVPS
株式会社アクシスのアドベントカレンダー5日目担当のヤマウチです!
さくらVPSを契約して遊んでみたので、それを記事にしました!
ということでさっそく本題。
先日作成した記事「【Go】標準入力から受け取ったポケモンの種族値を返すツールを作成」のAPI部分をさくらVPSに乗せました。
いつでもどこからでもAPIを叩きたい衝動に駆られて、VPS契約しました。
固定IP最高\(^o^)/
まあ、一番安いプランですが。
ということで、今回はさくらVPSにOSをインストールした直後から、GoのAPIを叩ける状態にする、という部分の記事です。
前提条件
- centos8
- rootユーザーにSSH接続ができる
- xxx.xxx.xxx.xxx はIPアドレスを意味する
- wsl2
さて、始めます。
ユーザー作成
VPSにSSH接続を行い、keisuke
という一般ユーザーを作成する。
# ユーザー作成
$ adduser keisuke
# パスワード設定
$ passwd keisuke
sudo権限を付与
作成したユーザーにsudo権限を付与する。
$ visudo
以下の2行のコメントアウトを外す。
- %wheel ALL=(ALL) ALL
- %wheel ALL=(ALL) NOPASSWD: ALL
ユーザーをwheelグループに追加する。
$ usermod -aG wheel keisuke
wheelに追加されたか確認する。
# 作成したユーザーにログイン
$ su keisuke
# 所属しているグループを確認
$ groups
# wheelと表示されればOK
もしwheelと表示されない場合は、ターミナルを再起動して、再度groups
を実行。
ユーザーでSSH接続
続いて作成したユーザーでSSH接続できるようにする。
(必要あるかわかんないけど)一般ユーザーに切り替える。
$ su keisuke
.sshを作成
ユーザーを作成したばかりで.sshディレクトリが存在しないので、作成する。
# ホームディレクトリに移動
$ cd ~
# .sshを作成
$ mkdir .ssh
# パーミッションを700に変更
$ chmod 700 .ssh
SSHするためには.sshディレクトリのパーミッションを700にする必要がある。
公開鍵を登録する
一旦exit
でSSH接続から抜け、scp
を使って公開鍵をVPSにコピーする。
※事前に各自、公開鍵を置いているディレクトリに移動
$ scp id_rsa.pub xxx.xxx.xxx.xxx:~/.ssh
scp
で公開鍵をコピーしたらSSH接続をする。
# 作成したkeisukeでSSH接続
$ ssh [email protected]
# .sshに移動
$ cd .ssh
# id_rsa.pubがあるか確認
$ ls
# 公開鍵を登録
$ cat id_rsa.pub >> authorized_keys
# パーミッションを変更
$ chmod 600 authorized_keys
公開鍵の登録が完了したら、一度exitでSSHから抜け、再度SSH接続をする。
その際にパスワードを求められなければ、公開鍵でのSSH接続が成功している。
SSH接続の設定を変更する
設定ファイルをいじるので、rootユーザーでログインする。
$ su -
SSH接続のパスワード認証を禁止
/etc/ssh/sshd_config
を編集する。
#PasswordAuthentication yes
↓
PasswordAuthentication no
rootユーザーでのSSH接続を禁止
引き続き/etc/ssh/sshd_config
を編集する。
PermitRootLogin yes
↓
PermitRootLogin no
sshdを再起動
設定ファイルを反映させるため、sshdを再起動する。
$ systemctl restart sshd
GoのバイナリファイルをSCP
ここまでで基本的な設定は完了したので、次にGoのバイナリファイルをさくらVPSに置く。
まずはローカルのプロジェクト配下に移動する。
$ cd project
バイナリファイルを作成
まずはgo build
を行い、バイナリファイルを作成する。
普通にgo build
をすると自分の開発環境にあったバイナリファイルが作成されるため、実行環境に合わせたバイナリファイルを生成する必要がある。
今回の僕のパターンだと、windows端末で開発をして、実行する環境はさくらVPSのCentOSなので、CentOSで動くバイナリファイルを生成する。
とはいえ、WSL2を使用しているので今回は気にしなくて良さげ。
一応現状を確認
$ go env GOOS
# linux
$ go env GOARCH
# amd64
うむ、そのままbuildする。
$ go build main.go
# mainというファイルが生成されていることを確認する
$ ls
scpでファイルをサーバーにコピー
どこに置くのが正解かわかってないので、とりあえず今回はユーザーのディレクトリにコピーする。
# vpsはssh_configで設定している
$ scp main vps:~
# これも必要なのでscp
$ scp pokedex.json vps:~
バイナリファイルを実行する
ファイルのコピーが完了したので、実行する。
まずはSSH接続。
$ ssh vps
main
がコピーされていることを確認する。
$ ls
確認ができたらmain
を実行する。
$ ./main&
実行状態をlsofコマンドで確認する。
今回のアプリがLISTENしているのは18888なので、そのポートを確認する。
※lsofのインストール手順等は省略
# ポート18888をLISTENしていることを確認する
$ lsof -i:18888
# こんな表示が出る
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
main 22373 keisuke 3u IPv6 135702 0t0 TCP *:apc-necmp (LISTEN)
問題なさそう。
ということでxxx.xxx.xxx.xxx:18888
にアクセスしてみる。
このサイトにアクセスできません
ここがハマりポイント。
今回書いてはいないがfirewallの設定もしており、そこに原因があると思って一生懸命調べていたが、
原因はさくらVPSのパケットフィルタの設定だった。。。
ということでさくらVPSのコンソールへGO!
パケットフィルタの設定を追加する。
これで再度APIを叩いてみる。
xxx.xxx.xxx.xxx:18888
にアクセス。
よし、返ってきてる。
まとめ
ということで無事さくらVPSにGoのバイナリファイルを置いて、APIを叩くことができました。
バイナリファイルを置くだけでAPIを叩けるってのがすごい。
nginxとか、webサーバーがなくてもいいってのが、その辺の知識が弱いせいで「マジかよ」ってなってます。
firewallの設定を間違ったせいでSSH接続が一切できなくなるというのも経験しました。。。w
それを自分のVPSで経験できただけでも、良かったかなぁって感じです。
github actionsを使用して、自動デプロイもできるようにしたので、気が向けば記事にしますw
おしまい。
Author And Source
この問題について(Golang on さくらVPS), 我々は、より多くの情報をここで見つけました https://qiita.com/yamauchi_k/items/47eb73bc0f69b2f9070f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .