flask 환경 구성하기

python 2017. 9. 19. 21:55



flask 설정하기 


$ virtualenv flaskapp

Using base prefix '/Users/samuel.kim/.pyenv/versions/3.6.0'

New python executable in /Users/samuel.kim/dev/my/test-flask/flaskapp/bin/python3

Also creating executable in /Users/samuel.kim/dev/my/test-flask/flaskapp/bin/python

Installing setuptools, pip, wheel...done.




활설화하려면 다음 커맨드를 사용한다.


$ . bin/activate

(flaskapp)



이제 flaskapp virtualenv가 추가되었다. 


shell에 변경되어 있다. 

(flaskapp) [~] 

(flaskapp) [~] 



Flask를 설치한다. 


$ pip install Flask




main.py을 다음처럼 수정한다. 


from flask import Flask


app = Flask(__name__)



@app.route('/')

def hello_world():

    return 'Hello World!'



if __name__ == '__main__':

    app.run()




그리고 쉘에서 다음처럼 실행하고 localhost:5000에 접속한다.


$ export FLASK_APP=main.py

$ flask run

 * Serving Flask app "main"

 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

127.0.0.1 - - [19/Sep/2017 20:50:50] "GET / HTTP/1.1" 200 -





Posted by '김용환'
,

tcpCurrEstab

unix and linux 2017. 9. 19. 17:35




장비의 tcp 현재 전체 커넥션 개수를 snmp의 tcpCurrEstab를 통해 쉽게 얻을 수 있다. 


ESTABLISHED와 CLOSE_WAIT TCP 커넥션 개수를 얻는다. 


http://www.oid-info.com/get/1.3.6.1.2.1.6.9


"The number of TCP connections for which the current state is either ESTABLISHED or CLOSE-WAIT." 




Posted by '김용환'
,

pyenv 설치 방법

python 2017. 9. 19. 16:10



pyenv 설치 방법이다. 




$ python --version

Python 2.7.12


$ pyenv install 3.6.0


$ pyenv versions

  system

  2.7.12

* 3.6.0 (set by /Users/samuel.kim/.pyenv/version)






virtualenv를 설치한다.


$ python3 -m pip install virtualenv virtualenvwrapper


$ virtualenv

You must provide a DEST_DIR

Usage: virtualenv [OPTIONS] DEST_DIR



$ pip -V

pip 9.0.1 from /Users/samuel.kim/.pyenv/versions/3.6.0/lib/python3.6/site-packages (python 3.6)

 


$ pip install virtualenv virtualenvwrapper



$ brew install pyenv-virtualenv




~/.bash_profile에 다음을 추가한다. (설정)



export PATH="$HOME/.pyenv/bin:$PATH"

export PYENV_VERSION=3.6.0

eval "$(pyenv init -)"

eval "$(pyenv virtualenv-init -)"




~/.bash_profile을 읽는다. 


$ source ~/.bash_profile



.pyenv 밑에 python이 위치한다면 성공한 것이다.



$ which python

/Users/samuel.kim/.pyenv/shims/python

  

  


이제 정상적으로 동작하는 지 확인한다. pyenv에서 파이썬을 설치하려면 install 커맨드를 실행하며 다음과 같다. 



bash_profile에서 설정된 대로 동작되었다. 


$ python --version

Python 3.6.0(set by PYENV_VERSION environment variable)


$ pyenv install 3.6.1


$ pyenv shell 3.6.1

 

$ pyenv versions

  system

* 3.6.0 

* 3.6.1 (set by PYENV_VERSION environment variable)

  





pyenv의 특정 버전을 삭제하려면 uninstall을 사용하며 다음과 같다.


$ pyenv uninstall 3.6.0

  



pyven 버전 이동은 shell을 사용한다.


$ pyenv shell 2.7.12

$ pyenv version

2.7.12




'python' 카테고리의 다른 글

[python3] 파이썬 값/타입 확인 예제  (0) 2017.09.28
flask 환경 구성하기  (0) 2017.09.19
[python3] sorted 함수 예제  (0) 2017.07.20
[python3] python3에서 자주 실수하는 부분  (0) 2017.07.18
[python3] dict()의 in의 의미  (0) 2017.07.11
Posted by '김용환'
,

2017 한컴 MDS 컨퍼런스에서 카카오 스토리의 DevOps 사례를 발표했다.



Hancom MDS Conference - KAKAO DEVOPS Practice (카카오 스토리의 Devops 사례) from knight1128




후기 : 스토리에서 개발자로 일하면서 spec 환경을 미리 구축한 멀린에게 깊은 감사를 드리고 싶다. 
멀린이 없었더라면 내가 그렇게 목말라 했던 테스팅 환경 실제 구축 사례를 보지 못했을 것이다.
내가 한 일은 그냥 눈만 찍었을 뿐이고 좋은 사례 공유한 것만 있다. 

CI 환경은 무조건 필수이고 문화/속도에 따라 Devops를 집중시키는 방법도 좋을 것 같다. 


Posted by '김용환'
,



먼저 authenticator:로 시작하는 라인을 찾고 다음과 같이 변경한다.


authenticator: PasswordAuthenticator 



이전과 같이 변경하면 클라이언트가 클러스터에 연결할 때 사용자 이름과 암호가 필요하다는 것을 카산드라에 알린다. 그러나 사용자가 로그인할 때마다 접근을 제한하지는 않는다. 접근을 제한하려면 권한을 활성화해야 한다. authorizer:로 시작하는 라인을 찾아서 다음과 같이 변경한다.


authorizer: CassandraAuthorizer 



이제 클러스터는 사용자에게 주어진 권한에 따라 로그인 사용자의 접근을 제한할 것이다. 해당 권한 설정을 적용하려면 카산드라 인스턴스를 재시작해야 한다.





사용자 계정, google을 설정한다.


CREATE USER 'google'

WITH PASSWORD 'strongpassword'

NOSUPERUSER;





system_auth 키 스페이스에서 roles 테이블에 접근해 슈퍼 유저와 기존 사용자 계정을 살펴볼 수 있다.


SELECT role, is_superuser FROM "system_auth"."roles";


키 스페이스 이름과 테이블 이름 사이에 마침표를 사용하면 USE 문으로 활성화한 키 스페이스와 상관없이 system_auth 키 스페이스를 살펴볼 것을 CQL에 알린다.


알다시피 사용자 계정은 system_auth.roles 테이블에 매우 투명하게 저장된다.



 role               | is_superuser

----------------+--------------

      cassandra |         True

google           |        False

(2 rows)





암호가 저장되는 위치와 방법이 궁금할 수 있을 것이다. 해당 정보는 동일 테이블인 system_auth.roles의 salted_hash 필드에 저장되어 있다. 암호는 일반 텍스트로 저장되지 않고 bcrypt 해시로 저장된다.




권한 목록은  다음과 같이 확인할 수 있다.


 SELECT * FROM system_auth.role_permissions;


 role           | resource                           | permissions

----------------+------------------------------------+--------------------------------

      cassandra |               roles/data_analytics | {'ALTER', 'AUTHORIZE', 'DROP'}

google |                     data/my_status |                     {'SELECT'}






참조 :

https://docs.datastax.com/en/cassandra/3.0/cassandra/configuration/secureConfigNativeAuth.html


https://support.datastax.com/hc/en-us/articles/207932926-FAQ-How-to-recover-from-a-lost-superuser-password



Posted by '김용환'
,

go 앱을 docker빌드할 때 ENV를 쓰지 않아도 된다!!!




자세한 내용은 이곳을 참조했다.

https://hub.docker.com/_/golang/




Main.go 소스는 다음과 같다.


package main


import (

    "fmt"

)


func main() {

    fmt.Println("Hello World")

}





Dockerfile은 다음과 같다. 


FROM golang:onbuild


RUN mkdir /app

ADD . /app/

WORKDIR /app

RUN go build -o main .

CMD ["/app/main"]



이제 빌드와 실행을 해본다.



$ docker build -t example .

Sending build context to Docker daemon  4.096kB

Step 1/6 : FROM golang:onbuild

# Executing 3 build triggers...

Step 1/1 : COPY . /go/src/app

Step 1/1 : RUN go-wrapper download

 ---> Running in eb597cae57ef

+ exec go get -v -d

Step 1/1 : RUN go-wrapper install

 ---> Running in 3cc20f3cc840

+ exec go install -v

app

 ---> 11d942c55dfb

Removing intermediate container 4eca92f17e78

Removing intermediate container eb597cae57ef

Removing intermediate container 3cc20f3cc840

Step 2/6 : RUN mkdir /app

 ---> Running in 1035dea0ce0d

 ---> 9fbe4249fc32

Removing intermediate container 1035dea0ce0d

Step 3/6 : ADD . /app/

 ---> 8950d77f106e

Removing intermediate container d43b4043d9bf

Step 4/6 : WORKDIR /app

 ---> 465bff3b7275

Removing intermediate container d21a6bdc6c31

Step 5/6 : RUN go build -o main .

 ---> Running in 9e1c1b5a0123

 ---> 9e27407b57d4

Removing intermediate container 9e1c1b5a0123

Step 6/6 : CMD /app/main

 ---> Running in 4dbe90267d84

 ---> a8861bcaebad

Removing intermediate container 4dbe90267d84

Successfully built a8861bcaebad

Successfully tagged example:latest



실행 결과는 다음과 같다.


$ docker run -it --rm --name my-example example

Hello World

'go lang' 카테고리의 다른 글

[golang] imported and not used  (0) 2017.09.05
go 컨퍼런스 자료  (0) 2017.09.01
[golang] if 예제  (0) 2017.08.29
[golang] 반복문 - for / 문 예제  (0) 2017.08.29
[golang] 타입 확인하는 방법 - reflect.TypeOf  (0) 2017.08.29
Posted by '김용환'
,


ssh tunning하고 rsync를 하다가 아래와 같은 에러를 보게 되었다. (필요하다면 strace를 보면 된다)




channel 1: open failed: administratively prohibited: open failed




/etc/ssh/sshd_config 파일에 포워딩 기본 설정이 no로 되어 있다. yes로 바꾸면 동작한다.




AllowTcpForwarding no

->

AllowTcpForwarding yes


Posted by '김용환'
,

ubuntu 16에서 

root권한으로 실수할만한 예제를 테스트해봤다.


다행히 rm -rf /은 fail safe되어 안전하다. 



# rm -rf /

rm: it is dangerous to operate recursively on '/'

rm: use --no-preserve-root to override this failsafe





그러나 crontab은 여전히 그대로이다.. -r 사용하면 다 날아감..


$ crontab -l


* * * * * echo "hello"

$ crontab -r

$ crontab -l

no crontab for deploy



Posted by '김용환'
,


먼저 zookeeper 서버를 실행한다. 


$./bin/zookeeper-server-start.sh config/zookeeper.properties


kafka 서버를 실행한다. 최소 3대


$ ./bin/kafka-server-start.sh config/server-1.properties



$ ./bin/kafka-server-start.sh config/server-2.properties



$ ./bin/kafka-server-start.sh config/server-3.properties



각 설정 파일에 순서대로 설정을 변경한다.


listeners=PLAINTEXT://:포트

broker.id=아이디

log.dirs=/tmp/kafka-logs_파일번호



토픽을 생성한다.


$./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test



만약 토픽 생성시 에러가 발생했다면 카프카 서버가 없어서 발생할 수 있다. 


Error while executing topic command : replication factor: 1 larger than available brokers: 0

[2017-09-14 17:10:04,315] ERROR org.apache.kafka.common.errors.InvalidReplicationFactorException: replication factor: 1 larger than available brokers: 0

 (kafka.admin.TopicCommand$)

 

   

 


실제 데이터 입력한다.


$ ./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test




 bin/kafka-console-consumer.sh --bootstrap-server localhost:9093 --topic test


Posted by '김용환'
,

Apache NIFI

Cloud 2017. 9. 12. 20:32



apache nifi는 (배치가 아닌) 실시간으로 data 처리와 분배 기능을 제공하는 툴이다. 


저용량 트래픽에서는 실제 사용할만한 녀석으로 보인다.








기능면으로 봤을 때는 매력적이다.



대용량 트래픽(테라 급)에서도 잘 동작하는 지 테스트해봐야 할 것 같다. 




Posted by '김용환'
,