Setting up Laravel project on DigitalOcean

목표

이 글은 D/O 의 Droplet 과 LaraSail 과 Deployer 를 이용하여, 몇가지 추가 설정을 해주면, Laravel 프로젝트를 배포할 수 있는 초간편 LEMP 환경을 구축할 수 있다는 내용을 소개한다.

DigitalOcean

Ubuntu 18.04 D/O Droplet 생성후, IP 주소를 가지고 D/O DNS 에 그 주소를 연결할 도메인을 등록한다. (편의상 example.com 으로 지칭하겠다.) 이전엔, Project 메뉴가 없었는데, Project 별로 관리할 수 있는 메뉴가 생겨서 같은 콘솔 메뉴아래에서 관리할 수 있어서 편하군. 이제 ssh 로 터미널 접속한다.
ssh [email protected]

LaraSail

Go to LaraSail and read the f… document there before you run the command below which is copied from the document. It all starts with;
curl -sL https://github.com/thedevdojo/larasail/archive/master.tar.gz | tar xz && source larasail-master/install
설치가 끝나면 이제 다음 커맨드를 실행한다.
larasail setup
LaraSail 을 이용하면 LEMP stack 을 한방에 (composer, php7.2, mysql, nginx) 설치할 수 있다. 몇분간의 설치가 진행된 다음 LaraSail 로고와 함께 종료 메시지가 보였다면, post_larasail.sh 라는 파일을 아래의 내용으로 만들고 실행하자. (Don’t forget to give it a 755 permission.)
위 스크립트는 기본 사용자인 larasail 을 SSH 접속 가능하게 만들며, 다음 단계에서 코드 배포를 위해 사용할 deployer 를 추가하고, Timezone, Locale 설정 등과 같은 house keeping chores 를 수행한다. (It definitely saved me some time. So you can expect the same as well.)

Deployer

Now, it’s time to take a look at Deployer unless you’ve been playing with it. Deployer 프로젝트는 git 을 이용하여 Laravel project 를 (Laravel Forge 를 비롯한 많은 deployment 서비스의 사용하지 않아도 쉽게 배포할 수 있도록 하는 alternative) 아직 젠킨스 같은 CI 셋업이 제대로 되지 않은 초기 toy project 단계에서 쉽고 빠르게 사용할 수 있는 유용한 뭐 그런. 대충 감 잡길.
  1. 로컬PC 에 dep 설치
curl -LO https://deployer.org/deployer.phar
mv deployer.phar /usr/local/bin/dep
chmod +x /usr/local/bin/dep
  1. 로컬PC 에 deployer 사용자 전용 RSA 키 생성
ssh-keygen -t rsa -b 4096 -f  ~/.ssh/github_rsa
또는
ssh-keygen -t rsa -b 4096 -f  ~/.ssh/bitbucket_rsa
와 같이 생성한다. 결국, 이 키를 사용하여 로컬PC <-> D/O 서버의 deployer 사용자 접속하는 것이다.
  1. Git 서버 등록
다음에는, D/O 서버의 deployer 사용자와 <-> GitHub 간의 접속을 위해서, /home/deployer/.ssh/id_rsa.pub RSA 키와 이전 2번단계에서 로컬PC 내에 생성한 RSA 키를 GitHub 에 등록한다. 등록법은 아래와 같고 두개를 모두 등록해주면 된다. GitHub 계정에 SSH키 등록에 관한 설명 이전 2번단계에서 로컬PC 에서 생성한 RSA 키는 아래의 명령으로 서버 deployer 사용자 .ssh 폴더의 authorized_keys 에도 추가해야만 ssh 접속이 가능해진다.
ssh-copy-id -i -f ~/.ssh/github_rsa.pub [email protected]
이제까지의 일련의 과정을 걸친 상태에서는 아래와 같은 명령으로 로컬PC 에서 D/O 서버의 deployer 사용자로 SSH 접속이 가능해야 한다.
ssh [email protected]  -i ~/.ssh/github_rsa
또한, 서버의 deployer 사용자로 접속시, 아래 명령으로 GitHub 과의 연결도 가능함을 확인 할 수 있어야 한다.
ssh -T [email protected]
정상적일때 아래와 비슷한 메시지를 볼 수 있을 것이다; Hi jinseokoh! You’ve successfully authenticated, but GitHub does not provide shell access.

Nginx

아래의 코드로 nginx sites-available 설정을 하고
sudo nano /etc/nginx/sites-available/example.com
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
certbot 을 이용하여, 아래의 명령으로 nginx 설정을 https 로 갱신한다.
sudo certbot --nginx -d example.com -d www.example.com
갱신 테스트를 해보려면 아래의 명령을 실행하여 결과를 확인한다.
sudo certbot renew --dry-run

MySQL

MySQL 은 LaraSail 스크립트가 이미 설치를 한 상태이므로, MySQL 의 root password 를 알기위해서는 아래 명령을 실행한다.
larasail mysqlpass
추가적으로 command line 혹은 Sequel Pro 와 같은 client 를 이용하여 아래의 계정을 생성한다.
CREATE DATABASE science DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'my-user'@'localhost' IDENTIFIED BY 'my-password';
GRANT ALL ON science.* TO 'my-user'@'localhost';
FLUSH PRIVILEGES;

Deployer

Local

작업 폴더로 이동후 아래의 명령을 입력하면
cd /Code/laravel-app
dep init -t Laravel
아래와 같은 메시지가 출력됨을 볼 수 있다. Successfully created: /Users/chuck/Code/blog/deploy.php 이제 IDE 를 열어서 위 파일을 수정한다. 1) Project name 2) Project repository
github 또는 bitbucket repo 주소
3) Host 정보
host('159.65.xxx.xxx')
    ->user('deployer')
    ->identityFile('~/.ssh/id_rsa')
    ->set('deploy_path', '/var/www/html/laravel');
4) 맨마지막 라인 주석처리
// before('deploy:symlink', 'artisan:migrate');
deploy 시에는 dep deploy 명령만 치면 된다. 단, git deploy 할 폴더가 deployer 권한으로 변경해야만 한다.
sudo chown -R deployer:www-data /var/www/html
첫번째 deploy 시 행해야 하는 몇가지 일상적인 작업 .env 설정 php artisan migrate php artisan key:generate php artisan config:cache 등의 작업을 수행후 https://example.com 으로 접속하여, 정상적으로 동작하는 지를 확인해본다. 이로서, Deployer 를 이용한 laravel 프로젝트 deploy 를 쉽게 하는 방법을 알아 보았데헷. 레퍼런스)
  • https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-ubuntu-18-04
  • https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-18-04
  • https://www.digitalocean.com/community/tutorials/automatically-deploy-laravel-applications-deployer-ubuntu

Leave a Reply