0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Go(JWT認証)✖️RiverpodでTodoアプリを作ってみたPart1(Go環境構築 編)

Posted at

完全自分用の学習備忘録。
詳細な解説等はコード内でコメントアウトしております。

環境構築

// go modファイルを生成
go mod init <プロジェクト名>

// ginをインストール
go get -u github.com/gin-gonic/gin

// hot reloadを有効化
go install [github.com/air-verse/air@latest](http://github.com/air-verse/air@latest)
air init
air

// プロジェクトのルートディレクトリ配下にdocker-compser.yamlファイルを置き、以下のコマンドを実行し、
// サービスを起動&コンテナをバックグラウンドで実行
docker compose up -d

// ブラウザから以下にアクセスしpgAdminを起動し、docker-compose.yamlに記載された情報を元にDBを構築
http://localhost:81

// 環境変数ファイル(.env)をプロジェクトルートディレクトリ配下に作成
// 以下のコマンドで、Go言語で.envファイルを読み込むためのライブラリをインストールする
go get github.com/joho/godotenv

// gormをインストール
go get -u gorm.io/gorm
go get -u gorm.io/driver/postgres

// JWT認証を行うため、JWTパッケージをインストール
go get -u [github.com/golang-jwt/jwt/v5](http://github.com/golang-jwt/jwt/v5)

Docker Compose の設定ファイルを作成

PostgreSQLデータベースとpgAdminを立ち上げます。

  • docker-composer.yaml

    version: "3.8"
    services:
      postgres:
        image: postgres:16-alpine
        container_name: postgres
        ports:
          - 5432:5432
        volumes:
          - ./docker/postgres/init.d:/docker-entrypoint-initdb.d
          - ./docker/postgres/pgdata:/var/lib/postgresql/data
        environment:
          POSTGRES_USER: **<POSTGRES_USER>** 
          POSTGRES_PASSWORD: **<POSTGRES_PASSWORD>** 
          POSTGRES_INITDB_ARGS: "--encoding=UTF-8"
          POSTGRES_DB: **<POSTGRES_DB>**
        hostname: postgres
        restart: always
        user: root
    
      pgadmin:
        image: dpage/pgadmin4
        restart: always
        ports:
          - 81:80
        environment:
          PGADMIN_DEFAULT_EMAIL: **<PGADMIN_DEFAULT_EMAIL>**
          PGADMIN_DEFAULT_PASSWORD: **<PGADMIN_DEFAULT_PASSWORD>**
        volumes:
          - ./docker/pgadmin:/var/lib/pgadmin
        depends_on:
          - postgres
    
    

環境変数(.env)ファイルを作成

  • .env

    ENV=prod
    DB_HOST=localhost
    DB_USER=**<DB_USER>**
    DB_PASSWORD=**<DB_PASSWORD>**
    DB_NAME=**<DB_NAME>**
    DB_PORT=5432
    
    # JWTToken認証の著名に使用する秘密鍵を定義 ターミナルでopenssl rand -hex 32で生成
    SECRET_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    

インフラ設定

データベースへ接続

.envファイルを読み込む

  • infra/db.go

    package infra
    
    import (
    	"fmt"
    	"os"
    
    	"gorm.io/driver/postgres"
    	"gorm.io/gorm"
    )
    
    func SetupDB() *gorm.DB {
    	// dsnを生成するため、環境変数から取得
    	dsn := fmt.Sprintf(
    		// %s はプレースホルダーで、順番に引数から値が挿入される
    		"host=%s user=%s password=%s dbname=%s port=%s sslmode=disable TimeZone=Asia/Tokyo",
    		os.Getenv("DB_HOST"),
    		os.Getenv("DB_USER"),
    		os.Getenv("DB_PASSWORD"),
    		os.Getenv("DB_NAME"),
    		os.Getenv("DB_PORT"),
    	)
    	
    	// DBへの接続
    	db, error := gorm.Open(postgres.Open(dsn), &gorm.Config{})
    
    	if error != nil {
    		panic("Failed to connect database")
    	}
    
    	return db
    }
    
  • infra/initializer.go

    package infra
    
    import (
    	"log"
    
    	"github.com/joho/godotenv"
    )
    
    func Initialize() {
    	error := godotenv.Load() // 引数にファイル名を渡す(省略するとデフォルトで.envファイルを読み込み)
    	if error != nil {
    		log.Fatal("Error loading .env file")
    	}
    }
    
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?