برنامه نویسی

سیستم احراز هویت با استفاده از 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 متغیر محیطی.

تبریک می گویم. مقاله بعدی در مورد تست خودکار خواهد بود. همچنین آخرین مقاله از این مجموعه خواهد بود. به امید دیدار.

دیگر

از این مقاله لذت بردید؟ در نظر بگیرید که برای یک کار، چیزی ارزشمند یا خرید یک قهوه با من تماس بگیرید. همچنین می توانید با من در لینکدین و دنبال کنید توییتر. بد نیست اگر به اشتراک گذاری این مقاله برای پوشش گسترده تر کمک کنید. قدردانش خواهم بود…

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا