Heroku에 Laravel+MySQL 응용 프로그램 배포

소개하다.


그래서 당신은 신분 검증, 현지화, 테스트와 모든 채용 인원들에게 깊은 인상을 남기고 일자리를 찾을 수 있는 기이한 기능을 갖춘 아름다운 Laravel 프로그램을 방금 구축했습니다.하지만 그것은 당신의 기계에서만 작동합니다.우리는 어떻게 이 문제를 해결합니까?
본고에서 우리는 Heroku에서 Laravel 응용 프로그램(MySQL이나MariadB 데이터베이스 포함)을 무료로 위탁 관리하는 것을 연구할 것이다.

배치하다


💡 참고: 괄호 안에 있는 항목을 원하는 정보로 대체합니다([].

Laravel 응용 프로그램 만들기


만약 당신이 아직 Laravel 프로그램이 없다면, 우리가 해야 할 첫 번째 일은 새로운 프로그램을 만드는 것이다.이를 위해서는 먼저 기계에 설치Composer가 필요하다.composer를 설치한 후 다음 명령을 실행하여 Laravel 설치 프로그램을 설치할 수 있습니다.
composer global require laravel/installer
그런 다음 새 Laravel 응용 프로그램을 만들 수 있습니다.
laravel new [brand-new-app]

For more information about Laravel installation, check the Laravel Installation guide. It’s worth a read before following the instructions in this article.


git 초기화


Heroku에 배치하려면 Git를 사용합니다.만약 당신이 그것을 어떻게 사용하는지 모른다면,free Code Camp에서 보십시오 Git and GitHub Crash Course.개발자에게 이것은 매우 중요한 도구이므로 너는 반드시 이 점을 알아야 한다.
어쨌든, 당신이 해야 할 첫 번째 일은 터미널로 프로젝트 폴더를 입력하고git 저장소를 초기화하는 것입니다.
git init
모든 파일을 추가하고 생성commit
git add .
git commit -m "Initial commit"
자, 이제git 저장소가 설정되었습니다.

Heroku CLI 사용


Heroku CLI를 사용하여 어플리케이션을 배포합니다.설치 가이드here를 찾을 수 있습니다.
Heroku CLIcreate a Heroku free account를 설치하고 터미널에서 실행heroku login한 후지침에 따라 성공적으로 로그인하면 Heroku 응용 프로그램을 만들고brand-new-app 필요한 응용 프로그램 이름으로 변경할 수 있습니다.
heroku create [brand-new-app]
이제 Laravel을 생성하는 데 필요한 APP_KEY가 필요합니다.heroku config:set APP_KEY=$(php artisan --no-ansi key:generate --show) 명령을 사용하여 이 작업을 수행할 수 있습니다.

프로그램 파일 만들기


기본적으로 Heroku는 PHP와 함께 Apache 웹 서버를 시작하여 프로젝트 루트 디렉터리의 응용 프로그램에 서비스를 제공합니다.
그러나, 우리 프로그램의 문서 루트 디렉터리는 public/ 하위 디렉터리이기 때문에, 정확한 문서 루트 디렉터리를 설정하기 위해 Procfile 를 만들어야 합니다.우리는 수동으로 Procfile 파일을 만들거나 터미널을 사용할 수 있습니다.
echo "web: vendor/bin/heroku-php-apache2 public/" > Procfile
추적되지 않은 파일을 추가하고 변경 사항을 커밋하려면 다음과 같이 하십시오.
git add .
git commit -m "Procfile for Heroku"

Heroku로 미루다


이제 너는 너의 앱을 Heroku로 전송할 수 있을 것이다.
git push heroku master
응용 프로그램을 보려면 https://[brand-new-app].herokuapp.com에 액세스하거나 Heroku 대시보드에서 Open app 버튼https://dashboard.heroku.com/apps/[brand-new-app]을 클릭합니다.

혼합 컨텐트 오류 방지


만약 asset() 조수 기능을 자주 사용한다면, 위탁 관리 프로그램이 자산 파일을 불러오지 않았고, 컨트롤러에 Mixed Content 오류가 나타나는 것을 알 수 있을 것이다.

이 문제를 해결하려면 AppServiceProvider에서 애플리케이션[brand-new-app]/app/Provider/AppServiceProvider.php을 열고 boot() 메서드에 다음을 추가합니다.
if (config('app.env') === 'production') {
    \URL::forceScheme('https');
}
이제 Heroku CLI 또는 애플리케이션 설정(https://dashboard.heroku.com/apps/[brand-new-app]/settings > 구성 변수 > 표시 구성 변수)을 사용하여 APP_ENVproduction 변수를 생성합니다.
heroku config:set APP_ENV="production"
Heroku에 새 변경 내용 제출 및 추진
git commit -am "Adding URL::forceScheme('https') in production environments"
현재, 항목이 올바르게 불러와야 합니다. 오류가 발생하지 않습니다

오류가 계속되면 HTTPS 대신 HTTP를 사용하는 링크가 없는지 확인하십시오.

환경 변수 설정


다음에 우리가 해야 할 일은 히로쿠에 .env 변수를 설정하는 것이다.우리는 이미 APP_ENVAPP_KEY 변수를 설정했으니 나머지 변수를 설정하자.마찬가지로 Heroku CLI 또는 애플리케이션 설정(https://dashboard.heroku.com/apps/[brand-new-app]/settings > 구성 변수 > 구성 변수 표시)을 사용하여 이 작업을 수행할 수 있습니다.

데이터베이스 정보(DB_CONNECTION,DB_DATABASE,DB_USERNAME 등을 로컬 구성과 일치시켜 이해할 수 있습니다.나중에 처리할게요.

데이터베이스 추가 및 구성


현재 우리는 우리의 프로젝트에 데이터베이스를 추가해야 한다.
응용 프로그램 대시보드로 이동하여 에셋https://dashboard.heroku.com/apps/[brand-new-app]/resources을 클릭합니다.추가 구성 요소 입력에서 MySQL을 입력하고 ClearDB MySQL를 선택합니다."점화 면제"계획을 선택하고 "주문 제출"을 누르십시오.

Make sure you assigned your credit card to your Heroku account. If you didn't add it yet, click on your profile photo (top right corner) > Account settings > Billing > Add credit card. Don't worry, you won't be charged unless you choose a paid plan. As soon as you've added your card, repeat the step above.


ClearDB MySQL 플러그인을 추가한 후 터미널로 이동하여 heroku config | grep CLEARDB_DATABASE_URL다음과 같이 표시되어야 합니다.
CLEARDB_DATABASE_URL:  mysql://uuuuuuuuuuuuuu:[email protected]/heroku_ddddddddddddddd?reconnect=true
@ 기호 뒤에 있는 모든 내용은/까지 DB_HOST (hh hh.cleardb.com) 입니다.그 후/그 전의 모든 것?isDB_DATABASE(heroku_ddddddddd).//until: 다음 문자열은 DB_USERNAME(uu)입니다.@ 사이의 문자열은 DB_PASSWORD (ppp) 입니다.
이 증명서를 어느 곳에서든 표시하거나 알리거나 발표하지 마세요.이것들은 너의 데이터베이스 정보다.이것이 바로 내가 그것을 심사하는 이유다.너의 경우, 그것은 진실한 숫자와 자모가 있어야 한다.
ClearDB에서 제공하는 실제 변수로 생산 데이터베이스 환경 변수를 변경할 때가 되었다.응용 프로그램 설정https://dashboard.heroku.com/apps/[brand-new-app]/settings으로 이동하여 구성 변수 표시를 클릭한 다음 데이터베이스 변수를 변경합니다.이렇게 해야 합니다.
열쇠.
가치 01 명
DB 호스트
아,아,아,아.cleardb.일반 도메인 이름 형식
데이터베이스
heroku_udddddddddddddd
DB 사용자 이름
UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU
DB 암호
pppppppp

마이그레이션 데이터베이스 테이블


이전을 실행하고 데이터베이스 테이블을 만들 때가 되었다.
터미널에서 heroku run php artisan migrate:fresh를 입력합니다.이 명령을 실행하고 싶은지 물어볼 것입니다. yes 를 입력하십시오.
이 명령을 실행하면 다음 오류가 발생할 수 있습니다.

기본적으로 Laravel은 utf8mb4 문자 세트를 사용하기 때문입니다.MySQL 버전이 5.7.7 이전 버전이거나 10.2.2 이전 버전인 서버에서 실행하는 경우 마이그레이션 생성의 기본 문자열 길이를 수동으로 구성해야 할 수 있습니다.

Learn more at: https://laravel.com/docs/8.x/migrations#index-lengths-mysql-mariadb.


이 문제를 해결하려면 아래 코드를 boot()에 추가하십시오app/Providers/AppServiceProvider.php 방법
Schema::defaultStringLength(191);
파일 상단에서 가져오기 모드를 잊지 마십시오.
use Illuminate\Support\Facades\Schema;
이 경우 AppServiceProvider 는 다음과 같습니다.
<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        if (config('app.env') === 'production') {
            \URL::forceScheme('https');
        }

        Schema::defaultStringLength(191);
    }
}
변경 사항을 제출하고 Heroku로 다시 밀어넣기
git commit -am "Setting defaultStringLength to 191"
git push heroku master
heroku run php artisan migrate:fresh를 사용하여 마이그레이션을 다시 실행하면 정상적으로 실행할 수 있습니다.

데이터베이스에 피드 설정


필요할 때 데이터베이스에 피드를 추가하는 방법을 알아보겠습니다.
터미널에서 heroku run php artisan db:seed를 입력합니다.이 명령을 실행하고 싶은지 물어봅니다. yes 를 입력하십시오.
💡 주의: Heroku는 테이블의 값을 10으로 증가시켰습니다. 예를 들어 id의 표시는 다음과 같습니다. 1, 11, 21, 31시드나 플랜트에서 사용자 ID를 참조로 사용할 때는 주의해야 합니다.
이 명령을 실행하면 찾을 수 없음Class 'Faker\Factory'을 알릴 수 있습니다.이런 상황이 발생한 것은 faker이 개발자 의존항에 필수적이기 때문이다.이 문제를 해결하려면 composer.json 파일을 열고 "fzaninotto/faker": "^1.9.1",require-dev에서 require로 이동하면 됩니다.
그런 다음 composer update를 실행합니다.

변경 사항을 커밋하고 Heroku로 다시 밀어넣기
git commit -am "Moving fzaninotto/faker from require-dev to require in composer.json"
git push heroku master
heroku run php artisan db:seed로 데이터베이스에 다시 파종하면 일을 할 수 있을 것이다.

[보상] 업로드된 파일 저장


Laravel 프로그램에서 파일 업로드를 처리할 때 Heroku가 사용함 ephemeral filesystem 을 주의해야 한다는 경고가 있습니다.이것은 dyno가 실행될 때 파일 시스템에 대한 변경 사항은 dyno가 닫히거나 다시 시작할 때까지 지속된다는 것을 의미합니다.모든dyno는 최근에 배치된 파일 시스템의 깨끗한 복사본을 사용하여 시작합니다.또한 정상적인 운행 상황에서dynos는 매일 "Cycling"라는 이름의 과정에서 다시 시작된다.
이 경우 이미지나 업로드된 파일이 응용 프로그램에서 완전히 삭제되고 사용자는 이미지alt 텍스트만 볼 수 있습니다.
이 내용을 이해한 후에는 AWS S3 와 같은 전용 파일 스토리지 서비스를 사용하는 것이 좋습니다.
당신은 Herokuherehere가 사용하는 이런 방법을 더욱 이해할 수 있습니다.

결론


축하합니다!이제 Laravel 응용 프로그램을 시작하고 실행합니다.이제 투자조합에 그것을 추가해서 사람들에게 당신의 일을 보여줄 수 있다.
Heroku free plan은 한 달 동안 프로그램이 작동을 멈출 수 있는 제한이 있습니다. (보통 새 달이 시작될 때 다시 로그인할 수 있습니다.)업그레이드가 필요하다고 생각되면 하세요.
개선 및/또는 시정을 환영합니다.😀.

한층 더 읽다

  • https://devcenter.heroku.com/articles/getting-started-with-laravel
  • https://betterprogramming.pub/hosting-your-laravel-app-on-heroku-198764167a85
  • https://scotch.io/@phalconVee/using-mysql-on-heroku#:~:text=In%20the%20Add%2Dons%20search,app%20uses%20our%20local%20database
  • 좋은 웹페이지 즐겨찾기