Help us understand the problem. What is going on with this article?

Go を レンタルサーバーで動かす方法

More than 3 years have passed since last update.

Goで作ったプログラムをレンタルサーバー上(FastCGI)で動かす方法がないか調べたけど、
情報が見つかりにくかったので備忘録も兼ねて残しておく。

環境

以下が使えるレンタルサーバー

  • FastCGI
  • .htaccessファイルの変数ができること
  • Linux環境?

Go自体は標準機能だけでいけるっぽい(詳細未調査)

以下のソース内容が参考になりました。
https://github.com/bsingr/golang-apache-fastcgi

方法

方法と言っても難しいものでもなく、fcgi.Server()関数にnilを与えてやるだけだった。

sample.go

package main

import (
        "html/template"
        "log"
        "net/http"
        "net/http/fcgi"
)

func handler(w http.ResponseWriter, r *http.Request) {
        headers := w.Header()
        headers.Add("Content-Type", "text/html")
        t := template.Must(template.New("sample").Parse(samplepage))
        t.Execute(w, r)
}

func main() {
        http.HandleFunc("/", handler)

        var err error
        err = fcgi.Serve(nil, nil)
        if err != nil {
                log.Fatal(err)
        }
}

const samplepage = `
<!doctype>
<html>
<head>
        <meta charset='utf-8'>
        <title>Work on Go</title>
</head>
<body>
        <h1>Hello world from Go!</h1>
        <table>
                <tr><td>Method</td><td>{{.Method}}</td></tr>
                <tr><td>URL</td><td>{{.URL}}</td></tr>
                <tr><td>URL.Path</td><td>{{.URL.Path}}</td></tr>
                <tr><td>Proto</td><td>{{.Proto}}</td></tr>
                <tr><td>Host</td><td>{{.Host}}</td></tr>
                <tr><td>RemoteAddr</td><td>{{.RemoteAddr}}</td></tr>
                <tr><td>RequestURI</td><td>{{.RequestURI}}</td></tr>
                <tr><td>Header</td><td>{{.Header}}</td></tr>
                <tr><td>Body</td><td>{{.Body}}</td></tr>
        </table>
</body>
</html>
`

あとは実行権限を与えてやるのと、.htaccess に以下を記述するだけ。
(レンタルサーバーによってはなくてもいけるかも)

.htaccess

<IfModule mod_fcgid.c>
AddHandler fcgid-script .fcgi
</IfModule>

とりあえず、Xサーバーでは動作しました。

これでうまく動くようだったら、
ホストサーバーのライブラリなどに依存しないので、
アプリケーションの配布が用意になるだろうな~と思いました。

経緯

Go覚えてみたいけど、簡易的に動作できる方法はないかと思って調べてみたところ、
FastCGIプロセスで動かす方法があまりなかったので備忘録がてら投稿してみました。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした