우분투 mysql에 외부에서 접속하기 


가비아에서 클라우드 서버를 쓰고 있는데 ip/phpmyadmin 들어가서 쿼리 작업하기가 많이 불편했다. 이참에 나의 맥북으로 원격으로 접속할 수 있게 설정을 해보았다. 사진위주로 정리해보았다.


1.나의 맥북 터미널로 ssh 서버 원격 접속!

2. etc/mysql/ 위치로 가서 vi my.cnf 열기~!

3.bind-address 부분 주석처리 #bind-address ! 이렇게!

4.sudo service mysql restart - 재시작!




5.  mysql -uroot -p 접속

6.select user, host from mysql.user  (유저와 호스트 확인)

7. % 이렇게 퍼센트로 기입된 host가 모든 host 허용이라는 뜻(나는 이미해놨음)

8.사진에 create ~~ 명령문 입력

9.명령문 다 입력후 flush privileges 를 꼭 적어준다.!!





아래는 3306 포트 열어주는 명령어 그리고 mysql 재시작





그리고 가비아 서버 매니저로 가서 방화벽정책에 mysql 3306 포트를 허용해줘야 한다. 

이것때문에 30분정도...삽질.




mysql워크벤치 확인~!




우분투에 phpmyadmin설치 후 안 열릴때



설치 하기

$ sudo apt-get install vsftpd


설정 하기

쓰기 권한을 주기 위해서 /etc/vsftpd.conf 파일에서 아래 부분을 찾아

# 코멘트만 제거해 주면, 기본적으로 사용할 수 있는 환경이 됩니다.

write_enable=YES

local_umask=022

서버가 클라이언트쪽에 비정상적인 접속시도를 하는 것을 막기 위한 passive 모드 사용을 위해선

아래 내용도 /etc/vsftpd.conf 파일 끝에 추가해 줍니다.


allow_writeable_chroot=YES

pasv_enable=Yes

pasv_min_port=40000

pasv_max_port=40100

서비스 컨트롤 방법


vsftp 서버의 시작/중지/재시작은 우분투의 service명령을 사용합니다.

아파치 서버 컨트롤과 같은 방식입니다.


$ sudo service vsftpd start ## vsftpd 데몬을 시작합니다.

$ sudo service vsftpd stop ## vsftpd 데몬을 멈춥니다.

$ sudo service vsftpd restart ## vsftpd 데몬을 재시작합니다.

ftp 명령어 사용법


ftp에서 제공하는 명령어 리스트는 ftp명령후 ftp프롬프트에서 help 명령으로 확인 가능합니다.


$ ftp

ftp> help

접속은 ftp 모드에서 open 명령을 사용하는 법과


$ ftp

ftp> open 192.168.0.110 

ftp 명령어 뒤에 직접 ip나 호스트명을 써서  접속하는 법이 있습니다.


ftp 192.168.0.110

ftp 모드에서 자주 사용하는 명령어를 정리해 보면 아래와 같습니다.

A라는 컴퓨터에서 B(192.168.0.111)라는 컴퓨터에 ftp 접속하여 파일을 보내고 받는 스토리를 가정해 보겠습니다.


$ cd ~/Downloads ## A 컴퓨터에서 홈디렉토리 아래 Downloads 디렉토리로 이동합니다.

$ ftp 192.168.0.111 ## A에서 B로 ftp접속 합니다. 

$ password: ## 아이디/암호 치시면 기본적으로 B 컴퓨터의 아이디의 홈디렉토리로 이동합니다.

ftp> cd /temp ## B 컴퓨터의 /temp 디렉토리로 이동합니다.

ftp> bin ## 전송 모드를 binary로 설정합니다. ascii 모드 보다 안정적입니다.

ftp> ls ## B 컴퓨터 /temp 디렉토리 파일들을 리스트 합니다.

ftp> get testB.txt ## B 컴퓨터 /temp 디렉토리의 testB.txt 파일을 A 컴퓨터 ~/Downloads 디렉토리로 가져옵니다.

ftp> put testA.txt ## A 컴퓨터 ~/Downloads 디렉토리의 testA.txt 파일을 B 컴퓨터 /temp 디렉토리로 보냅니다.

ftp> mget *.mp3 ## B 컴퓨터 /temp 디렉토리의 mp3 파일 모두를 A 컴퓨터 ~/Downloads 디렉토리로 가져옵니다.

ftp> mput *.mp4 ## A 컴퓨터 ~/Downloads 디렉토리의 mp4 파일 모두를 B 컴퓨터 /temp 디렉토리로 보냅니다.

ftp> prompt ## mget이나 mput 명령어 사용시 파일 각각에 대해 전송여부 yes/no를 묻는게 불편할 때 사용합니다.

## 토글링 명령어라 온/오프 식으로 동작합니다.

ftp> passive ## 패시브 모드를 온 시킵니다.

ftp> exit ## 빠져 나옵니다. quit를 사용하셔도 됩니다.

홈디렉토리 밖으로도 접근하게 하려면 /etc/vsftpd.conf 파일에서


chroot_local_user=YES

라인을 찾아서 # 코멘트를 제거해 주세요.


혹 ftp를 이용하여 일괄 백업이나, 자동 파일 배포등의 스크립트 파일을 만들어 사용하시고픈 경우는

-ni 옵션과 input 리다이렉트 < 를 이용하시면 좋습니다.

간단히 억지 예를 들어 설명드리면  test.sh란 파일을  자주 특정 컴퓨터에 보내야 하는 상황이 있다면,

그 때 마다  명령어를 일일이 치는 것은 비효율적일 겁니다.

ftp모드에서 사용하는 명령어들 즉 아래내용을 그대로 파일로 저장하고, 파일명은 임의로 ftpTransfer라고 하면 


open 192.168.0.111

user 유저명 암호

bin

put test.sh

bye

아래 코드 처럼 입력하면 네트워크 자체에 문제가 없다면 파일 안의 내용이 자동으로 실행되어 파일이 전송됩니다.

crontab을 이용하시면 특정 시간에 실행되는 스크립트를 만들수 있고,

필요한 상황을 잘 분석하시면 스크립트를 이용해서 좋은 자동 전송명령어를 만드실 수 있을겁니다.


ftp -ni < ./ftpTransfer 

보안문제가 걱정되신다면  외부 네트워크에 접속하는 경우에는 sftp(secure ftp) 사용을 권장드립니다.


출처 http://html5around.com/wordpress/tutorials/ubuntu-ftp-server-install-use/



 

– APM 설치

 

1. Apache2 설치

$ sudo apt-get install mysql-server mysql-client

 

2. MySql server / client 설치

$ sudo apt-get install mysql-server mysql-client

(MySQL root 패스워드 설정 필요)

 

3. PHP 설치

$ sudo apt-get install php5 php5-common

 

4. Apache / PHP 연동

$ sudo apt-get install libapache2-mod-php5

 

5. PHP / MySQL 연동

$ sudo apt-get install php5-mysql

 
 

– APM 동작확인

 

1. Apache / MySQL 재시작

$ sudo service apache2 restart

$ sudo service mysql restart

 

2. Apache인인 / PHP 연동 확인

$ sudo vi /var/www/html/phpinfo.php

<?php
phpinfo();
?>

http://localhost/phpinfo.php 접속

 

PHP Version 5.5.9-1ubuntu4.9

 

System
Build Date
Server APIApache 2.0 Handler
Virtual Directory Supportdisabled
Configuration File (php.ini) Path/etc/php5/apache2
Loaded Configuration File/etc/php5/apache2/php.ini
Scan this dir for additional .ini files/etc/php5/apache2/conf.d

….

 
 

3. 이후 설정 변경경로

Apache: /etc/apache2/apache2.conf

MySQL: /etc/mysql/my.cnf

PHP: /etc/php5/apache2/php.ini



출처 https://swbae98.wordpress.com/2015/05/16/ubuntu-14-04-apm-apachephpmysql-%EC%84%A4%EC%B9%98/

16.04 Apache2 PHP 설치하기


기존에 설치되어 있던 패키지를 업그레이드

$ sudo apt-get upgrade

Apache2 웹서버 설치

$ sudo apt-get install apache2


url 에 localhost 입력해서 아파치 화면이 뜨는지 확인


PHP 패키지를 다운로드 받기 위한 저장소를 추가


$ sudo add-apt-repository ppa:ondrej/php



추가한 저장소에서 목록 가져오기

sudo apt-get update



php 7.1설치

$ sudo apt-get install php7.1 php7.1-common



필요한 패키지 설치

$ sudo apt-get install php7.1-mysql php7.1-curl php7.1-xml php7.1-zip php7.1-gd php7.1-mbstring php7.1-mcrypt


php가 잘 설치 되었는지 확인

sudo sh -c 'echo "<?php phpinfo(); ?>" > /var/www/html/info.php'


php5.6설치

$ sudo apt-get install php5.6 php5.6-common


필요패키지 설치

$ sudo apt-get install php5.6-mysql php5.6-curl php5.6-xml php5.6-zip php5.6-gd php5.6-mbstring php5.6-mcrypt


확인

$ sudo sh -c 'echo "<?php phpinfo(); ?>" > /var/www/html/info.php'


php7.1을 5.6으로 변경

$ sudo a2dismod php7.1 ; sudo a2enmod php5.6 ; sudo service apache2 restart
$ sudo update-alternatives --set php /usr/bin/php5.6


php5.6을 7.1으로 변경

$ sudo a2dismod php5.6 ; sudo a2enmod php7.1 ; sudo service apache2 restart
$ sudo update-alternatives --set php /usr/bin/php7.1



phpMyAdmin 설치

$ sudo apt-get install phpmyadmin


localhost/phpmyadmin으로 접속이 안될때

설정파일 열기

vi /etc/apache2/apache2.conf


아래 내용입력!

Include /etc/phpmyadmin/apache.conf


재시작

/etc/init.d/apache2 restart



우분투 16.04 Mysql, Express, Angular& node js npm페키지로 초간단 셋팅



#ANGULAR CLI 설치

npm install -g @angular/cli


# NG 명령어로 앵귤러 프로젝트 폴더생성

ng new ngApp --routing


# 프로젝트 폴더로 가서 NG SERVER 명령어로 서버가동

cd ngApp


ng serve


# EXPRESS와 연동해주기 위해서 NG BUILD 명령어로 배포 준비

ng build  (dist 폴더와 build된 파일들이 생성됨)


# Express 패키지와 미들웨어인 body-parser , db페키지를  다운로드 한다

npm install --save express body-parser mysql



#ngApp 폴더 안에 server.js 파일을 만들고 express 서버 소스 작성 

server.js

var express = require('express');
var bodyParser = require('body-parser');
var path = require('path');



//routes
var api = require('./server/routes/api');


var port = 3000;

var app = express();




//set static folder
app.use(express.static(path.join(__dirname,'dist')));

//view Engin
//app.set('view engine', 'ejs');

//app.engine('html',require('ejs').renderFile);


//body parser mw
app.use(bodyParser.urlencoded({extended:false}));

app.use(bodyParser.json());




app.use('/api',api);


app.get('*',function(req,res){

res.sendFile(path.join(__dirname,'dist/index.html'));

});

//run server
app.listen(port, function(){

console.log("master kang!, server runing on location" + port);

});



#ngApp 폴더 안에  routes 폴더를 만들고 api.js 파일(라우터) 작성

api.js

var express = require('express');
var router = express.Router();

router.get('/', function(req,res){

res.send('api works')

});

module.exports = router;


#파일 경로



#ng build 로 dist 폴더를 만든후 node server.js 로 node 서버 가동


ng build 

node server.js


#localhost:3000 으로 접속해서 확인



#참고 사이트

https://angular.io/guide/quickstart


우분투 16.04 Mysql, Express, Angular& node 환경셋팅 & 간단한 task 어플구현 no.1



#터미널 열어서 프로젝트 폴더를 만든다


mkdir mytask


#폴더로 이동해서 init 명령어!


cd mytask


npm init


package.js 생성된다.



#필요한 모듈 다운로드(각각의 모듈 설명은 생략)

npm install express body-parser ejs mysql --save


package.js 폴더 열어서 잘 깔렸는지 확인



#visual studio code로 mytask 폴더 열기



#server.js 파일 생성후 작성


var express = require('express');

var path = require('path');

var bodyParser = require('body-parser');




//routes 

var index = require('./routes/index');

var tasks = require('./routes/tasks');


var port = 3000;


var app = express();


//view Engin 


app.set('views', path.join(__dirname, 'views'));

app.set('view engine', 'ejs');

app.engine('html',require('ejs').renderFile);


//set static folder


app.use(express.static(path.join(__dirname,'client')));



//body parser mw


app.use(bodyParser.json());


app.use(bodyParser.urlencoded({extended:false}));



app.use('/',index);


app.use('/api',tasks);



//run server

app.listen(port,function(){


console.log('server started on port'+ port);


});



#routes 폴더 생성

#routes 폴더 안에 index.js, tasks.js 파일 생성


#tasks..js 작성 (mysql 연동,  참고 http://poiemaweb.com/nodejs-mysql)

var express = require('express');

var router = express.Router();

var mysql = require('mysql');


var connection = mysql.createConnection({


host:'000.000.00.000',

user : 'mytask',

password:'0000',

port: 3306,

database: 'taskdb'


});



connection.connect();



router.get('/tasks',function(req,res,next){



connection.query('select * from test',function(err,rows,fields){



if(!err){

    console.log('show me test result:',rows);

    res.send('Hello this is tasks API page'+rows);}

else{

    console.log('err',err);    

    }


});


connection.end();


});


module.exports = router;


#index.js 작성

var express = require('express');

var router = express.Router();


router.get('/',function(req,res,next){

    res.send('Hello this is indexpage'}

});


module.exports = router;


#views 폴더 생성


#index.html 페이지 생성

<DOCTYPE html>

<html>

<head>

<title>task</title>

</head>

<body>

</body>

<html>


# 서버 모니터링 및 자동 업데이트 반영하는 녀석 설치 (터미널에서)

npm install -g nodemon



#MYSQL DB 생성 

CREATE DATABASE taskdb default CHARACTER SET UTF8;

SHOW DATABAS


GRANT ALL PRIVILEGES ON taskdb.* TO MYSQL아이디@localhost IDENTIFIED BY '비번';

(localhost 에서 MYSQL아이디를 사용하는 사람에게 taskdb 사용할수 있는 권한을 주겠다.)

또는 


GRANT ALL PRIVILEGES ON *.* TO 'MYSQL아이디'@'%' IDENTIFIED BY '비번';

(모든 ip에서 MYSQL아이디를 사용하는 사람에게 모든 db를 사용할수 있는 권한을 주겠다.)


EXIT;

mysql -u study_user -p

USE taskdb;




#mysql연동 소스 참고 (http://futurists.tistory.com/11 )

var mysql      = require('mysql');

var connection = mysql.createConnection({

  host     : 'localhost',

  user     : '< MySQL username >',

  password : '< MySQL password >',

  port     : < port >,

  database : 'my_db'

});


connection.connect();


connection.query('SELECT * from Persons', function(err, rows, fields) {

  if (!err)

    console.log('The solution is: ', rows);

  else

    console.log('Error while performing Query.', err);

});

connection.end();


#taskdb에 tset라는 테이블 만들고 데이터를 넣어준다.

- 테이블 생성

CREATE TABLE test

 ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(32) NOT NULL )

 ENGINE=INNODB;


- 데이터 2개 삽입
Insert into test(id, name) values ('NULL','KANG');


Insert into test(id, name) values ('NULL','KIM');


#localhost:3000/api/tasks 확인 (object 가 두개 보이면 성공)



우분투16.04 Visual Studio Code와 Angular cli 설치하기 


#Visual Studio Code 설치



#GPG키 다운로드 위해 필요한 패키지 설치

sudo apt-get install curl


#GPG 키를 다운로드 후  /etc/apt/trusted.gpg.d 경로에 복사

sudo sh -c 'curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > /etc/apt/trusted.gpg.d/microsoft.gpg'


#VSCD 다운 받기 위한 저장소 설치

sudo sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list'


#추가한 저장 소로 부터 패키지 목록 가져오기 

sudo apt-get update


#VS CODE 설치 

sudo apt-get install code






#ANGULAR 설치

npm install -g @angular/cli


#버전확인

ng -v


#프로젝트 생성

ng new 플젝이름


#생성한 프로젝트로 폴더로 이동해서 서버 실행

cd 플젝폴더

ng serve


#접속

웹브라우저에 localhost:4200 입력





#참고: ANGULAR CLI 설정 명령 


ng build -> dist 폴더 (생성됨)


ng g c contact     -> 자동으로 어플리케이션을 만들어 준다


ng g c home -it -is --spec false --flat


ng g c home -it -is --spec false


ng g c home/contact -it -is --spec false 

(home 폴더 밑에 contact 인라인 템플릿 인라인 스타일 )




우분투16.04 vmware&iptime 포트포워딩 가변 ip문제를 TwinIP로 해결하기


지난번 <우분투16.04 집에서 회사 서버에 접속해보자 iptime&vmware 포트포워딩 외부접속!>을 포스팅 했다. 마지막에 "외부접속 성공"이라고 썼다. 그런데 시간이 지나고 보니 접속이 안되었다...알고보니..



5번. 사설IP가 자주 바뀐다.

그래서 6번에 3시간 전에 적어 놓은 IP로 포트포워딩이 불가능하다.

6번에 192.168.0.8 을 적어놓았는데 3시간 뒤에 192.168.0.10 이 되어있있다. 그럼 어떻게 할까. 옆에 네트워크에 대해서 조금 아는 사람이 있으면 얼마나 좋으랴. 필자는 그냥 구글링을 열심히 했다...



#IPTIME TwinIP로 해결

클릭하면 확대됨


웹브라우저에서 192.168.0.1입력

- 공유기 설정페이지로 들어간다.

- 고급설정-> NAT/라우터 관리 -> DMZ/TwinIP설정 -> 현재 접속된 PC의 MAC 주소로 설정 -> 적용


#결과






결과는 성공적이다. 하지만 Iptime , 포트포워딩 등 네트워크 개념을 정확하게 이해하지 못해서 개념과 원리보다는 과정을 중심으로 포스팅했다. 일단 구현해 놓고 천천히 원리를 파악하는 습관때문에.. 이제 개념과 원리를 구글링 해야지.


 iptime&vmware 포트포워딩 외부접속!





#짧은배경지식


1. IP는 공용 IP와 사설 IP가 있다.

2. 공용IP 는 외부 통신 업체에서 하나만 제공해 주는 것이다. 바뀌지 않는다.

3. 가까운 공간에 있는 사람들은 사설 IP를 사용한다.

4. 사설IP는 공용IP가 제공해 주는 임의의 IP다. 자주 바뀐다.

5. 공용IP를 통해 외부 접속이 가능하다.

6. 사설IP를 통해 외부 접속이 불가능하다.



#외부접속을 위해 해야할 것 

1.외부PC 내부 PC 사이 방화벽 해제

2. IPTIME 포트포워딩

3. 내부PC와 내부PC에서 돌아가고 있는 가상 OS 포트포워딩 (VMWARE 이용)

4. 네트워크 설정


#외부PC 내부 PC 사이 방화벽 해제


제어판 -> 네트워크 및 인터넷 -> 네트워크 및 공유센터 -> window 방화벽 -> 고급설정-> 인바운드 규칙 클릭 -> 새규칙-> 포트 클릭 -> tcp, 특정 로컬 포트 예) 80 ,3000 -> 연결 허용 체크 -> 도메인 , 개인 공용 모두 체크 -> 마침 


(방화벽을 완전히 해제할 수 있지만 보안상 특정 포트 80, 3000 번만 열어 주었다. 필요에 따라 ssh나 ftp를 사용하려면 22번이나21번 포트를 열어준다. 이 포트를 열어줘야 외부에서 접속이 가능 하다 쉽게 말하면 손님이 들어오라고 집 대문을 열어 놓은 것)

클릭하면 확대됨



#IPTIME 포트포워딩


1번

간단하게 외부 ip주소와 동적 ip 할당 범위를 보자

위에 보이는 외부 ip주소가 통신 업체에서 딱 하나 제공해주는 고정 ip이다

외부 ip가 만들어서 공급해 주는것이 밑에 동적ip 이다

192.168.0.2 부터 192.168.0.254까지 있다. (다른말로 사설 ip라고도 한다.)


2번



포트포워드 설정 클릭

내부ip주소를 적어준다. (현재 접속된 pc의 ip 주소로 설정 클릭)

규칙이름은 아무거나.필자는 b라고 줬다.. 귀차니즘....

외부포트와 내부 포트가 중요하다.

필자는 가상os (우분투)로 웹서버를 돌릴거라서 외부 포트 80번을 적어 주었다.

80번으로 들어오는 사람들은 내부포트 3000번으로 연결 시켜 준다는 뜻

예를들면 공인ip 주소 123.123.12.1 을 외부 pc웹브라우저에서 입력하면 (웹이기 때문에 123.123.12.1:80이 붙어있음) 123.123.12.1:3000 으로 변경해준다.

3000번 포트는 node 앱 포트다.



#내부PC와 내부PC에서 돌아가고 있는 가상 OS 포트포워딩 (VMWARE 이용)

1

vmware workestion 열고 -> Edit -> virtual network editor -> change setting-> 윗부분 네트워크 리스트에서 vmnet 8을 nat으로 설정하고 netsetting클릭 -> add클릭해서 hostport와 virtual ip address 적어준다.


2


host port는 외부에서 접속하는 port

(집에서 웹으로 접근할건지, ftp로 접근 할건지 정해주는 것)

type : tcp

virtural machin ip add 는 가상 os터미널에서 ifconifg 로 확인!

virtural machin port는 가상 머신에서 연결 시켜줄 port 

필자는 node 어플을 서비스 할것이기 때문에 3000 입력

node js 로 웹을 만든다면 app.js 나 server.js 에서 포트번호  자유롭게 변경가능하다. 자신의 상황에 맞게 !


*중요

이걸 해주는 이유는 외부에서 공인ip 주소를 치면 vmware에서 가상os (우분투)의 ip로 돌려주게 하기 위해서다. 

외부pc - > 내pc 공인ip 로 접속 -> 내 pc 공유기가 받고 -> vmware에서 공인 ip를 가상 os ip로 돌려줌


#네트워크 설정



vmware 포트포워딩을 해줬으면

제어판-> 네트워크 및 인터넷-> 네트워크 연결-> vmnet8 우클릭 -> 속성-> tcp/ipv4 클릭 -> 다음 ip 주소 사용 에 가상os ip 입력, 서브넷 마스크에 가상os 서브넷 마스크 번호 입력 -> 확인



#결과

웹브라우저를 열어서 맨위에서 확인 했던 공인 ip주소를 입력해보자




혹시 몰라서 친구녀석에게 필자의 공인 ip주소를 보내주고 접속한 뒤 화면캡쳐해서 보내보라고 했다.

셩공이다...ㅠ



웹개발만하다가 갑자기 서버에 관심이 생겨서 우분투를 공부하기 시작했다. 서점에서 제일 쉽게 보이는 우분투 책을 사서 혼자서 1주일간 독학을 하고 있다. 왕초초초보다. 그래서 포스트 내용 중에서 잘못된 부분이 분명 있을 것이다. (보시면 지적 부탁드립니다.) 이번 포트포워딩 외부접속도 하루 종일 책도 찾아보고 유투부 영상도 보고, 구글링도 하고 삽질도 하고... 많은 시행착오가 있었다. 뭐 하루 가지고 그러냐고 하실수 있는데... 미친듯이 몰입을 했고..답답했다. 친한 개발자 형이 늘 하는 말이 있다. 안되면 하룻밤 자고 나면 된다고. 그말이 맞는것 같다. 네트워크는 개발이랑 비교 했을 때 또 다른 재미가 있다. 리눅스로 할 수 있는 재미난 것들이 많은것 같다.



+ Recent posts

티스토리 툴바