1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

HTTP Real Worldの ハンズオンの準備をWindows10+Vagrant+Docker+VsCodeで行ったメモ

Last updated at Posted at 2020-04-26

概要

Real World HTTP 第2版――歴史とコードに学ぶインターネットとウェブ技術を買った。
ハンズオンが準備されていたので、その環境設定を行ったメモ。

正誤表が出ているので要確認。goライブラリのパスが違っていたりする。(正:github.com/k0kubun/pp. 誤: github.com/k0kibun/pp など)

環境

  • Windows 10 Home
    • Vagrant 2.2.7
    • virtualbox 6.1.6
      • ubuntu 18.04 LTS
        • docker-ce Docker version 19.03.5, build 633a0ea838
        • docker-compose version 1.25.3, build d4d1b42b

環境構築

chocolateyの準備

  • 使用するパッケージを簡単にインストールできるように、Windows用のパッケージマネージャを導入
@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command " [System.Net.ServicePointManager]::SecurityProtocol = 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"

curl の準備

  • gitbashのものを使用する
choco install git -y

golangの準備

エディタ

  • vscodeのおススメを利用。(.vscode/extensions.json)に記述
  • 上記を利用するために、golangのパスの場所が必要になったのでchocolateyでインストール
choco install golang -y

実行環境

  • vagrant上でdockerを動かす。
docker/docker-compose.yml
version: "3"
services:
  realworld:
    build: ./golang
    volumes:
      - ../src:/app/src
    working_dir: /app
    ports:
      - 18888:18888
docker/golang/Dockerfile
FROM golang:latest
bin/go.sh
#!/bin/bash

bin_dir=$(cd $(dirname $0) && pwd)
parent_dir=$bin_dir/..
docker_dir=$parent_dir/docker
composeFile=${1:-"docker-compose.yml"}
container_name=${1:-realworld}

docker ps | grep $container_name

if [ $? -eq 0 ]; then
  cd $docker_dir && docker-compose exec $container_name go run /app/src/server.go
else
  cd $docker_dir && docker-compose run --service-ports $container_name go run /app/src/server.go
fi
src/server.go
package main

import (
	"fmt"
	"log"
	"net/http"
	"net/http/httputil"
)

func handler(w http.ResponseWriter, r *http.Request) {
	dump, err := httputil.DumpRequest(r, true)
	if err != nil {
		http.Error(w, fmt.Sprint(err), http.StatusInternalServerError)
		return
	}
	fmt.Println(string(dump))
	fmt.Fprintf(w, "<html><body>Hello</body></html>\n")
}

func main() {
	var httpServer http.Server
	http.HandleFunc("/", handler)
	log.Println("start http listening :18888")
	httpServer.Addr = ":18888"
	log.Println(httpServer.ListenAndServe())
}

動作確認

  • 上記を準備した後、vagrant上でgo.shを動かせば検証用のサーバが起動する。
    • curlでアクセスして確認
curl --http1.0 http://192.168.50.10:18888/greeting

参考

Chocolatey Software | Installation
Chocolateyを使った環境構築の時のメモ
Docker で Go の開発環境を構築する
VSCode + golang での快適な補完について自分なりにまとめてみた
docker-compose run は port を mapping しない

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?