سیستم احراز هویت با استفاده از Golang و Sveltekit – Dockerization و Deployments

معرفی
با ایجاد تمام ویژگی های برنامه ما، آماده سازی آن برای استقرار مرحله بعدی است تا همه در سراسر جهان به راحتی به آن دسترسی داشته باشند. ما برنامههای خود (بکاند و فرانتاند) را روی پلتفرمهای میزبانی رایگان – fly.io برای باطن و ورسل مستقر خواهیم کرد.
کد منبع
کد منبع این مجموعه از طریق GitHub میزبانی می شود:
یک سیستم احراز هویت مبتنی بر جلسه تمام پشته با استفاده از golang و sveltekit
این مخزن مجموعهای از آموزشها در مورد احراز هویت مبتنی بر جلسه با استفاده از Go در باطن و جاوا اسکریپت (SvelteKit) در قسمت جلو همراه است.
در حال حاضر در اینجا زنده است (باطن ممکن است به زودی حذف شود).
برای اجرای محلی، لطفاً دستورالعملهای هر زیر شاخه را دنبال کنید.
پیاده سازی
مرحله 1: Dockerization از Backend
اگرچه fly.io به طور بومی از Golang پشتیبانی می کند و ما می توانیم آن را دقیقاً به همین شکل اجرا کنیم، ساختار فایل ما آن را به این راحتی نمی کند زیرا main.go
ریشه پروژه نیست برای سهولت فرآیند، ما فقط آن را داکر می کنیم. ما از الگوی ساخت چند مرحله ای استفاده می کنیم تا اندازه تصویر داکر خود را تا حد زیادی کاهش دهیم. با این، ما یک Dockerfile
که شبیه این است:
<!-- go-auth/Dockerfile -->
FROM golang:1.20-alpine AS builder
WORKDIR /app
COPY ./go-auth-backend/ .
RUN go mod download
RUN go build -ldflags='-s' -o=./bin/api ./cmd/api
FROM alpine:latest AS runner
WORKDIR /
COPY --from=builder /app/bin/api /api
EXPOSE 8080
ENTRYPOINT ["/api"]
در builder
مرحله، ما با استفاده از اندازه فشرده و ایمن alpine
تصویر داکر مبتنی بر. این تصویر برای ساخت اپلیکیشن ما کافی است. سپس، مشخص کردیم /app
به عنوان دایرکتوری که فایل های منبع سیستم ما در آن کپی می شوند. از آنجایی که ما وابستگی های خارجی داریم، بنابراین باید آنها را دانلود کنیم RUN go mod download
. در حالی که همه چیز دست نخورده بود، سپس برنامه خود را ساختیم که یک فایل اجرایی (باینری) در داخل ایجاد کرد /bin/api
. باینری تولید شده از نظر اندازه کاهش می یابد زیرا “جدول کوتوله و نماد” را حذف کردیم.
در runner
مرحله، ما به سادگی “به جلو آورده” خروجی از builder
مرحله – در این مورد /app/bin/api
– و آن را واریز کنید /api
که سپس به عنوان نقطه ورود برنامه مورد استفاده قرار گرفت.
همچنین لازم به ذکر است که برای کاهش بیشتر اندازه تصویر، برخی از پوشه ها و فایل ها را نادیده گرفتیم و با استفاده از .dockerignore
:
# flyctl launch added from frontend/.gitignore
frontend/*
# flyctl launch added from go-auth-backend/.gitignore
go-auth-backend/**/.env.*
go-auth-backend/**/.envrc
go-auth-backend/**/bin
fly.toml
مرحله 2: استقرار backend
قبل از استقرار، باید تغییراتی در آن اعمال شود config.go
و تغییرات در اینجا قابل مشاهده است.
قبل از ادامه، لطفاً یک حساب کاربری در fly.io ایجاد کنید.
پس از بسته بندی برنامه خود در یک کانتینر داکر، زمان استقرار در fly.io فرا رسیده است. مطمئن شوید که در پایه کل پروژه هستید. سپس مراحل زیر را دنبال کنید:
- CLI fly.io را نصب کنید
- از طریق وارد حساب کاربری خود شوید
fly auth login
-
اجرا کن
fly launch
. این به طور خودکار تشخیص می دهدDockerfile
در ریشه پروژه دستورات را دنبال کنید. با این حال، هنوز آن را مستقر نکنید زیرا ما باید متغیرهای محیطی خود را تنظیم کنیم. در حال حاضر، شما باید a را ببینیدfly.toml
فایل ایجاد شد شما باید ایجاد کنید[env]
بخشی در فایل با موارد زیر پر شده است:[env] PORT = "8080" DEBUG = "false" TOKEN_EXPIRATION = SESSION_EXPIRATION = DB_MAX_OPEN_CONNS = DB_MAX_IDLE_CONNS = DB_MAX_IDLE_TIME = EMAIL_HOST_SERVER = "smtp.gmail.com" # if you are using google's gmail EMAIL_SERVER_PORT = "587" FRONTEND_URL =
اگر رازهایی دارید که نمی توانید اینجا بگذارید مانند
EMAIL_USERNAME
،EMAIL_PASSWORD
،AWS_S3_BUCKET_NAME
،AWS_SECRET_ACCESS_KEY
،AWS_ACCESS_KEY_ID
، وAWS_REGION
، آنها را می توان با استفاده از:flyctl secrets set SECRET_NAME=value
توجه: اگر تصمیم به ایجاد یک پایگاه داده PostgreSQL و Redis ارائه شده توسط fly.io دارید، آنها به طور خودکار به متغیر محیط شما اضافه می شوند. اطمینان حاصل کنید که اعتبار پایگاه داده PostgreSQL را که به ویژه آن ارائه شده است، کپی کرده اید
DATABASE_URL
. این برای انتقال پایگاه داده به صورت محلی مورد نیاز است.پس از تنظیم همه آنها، سپس:
-
اجرا کن
fly deploy
. -
در صورت موفقیت آمیز بودن، دستور زیر را برای انتقال پایگاه داده خود اجرا کنید:
~/Documents/Projects/web/go-auth/go-auth-backend$ migrate -path=./migrations -database=<DATABASE_URL> up
مرحله 3: استقرار frontend
استقرار قسمت جلویی روی ورسل کار آسانی است. فقط آداپتور vercel sveltekit را نصب کنید:
~/Documents/Projects/web/go-auth/frontend$ npm i -D @sveltejs/adapter-vercel
سپس آداپتور را به خود اضافه کنید svelte.config.js
:
// frontend/svelte.config.js
import adapter from '@sveltejs/adapter-vercel';
/** @type {import('@sveltejs/kit').Config} */
const config = {
kit: {
adapter: adapter({
runtime: 'edge'
})
}
};
export default config;
با آن، فقط به داشبورد Vercel خود بروید و قسمت جلویی نسخه GitHub برنامه خود را به آن پیوند دهید. در عرض چند ثانیه، برنامه شما مستقر می شود.
اطمینان حاصل کنید که URL پشتیبان را به عنوان VITE_BASE_API_URI_PROD
متغیر محیطی.
تبریک می گویم. مقاله بعدی در مورد تست خودکار خواهد بود. همچنین آخرین مقاله از این مجموعه خواهد بود. به امید دیدار.
دیگر
از این مقاله لذت بردید؟ در نظر بگیرید که برای یک کار، چیزی ارزشمند یا خرید یک قهوه با من تماس بگیرید. همچنین می توانید با من در لینکدین و دنبال کنید توییتر. بد نیست اگر به اشتراک گذاری این مقاله برای پوشش گسترده تر کمک کنید. قدردانش خواهم بود…