ERROR 2006 (HY000) at line 115: MySQL server has gone away

 

gcp  CloudSQL 이용시 ERROR 2006 (HY000) at line 115: MySQL server has gone away 해결 방법

데이터베이스 플래그 max_allowed_packet  를 추가  합니다.

 

1.증상

[root@test-instance ~]# mysql -h db01 -uroot -p test_db < test-db.sql 
Enter password: ERROR 2006 (HY000) at line 115: MySQL server has gone away 
[root@test-instance ~]#

 

 

2. 해결방법

저장소 -> SQL -> 수정 -> 인스턴스 수정 -> 데이터베이스 플래그로 이동합니다.

max_allowed_packet 1073741824 패킷값을 추가

참고페이지: https://cloud.google.com/sql/docs/mysql/flags

 

 

3. 설정후 mysql 복구

[root@test-instance ~]# mysql -h db01 -uroot -p test_db < test-db.sql 
Enter password: 
[root@test-instance ~]#

 

 

 

 

일전 포스트에도 포스팅을 하였지만 Lightsail 을 저렴하게 사용하는 유저에게는 AWS 로드밸런서 + SSL 인증서 보다는 Let’s Encrypt 를 이용하는것이 더 좋습니다. 기본 3.5$ + 로드밸런서를 사용할경우 월18$ 의 사용요금이 발생 합니다.

작업순서는 route 53 dns 등록 -> lightsail 인스턴스 생성 -> 고정아이피 생성 + dns 생성 ->  로드밸런서 생성 -> route 53 설정 추가 -> ssl 인증서 인증 -> wp 설정 변경 순서로 진행이 됩니다.

AWS Lightsail 설정 https://lightsail.aws.amazon.com/ls/docs/ko_kr/articles/create-lightsail-load-balancer-and-attach-lightsail-instances
bitnami 설정 :https://docs.bitnami.com/aws/apps/wordpress/administration/
WP SSL 설정 :https://www.wpbeginner.com/wp-tutorials/how-to-fix-common-ssl-issues-in-wordpress-beginners-guide/

 

  • Lightsail 에서 인스턴스를 생성 합니다.

  • 기본으로 선택되어 있는 상품으로 진행 합니다.

 

  • 프리티어 사용과 별도로 사용요금이 3.5달러 지불됩니다.

 

  • 인스턴스 이름을 변경후 생성을 클릭 합니다.

 

 

  • 네트워킹을 클릭합니다.

 

  • 고정 IP 생성을 클릭합니다.
  • DNS 도메인 과 맵핑 하기 위해서는 반드시 고정 IP를 사용해야 합니다.

 

  • 고정 IP 위치를 확인후 인스턴스에 연결 에서 인스턴스를 지정합니다.

 

  • 고정 IP 확인란 에서  생성을 클릭합니다.

 

 

  • 고정IP 생성이 완료되었습니다.

 

 

  • Lightsail  에서 사용할 dns 영역을 생성 합니다.
  • DNS 영역 생성을 클릭합니다.

  • 도메인 이름을 입력합니다.

 

  • DNS 영역 생성을 클릭합니다.

  • 도메인 등록기관 에서 name server 를 지정합니다.
  • 보통은 도메인을 구입한 곳에서 name server 를 변경할수 있습니다.
  • ex) 가비아 , cafe24등

 

  • name server 를 변경합니다.

  • route 53 설정
  • DNS 관리를 클릭합니다.

 

 

  • 호스트 영역생성을 클릭합니다.

 

  • 호스팅 영역생성을 클릭합니다.

 

  • 도메인 입력후 생성을 클릭합니다.

 

  • 생성후 화면

 

  • Lightsail 에서 네트워킹 -> DNS 영역에서 관리를 클릭합니다.

 

  • 레코드 추가를 클릭합니다.

 

  • @ 도메인에 를 추가후 ip 부분에서는 고정아이피를 추가 합니다.
  • 마우스 클릭으로 고정아이피를 지정 할수 있습니다.

 

  • www 레코드를 추가 합니다.

 

  • 네트워킹 -> 로드 밸런서 생성을 클릭합니다.

 

 

  • 리전의 경우 인스턴스가 서울리전 사용시 해당 리전으로 지정합니다.
  • https 사용시 인증서를 생성 해야 하며 로드 밸런서 생성후 인증서를 생성 합니다.

 

  • 로드밸런서 이름을 지정하고 로드 밸런서 생성을 클릭합니다.
  • 로드밸런서 비용이 한달에 18$ 입니다.

 

 

  • 로드밸런서 사용할 인스턴스를 지정합니다.

 

  • 로드 밸런서 -> 인바운드 트래픽 에서 인증서 생성을 클릭합니다.

 

  • domain 및 2차 domain 을 지정 한후 생성을 클릭합니다.

 

  • 인증서 생성후 domain 인증 txt code 가 나옵니다. 메모장에 드래그 하여 메모장에 붙여 넣기 합니다.
  • 또한 인바운드 트래픽에 최상단에 있는 로드밸런서 부분도 드래그하여 메모장에 붙여 넣기 합니다.

 

  • Lightsail 에서 도메인 설정 및 route 53 에서 도메인설정을 해야 합니다.
  • Lightsail 네트워크 -> DNS 영역 에서 관리를 클릭합니다.

 

  • 기존 DNS A 레코드를 고정 IP 에서 로드밸런서로 지정 합니다.
  • CNAME 레코드를 추가 합니다.

 

  • 레코드 추가를 클릭하여 CNAME 레코드를 추가 합니다.
  • 메모장에 붙여넣기 했던 항목중 이름 부분은 하위도메인에 값 부분은 맵핑부분에 붙여 넣기 합니다.
  • _8c9b8fde94178cd4ea044d3e1dab3ee0.www.example.com. 라고 하면 www 까지 즉,
  • _8c9b8fde94178cd4ea044d3e1dab3ee0.www 까지만 붙여넣기 합니다.

 

  • Route 53 설정
  • Lightsail 로드밸런서를 Route 53 에 등록 합니다.
  • Lightsail 로드밸런서의 경우 이름을 www / 유형 A – IPv4 주소 / 별칭 예 를 선택후 별칭대상에 붙여 넣기 합니다.
  • 로드밸런서는 도메인 ex) example.com / 2차도메인 www.example.com 으로 등록 합니다.

 

  • ssl 인증서를 사용하기위하여 메모장에 복사한 내용을 CNAME 로 추가 합니다.

 

 

 

  • Route 53 domain 작업완료 예

 

  • Lightsail -> 로드 밸런서 -> 인바운드 트래픽으로 이동 합니다.
  • 별도로 잘못 설정 하지 않았다면 인증서 상태가 유효로 변경될 것입니다.
  • 생성된 인증서를 선택 합니다.

 

 

  • site 접속 테스트
  • http / https 로 접속을 해봅니다.

 

  • https 접속 테스트
  • https 의 경우 정상적으로 접속이 되지 않습니다.
  • 별도의 WP 플러그인을 사용 해야 합니다.

 

 

  • ssh 로 Lightsail 로 접속 합니다.
$ ssh -i LightsailDefaultKey-ap-northeast-2.pem bitnami@192.168.0.22
The authenticity of host '192.168.0.22 (192.168.0.22)' can't be established.
ECDSA key fingerprint is SHA256:AHwlOFx9ql8AZjjqz6Sfb8PYsQJ/FgRakbaUQVfQ69Y.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '15.164.65.11' (ECDSA) to the list of known hosts.
Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-1081-aws x86_64)
*** System restart required ***
       ___ _ _                   _
      | _ |_) |_ _ _  __ _ _ __ (_)
      | _ \ |  _| ' \/ _` | '  \| |
      |___/_|\__|_|_|\__,_|_|_|_|_|

  *** Welcome to the Bitnami WordPress 5.1.1-2 ***
  *** Documentation:  https://docs.bitnami.com/aws/apps/wordpress/ ***
  ***                 https://docs.bitnami.com/aws/ ***
  *** Bitnami Forums: https://community.bitnami.com/ ***
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.


bitnami@ip-172-26-9-64:~$ sudo vi /opt/bitnami/apps/wordpress/htdocs/wp-config.php
define( 'DB_COLLATE', '' );

// 여기부터 추가 합니다.
define('FORCE_SSL_ADMIN', true);
// in some setups HTTP_X_FORWARDED_PROTO might contain
// a comma-separated list e.g. http,https
// so check for https existence
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
       $_SERVER['HTTPS']='on';


설정 완료후 서비스 재시작
bitnami@ip-172-26-9-64:~$ sudo /opt/bitnami/ctlscript.sh restart

 

  • https 접속 확인

  • simple ssl WP plugin 설치합니다.

 

  • 에서 운영한 데이터 이관후 wp 작업을 하였다면 simple ssl WP plugin 설치후 wp-config.php 에 아래와 같이 추가합니다.
// 최하단에 추가
$server_opts = array("HTTP_CLOUDFRONT_FORWARDED_PROTO" => "https", "HTTP_CF_VISITOR"=>"https", "HTTP_X_FORWARDED_PROTO"=>"https", "HTTP_X_FORWARDED_SSL"=>"on", "HTTP_X_PROTO"=>"SSL", "HTTP_X_FORWARDED_SSL"=>"1");
foreach( $server_opts as $option => $value ) {
 if ((isset($_ENV["HTTPS"]) && ( "on" == $_ENV["HTTPS"] )) || (isset( $_SERVER[ $option ] ) && ( strpos( $_SERVER[ $option ], $value ) !== false )) ) {
  $_SERVER[ "HTTPS" ] = "on";
  break;
 }
}
//END Really Simple SSL

// wp-config.php  권한을 640 에서 666 으로 변경 합니다.
bitnami@ip-172-26-9-64:~$ cd /opt/bitnami/apps/wordpress/htdocs/
bitnami@ip-172-26-9-64:/opt/bitnami/apps/wordpress/htdocs$ ll
total 216
drwxrwxr-x  5 bitnami daemon  4096 Jun 25 08:04 ./
drwxr-xr-x  7 root    root    4096 Apr 30 10:50 ../
-rw-rw-r--  1 bitnami daemon   420 Nov 30  2017 index.php
-rw-rw-r--  1 bitnami daemon 19935 Jun 25 07:51 license.txt
-rw-rw-r--  1 bitnami daemon  7447 Jun 25 07:51 readme.html
-rw-rw-r--  1 bitnami daemon  6919 Jan 12 06:41 wp-activate.php
drwxrwxr-x  9 bitnami daemon  4096 Jun 25 07:51 wp-admin/
-rw-rw-r--  1 bitnami daemon   369 Nov 30  2017 wp-blog-header.php
-rw-rw-r--  1 bitnami daemon  2283 Jan 21 01:34 wp-comments-post.php
-rw-r-----  1 bitnami daemon  4997 Jun 25 08:04 wp-config.php
-rw-rw-r--  1 daemon  daemon  2898 Jun 25 07:51 wp-config-sample.php
drwxrwxr-x  7 bitnami daemon  4096 Jun 25 07:49 wp-content/
-rw-rw-r--  1 bitnami daemon  3847 Jan  9 08:37 wp-cron.php
drwxrwxr-x 20 bitnami daemon 12288 Jun 25 07:51 wp-includes/
-rw-rw-r--  1 bitnami daemon  2502 Jan 16 05:29 wp-links-opml.php
-rw-rw-r--  1 bitnami daemon  3306 Nov 30  2017 wp-load.php
-rw-rw-r--  1 bitnami daemon 39551 Jun 25 07:51 wp-login.php
-rw-rw-r--  1 bitnami daemon  8403 Nov 30  2017 wp-mail.php
-rw-rw-r--  1 bitnami daemon 18962 Jun 25 07:51 wp-settings.php
-rw-rw-r--  1 bitnami daemon 31085 Jan 16 16:51 wp-signup.php
-rw-rw-r--  1 bitnami daemon  4764 Nov 30  2017 wp-trackback.php
-rw-rw-r--  1 bitnami daemon  3068 Aug 17  2018 xmlrpc.php
bitnami@ip-172-26-9-64:/opt/bitnami/apps/wordpress/htdocs$ chmod 666 wp-config.php

 

 

  • simple ssl 플러그인을 실행 합니다.

 

  • http -> https 리다이렉트는 별도로 설정해줄 필요가 없습니다.

 

최근 들어 Lightsail 관련 작업을 종종하고 있습니다.

AWS 접속시 가장 편하게 접속 하는 방법을 소개 합니다.

Linux 사용시는 터미널에서 하시면 되며 Windows 사용시에는 Git-Bash 로 이용하여 접속 합니다.

git bash 는 다음 링크에서 다운받으실수 있습니다.

https://git-scm.com/download/win

 

  • ssh 키파을 다운 합니다.
  • 상단에 계정을 클릭 합니다.

 

  • Lightsail ssh key 파일을 다운합니다.
  • 인스턴스가 있는 리전의 key파일을 다운 받습니다.

 

  • Git-Bash 를 실행 합니다.
  • ssh -i 옵션으로 다룬로드 받은 키파일의 위치를 지정 합니다. bitnami 이용시 bitnami 유저로 로그인을합니다.

  • 로드밸런서 이용시 ip 로 접속해야 합니다.

Lightsail 을 사용 하여 WordPress 를 운영할 경우 Let’s encrypt 인증서를 간편하게 사용 할수 있습니다.

정석적인 방벙으로는 Lightsail 로드밸런서를 붙여도 되지만 가격이 많이 나가기 때문에 추천 하지 않습니다.

 

  • 명령어 형식은 다음과 같습니다. 
  • example.com 에 도메인 넣어 주고 2차 도메인은 -d 옵션을 사용하여 아래와 같이 넣어 줍니다. 
  • /opt/bitnami/letsencrypt/scripts/generate-certificate.sh -m test-user@gmail.com -d example.com -d www.example.com
  • bitnami apache 서비스가 재기동 되기 때문에 별도로 작업을 해줄 필요는 없습니다. 
  • 기본설치된 스크립트
root@ip-172-26-14-40:~# /opt/bitnami/letsencrypt/scripts/generate-certificate.sh -m test-user@gmail.com -d example.com -d www.example.com

This tool will now stop the web server and configure the required SSL certificate. It will also start it again once finished.

When supplying multiple domains, Lego creates a SAN (Subject Alternate Names) certificate which results in only one certificate
under the email "test-user@gmail.com" valid for all domains you entered ("example.com www.example.com").

The first domain in your list ("example.com") will be added as the "CommonName" of the certificate and the rest will be added
as "DNSNames" to the SAN extension  within the certificate

Do you want to continue? [y/n]: y
Unmonitored apache
Syntax OK
/opt/bitnami/apache2/scripts/ctl.sh : httpd stopped
2019/06/24 07:36:11 No key found for account test-user@gmail.com. Generating a P384 key.
2019/06/24 07:36:11 Saved key to /opt/bitnami/letsencrypt/accounts/acme-v02.api.letsencrypt.org/test-user@gmail.com/keys/test-user@gmail.com.key
2019/06/24 07:36:12 Please review the TOS at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf
Do you accept the TOS? Y/n
y
2019/06/24 07:36:21 [INFO] acme: Registering account for test-user@gmail.com
!!!! HEADS UP !!!!

                Your account credentials have been saved in your Let's Encrypt
                configuration directory at "/opt/bitnami/letsencrypt/accounts".
                You should make a secure backup of this folder now. This
                configuration directory will also contain certificates and
                private keys obtained from Let's Encrypt so making regular
                backups of this folder is ideal.2019/06/24 07:36:21 [INFO] [example.com, www.example.com] acme: Obtaining bundled SAN certificate
2019/06/24 07:36:22 [INFO] [example.com] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz/iDs2het-u8P9UW7tnlyReFHM8VmVhx5NNy0zqBCW5cQ
2019/06/24 07:36:22 [INFO] [www.example.com] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz/E_aGWBPUekKDlXKKhZr7fZCWcv5M9938J35vgsdKXRE
2019/06/24 07:36:22 [INFO] [example.com] acme: use tls-alpn-01 solver
2019/06/24 07:36:22 [INFO] [www.example.com] acme: use tls-alpn-01 solver
2019/06/24 07:36:22 [INFO] [example.com] acme: Trying to solve TLS-ALPN-01
2019/06/24 07:36:28 [INFO] [example.com] The server validated our request
2019/06/24 07:36:28 [INFO] [www.example.com] acme: Trying to solve TLS-ALPN-01
2019/06/24 07:36:35 [INFO] [www.example.com] The server validated our request
2019/06/24 07:36:35 [INFO] [example.com, www.example.com] acme: Validations succeeded; requesting certificates
2019/06/24 07:36:36 [INFO] [example.com] Server responded with a certificate.
Syntax OK
/opt/bitnami/apache2/scripts/ctl.sh : httpd started at port 80
Monitored apache

Congratulations, the generation and configuration of your SSL certificate finished properly.

You can now configure a cronjob to renew it every month.

Do you want to proceed? [y/n]: y
root@ip-172-26-14-40:~#

root@ip-172-26-14-40:~$ crontab -l
0 0 1 * * sudo /opt/bitnami/letsencrypt/lego --path="/opt/bitnami/letsencrypt" --tls --email="test-user@gmail.com"  --domains=example.com --domains=www.example.com renew && sudo /opt/bitnami/apache2/bin/httpd -f /opt/bitnami/apache2/conf/httpd.conf -k graceful
root@ip-172-26-14-40:~$

 

  • web site 확인

[GCP] docker wordpress 이관 작업

2019-02-17일 GCP 이관 작업을 하였습니다.

docker-compose 로 구성된 wordpress blog 디렉토리와 db-data 만 이관 하면 됩니다.

간단한 작업이였는데… 문제는 wordpress에 미디어 추가시 wp-content/uploads/2010/02 로 업로드 할수 없습니다. 와 함께..

이미지 업로드가 되지 않았습니다.

결론부터 말씀 드리면 wordpress 사용자 권한 문제 였습니다. 🙂

 

  • 기존 사용자 권한
  • 문제가 되는 부분은 www-data 권한으로 설정된 wordpress 부분 이였고 해당 부분 설정후 정상적으로 wordpress 에 이미지 업로드를 할수 있었습니다.
testone@web-service01:~/Workspace/web-service/blog$ ll
total 20
drwxrwxr-x 4 testone testone 4096 Oct  3 15:26 ./
drwxrwxr-x 7 testone testone 4096 Oct 30 00:31 ../
drwxr-xr-x 5 www-data www-data 4096 Feb 17 14:31 blog1/
drwxr-xr-x 5      999 testone 4096 Feb 17 14:31 db-data/
-rw-rw-r-- 1 testone testone  699 Oct 23  2017 docker-compose.yml
testone@web-service01:~/Workspace/web-service/blog$

 

  • 이관된 데이터 디렉토리 사용자 권한
testone@web-service01:~/Workspace/web-service/blog$ ll
total 20
drwxrwxr-x 4 testone testone 4096 Oct  3 15:26 ./
drwxrwxr-x 7 testone testone 4096 Oct 30 00:31 ../
drwxr-xr-x 5 testone testone 4096 Feb 17 14:31 blog1/
drwxr-xr-x 5      999 testone 4096 Feb 17 14:31 db-data/
-rw-rw-r-- 1 testone testone  699 Oct 23  2017 docker-compose.yml
testone@web-service01:~/Workspace/web-service/blog$

 

 

[GCP] Google cloud FTP 포트 추가

 

Google Cloud 이용시 80/443 은 체크박스에서 enable 할수 있지만 ftp 의 경우 별도로 방화벽에서 추가를 해야 합니다.

 

vsftpd 설치 및 실행 

[root@gg-test ~]# yum install -y vsftpd
[root@gg-test ~]# systemctl enable vsftpd
[root@gg-test ~]# systemctl start vsftpd
[root@gg-test ~]# firewall-cmd --permanent --add-port=21/tcp
[root@gg-test ~]# firewall-cmd --reload

 

네트워킹의 VPC 네트워크로 이동 합니다.

 

VPC 네트워크 -> 방화벽 규칙 -> 방화벽 규칙 만들기로 이동합니다. 

 

방화벽 규칙을 생성 합니다. 

21 포트와 tcp:49152-65535 포트를 추가 합니다. 

21 포트만 추가시 리눅스에서는 문제 없이 연결 되지만 윈도우즈 ftp Client 에서는 접속이 안됩니다. 

 

Compute Engine -> VM 인스턴스로 이동 합니다.

(변경할 vm 을 선택 합니다.)

 

수정을 클릭 합니다. 

 

네트워크 테그에 ftpd 를 추가 합니다. 

 

최하단에 있는 저장을 클릭 합니다. 

 

ftp 연결 테스트를 진행 합니다. 

 

[GCP] Google cloud Root ssh접속 설정

 

Google cloud 접속시 key 없이 ssh 를 사용 할수 있습니다.

Compute Engine 으로 이동후 설정할 VM 인스턴스의 SSH 를 클릭 합니다.

 

 

root 유저 password 를 설정 합니다. 

[test@gg-test ~]$ sudo -i 
[root@gg-test ~]# passwd 
Changing password for user root.
New password: 

Retype new password: 
passwd: all authentication tokens updated successfully.
[root@gg-test ~]#

 

 sshd_config 설정 및 sshd 재시작 

[root@gg-test ~]# vi /etc/ssh/sshd_config
PermitRootLogin yes
PasswordAuthentication yes
[root@gg-test ~]# systemctl restart sshd

 

SSH 연결

vm 외부 ip 를 확인 합니다.

 

ssh 접속을 합니다. 

 

 

[GCP] Google cloud Docker-compose wordpress 구성

 

도메인만 있으면 1년간 무료로 쓸수 있는 Google cloud 를 이용하여 WordPress 를 구성하여 사용하는것도 좋을거 같습니다. 🙂

기존 생성했던 VM 을 사용 하기 때문에 최초로 만든 vm 이미지에서 수정을 합니다.

Compute Engine -> VM 인스턴스 -> 인스턴스 이름 클릭 후 수정을 클릭합니다.

 

초소형(공유vCPU 1개) -> 소형 (공유 vCPU 1개) 로 변경후 저장을 클릭합니다.

 

VM 인스턴스를 시행후 SSH로 접속을 합니다.

 

docker 설치

test@ubuntu-trusty-1:~$ curl -s https://get.docker.com/ | sudo sh
test@ubuntu-trusty-1:~$ sudo usermod -aG docker test

터미널을 재접속 합니다.

 

docker 설치 확인

test@ubuntu-trusty-1:~$ docker --version
Docker version 18.02.0-ce, build fc4de44
test@ubuntu-trusty-1:~$

 

docker-compose 설치

test@ubuntu-trusty-1:~$ sudo curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   617    0   617    0     0   2762      0 --:--:-- --:--:-- --:--:--  2766
100 8288k  100 8288k    0     0  7366k      0  0:00:01  0:00:01 --:--:-- 17.6M
test@ubuntu-trusty-1:~$ sudo chmod +x /usr/local/bin/docker-compose
test@ubuntu-trusty-1:~$ docker-compose --version
docker-compose version 1.19.0, build 9e633ef
test@ubuntu-trusty-1:~$

 

Nginx-proxy container

test@ubuntu-trusty-1:~$ mkdir -p web-service/nginx-proxy
test@ubuntu-trusty-1:~$ cd web-service/nginx-proxy/
test@ubuntu-trusty-1:~/web-service/nginx-proxy$ vi docker-compose.yml
version: "3"

services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx-proxy
    ports:
      - "80:80"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
    restart: always

networks:
  default:
    external:
      name: nginx-proxy

 

Nginx-proxy container 실행

test@ubuntu-trusty-1:~/web-service/nginx-proxy$ docker network create nginx-proxy
6e66bd966be8c43541585319e0516c3350d5b1d852789ca4efd93ee9ef446589
test@ubuntu-trusty-1:~/web-service/nginx-proxy$ docker-compose up -d --build
test@ubuntu-trusty-1:~/web-service/nginx-proxy$ docker ps
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                NAMES
b4bbe5ac5015        jwilder/nginx-proxy   "/app/docker-entrypo…"   4 seconds ago       Up 3 seconds        0.0.0.0:80->80/tcp   nginx-proxy
test@ubuntu-trusty-1:~/web-service/nginx-proxy$

 

 

WordPress container

blog docker-compose.yml 파일 생성

test@ubuntu-trusty-1:~$ mkdir -p web-service/blog
test@ubuntu-trusty-1:~$ cd web-service/blog/
test@ubuntu-trusty-1:~/web-service/blog$ mkdir web-data
test@ubuntu-trusty-1:~/web-service/blog$ mkdir db-data
test@ubuntu-trusty-1:~/web-service/blog$ vi docker-compose.yml
 version: "3"

services:
  db:
     image: mariadb
     volumes:
       - ./db-data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: test1234
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: test1234
     container_name: wp_blog_db

  wordpress:
     image: wordpress:latest
     expose:
       - 80
     restart: always
     volumes:
       - ./web-data:/var/www/html
     environment:
       VIRTUAL_HOST: blog.crois.net
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: test1234
     container_name: wp_blog

networks:
  default:
    external:
      name: nginx-proxy

 

WordPress container 실행

test@ubuntu-trusty-1:~$ cd web-service/blog/
test@ubuntu-trusty-1:~/web-service/blog$ docker-compose up -d --build
~중략
실행확인
test@ubuntu-trusty-1:~/web-service/blog$ docker ps
CONTAINER ID        IMAGE                 COMMAND                  CREATED              STATUS              PORTS                NAMES
7d728447bde6        mariadb               "docker-entrypoint.s…"   8 seconds ago        Up 7 seconds        3306/tcp             wp_blog_db
9415c6dd76e1        wordpress:latest      "docker-entrypoint.s…"   8 seconds ago        Up 7 seconds        80/tcp               wp_blog
b4bbe5ac5015        jwilder/nginx-proxy   "/app/docker-entrypo…"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp   nginx-proxy
test@ubuntu-trusty-1:~/web-service/blog$

 

web browser 에서 http://blog.crois.net 을 연결 합니다.

수고 하셨습니다. 🙂

 

 

 

 

[GCP] Google cloud 외부 IP 주소 연결 (고정IP 설정)

 

VPC 네트워크 -> 외부 IP 주소 를 클릭합니다.

고정 주소 예약을 클릭합니다.

 

이름을 지정합니다. 지역에서 Zone 을 설정 할수 있습니다.

 

예약 버튼을 클릭합니다.

 

외부 IP 주소 연결이 생성 되었습니다.

 

Compute Engine -> VM 인스턴스 항목으로 이동 합니다.

vm 이름을 클릭 합니다. (ubuntu-trusty-1)

 

 

 

VM 인스턴스 세부정부 에서 네트워크 인터페이스 항목 nic0: default default 를 클릭합니다.

 

외부 IP 항목 에서 임시를 클릭한후 IP 주소만들기를 선택합니다.

 

새 고정 IP 주소 예약 에서 test01 을 입력합니다.

 

예약을 클릭합니다.

 

최하단으로 이동하여 저장을 클릭합니다.

 

ssh 연결 테스트를 진행 합니다.

[GCP] Google Cloud ssh-key 이용하여 접속

Linux 의 경우 ssh-keygen 명령어를 통하여 아래와 같이 RSA 키페어를 생성 하고,

Windows는 puttygen 을 이용하여 RSA 키페어를 생성 합니다.

Global 모든 Cloud 인스턴스에 접속시 메타데이터 ssh 키 부분에 설정 하시면 되며 단인 Cloud 인스턴스만 접속하기 위해선 Compute Engine -> VM 인스턴스 세부정보 부분의

SSH 키 부분에 등록 하시면 됩니다.

 

Linux 나 MacOS 이용시

RSA 키페어 생성

주의: 키페어 생성시 반드시 Password 를 입력해야 합니다.

엔터를 눌러 스킵시 정상적으로 접속할수 없습니다.

test@docker-test:~$ ssh-keygen -t rsa -C "test@google.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/test/.ssh/id_rsa):
Created directory '/home/test/.ssh'.
Enter passphrase (empty for no passphrase):       // Password 입력
Enter same passphrase again:                      // Password 입력
Your identification has been saved in /home/test/.ssh/id_rsa.
Your public key has been saved in /home/test/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:cJ23OKMOchEWj3oIpyMBKPvdDXlYoeChKovlBuIj1ok test@google.com
The key's randomart image is:
+---[RSA 2048]----+
|o   o . ..       |
|+  o o =.. .     |
|o.o o *+o o .    |
|.o + +++.  o .   |
|*.+.o.o+S + .    |
|=*+.o..... o     |
|+Eoo. o .        |
|o..  o o         |
|        .        |
+----[SHA256]-----+
test@docker-test:~$

키생성시 사용하는 암호를 통하여 ssh 로 접속을 하게 됩니다.

 

id_rsa.pub 퍼블릭키 위치

test@docker-test:~/.ssh$ pwd
/home/test/.ssh
test@docker-test:~/.ssh$ ls
id_rsa  id_rsa.pub
test@docker-test:~/.ssh$

해당 파일(id_rsa.pub) 을 scp 로 Copy 후 Google 클라우드에 등록 합니다.

 

퍼블릭 키 등록

compute engine -> 메타데이터 -> SSH키로 이동 합니다.

+항목추가를 클릭하여 ~/.ssh/id_rsa.pub 내용을 붙여 넣기 합니다.

메타데이터에 key를 추가 하게 되면 해당 키를 통하여 모든 인스턴스에 접속 가능합니다.

저장을 클릭합니다.

 

 ssh 접속

사용하고 있는 Linux 머신에서 접속시 아래와 같은 방법으로 접속하실수 있습니다.

test@docker-test:~/.ssh$ ssh -i id_test google_user@35.xx.xx.200
Warning: Identity file id_test.pub not accessible: No such file or directory.
The authenticity of host '35.xx.xx.200 (35.xx.xx.200)' can't be established.
ECDSA key fingerprint is SHA256:IEUCgjm+1KuzORwPmQH/Vo6SnCztScOWBehFCoSOveo.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '35.xx.xx.200' (ECDSA) to the list of known hosts.
Enter passphrase for key '/home/test/.ssh/id_rsa':
Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 4.4.0-112-generic x86_64)

 * Documentation:  https://help.ubuntu.com/

  System information as of Tue Feb 27 08:14:28 UTC 2018

  System load:  0.0               Processes:           80
  Usage of /:   12.3% of 9.81GB   Users logged in:     0
  Memory usage: 14%               IP address for eth0: xx.xx.0.2
  Swap usage:   0%

  Graph this data and manage this system at:
    https://landscape.canonical.com/

  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud

0 packages can be updated.
0 updates are security updates.

New release '16.04.3 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

Your Hardware Enablement Stack (HWE) is supported until April 2019.

Last login: Tue Feb 27 08:14:28 2018 from xx.xxx.xx.164
test@ubuntu-trusty-1:~$

 

 

 

Windows 이용시

puttygen 을 이용하여 RSA 키페어를 생성 합니다.

링크에서 iPutty  를 다운 받을수 있습니다.
https://github.com/iPuTTY/iPuTTY/releases

생성버튼 클릭

개인키 저장 버튼을 클릭 합니다.

 

개인키 instance_name.ppk 으로 저장합니다.

아래 부분을 복사 하여 퍼블릭키를 등록 합니다.

 

Google Cloud 에서 Compute Engine -> 메타데이타 -> SSH 키로 이동합니다.

저장을 클릭합니다.

 

ssh-client 를 실행합니다. (putty 이용)

 

Connection -> SSH -> Auth 로 이동후 Browse… 에서 저장한 키파일을 불러 옵니다.

Open 을 클릭 합니다. 

 

접속후 화면

 

단일 인스턴스 접속시 설정 방법

별도의 인스턴스 재시작이 필요하지 않으며 아래와 같은 방법으로 등록만 해주시면 됩니다.

Compute Engine -> VM 인스턴스

ssh key 를 추가할 인스턴스를 클릭합니다.

 

수정을 클릭합니다.

 

페이지 하단에 SSH 키 부분에 추가 하시면 됩니다.

 

페이지 하단의 저장을 클릭합니다.

 

접속시 위와 동일한 방법으로 접속 하시면 됩니다.