どのように、私はDockerの上でgolangをセットアップして、Herokuにそれを配備しますか
ハローリーダー
このポストは、私の最近の痛みポイントの結果として、GolangをDockerの上でセットアップして、Herokuにバックエンドサービスを配備する方法を考え出していました.
時々、昨年、私はゴランを渡ってきました.私はノードから来ました.JSの背景とgolang興味の特徴を発見した.
私は今までのところ、プロジェクトを構築するなどの特定の障害を克服している今、私はドメイン駆動開発の大ファンです.
それは私に私のプロジェクトを設定するための私の最初の試みだった
まず、開発のための設定方法.
ビルドの2番目の段階では、ビルド失敗を防ぐために、初期作業ディレクトリにないファイルを簡単に削除(またはコメントアウト)できます.
現在、私はPostgreSQLとともに働いていて、Dockerコンテナで私のGolangアプリケーションと一緒に使う方法が必要です.
ドッカーは私の救助に来た.
私は、私が私のDocker構成ファイルを走らせるならば、自動移行をセットアップするのも好きです.
私のDockerの作成ファイルはこのように見えます.
下記のイメージ
わかりました.
また、各フォルダのSQLコマンドを保持するテーブルフォルダが含まれます.
次に、テーブルコマンドは
下記のイメージ
まだできていません.
The
それは単にDockerハブからの最新のPostgresを得ます
P :
そのあと、
Herokuの生産展開について話しましょう.
私は生産環境変数を生産用途にコピーする適切な方法を見つけることができませんでした.
Herokuでは、単に展開する前に環境変数を設定します.
このように
また、メインのポートを確認してください.ゴーはAを使っている
herokuでプロジェクトを設定する必要があります(heroku createを使用してこれを行うこともできます).
私はHerokuで私のデータベースを移行するためにDockerを使用しませんでした、私がHerokuの上で私のアプリケーションを降ろすならば、私は私のデータベースのすべてのデータを失うつもりです、そして、それはあまりに危険です.
したがって、私のデータベースは、私のDockerfileから生産に分かれています.
データベースの資格情報を含むHeroku上のすべての環境変数を設定することを忘れてはいけません(あなたのデータベースのアドオンセクションで見つけることができます)Heroku Postgres(あなたがそれを使用している場合)をクリックし、設定を追加します.
DockerとHerokuの美しさは、配置の容易さです.
4つの簡単なコマンドを使用すると、アプリケーションが稼働している.
アプリケーションのディレクトリに
お読みありがとうございます.
このポストは、私の最近の痛みポイントの結果として、GolangをDockerの上でセットアップして、Herokuにバックエンドサービスを配備する方法を考え出していました.
時々、昨年、私はゴランを渡ってきました.私はノードから来ました.JSの背景とgolang興味の特徴を発見した.
私は今までのところ、プロジェクトを構築するなどの特定の障害を克服している今、私はドメイン駆動開発の大ファンです.
それは私に私のプロジェクトを設定するための私の最初の試みだった
build in one place, run on any platform
解決法まず、開発のための設定方法.
# Start from golang base image
FROM golang:alpine as builder
# Add Maintainer info
LABEL maintainer="Fakorede Boluwatife"
# Install git.
# Git is required for fetching the dependencies.
RUN apk update && apk add --no-cache git
# Set the current working directory inside the container
WORKDIR /app
# Copy go mod and sum files
COPY go.mod go.sum ./
# Download all dependencies. Dependencies will be cached if the go.mod and the go.sum files are not changed
RUN go mod download
# Copy the source from the current directory to the working Directory inside the container
COPY . .
# Build the Go app
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main ./cmd
# Start a new stage from scratch
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
# Copy the Pre-built binary file from the previous stage.
COPY --from=builder /app/main .
COPY --from=builder /app/.env .
COPY --from=builder /app/templates ./templates
COPY --from=builder /app/pkg ./pkg
COPY --from=builder /app/migrations ./migrations
# COPY --from=builder /app/tls ./tls
# Expose port to the outside world
EXPOSE 4000
#Command to run the executable
CMD [ "./main" ]
上記のコードはデフォルトですDockerfile.dev
そして、それは多段ビルドのDockerファイルです、そして、それは各々のステップを理解するためによくコメントされます.私の名前Dockerfile.dev
単に私が使用する必要があるのでDockerfile
ちょうど小さな変化で生産のためのそれ自体.ビルドの2番目の段階では、ビルド失敗を防ぐために、初期作業ディレクトリにないファイルを簡単に削除(またはコメントアウト)できます.
現在、私はPostgreSQLとともに働いていて、Dockerコンテナで私のGolangアプリケーションと一緒に使う方法が必要です.
ドッカーは私の救助に来た.
私は、私が私のDocker構成ファイルを走らせるならば、自動移行をセットアップするのも好きです.
私のDockerの作成ファイルはこのように見えます.
version: '3'
services:
postgres_database:
environment:
- POSTGRES_USER=${DATABASE_USER}
- POSTGRES_PASSWORD=${DATABASE_PASSWORD}
- POSTGRES_DB=${DATABASE_NAME}
- DATABASE_HOST=${DATABASE_HOST}
build: ./migrations/postgres
ports:
- 5432:5432
app:
container_name: test-app
build:
context: .
dockerfile: Dockerfile.dev
volumes:
- api:/usr/src/app/
ports:
- "4000:4000"
depends_on:
- postgres_database
あなたが気づくならばpostgres_database
サービスはDockerfile
移行フォルダで.下記のイメージ
わかりました.
また、各フォルダのSQLコマンドを保持するテーブルフォルダが含まれます.
次に、テーブルコマンドは
deploy_schemas.sql
ファイル.下記のイメージ
まだできていません.
The
Dockerfile
( Dockerの使用では以下のようなコマンドを実際に保持します:それは単にDockerハブからの最新のPostgresを得ます
docker-entrypoint-initdb.d/tables
それからdeploy_schemas.sql
ファイルdocker-entrypoint-initdb.d
.P :
The `docker-entrypoint-initdb.d` will only run the first time when it is not set, hence you have to run a docker-compose down command then `docker-compose up --b` to create the latest table migrations
また、適切な環境変数を設定することを忘れないでくださいDATABASE_USER
, DATABASE_PASSWORD
, DATABASE_NAME
and DATABASE_HOST
.そのあと、
docker-compose up --b
そして、あなたは開発のために設定されます.Herokuの生産展開について話しましょう.
私は生産環境変数を生産用途にコピーする適切な方法を見つけることができませんでした.
Herokuでは、単に展開する前に環境変数を設定します.
Dockerfile.dev
新たにDockerfile
しかし、削除.envファイルは、テストや開発環境変数の生産を実行しないようにします.このように
Dockerfile
以下のようになります.
# Start from golang base image
FROM golang:alpine as builder
# Add Maintainer info
LABEL maintainer="Fakorede Boluwatife"
# Install git.
# Git is required for fetching the dependencies.
RUN apk update && apk add --no-cache git
# Set the current working directory inside the container
WORKDIR /app
# Copy go mod and sum files
COPY go.mod go.sum ./
# Download all dependencies. Dependencies will be cached if the go.mod and the go.sum files are not changed
RUN go mod download
# Copy the source from the current directory to the working Directory inside the container
COPY . .
# Build the Go app
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main ./cmd
# Start a new stage from scratch
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
# Copy the Pre-built binary file from the previous stage.
COPY --from=builder /app/main .
COPY --from=builder /app/templates ./templates
COPY --from=builder /app/pkg ./pkg
COPY --from=builder /app/migrations ./migrations
# COPY --from=builder /app/tls ./tls
# Expose port to the outside world
EXPOSE 4000
#Command to run the executable
CMD [ "./main" ]
正確にDockerfile.のないdev ...ENVは2番目のビルド段階でコピーされました.MAKE SURE YOU USE CMD instead of ENTRYPOINT
このように実行可能ファイルを実行するには、Herokuで実行するアプリケーションに対して必須です.また、メインのポートを確認してください.ゴーはAを使っている
":" + $PORT
. これはHerokuによって自動的に設定され、あなたはそれについて心配する必要はありません.あなたのdevelopment environment
ただし、$ port変数を設定するのを忘れないでください.envファイル.herokuでプロジェクトを設定する必要があります(heroku createを使用してこれを行うこともできます).
私はHerokuで私のデータベースを移行するためにDockerを使用しませんでした、私がHerokuの上で私のアプリケーションを降ろすならば、私は私のデータベースのすべてのデータを失うつもりです、そして、それはあまりに危険です.
したがって、私のデータベースは、私のDockerfileから生産に分かれています.
データベースの資格情報を含むHeroku上のすべての環境変数を設定することを忘れてはいけません(あなたのデータベースのアドオンセクションで見つけることができます)Heroku Postgres(あなたがそれを使用している場合)をクリックし、設定を追加します.
DockerとHerokuの美しさは、配置の容易さです.
4つの簡単なコマンドを使用すると、アプリケーションが稼働している.
アプリケーションのディレクトリに
1. `Heroku login` (you need to login into the Heroku-cli)
PS: If you don't have the heroku-cli installed, you need to install following:
`https://devcenter.heroku.com/articles/heroku-cli`
2. `heroku container:login` This allows you to login into the heroku container.
3. `heroku container:push web -a <name-of-your-heroku-project>`
On the success of step 3,
4. `heroku container:release web -a <name-of-your-heroku-project>`.
That is all!
Your project is running on Heroku perfectly.
Incase you experience any bug, run:
`heroku logs --tail -a <name-of-your-heroku-project>`
This helps you to identify the issue and gives you the first step to debugging.
私はこのプロセスを改善する多くの方法があることを知っています、そして、私は改善に関するもう一つの記事を書きます.あなたの提案を歓迎します.お読みありがとうございます.
Reference
この問題について(どのように、私はDockerの上でgolangをセットアップして、Herokuにそれを配備しますか), 我々は、より多くの情報をここで見つけました https://dev.to/wati_fe/how-i-setup-golang-on-docker-and-deploy-it-to-heroku-343eテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol